
Ein Domain-Fronting-Relais, das Datenverkehr durch GAS (Google Apps Script) leitet und an Cloudflare Workers weiterleitet. Entwickelt, um DPI zu umgehen.
Client -> Lokaler Relay -> Google/CDN Front -> GAS (Google Apps Script) Relay -> Cloudflare Worker -> Exit
|
+-> Zeigt dem Netzwerk-DPI-Filter www.google.com an
Client -> Lokaler Relay -> Google/CDN Front -> GAS (Google Apps Script) Relay -> Cloudflare Worker -> Self-Hosted Upstream Forwarder -> Exit
|
+-> Zeigt dem Netzwerk-DPI-Filter www.google.com an
Im normalen Gebrauch sendet der Browser den Datenverkehr an den Proxy, der auf Ihrem Computer läuft.
Der Proxy leitet diesen Datenverkehr über die Google-Infrastruktur weiter, sodass das Netzwerk nur eine erlaubte Domain wie www.google.com sieht.
Ihr bereitgestellter Relay ruft dann die echte Website über den Cloudflare Worker ab und sendet die Antwort auf demselben Weg zurück.
Das bedeutet, dass der Filter normal aussehenden Google-Datenverkehr sieht, während das eigentliche Ziel innerhalb der Relay-Anfrage verborgen bleibt.
git clone https://github.com/denuitt1/mhr-cfw.git
cd mhr-cfw
pip install -r requirements.txt
PyPI nicht direkt erreichbar? Verwenden Sie stattdessen diesen Mirror:
pip install -r requirements.txt -i https://mirror-pypi.runflare.com/simple/ --trusted-host mirror-pypi.runflare.com
worker.js aus diesem Projekt (unter deploy/), kopieren Sie alles und fügen Sie es in den Apps Script-Editor ein.const WORKER_URL = "myworker.workers.dev";
Code.gs aus diesem Projekt (unter deploy/), kopieren Sie alles und fügen Sie es in den Apps Script-Editor ein.const AUTH_KEY = "your-secret-password-here";
const WORKER_URL = "https://myworker.workers.dev";
⚠️ Merken Sie sich das Passwort, das Sie in Schritt 3 festgelegt haben. Sie verwenden dasselbe Passwort in der folgenden Konfigurationsdatei.
Klicken Sie auf die Datei run.bat (unter Windows) oder run.sh (unter Linux), um den Relay zu starten.
Wenn Sie es zum ersten Mal ausführen, wird ein Einrichtungsassistent angezeigt, in dem Sie den AUTH_KEY und die Google Apps Script Deployment-ID eingeben müssen.
Sie sollten eine Meldung sehen, dass der HTTP-Proxy auf 127.0.0.1:8085 läuft.
Wir empfehlen die Verwendung des v2rayN-Clients und die Konfiguration eines SOCKS5-Proxys.
Sie können auch die Chrome-Erweiterung oder Firefox-Erweiterung von FoxyProxy verwenden, um diesen Proxy in Ihrem Browser zu nutzen.
Öffnen Sie ipleak.net in Ihrem Browser. Ihre IP-Adresse sollte als Cloudflare angezeigt werden.
Wenn Sie eine virtuelle Maschine (VM) ausführen, arbeitet diese in einer isolierten Netzwerkumgebung, getrennt vom Host. Standardmäßig kann die VM nicht direkt auf Dienste zugreifen, die auf localhost des Hosts laufen – einschließlich dieses Proxys.
Um dies zu beheben, müssen Sie die Gateway-IP ermitteln, die Ihr Hypervisor dem Host zuweist, und diese anstelle von localhost verwenden, wenn Sie den Proxy in der VM konfigurieren.
Beispiel: VirtualBox (NAT-Modus)
Der Host ist von der VM aus immer unter 10.0.2.2 erreichbar. Stellen Sie den Proxy ein:
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"
Um dies dauerhaft zu machen, fügen Sie die obigen Zeilen zu ~/.bashrc hinzu und führen Sie source ~/.bashrc aus.
Da dieser Proxy SSL-Inspektion durchführt, können Zertifikatsfehler auftreten. Installieren Sie das enthaltene ca.crt, um diese zu beheben:
sudo cp ca.crt /usr/local/share/ca-certificates/ && sudo update-ca-certificates
Sie können diesen Proxy auf Ihrem Telefon oder einem anderen Gerät im selben Netzwerk verwenden – keine zusätzliche Software erforderlich.
1. Finden Sie Ihre Host-IP
# Windows
ipconfig
# Linux / macOS
ip addr
Suchen Sie nach der IP des Adapters, der mit Ihrem Router verbunden ist (z. B. 192.168.1.8).
2. Portweiterleitung (nur Windows, wenn der Dienst an localhost gebunden ist)
Führen Sie CMD als Administrator aus:
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. Proxy auf Ihrem Telefon konfigurieren
Verbinden Sie Ihr Telefon mit demselben WLAN und stellen Sie den Proxy manuell ein:
192.168.1.8)8085Auf Android: Einstellungen → WLAN → Ändern → Proxy → Manuell Auf dem iPhone: Einstellungen → WLAN → (Netzwerk) → HTTP-Proxy → Manuell
4. CA-Zertifikat installieren
Übertragen Sie ca.crt auf Ihr Telefon, dann:
CAPTCHAs (Cloudflare Turnstile/Bot-Challenge, reCAPTCHA, hCaptcha) binden Token
an die IP, die die Challenge gelöst hat. Cloudflare Worker verlassen das Netzwerk
über verschiedene Edge-IPs pro Anfrage, sodass die Verifizierung auf der Zielseite fehlschlägt, selbst wenn Sie die Challenge lösen. Dieser optionale Zusatz erlaubt es dem Worker, alle fetch()-Aufrufe über einen kleinen Node-Server weiterzuleiten, den Sie auf einer VPS mit stabiler IP betreiben – so erhält die Zielseite eine konsistente Exit-Adresse.
cf_clearance).Wenn Sie diese Probleme nicht haben, lassen Sie es unkonfiguriert – der Worker verhält sich wie zuvor.
Cloudflare Worker bieten keine stabile ausgehende IP – fetch() verlässt das Netzwerk über einen rotierenden Pool von Cloudflare-Edge-IPs, was genau der Grund ist, warum IP-gebundene CAPTCHA-Token brechen. Die statischen Egress-Optionen von Cloudflare (BYOIP, Egress Workers) sind nur im Enterprise-Tarif verfügbar, daher ist eine kleine VPS mit einer statischen IP der praktische Workaround. Der Forwarder ist lediglich ein dünner Proxy, der den fetch() von einer stabilen Adresse aus erneut ausführt.
Die Referenzimplementierung ist deploy/upstream-forwarder/upstream_forwarder.js.
Sie benötigt Node 18+ und keine Abhängigkeiten. Betreiben Sie sie hinter Caddy oder nginx mit TLS – der Worker lehnt Nicht-HTTPS-Forwarder-URLs ab.
# Auf Ihrer VPS (Ubuntu/Debian Beispiel):
sudo apt install -y nodejs # muss 18+ sein
export AUTH_KEY="some-long-random-string-at-least-32-chars"
export PORT=8787
node deploy/upstream-forwarder/upstream_forwarder.js
Stellen Sie sie mit Caddy für automatisches TLS bereit:
forwarder.example.com {
reverse_proxy 127.0.0.1:8787
}
Kurzer Test:
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":{}}'
Der entschlüsselte Antworttext sollte die IP der VPS anzeigen.
Im Cloudflare-Dashboard → Ihr Worker → Einstellungen → Variablen und Secrets:
Speichern und stellen Sie den Worker erneut bereit.
Rufen Sie https://httpbin.org/ip über den Proxy auf – Sie sollten die IP der VPS sehen, nicht die von Cloudflare. Besuchen Sie dann eine CAPTCHA-geschützte Website, die vorher nicht funktionierte – die Challenge sollte jetzt validieren.
Der Forwarder muss eine Authentifizierung erfordern. Ohne
AUTH_KEYstartet er nicht. Jeder mit der URL und dem Schlüssel kann ihn als Relay nutzen, halten Sie beides geheim.
Standardmäßig leitet der Worker jede Anfrage über den Forwarder, sodass irrelevanter Datenverkehr ebenfalls VPS-Bandbreite verbraucht. Um nur die Websites, die eine stabile Exit-IP benötigen, über die VPS zu leiten, listen Sie sie in forwarder_hosts in config.json auf – gleiche Syntax wie bypass_hosts (exakter Hostname oder .suffix). Alles, was nicht matcht, fällt auf den direkten fetch() im Worker zurück.
{
...
"forwarder_hosts": [
"example.com",
".cf-protected-suffix"
]
...
}
Lassen Sie die Liste leer (oder entfernen Sie den Schlüssel), um das bisherige Verhalten "alles weiterleiten" beizubehalten.
MHR-CFW wird nur zu Bildungs-, Test- und Forschungszwecken bereitgestellt.
| Name | Typ | Wert |
|---|
UPSTREAM_FORWARDER_URL | Secret | https://forwarder.example.com/fwd |
UPSTREAM_AUTH_KEY | Secret | derselbe AUTH_KEY, den Sie auf der VPS gesetzt haben |
UPSTREAM_FAIL_MODE | Variable | closed (Standard) – gibt 502 bei Forwarder-Fehler zurück. Mit open wird auf direkten Fetch zurückgegriffen. |
UPSTREAM_TIMEOUT_MS | Variable (optional) | Standard 25000 |