【DDNS不要】固定IPなしの自宅サーバーをCloudflare Tunnelで安全にHTTPS公開する
自宅でサーバーを立ち上げて、色々なツールを入れて遊ぶ。エンジニアにとって最高の遊び場ですよね。
しかし、いざ外部からアクセスできるようにしようとすると、いくつか厄介な壁にぶち当たります。
-
自宅回線は固定IPじゃない
名前解決をどうしてもDDNS(ダイナミックDNS)に頼る形になってしまいます。 -
DDNSの更新が面倒
IPが変わるたびに自動で追従させるため、DiCEなどのツールを常駐させて更新する運用になりがちです。 -
HTTPS化のハードル
今の時代、WebサーバーをHTTP(暗号化なし)のまま公開するのはセキュリティ的に怖すぎます。絶対にHTTPSで運用したいですよね。
「自分の独自ドメインを使ってセキュアに構築したい。でも、自宅は固定IPじゃないし、ルーターのポート開放も面倒……どうしたらいいんだ!」
と悩んでいたところ、Cloudflare Tunnelを使ったらすべてが一発で解決してしまいました。
今回は、その感動と具体的な構築手順を備忘録としてまとめます。
前提条件
- 取得済みの独自ドメイン
- Cloudflareアカウント(無料プランでOK、ドメインのネームサーバーをCloudflareに向けておく)
- 構築済みの自宅サーバー(Linux環境)
構築手順
ここからは、実際にCloudflare Tunnelを開通させるまでの手順を解説します。拍子抜けするほど簡単です。
ステップ1:Cloudflare Zero Trustでのトンネル作成
まずはトンネル(自宅サーバーとCloudflareを繋ぐ専用線のようなもの)を作成します。
- Cloudflareのダッシュボードにログインし、左側メニューから**「Zero Trust」**を開きます。(初回はZero Trustの利用開始手続きが必要になる場合がありますが、クレジットカード登録等が出ても無料プランのまま進められます)
- Zero Trustダッシュボードの左メニューから [Networks] > [Tunnels] を選択します。
- 「Create a tunnel」 をクリックします。
- コネクターのタイプを聞かれるので 「Cloudflared」 を選択してNext。
- トンネル名(例:
home-server-tunnelなど分かりやすい名前)を入力して「Save tunnel」をクリックします。
ステップ2:自宅サーバーへの cloudflared インストール&起動
次に、自宅のLinuxサーバー側に、トンネルを確立するためのエージェント(cloudflared)をインストールします。
- トンネルを作成すると、「Install and run a connector」という画面が表示されます。
- インストール先のOS環境(LinuxのDebianやRed Hat系など)を選択します。
- 画面に**専用のインストールコマンド(curl等でパッケージをダウンロードし、トークン付きでインストールするコマンド)**が表示されるので、それを丸ごとコピーします。
- 自宅サーバーにSSH接続し、コピーしたコマンドをroot権限(sudo)で貼り付けて実行します。
# (参考)Red Hat系(AlmaLinuxなど)を選択した場合のコマンドイメージ
$curl -L --output cloudflared.rpm [https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-x86_64.rpm$](https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-x86_64.rpm$) sudo rpm -ivh cloudflared.rpm
$ sudo cloudflared service install eyJh...(ここにあなた専用の長いトークンが入ります)...
インストールとサービス登録が完了したら、正常に起動しているか確認しておきましょう。
$ systemctl status cloudflared
active (running) になっていれば、自宅サーバーとCloudflare間のトンネルが無事に開通しています!ダッシュボード上でもステータスが「Healthy」に変わるはずです。
ステップ3:パブリックホスト名のルーティング設定
最後に、「どのURLにアクセスが来たら、自宅サーバーのどのポートに繋ぐか」を設定します。
- Cloudflareの画面を進めると 「Route traffic (Public Hostname)」 の設定画面になります。
- 以下の通りに設定します。
-
Subdomain: 任意の文字列(例:
tool) - Domain: 登録してある独自ドメインを選択
- Path: (基本は空欄でOK)
-
Type:
HTTP(※サーバー内で暗号化していない場合はHTTPを選択します) -
URL:
localhost:8080(※公開したいツールのローカルポート番号を指定)
-
Subdomain: 任意の文字列(例:
- 「Save tunnel」 をクリックして完了です。
たったこれだけです。
ブラウザから https://tool.あなたのドメイン.com にアクセスしてみてください。SSL証明書も自動で適用された状態で、自宅サーバーのツール画面が表示されるはずです!
おわりに
Cloudflare Tunnelを導入したことで、以下の煩わしさから完全に解放されました。
- ❌ DiCE等を使ったDDNSの定期更新
- ❌ ルーターのポートマッピング(穴あけ)作業
- ❌ Let's Encrypt等を使ったSSL証明書の自動更新スクリプト管理
ルーターのポートを一切開けずに、外部からセキュア(HTTPS)に自宅サーバーへアクセスできるのは、精神衛生上も最高に良いです。
同じように「固定IPじゃないし、Web公開はちょっと…」と足踏みしている方は、ぜひCloudflare Tunnelを試してみてください。自宅サーバーライフが圧倒的に快適になりますよ!