言語を切り替える
テーマを切り替える

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のアプローチは逆転の発想です。「外から穴を開ける」のではなく、**「中から外へトンネルを掘る」**のです。

  1. 自宅サーバー上の小さなプログラム(cloudflared)が、Cloudflareのエッジサーバーへ向けて接続を開始します。
  2. 中から外への接続なので、ルーターのファイアウォール設定変更やポート開放は一切不要です。
  3. ユーザーがあなたのドメイン(例: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つだけ必要なものがあります。

  1. Cloudflareアカウント(無料): お持ちでない方は作成してください。
  2. 独自ドメイン: これが必須です。「お名前.com」や「Xserverドメイン」などで取得し、DNS(ネームサーバー)をCloudflareに向けておく必要があります。
  3. 内網のサーバー: 常時起動しているPC、Mac、Raspberry Pi、NASなど。Dockerが動くと一番楽です。
  4. 公開したいサービス: Webサーバー(ポート80)、NASの管理画面(5000)、SSH(22)など。

構築ステップ:30分で完了

では、実際に構築していきましょう。手順は大きく3つです。

Step 1: Cloudflare Zero TrustでTunnelを作成

  1. Cloudflareのダッシュボードにログインし、左サイドバーの「Zero Trust」をクリックします。(初回はクレジットカード登録が必要ですが、無料プランを選べば請求は発生しません。身元確認用です)
  2. Zero Trustダッシュボードの左メニューから、Networks > Tunnels を選択します。
  3. Create a tunnel」をクリック。
  4. Connector typeは「Cloudflared」を選択。
  5. Tunnelに適当な名前を付けます(例:home-server)。
  6. 「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)

トンネルは繋がりましたが、まだ「どのドメインへのアクセスを、どのローカルポートへ送るか」が決まっていません。

  1. Tunnel設定画面の「Public Hostname」タブをクリックし、「Add a public hostname」を選択。
  2. Subdomain: 好きなサブドメインを入力(例:nas)。
  3. Domain: Cloudflareに登録済みのドメインを選択。
  4. Service:
    • Type: HTTP(内網がHTTPSでも、証明書検証をスキップできるのでHTTP選択が無難です)
    • URL: ローカルネットワーク上のIPとポート(例:192.168.1.10:5000
  5. 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アカウントでログインした人だけ通す」といった認証の壁を、アプリケーションの手前に設置できる機能です。

  1. Zero Trustダッシュボードの Access > Applications を選択。
  2. 「Add an application」>「Self-hosted」を選択。
  3. Application domainに、先ほど設定したTunnelのドメイン(例:nas.example.com)を入力。
  4. Identity providerの設定で、「Allow emails」を選び、自分のメールアドレスだけを許可リストに追加。

これで、外部からアクセスするとCloudflareの認証画面が表示され、許可されたメールアドレスに届くコードを入力しないと中に入れません。
Basic認証よりもはるかに安全で、使い勝手も良いです。NASの管理画面など、重要なサービスには必ず設定しましょう。

よくある質問とトラブルシューティング

FAQ

通信速度はどのくらい出ますか?
環境によりますが、日本国内からのアクセスだとCloudflareの海外エッジを経由することがあり、遅延が300ms〜800ms程度発生することがあります。Webブラウジングやファイル管理には問題ありませんが、Plexなどの動画ストリーミングや、応答速度が重要なゲームサーバーには不向きです。
無料で使えますか?制限は?
Cloudflare Zero Trustの無料プラン(Free)で利用でき、トンネル数や帯域幅の制限は実質ありません。ただし、動画配信サイトのようなテラバイト級の転送を行うと規約違反になる可能性があります。個人利用の範囲ならまず問題ありません。
「Bad Gateway」が出ます。
Cloudflareまでは繋がっていますが、その先の自宅サーバーへの接続に失敗しています。
1. cloudflaredコンテナが起動しているか確認。
2. Public Hostnameの「URL」設定で、IPアドレスが正しいか確認(Dockerの場合、localhostではなくホストのローカルIP `192.168.x.x` を指定するのが確実です)。
3. 内網のサービス自体が落ちていないか確認してください。

Cloudflare Tunnel導入フロー

グローバルIP不要で自宅サーバーをHTTPS公開するまでの手順

⏱️ Estimated time: 30 min

  1. 1

    Step1: 準備

    Cloudflareアカウント作成、独自ドメインのDNS設定、内網サーバー(Docker環境推奨)を用意。
  2. 2

    Step2: Tunnel作成

    Zero Trustダッシュボード > Networks > Tunnels で「Create a tunnel」をクリック。Connector type「Cloudflared」を選び、Tokenをコピー。
  3. 3

    Step3: エージェント起動

    自宅サーバーで以下のDockerコマンドを実行(<Token>は置き換え):
    docker run -d --restart=always --name cloudflared cloudflare/cloudflared:latest tunnel --no-autoupdate run --token <Token>
  4. 4

    Step4: 公開設定

    Tunnels設定画面の「Public Hostname」タブで「Add a public hostname」。
    公開したいサブドメインと、転送先の内網IP:ポート(例: 192.168.1.10:8080)を紐付け。
  5. 5

    Step5: セキュリティ強化(推奨)

    Access > Applications で認証設定を追加。特定のメールアドレスのみアクセス可能にする設定を行うことで、不正アクセスを完全に遮断。

まとめ

Cloudflare Tunnelは、個人の自宅サーバー運用における革命です。
かつてはネットワークの知識、ルーターの設定、ダイナミックDNSの管理が必要だった「外部公開」が、コンテナ1つ立ち上げるだけで完了します。しかもセキュリティレベルは企業並み。

まずは、眠っているRaspberry Piや使っていないPCで試してみてください。「魔法みたいだ」と感じること請け合いです。

4 min read · 公開日: 2025年11月30日 · 更新日: 2026年1月22日

コメント

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

関連記事