Hero img
cloudflare Tunnels自宅ウェブページの公開方法

CloudFlareのZero Trustの機能のTunnelsで自宅のPCを安全に公開する

CloudFlareの無料枠で自宅ウェブページを公開する方法。


目次

  • CloudFlareでウェブページの公開
  • 前提条件
  • ZeroTrust
  • 自宅PC
  • サーバーにcloudflaredをインストールする
  • cert.pem
  • tunnelを作成
  • jsonとconfigファイル
  • サービスの登録
  • DNS登録
  • ポートの変更
  • サービスの削除
  • まとめ

CloudFlareでウェブページの公開

CloudFlareのZero Trustの機能にTunnelsというものがあり、これを使うとNAT設定不要でウェブページを公開することができる。もちろん無料で使うことができるので、ラズパイを使うのであれば、十分コスト削減が可能。

前提条件

  • CloudFlareのアカウントを所有している。
  • ドメインを所有している。
  • CloudFlare DNSを登録している。

ZeroTrust

cloudFlareのZeroTrustはVPNを張ってローカルIPでアクセスすることが可能になる。またVPNで接続しているため、野生(野郎)のWifiに接続しても大丈夫であろう。たぶん。
とりあえず今回の目的は自宅PCのウェブページを公開する。
VPNはここでは取り扱わない。

自宅PC

自宅PCは正直なんでもいい思うが家に転がっていたraspberrypi 2 Bを使うことにした。 まぁ、なんかラズパイが古かった様で公式ページから試してみたら...出来なかったので、最初は苦労した。

サーバーにcloudflaredをインストールする

raspberrypi 2 bモデルのアーキテクチャがarmhfであるのでarm32-bitを試してみたができず、他の全て試したができなかったが...

他を探してみるとここにパッケージがあったため、armhf版をダウンロードしたら。すんなり行けた。

cloudflare-tunnel-armhf

ラズパイの場合

パッケージのインストール
wget https://github.com/cloudflare/cloudflared/releases/download/2024.5.0/cloudflared-linux-armhf.deb
sudo apt install -y ./cloudflared-linux-armhf.deb

普通のPCの場合

amd64の場合
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared-linux-amd64.deb

動作確認

コマンドを入力するとバージョン情報が表示されます。

インストールの確認
cloudflared --version
#バージョン表示
cloudflared version 2024.5.0 (built 2024-05-16-1622 UTC)

cert.pem

次に認証ファイルを配置します。
配置はコマンドを入力することで、半自動で配置してくれます。

cloudflared tunnel login

以下のようにURLが表示されるのでブラウザを開いてログインします。

URL表示
https://dash.cloudflare.com/argotunnel?aud=&callback=httpsfffffFlogin.cloudflareaccess.org%ffffffffffffffffff

ブラウザーで登録されているドメインを選択し認証をします。

cloudflare-tunnel-login1 cloudflare-tunnel-login2

ログインが完了すると次のようにcert.pemが作成されます。

Leave cloudflared running to download the cert automatically.
You have successfully logged in.
If you wish to copy your credentials to a server, they have been saved to:
/root/.cloudflared/cert.pem

tunnelを作成

次のコマンドでtunnelを作成します。
ここではras-tunnelとします。正常に動作するとjsonファイルが作成されます。

#cloudflared tunnel create 名前
cloudflared tunnel create ras-tunnel

パス

以下のファイルはpemフォルダーと同じ/root/.cloudflaredに作成します。

jsonとconfigファイル

作成されたjsonファイルに情報が記入されているので このjsonファイルの情報を一部コピたーして新にconfigファイルを新規作成します。

tunnelcreateで作成されたファイル
Tunnel credentials written to /root/.cloudflared/fffff-fff-ffffff-fff-ffffffff.json....

configファイル作成

jsonが入っているフォルダーと同じ所にconfig.ymlを作成します。
以下コピペしてtunnel,credentials-file,hotnameの3つを修正します。

config.yml
tunnel: fffff-fff-ffffff-fff-ffffffff
credentials-file: /root/.cloudflared/fffff-fff-ffffff-fff-ffffffff.json

ingress:
 - hostname: example.domain.com
   service: http://localhost
 - service: http_status:404
tunnelとcredentials-file

tunnelとcredentials-fileはjsonファイル名と同じ名前にします。

hostname

cloudflareに登録しているドメインのサブドメインを指定します。なんでも可

service

localhostに指定します。ここでポート番号を指定しても反映されません。cloudflareのウェブページ上で設定します。後程設定をします。

サービスの登録

config.ymlを作成した後はサービスを登録し、起動させます。

先ほど作ったymlを指定
sudo cloudflared --config /root/.cloudflared/config.yml service install
#成功したらこんな文字が表示される 
2024-11-11T11:11:11Z INF Using Systemd
2024-11-11T11:11:11Z INF Linux service for cloudflared installed successfully

DNS登録

次にDNSの登録を行います。これもコマンドで設定ができます。

# tunnel route dns [トンネル名] [ドメイン]
cloudflared tunnel route dns ras-tunnel example.domain.com

これで全ての設定が終了しました。
DNSの更新が少し時間がかかるので少し待ちます。(2分~1時間程度)
その後設定したURLにアクセスするとちゃんウェブページが表示できるようになります。

ポートの変更

デフォルトでは80ポートで表示されますが、3000ポートに変更したいと思います。

cloudflareのZero Trustのページを開いて次の箇所を修正します。

cloudflare-tunnel-tunnel-port-setting1 cloudflare-tunnel-tunnel-port-setting2 cloudflare-tunnel-tunnel-port-setting3

サービスの削除

登録したサービスを削除する場合は、なぜか手動で消す必要がある。

  1. 1.登録されたサービスをアンインストールする。
サービスアンインストール
cloudflared service uninstall
  1. 2.サービス登録時に自動作成されるconfigを削除します。
自動生成のconfigファイル
rm /etc/cloudflared/config.yml

cloudflaredを削除する場合

cloudflaredを完全に不要な場合は以下で削除できます。

パッケージ削除
apt remove cloudflared

まとめ

レンタルVPSサーバーを借りずにウェブページを表示できます。ラズパイであれば、かなり低コストで24時間運用ができるが、低スペックだし、設定が面倒くさいので、趣味としてならありかな?
気が向いたらNextCloudとかインストールして使ってみようかな?RAM足りないと思うけど...

関連記事

コメント

コメントを書く

質問や、間違いがありましたら、お気軽にどうぞ

※お名前とコメントの内容を入力してください。
※全てこのブログ上に公表されます。
※許可なく管理者によって修正・削除する場合がございます。 詳しくはプライバシーポリシーを参照ください