Cloudflare Tunnel を使った無料のイントラネット貫通

パブリックIPv4がない?ICP届出をしたくない?Cloudflare Tunnelを使えば、イントラネットサービスを無料で公衆ネットワークに公開でき、HTTPSも付属します。

パブリックIPがなくても、自宅のサーバーにインターネットからアクセスしたい場合、従来は2つの選択肢しかありませんでした。VPSを購入してICP届出をするか、FRPやNgrokなどの貫通ツールを使うかです。前者は費用がかかり届出手続きが必要で、後者は有料か不安定です。

最近、Cloudflareの公式善人機能——Cloudflare Tunnelを発見しました。無料で、HTTPS内蔵、ICP届出不要、イントラネットサービスを直接公衆ネットワークに貫通できます。実際にテストしてみましたが、速度は意外といいです。

なぜパブリックIPはこんなに手に入りにくいのか

まず背景から。

中国の家庭用ブロードバンドでは、パブリックIPv4アドレスはすでに希少資源です。ISPは基本的にプライベートNATアドレスをデフォルトで割り当てます。パブリックIPを申請したい?一部の地域では直接断られ、一部ではカスタマーサービスに頭を下げる必要があり、また一部ではしばらくすると回収されることもあります。

IPv6は確かに普及しており、アドレスは余っています。しかし問題は——多くのネットワーク環境がIPv6を完全にサポートしていないことです。クライアント側にIPv6がなければ、やはり接続できません。

そのため、公衆ネットワークからアクセスできるサービスを構築したい場合、従来の道は2つです:

  1. VPSを購入:阿里云、腾讯云、华为云など……安いものは年間数十元から数百元。しかし国内サーバーはICP届出が必須です。手続き自体は複雑ではありませんが、確かに面倒で、数日から1〜2週間かかります。
  2. 貫通ツールを使用:FRP(セルフホスト)、Ngrok、花生壳など……パブリックIPを持つサーバーが中継用に必要か、第三者の有料サービスを使用するかで、無料版は制限が多いです。

Cloudflare Tunnelの登場は、この道を基本的に無料にしました。

Cloudflare Tunnelとは

簡単に言えば、Cloudflare TunnelはCloudflareが公式に発売したリバーストンネルツールです。イントラネットサーバー上で軽量クライアント(cloudflaredと呼ばれる)を実行し、このクライアントが能動的に外部のCloudflareエッジネットワークに接続して、暗号化トンネルを確立します。

外部ユーザーがアクセスする際、リクエストはまずCloudflareのエッジノードに到達し、その後このトンネルを通じてイントラネットサーバーに転送されます。サーバーにはパブリックIPが不要で、ファイアウォールポートを開ける必要もなく、ルーターの設定すら不要です。

さらに素晴らしいことに、Cloudflareは自動的にサブドメイン(バインドしたドメインの下)を割り当て、HTTPS証明書を付属させます。つまり、Cloudflare上にドメインがあれば(Cloudflareで無料登録した .workers.dev でも、自分のドメインでも)、Tunnelを設定すれば、外部から https://xxx.yourdomain.com でイントラネットのHTTPサービスにアクセスできます。

実践手順

以下は私が実際に操作したフローです。これに従ってください。

前提条件

  • Cloudflareアカウント
  • Cloudflare上で管理されているドメイン(安いものを登録するか、既存ドメインのNSをCloudflareに変更する)
  • イントラネットサーバー(ここでは先ほどのHugoブログを実行しているUbuntu 22.04)

ステップ1:Tunnelの作成

Cloudflareダッシュボードにログイン → 左側メニューで**「Zero Trust」**(旧Teams)を見つける → 「ネットワーク」「Tunnels」 → **「Create a tunnel」**をクリック。

Cloudflaredタイプを選択し、Tunnelに名前を付けます(例:home-server)。

ステップ2:cloudflaredのインストール

作成後、ページがサーバー上での cloudflared のインストールとコマンドの実行を促します。システムは環境に応じて自動的にインストール方法を推奨します。Ubuntu/Debianの場合は通常:

1
2
3
4
5
6
# cloudflaredをダウンロードしてインストール
wget -q https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared-linux-amd64.deb

# ページで提供されたログインコマンドを実行
sudo cloudflared service install <あなたのトークン>

実行後、cloudflared はバックグラウンドでシステムサービスとして実行され、Cloudflareに自動接続されます。

ダッシュボードに戻ると、Tunnelのステータスが**「Healthy(健全)」**に変わり、アップタイムも表示されます。

ステップ3:ルートの設定

Tunnelは接続されましたが、Cloudflareにどのドメインがどのイントラネットサービスを指すかを教える必要があります。

Tunnel詳細ページで、「Public Hostname」 → **「Add a public hostname」**をクリック:

  • サブドメイン:例:blog(最終アドレスは blog.yourdomain.com
  • ドメイン:Cloudflare上のドメインを選択
  • タイプ:HTTP
  • URLhttp://localhost:80(ローカルのNginxを指す、つまり私たちのHugoブログ)

保存。数秒待って、https://blog.yourdomain.com を開くと、イントラネットブログが表示されるはずです。

実際のテスト体験

自宅のブロードバンド(中国電信300M、パブリックIPv4なし)で数日間テストしました。結果は以下の通り:

項目体験
アクセス速度ファーストペイント2-4秒、静的リソースの読み込みは正常、スムーズに閲覧可能
安定性48時間連続運転でドロップアウトなし、cloudflaredサービスが自動的に再開
HTTPS自動証明書、手動設定不要、満点
遅延Cloudflareエッジノードに依存、中国国内は通常香港またはシンガポールノード経由、150-300ms
帯域Cloudflare無料版はトラフィック制限なし(フェアユースポリシー)、個人ブログには十分

まとめ:個人ブログ、小規模サービスのデモ、リモートデバッグなどのシーンでは完全に十分。 高并发や動画ストリーミングの場合、無料版では耐えられない可能性がありますが、それは別の話題です。

いくつかの制限と注意事項

  1. ドメインはCloudflare上に必要:Cloudflareで登録するか、DNSをCloudflareにホストするか。これは必須条件です。
  2. 無料版は機能が限定:カスタムポート、より細かいアクセス制御などは有料アップグレードが必要です。
  3. 直接接続より遅い:Cloudflare中継を経由するため、パブリックIPへの直接アクセスより遅くなります。しかし無料で安定しているという利点があります。
  4. HTTP転送の制限:ターゲットURLが localhost の場合、cloudflaredは同じマシン上で実行する必要があります。LAN上の他のデバイスの場合は、内部IPを使用してください(例:http://192.168.1.100:80)。

まとめ

Cloudflare Tunnelは非常に実用的な無料イントラネット貫通ソリューションです。特に以下に適しています:

  • パブリックIPがない家庭用ブロードバンドユーザー
  • ICP届出やVPS購入を避けたい軽量ニーズ
  • イントラネットサービスを迅速に公衆ネットワークに公開してテストやデモを行いたい場合

設定は簡単、HTTPS内蔵、トラフィック無制限、そして無料。Cloudflareは本当に善人です、ははは。

あなたもイントラネットサービスを公衆ネットワークに公開したい場合は、ぜひ試してみてください。質問があれば気軽に声をかけてください。

Hugo で構築されています。
テーマ StackJimmy によって設計されています。