
ドメインフロンティングリレーで、GAS(Google Apps Script)を経由してトラフィックをルーティングし、Cloudflare Workersに転送します。DPIをバイパスするように設計されています。
Client -> Local Relay -> Google/CDN Front -> GAS (Google Apps Script) Relay -> Cloudflare Worker -> Exit
|
+-> Shows www.google.com to network DPI filter
Client -> Local Relay -> Google/CDN Front -> GAS (Google Apps Script) Relay -> Cloudflare Worker -> Self-Hosted Upstream Forwarder -> Exit
|
+-> Shows www.google.com to network DPI filter
通常の使用では、ブラウザはコンピュータ上で動作するプロキシにトラフィックを送信します。
プロキシはそのトラフィックを Google 向けインフラを経由して送信するため、ネットワークには www.google.com などの許可されたドメインしか見えません。
デプロイしたリレーが Cloudflare Worker を通じて実際の Web サイトを取得し、同じ経路でレスポンスを返します。
つまり、フィルターには通常の Google トラフィックのように見え、実際の宛先はリレーリクエスト内に隠されたままになります。
git clone https://github.com/denuitt1/mhr-cfw.git
cd mhr-cfw
pip install -r requirements.txt
PyPI に直接アクセスできない場合 代わりにこのミラーを使用してください:
pip install -r requirements.txt -i https://mirror-pypi.runflare.com/simple/ --trusted-host mirror-pypi.runflare.com
worker.js ファイル (deploy/ 内) を開き、すべてコピー して Apps Script エディタに貼り付けます。const WORKER_URL = "myworker.workers.dev";
Code.gs ファイル (deploy/ 内) を開き、すべてコピー して Apps Script エディタに貼り付けます。const AUTH_KEY = "your-secret-password-here";
const WORKER_URL = "https://myworker.workers.dev";
⚠️ 手順3で設定したパスワードを覚えておいてください。以下の設定ファイルで同じパスワードを使用します。
run.bat(Windows)または run.sh(Linux)をクリックしてリレーを開始します。
初回実行時にはセットアップウィザードが表示され、AUTH_KEY と Google Apps Script のデプロイメント ID を入力する必要があります。
HTTP プロキシが 127.0.0.1:8085 で動作しているというメッセージが表示されます。
v2rayN クライアント を使用して socks5 プロキシを設定することを推奨します。
FoxyProxy の Chrome 拡張機能 または Firefox 拡張機能 を使ってブラウザでこのプロキシを使用することもできます。
ブラウザで ipleak.net を開くと、IP アドレスが Cloudflare のものに設定されているはずです。
仮想マシン(VM)を実行すると、ホストとは分離されたネットワーク環境で動作します。デフォルトでは、VM はホストマシンの localhost で動作しているサービス(このプロキシを含む)に直接アクセスできません。
これを修正するには、ハイパーバイザーがホストに割り当てるゲートウェイ IP を調べ、VM 内でプロキシを設定するときに localhost の代わりに使用します。
例:VirtualBox(NAT モード)
ホストには VM 内から常に 10.0.2.2 でアクセスできます。プロキシを次のように設定します:
export http_proxy="http://10.0.2.2:8085"
export https_proxy="http://10.0.2.2:8085"
export all_proxy="socks5://10.0.2.2:8085"
永続的にするには、上記の行を ~/.bashrc に追加し、source ~/.bashrc を実行します。
このプロキシは SSL インスペクションを行うため、証明書エラーが表示される場合があります。付属の ca.crt をインストールして修正します:
sudo cp ca.crt /usr/local/share/ca-certificates/ && sudo update-ca-certificates
プロキシをスマートフォンや同じネットワーク上の他のデバイスで使用できます。追加のソフトウェアは不要です。
1. ホスト IP を確認する
# Windows
ipconfig
# Linux / macOS
ip addr
ルーターに接続されているアダプタの IP を探します(例:192.168.1.8)。
2. ポートを転送する(Windows のみ、サービスが localhost にバインドされている場合)
管理者として CMD を実行:
netsh interface portproxy add v4tov4 listenaddress=192.168.1.8 listenport=8085 connectaddress=127.0.0.1 connectport=8085
netsh advfirewall firewall add rule name="Proxy 8085" dir=in action=allow protocol=TCP localport=8085
3. スマートフォンでプロキシを設定する
スマートフォンを同じ Wi-Fi に接続し、手動でプロキシを設定します:
192.168.1.8)8085Android の場合:設定 → Wi-Fi → ネットワークを長押し → プロキシ → 手動 iPhone の場合:設定 → Wi-Fi → (ネットワーク) → HTTP プロキシ → 手動
4. CA 証明書をインストールする
ca.crt をスマートフォンに転送し、次の手順でインストールします:
CAPTCHA(Cloudflare Turnstile / ボットチャレンジ、reCAPTCHA、hCaptcha)は、チャレンジを解決した IP にトークンをバインドします。Cloudflare Workers はリクエストごとに異なるエッジ IP から出口するため、チャレンジを解決してもターゲットサイトで検証に失敗します。このオプションのアドオンを使用すると、Worker が安定した IP の VPS 上で動作する小さな Node.js サーバーを通じてすべての fetch() 呼び出しを転送し、ターゲットサイトに対して一貫した出口アドレスを提供します。
cf_clearance)。これらの問題に遭遇しない場合は設定不要です。既存のまま Worker は動作します。
Cloudflare Workers は安定した送信元 IP を公開しません。fetch() は Cloudflare エッジ IP のローテーションプールを通じて出口するため、IP にバインドされた CAPTCHA トークンが破綻します。Cloudflare の静的出口オプション(BYOIP、Egress Workers)はエンタープライズ向けです。そのため、静的 IP を持つ小さな VPS が実用的な回避策です。フォワーダーは単に安定したアドレスから fetch() を再発行する軽量プロキシです。
リファレンス実装は deploy/upstream-forwarder/upstream_forwarder.js です。
Node 18+ と依存関係は不要です。TLS を設定した Caddy または nginx の背後で実行します。Worker は非 HTTPS のフォワーダー URL を拒否します。
# VPS 上(Ubuntu/Debian の例):
sudo apt install -y nodejs # 18+ である必要があります
export AUTH_KEY="some-long-random-string-at-least-32-chars"
export PORT=8787
node deploy/upstream-forwarder/upstream_forwarder.js
Caddy で自動 TLS を設定:
forwarder.example.com {
reverse_proxy 127.0.0.1:8787
}
簡単な動作確認:
curl -X POST https://forwarder.example.com/fwd \
-H "x-upstream-auth: $AUTH_KEY" \
-H "content-type: application/json" \
-d '{"u":"https://httpbin.org/ip","m":"GET","h":{}}'
デコードされたレスポンスボディには VPS の IP が表示されるはずです。
Cloudflare ダッシュボード → 該当 Worker → Settings → Variables and Secrets:
保存して Worker を再デプロイします。
プロキシ経由で https://httpbin.org/ip にアクセスすると、VPS の IP が表示されるはずです(Cloudflare の IP ではありません)。その後、動作していなかった CAPTCHA 保護されたサイトに再アクセスすると、チャレンジが検証されるようになります。
フォワーダーは認証を必須とします。
AUTH_KEYがないと起動しません。URL とキーを知っている人は誰でもリレーとして使用できるため、両方とも秘密にしてください。
デフォルトでは Worker が処理するすべてのリクエストがフォワーダーを経由するため、無関係なトラフィックでも VPS の帯域幅を消費します。安定した出口 IP が必要なサイトのみ VPS 経由にするには、config.json の forwarder_hosts にリストします。構文は bypass_hosts と同じです(完全なホスト名または .suffix)。マッチしなかったものは Worker 上で直接 fetch() にフォールバックします。
{
...
"forwarder_hosts": [
"example.com",
".cf-protected-suffix"
]
...
}
リストを空にするかキーを削除すると、従来の「すべてを転送する」動作を維持します。
MHR-CFW は教育、テスト、研究目的でのみ提供されます。
| 名前 | タイプ | 値 |
|---|
UPSTREAM_FORWARDER_URL | Secret | https://forwarder.example.com/fwd |
UPSTREAM_AUTH_KEY | Secret | VPS で設定したものと同じ AUTH_KEY |
UPSTREAM_FAIL_MODE | Variable | closed(デフォルト)— フォワーダー障害時に 502 を返す。open で直接 fetch にフォールバック。 |
UPSTREAM_TIMEOUT_MS | Variable(オプション) | デフォルト 25000 |