関連リソース#
プロジェクトアドレス:https://www.github.com/fscarmen/cfd_return
ビデオチュートリアル:https://youtu.be/X032LZkVZSs
Cloudflared アプリダウンロード:https://github.com/cloudflare/cloudflared/releases
Cloudflare Tunnel Json 取得サイト:http://fscarmen.cloudflare.now.cc
gost v3 アプリダウンロード:https://github.com/go-gost/gost/releases
cfd おすすめツールダウンロード:https://github.com/fscarmen/cfd_return/tree/main/cfd
背景および方案の概要#
ネットワークサービスを構築する過程で、CDN(コンテンツ配信ネットワーク)を使用してユーザーのアクセスを加速することがよくあります。従来の CDN サービスは通常「正方向」であり、ユーザーが CDN ノードにアクセスし、CDN ノードがリクエストをリモートの VPS(仮想専用サーバー)に転送します。しかし、この方法では VPS がパブリック IP を持っている必要があり、ネットワーク遅延や帯域幅の制限の影響を受ける可能性があります。
今日は、Cloudflare Tunnel に基づく「逆回源」ツールを紹介します。このツールは、あなたのローカルサービスを内網を通じて Cloudflare の CDN ネットワークに接続し、世界中でのアクセスを加速します。このツールは CentOS、Debian、Ubuntu、Alpine、OpenWRT などの多くのオペレーティングシステムをサポートしており、インストールと使用が非常に便利です。
Cloudflare Tunnel とは?#
Cloudflare Tunnel は、Cloudflare が提供する安全で信頼性の高い内網穿透サービスです。これにより、ローカルサービスをインターネットに公開することができ、パブリックポートを開放したり、複雑なファイアウォールルールを設定したりする必要がありません。Cloudflare Tunnel を使用することで、ローカルサービスは Cloudflare のグローバルネットワークに接続し、低遅延、高帯域幅のアクセス体験を享受できます。
Gost とは?#
Gost (GO Simple Tunnel) v3 は、GO 言語で実装された安全なトンネルで、さまざまなネットワークプロトコルとプロキシ方式をサポートしています。その設計目標は、シンプルで柔軟かつ効率的なネットワークプロキシソリューションを提供することです。Gost は、正方向プロキシ、逆方向プロキシ、トンネルプロキシなど、さまざまなネットワークトポロジーを構築するために使用できます。
プロジェクトアドレス:https://github.com/go-gost/gost
プロジェクトドキュメント:https://gost.run/
逆回源の利点#
- パブリックエントリ制限の突破:従来の CDN は VPS にパブリック IP が必要ですが、本ツールは Cloudflare Tunnel を利用して内網穿透を実現し、パブリック IP なしで CDN に接続できます。
- 自動最適化 cloudflared 接続 IP:熱心なユーザー cf 中継 ip グループの提供するツール cfd を使用し、複数の候補エンドポイント(region1.v2.argotunnel.com、region2.v2.argotunnel.com、us-region1.v2.argotunnel.com、us-region2.v2.argotunnel.com など)から、これらのエンドポイントは複数の IPv4 および IPv6 アドレスを含む可能性があり、ツールは遅延が最小の接続 IP を選択します。
- 幅広いアプリケーションシーン:従来の VPS に加えて、さまざまなコンテナ、ゲームプラットフォーム、さらには家庭ネットワークに本ツールを展開し、サービスのグローバル加速アクセスを実現できます。
- 追加の最適化不要:Cloudflare の回線品質は通常非常に良いため、本ツールを使用する際に追加のネットワーク最適化を行う必要はなく、安定したアクセス速度を享受できます。
- 軽量な実行:本ツールはほぼ 0 依存で、複雑な証明書や設定の問題を処理する必要がなく、インストールと使用が非常に簡単です。
実現原理の例#
json または token の方式で Cloudflare Tunnel を作成しました(各自の作成方法は後文を参照)。例えば、トンネル名が gost.argo.com で、ローカルのポートは 20000 です。
ローカル OpenWRT 実行#
gost -D -L "relay+ws://:10000?path=/3b451552-e776-45c5-9b98-bde3ab99bf75&bind=true"
cloudflared tunnel --logfile /tmp/cloudflared.log --edge-ip-version auto --config /etc/cfd_return_server/tunnel.yml run
cfd -file /etc/cfd_return_server/ip
注意:上記の三つのコマンドは実行時に前台端末を占有し、端末がブロックされて他の操作を実行できなくなります。したがって、手動で実行する場合は、screen や類似の端末再利用ツールを利用することをお勧めします。これにより、各プロセスに独立した screen セッションを割り当て、これらのプロセスをバックグラウンドで継続して実行しながら、他の端末セッションの使用に影響を与えずに自由にアクセスおよび制御できます。
コマンド解析
gost:
-
-D:このフラグはデバッグモードを有効にし、トラブルシューティングのために詳細なログを提供します。
-
-L "relay+ws://:10000?path=/3b451552-e776-45c5-9b98-bde3ab99bf75&bind=true":これはローカルでリッスンするアドレスとポートを指定し、WebSocket プロトコルを使用します。path パラメータは WebSocket パスを指定し、Relay サービスを起動し、BIND 機能を有効にし、UDP-over-TCP 方式を採用します。
cloudflared:
-
--logfile /tmp/cloudflared.log:このオプションは出力ログを保存するファイルパスを指定します。
-
--edge-ip-version auto:このオプションは接続する IP バージョン(IPv4 または IPv6)を自動的に選択します。
-
--config /etc/cfd_return_server/tunnel.yml:これはトンネルの設定ファイルパスを指定します。
-
run:このコマンドはトンネルを起動します。
cfd:
- -file:IP アドレスファイル名
リモート VPS 実行#
gost -D -L socks5://[::1]:20000
gost -D -L rtcp://:30000/[::1]:20000 -F "relay+ws://gost.argo.com:80?path=/3b451552-e776-45c5-9b98-bde3ab99bf7&host=gost.argo.com"
コマンド解析
gost:
-
-D:このフラグはデバッグモードを有効にし、トラブルシューティングのために詳細なログを提供します。
-
-L socks5://[::1]:20000:これはローカルでリッスンするアドレスとポートを指定し、SOCKS5 プロトコルを使用します。[::1] はループバックアドレスで、20000 はポート番号です。
-
-L relay+rtcp://:30000/[::1]:20000:これはローカルでリッスンするアドレスとポートを指定し、RTCP プロトコルを使用します。30000 はローカルポート(家庭や会社で使用されるソフトルーター)、[::1]:20000 はリモートアドレスとポート(VPS 側)です。
-
-F "ws://gost.argo.com:80?path=/3b451552-e776-45c5-9b98-bde3ab99bf7&host=gost.argo.com":これは転送アドレスを指定し、WebSocket プロトコルを使用します。path および host パラメータは WebSocket パスとホストを指定します。
プロジェクトワンキースクリプトデプロイ#
インタラクティブインストール#
サーバーとクライアントの両方で使用
bash <(wget -qO- https://raw.githubusercontent.com/fscarmen/cfd_return/main/cfd_return.sh)
ショートカットパラメータインストール#
サーバーのインストール
bash <(wget -qO- https://raw.githubusercontent.com/fscarmen/cfd_return/main/cfd_return.sh) \
-s \ # サーバーをインストール
-p server-origin-port \ # ローカルサービスのポートを指定
-d your-domain.com \ # Cloudflare Tunnel のドメインを指定
-w your-ws-path \ # WebSocket パスを指定(Cloudflare Tunnel と通信するため)
-t 4 \ # IPv4 エンドポイントのみを最適化
-a 'your-cloudflare-auth' # Cloudflare Json または Token 認証情報を指定、注意:シングルクォートが必要
クライアントのインストール
bash <(wget -qO- https://raw.githubusercontent.com/fscarmen/cfd_return/main/cfd_return.sh) \
-c \ # サーバーをインストール
-r remote-socks5-port \ # サーバーにマッピングする SOCKS5 ポートを指定
-d your-domain.com \ # Cloudflare Tunnel のドメインを指定
-w your-ws-path # WebSocket パスを指定(Cloudflare Tunnel と通信するため)
アンインストール方法
bash <(wget -qO- https://raw.githubusercontent.com/fscarmen/cfd_return/main/cfd_return.sh) -u
詳細なパラメータはプロジェクトの README.md を参照してください:https://www.github.com/fscarmen/cfd_return
Cloudflare Tunnel Json の取得#
ユーザーは Cloudflare Json 生成サイトを通じて簡単に取得できます:https://fscarmen.cloudflare.now.cc
Cloudflare Tunnel Token の取得#
デプロイ実行スクリーンショット#
サーバー:Json 方式#
- ソフトルーターにデプロイ
サーバー:Token 方式#
- ソフトルーターにデプロイ
クライアント(VPS)#
- VPS にデプロイ
アプリ設定#
参考内容#
Gost v3 転送チェーン:https://gost.run/tutorials/port-forwarding/#_5