パブリックIPがなくても、自宅のサーバーにインターネットからアクセスしたい場合、従来は2つの選択肢しかありませんでした。VPSを購入してICP届出をするか、FRPやNgrokなどの貫通ツールを使うかです。前者は費用がかかり届出手続きが必要で、後者は有料か不安定です。
最近、Cloudflareの公式善人機能——Cloudflare Tunnelを発見しました。無料で、HTTPS内蔵、ICP届出不要、イントラネットサービスを直接公衆ネットワークに貫通できます。実際にテストしてみましたが、速度は意外といいです。
なぜパブリックIPはこんなに手に入りにくいのか
まず背景から。
中国の家庭用ブロードバンドでは、パブリックIPv4アドレスはすでに希少資源です。ISPは基本的にプライベートNATアドレスをデフォルトで割り当てます。パブリックIPを申請したい?一部の地域では直接断られ、一部ではカスタマーサービスに頭を下げる必要があり、また一部ではしばらくすると回収されることもあります。
IPv6は確かに普及しており、アドレスは余っています。しかし問題は——多くのネットワーク環境がIPv6を完全にサポートしていないことです。クライアント側にIPv6がなければ、やはり接続できません。
そのため、公衆ネットワークからアクセスできるサービスを構築したい場合、従来の道は2つです:
- VPSを購入:阿里云、腾讯云、华为云など……安いものは年間数十元から数百元。しかし国内サーバーはICP届出が必須です。手続き自体は複雑ではありませんが、確かに面倒で、数日から1〜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の場合は通常:
| |
実行後、cloudflared はバックグラウンドでシステムサービスとして実行され、Cloudflareに自動接続されます。
ダッシュボードに戻ると、Tunnelのステータスが**「Healthy(健全)」**に変わり、アップタイムも表示されます。
ステップ3:ルートの設定
Tunnelは接続されましたが、Cloudflareにどのドメインがどのイントラネットサービスを指すかを教える必要があります。
Tunnel詳細ページで、「Public Hostname」 → **「Add a public hostname」**をクリック:
- サブドメイン:例:
blog(最終アドレスはblog.yourdomain.com) - ドメイン:Cloudflare上のドメインを選択
- タイプ:HTTP
- URL:
http://localhost:80(ローカルのNginxを指す、つまり私たちのHugoブログ)
保存。数秒待って、https://blog.yourdomain.com を開くと、イントラネットブログが表示されるはずです。
実際のテスト体験
自宅のブロードバンド(中国電信300M、パブリックIPv4なし)で数日間テストしました。結果は以下の通り:
| 項目 | 体験 |
|---|---|
| アクセス速度 | ファーストペイント2-4秒、静的リソースの読み込みは正常、スムーズに閲覧可能 |
| 安定性 | 48時間連続運転でドロップアウトなし、cloudflaredサービスが自動的に再開 |
| HTTPS | 自動証明書、手動設定不要、満点 |
| 遅延 | Cloudflareエッジノードに依存、中国国内は通常香港またはシンガポールノード経由、150-300ms |
| 帯域 | Cloudflare無料版はトラフィック制限なし(フェアユースポリシー)、個人ブログには十分 |
まとめ:個人ブログ、小規模サービスのデモ、リモートデバッグなどのシーンでは完全に十分。 高并发や動画ストリーミングの場合、無料版では耐えられない可能性がありますが、それは別の話題です。
いくつかの制限と注意事項
- ドメインはCloudflare上に必要:Cloudflareで登録するか、DNSをCloudflareにホストするか。これは必須条件です。
- 無料版は機能が限定:カスタムポート、より細かいアクセス制御などは有料アップグレードが必要です。
- 直接接続より遅い:Cloudflare中継を経由するため、パブリックIPへの直接アクセスより遅くなります。しかし無料で安定しているという利点があります。
- HTTP転送の制限:ターゲットURLが
localhostの場合、cloudflaredは同じマシン上で実行する必要があります。LAN上の他のデバイスの場合は、内部IPを使用してください(例:http://192.168.1.100:80)。
まとめ
Cloudflare Tunnelは非常に実用的な無料イントラネット貫通ソリューションです。特に以下に適しています:
- パブリックIPがない家庭用ブロードバンドユーザー
- ICP届出やVPS購入を避けたい軽量ニーズ
- イントラネットサービスを迅速に公衆ネットワークに公開してテストやデモを行いたい場合
設定は簡単、HTTPS内蔵、トラフィック無制限、そして無料。Cloudflareは本当に善人です、ははは。
あなたもイントラネットサービスを公衆ネットワークに公開したい場合は、ぜひ試してみてください。質問があれば気軽に声をかけてください。