こんにちは。
今回は、Raspberry Pi上で動かしているサービスをCloudflare Tunnel を使って外部公開した手順をまとめます。
きっかけ
ちょくちょく細々したWebサービスを開発する機会があるのですが、結局外部公開するとなると、さくらのVPSなどのadmin権限が手に入るサーバサービスを使うか、もっと静的なサイトならGithub Pagesで一旦公開しちゃうことで対応していました。
HerokuとかNetlifyなど、ぽっと公開できるようなサービスもあったのですが、独自ドメイン設定ができなかったり動的コンテンツが対応してなかったりで本番環境としてはなかなか適さないものばかりですし、他にはAWSやらGCPもあるのでしょうが、従量課金の無料枠でできる範囲も微妙なのでどうしたもんかなぁといつも悩んでいました。
色々悩んで結局いつもさくらのVPSを契約するのですが、年間3万くらいはかかってくる上、セキュア環境をちゃんと構築しようと思うと結構大変なセットアップをしないといけません。
何度か実際にランサムウェアに乗っ取られて全消しもしばしば・・・
Cloudflare Tunnel
ということでいろいろ調べて出てきたのがこちら。
https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/
・自宅や社内LANのサービスをポート開放せずに外部公開できる
・独自ドメインと簡単に連携できる
・基本利用は無料
Raspberry Pi での利用にぴったり
ってことは、研究室に転がっているRaspberry Piも全然公開用サーバとして利用できるのではと思い、Raspberry Pi上で動かしていた Node-REDをCloudflare Tunnel経由で外部公開することにしました。
手順はざっくり
①ラズパイにCloudflaredをインストール
②Cloudflare Tunnelの設定
③DNS設定
④アクセスコントロール設定
これだけです。
特に難しいコマンドもなく、
トンネルを作ってDNS登録すれば即公開できました。
ただ、ドメインが必要となります。
.comドメインならお名前ドットコムとかで0円で取得できた・・・はず
お名前ドットコムはレンタルサーバと抱き合わせてこようとするので嫌いなんですが致し方なし。適当なドメインは取得しておきましょう。
環境
設定手順
1. CloudFlareに登録
公式サイトで無料アカウントを作成しました。
まずドメインの移管をしていきます。
お名前ドットコムの方でネームサーバーの変更をします。以下のネームサーバーに設定しましょう。
2. Raspberry PiにCloudflaredをインストール
Zero Trustのページより、ネットワークー>Tunnelsに設定画面があります。
トンネル名など設定すると、コマンドが表示されるので、それをそのままラズパイの方で実行して、インストールします。そのままたたくだけなのでらくちんです。
3. トンネル作成
そのまま、パブリックホスト名のところに先ほど登録したドメインと、それに紐づくローカルIPアドレスをいれるだけで設定完了です。
4. セキュア設定
あとは、Accessからアプリケーションのところでポリシー設定をして、メール認証とかを必須とするかなどを設定すれば完了。
IoTデバイスや個人開発で、外部公開が必要なとき、Cloudflare Tunnelは強力な選択肢になります。
VPNやダイナミックDNSと違い、導入が簡単だしセキュリティもCloudflareに任せられるので、Raspberry Pi + Cloudflare Tunnelの組み合わせ、かなりオススメです。