Cloudflare Tunnel入門:グローバルIPなしで自宅サーバーを安全に公開する方法

週末、カフェで作業中に「あ、自宅のNASにあるあのファイルが必要だ」と思ったことはありませんか? あるいは、ローカルで作ったWebアプリを友達に見せたいけど、デプロイするのが面倒だとか。
これらの悩みの原因はいつも同じ——グローバルIPアドレスがないことです。
私も以前はこの問題に頭を抱えていました。プロバイダによってはグローバルIPがオプション料金だったり、そもそも付与されなかったり(IPv4枯渇問題)。動的IPならDDNSが必要で、安定性もイマイチ。
frpやngrokといったトンネリングツールも試しましたが、自分でVPSを借りるコストがかかったり、無料版の制限が厳しかったりと、帯に短し襷に長しでした。
そんな私の「内向きサーバー公開」の旅は、Cloudflare Tunnelに出会って終わりました。
これ、本当にすごいです。完全無料、グローバルIP不要、ポート開放不要。おまけに自動でHTTPS化され、Cloudflareの強力なDDoS保護までついてきます。
初めてTunnel経由でスマホから自宅のNASにアクセスできた時の感動は、今でも忘れません。「え、こんなに簡単にできちゃっていいの?」と。
この記事では、Cloudflare Tunnelを使って自宅サーバーやNASを安全に外部公開する方法を、ゼロから丁寧に解説します。30分後には、あなただけのプライベートクラウドが完成しているはずです。
Cloudflare Tunnelとは? なぜこれ一択なのか
従来の「外部公開」の悩み
通常、自宅のサーバーを外部からアクセス可能にするには「ポートマッピング(ポート開放)」が必要です。ルーターの設定で「80番ポートへのアクセスは、内網の192.168.1.100へ転送する」といった設定をします。
しかし、これには致命的な前提条件があります。グローバルIPアドレスを持っていることです。
さらに、ポートを開放するということは、自宅の玄関の鍵を開けておくようなもので、セキュリティリスクも跳ね上がります。
Cloudflare Tunnelの仕組み
Cloudflare Tunnelのアプローチは逆転の発想です。「外から穴を開ける」のではなく、**「中から外へトンネルを掘る」**のです。
- 自宅サーバー上の小さなプログラム(
cloudflared)が、Cloudflareのエッジサーバーへ向けて接続を開始します。 - 中から外への接続なので、ルーターのファイアウォール設定変更やポート開放は一切不要です。
- ユーザーがあなたのドメイン(例:
nas.example.com)にアクセスすると、Cloudflareがそのリクエストを受け取り、確立されたトンネルを通じて自宅サーバーへ転送します。
外部からは、あなたの自宅のIPアドレスすら分かりません。見えるのはCloudflareのIPだけ。これが**Zero Trust(ゼロトラスト)**セキュリティの基本です。
競合サービスとの比較
| サービス | コスト | 独自ドメイン | メリット | デメリット |
|---|---|---|---|---|
| Cloudflare Tunnel | 無料 | ◯ | 設定簡単、HTTPS自動、DDoS保護 | 国内からの速度は普通 |
| frp | 要VPS代 | ◯ | 速度がVPS依存で高速 | VPSの維持管理が必要 |
| ngrok | 無料版は× | △(有料) | 手軽に試せる | 無料版はURLが毎回変わる |
| Tailscale | 無料 | × | P2Pで高速 | 自分専用(一般公開には不向き) |
Webサイトの公開や、URLを知っている人への共有なら、Cloudflare Tunnelが圧倒的に便利です。
準備するもの
ほとんど無料ですが、1つだけ必要なものがあります。
- Cloudflareアカウント(無料): お持ちでない方は作成してください。
- 独自ドメイン: これが必須です。「お名前.com」や「Xserverドメイン」などで取得し、DNS(ネームサーバー)をCloudflareに向けておく必要があります。
- 内網のサーバー: 常時起動しているPC、Mac、Raspberry Pi、NASなど。Dockerが動くと一番楽です。
- 公開したいサービス: Webサーバー(ポート80)、NASの管理画面(5000)、SSH(22)など。
構築ステップ:30分で完了
では、実際に構築していきましょう。手順は大きく3つです。
Step 1: Cloudflare Zero TrustでTunnelを作成
- Cloudflareのダッシュボードにログインし、左サイドバーの「Zero Trust」をクリックします。(初回はクレジットカード登録が必要ですが、無料プランを選べば請求は発生しません。身元確認用です)
- Zero Trustダッシュボードの左メニューから、Networks > Tunnels を選択します。
- 「Create a tunnel」をクリック。
- Connector typeは「Cloudflared」を選択。
- Tunnelに適当な名前を付けます(例:
home-server)。 - 「Run cloudflared」の画面に表示されるToken(非常に長い文字列)をコピーしておきます。これが認証キーになります。
Step 2: 自宅サーバーにcloudflaredをインストール
一番簡単なDockerでの起動方法を紹介します。Linux、NAS(Synologyなど)、Raspberry Piならこれが鉄板です。
docker run -d --restart=always \
--name cloudflared \
cloudflare/cloudflared:latest \
tunnel --no-autoupdate run --token <コピーしたTOKEN><コピーしたTOKEN> の部分を、先ほど取得した文字列に置き換えて実行してください。--restart=always をつけているので、PCを再起動しても勝手に立ち上がります。
Dockerを使わない場合(WindowsやmacOS直接インストール)は、画面に表示されるOSごとのインストールコマンドをコピペして実行するだけです。
起動して数秒待ち、Cloudflareの管理画面下部の「Connectors」欄に「Connected」と表示されれば成功です! トンネルが開通しました。
Step 3: 公開設定(Public Hostname)
トンネルは繋がりましたが、まだ「どのドメインへのアクセスを、どのローカルポートへ送るか」が決まっていません。
- Tunnel設定画面の「Public Hostname」タブをクリックし、「Add a public hostname」を選択。
- Subdomain: 好きなサブドメインを入力(例:
nas)。 - Domain: Cloudflareに登録済みのドメインを選択。
- Service:
- Type:
HTTP(内網がHTTPSでも、証明書検証をスキップできるのでHTTP選択が無難です) - URL: ローカルネットワーク上のIPとポート(例:
192.168.1.10:5000)
- Type:
- 「Save hostname」をクリック。
おめでとうございます! これでブラウザから https://nas.example.com にアクセスすれば、自宅のサーバーが表示されるはずです。
もちろん、SSL証明書はCloudflareが自動で適用してくれるので、最初から鍵マーク付きです。
応用:SSHやRDPも繋ぐ
Webサイトだけでなく、SSH(コマンド操作)やRDP(リモートデスクトップ)もトンネル経由で接続できます。
SSHの設定
Public Hostnameで以下のように設定します。
- Subdomain:
ssh - Type:
SSH - URL:
localhost:22
接続する側のPC(クライアント)にも cloudflared をインストールし、~/.ssh/config に以下のような設定を追加します。
Host ssh.example.com
ProxyCommand cloudflared access ssh --hostname %hこれで ssh [email protected] と打つだけで、どこからでも自宅サーバーにSSH接続できます。ポート22をインターネットに晒す必要がないので、ログが不正アクセス試行で埋め尽くされることもありません。
Cloudflare Accessで鉄壁のセキュリティを
自宅サーバーを公開するのは便利ですが、URLを知っていれば誰でもアクセスできてしまうのは危険です。
そこでCloudflare Accessを組み合わせます。これは「Googleアカウントでログインした人だけ通す」といった認証の壁を、アプリケーションの手前に設置できる機能です。
- Zero Trustダッシュボードの Access > Applications を選択。
- 「Add an application」>「Self-hosted」を選択。
- Application domainに、先ほど設定したTunnelのドメイン(例:
nas.example.com)を入力。 - Identity providerの設定で、「Allow emails」を選び、自分のメールアドレスだけを許可リストに追加。
これで、外部からアクセスするとCloudflareの認証画面が表示され、許可されたメールアドレスに届くコードを入力しないと中に入れません。
Basic認証よりもはるかに安全で、使い勝手も良いです。NASの管理画面など、重要なサービスには必ず設定しましょう。
よくある質問とトラブルシューティング
FAQ
通信速度はどのくらい出ますか?
無料で使えますか?制限は?
「Bad Gateway」が出ます。
1. cloudflaredコンテナが起動しているか確認。
2. Public Hostnameの「URL」設定で、IPアドレスが正しいか確認(Dockerの場合、localhostではなくホストのローカルIP `192.168.x.x` を指定するのが確実です)。
3. 内網のサービス自体が落ちていないか確認してください。
Cloudflare Tunnel導入フロー
グローバルIP不要で自宅サーバーをHTTPS公開するまでの手順
⏱️ Estimated time: 30 min
- 1
Step1: 準備
Cloudflareアカウント作成、独自ドメインのDNS設定、内網サーバー(Docker環境推奨)を用意。 - 2
Step2: Tunnel作成
Zero Trustダッシュボード > Networks > Tunnels で「Create a tunnel」をクリック。Connector type「Cloudflared」を選び、Tokenをコピー。 - 3
Step3: エージェント起動
自宅サーバーで以下のDockerコマンドを実行(<Token>は置き換え):
docker run -d --restart=always --name cloudflared cloudflare/cloudflared:latest tunnel --no-autoupdate run --token <Token> - 4
Step4: 公開設定
Tunnels設定画面の「Public Hostname」タブで「Add a public hostname」。
公開したいサブドメインと、転送先の内網IP:ポート(例: 192.168.1.10:8080)を紐付け。 - 5
Step5: セキュリティ強化(推奨)
Access > Applications で認証設定を追加。特定のメールアドレスのみアクセス可能にする設定を行うことで、不正アクセスを完全に遮断。
まとめ
Cloudflare Tunnelは、個人の自宅サーバー運用における革命です。
かつてはネットワークの知識、ルーターの設定、ダイナミックDNSの管理が必要だった「外部公開」が、コンテナ1つ立ち上げるだけで完了します。しかもセキュリティレベルは企業並み。
まずは、眠っているRaspberry Piや使っていないPCで試してみてください。「魔法みたいだ」と感じること請け合いです。
4 min read · 公開日: 2025年11月30日 · 更新日: 2026年1月22日
関連記事
Next.js ファイルアップロード完全ガイド:S3/Qiniu Cloud 署名付き URL 直接アップロード実践

Next.js ファイルアップロード完全ガイド:S3/Qiniu Cloud 署名付き URL 直接アップロード実践
Next.js Eコマース実践:カートと Stripe 決済の完全実装ガイド

Next.js Eコマース実践:カートと Stripe 決済の完全実装ガイド
Next.js ユニットテスト実践:Jest + React Testing Library 完全設定ガイド


コメント
GitHubアカウントでログインしてコメントできます