Loading...
Loading...
Expert skill for setting up and using MHR-CFW, a domain-fronting relay that routes traffic through Google Apps Script and Cloudflare Workers to bypass DPI filtering.
npx skill4agent add aradotso/trending-skills mhr-cfw-domain-fronting-relaySkill by ara.so — Daily 2026 Skills collection.
www.google.comClient → Local Proxy (127.0.0.1:8085)
↓
Google IP (216.239.38.120) — DPI sees www.google.com
↓
Google Apps Script Web App (Relay)
↓
Cloudflare Worker
↓
Target Websitegit clone https://github.com/denuitt1/mhr-cfw.git
cd mhr-cfw
pip install -r requirements.txtpip install -r requirements.txt \
-i https://mirror-pypi.runflare.com/simple/ \
--trusted-host mirror-pypi.runflare.comscript/worker.jsconst WORKER_URL = "your-worker-name.workers.dev";your-worker-name.workers.devscript/Code.gsconst AUTH_KEY = "your-secret-password-here"; // choose a strong password
const WORKER_URL = "https://your-worker-name.workers.dev";AKfycb...config.jsoncp config.example.json config.jsonconfig.json{
"mode": "apps_script",
"google_ip": "216.239.38.120",
"front_domain": "www.google.com",
"script_id": "AKfycbXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"auth_key": "your-secret-password-here",
"listen_host": "127.0.0.1",
"listen_port": 8085,
"socks5_enabled": true,
"socks5_port": 1080,
"log_level": "INFO",
"verify_ssl": true
}| Field | Description |
|---|---|
| Always |
| IP of Google's infrastructure for fronting |
| Domain shown to DPI ( |
| Your GAS Deployment ID from Step 2 |
| Must match |
| Local bind address (keep |
| HTTP proxy port (default |
| Enable SOCKS5 proxy on |
| SOCKS5 proxy port (default |
| |
| Verify SSL certs; set |
bash start.sh
# or
python3 main.pystart.bat[INFO] HTTP proxy running on 127.0.0.1:8085
[INFO] SOCKS5 proxy running on 127.0.0.1:1080HTTPSOCKS5127.0.0.180851080curl -x http://127.0.0.1:8085 https://ipleak.net/json/curl --socks5 127.0.0.1:1080 https://ipleak.net/json/import requests
proxies = {
"http": "http://127.0.0.1:8085",
"https": "http://127.0.0.1:8085",
}
response = requests.get("https://ipleak.net/json/", proxies=proxies)
print(response.json())import requests
proxies = {
"http": "socks5://127.0.0.1:1080",
"https": "socks5://127.0.0.1:1080",
}
response = requests.get("https://ipleak.net/json/", proxies=proxies)
print(response.json()){
"mode": "apps_script",
"google_ip": "216.239.38.120",
"front_domain": "www.google.com",
"script_id": "YOUR_DEPLOYMENT_ID",
"auth_key": "YOUR_AUTH_KEY",
"listen_host": "127.0.0.1",
"listen_port": 8085,
"socks5_enabled": false,
"log_level": "INFO",
"verify_ssl": true
}{
"mode": "apps_script",
"google_ip": "216.239.38.120",
"front_domain": "www.google.com",
"script_id": "YOUR_DEPLOYMENT_ID",
"auth_key": "YOUR_AUTH_KEY",
"listen_host": "127.0.0.1",
"listen_port": 8085,
"socks5_enabled": true,
"socks5_port": 1080,
"log_level": "DEBUG",
"verify_ssl": false
}{
"listen_host": "0.0.0.0",
"listen_port": 8085
}⚠️ Only useon trusted networks. Anyone on the LAN can use your proxy.0.0.0.0
script/worker.js// The worker receives proxied requests and forwards them to the target
const WORKER_URL = "your-worker-name.workers.dev"; // set this to your own worker
addEventListener("fetch", event => {
event.respondWith(handleRequest(event.request));
});script/Code.gsconst AUTH_KEY = "your-secret-password-here"; // must match config.json auth_key
const WORKER_URL = "https://your-worker.workers.dev";
function doPost(e) {
// Validates AUTH_KEY, extracts target URL, forwards via WORKER_URL
}/execAUTH_KEYcurl -x http://127.0.0.1:8085 https://ipleak.net/json/ | python3 -m json.tool"ip"script_idconfig.jsonauth_keyconfig.jsonAUTH_KEYCode.gs"verify_ssl": falsefalsepip installpip install -r requirements.txt \
-i https://mirror-pypi.runflare.com/simple/ \
--trusted-host mirror-pypi.runflare.comscript_id{
"listen_port": 8086,
"socks5_port": 1081
}config.jsonWORKER_URLCode.gshttps://your-worker.workers.dev"log_level": "DEBUG"main.pyimport json
import os
config = {
"mode": "apps_script",
"google_ip": "216.239.38.120",
"front_domain": "www.google.com",
"script_id": os.environ["GAS_DEPLOYMENT_ID"],
"auth_key": os.environ["MHR_AUTH_KEY"],
"listen_host": "127.0.0.1",
"listen_port": int(os.environ.get("MHR_PORT", "8085")),
"socks5_enabled": True,
"socks5_port": 1080,
"log_level": os.environ.get("MHR_LOG_LEVEL", "INFO"),
"verify_ssl": True
}
with open("config.json", "w") as f:
json.dump(config, f, indent=2)
print("config.json written")export GAS_DEPLOYMENT_ID="AKfycbXXXXXXXXXXXXXX"
export MHR_AUTH_KEY="$(openssl rand -hex 32)"
python3 write_config.py
python3 main.py| File | Purpose |
|---|---|
| Entry point — starts HTTP and SOCKS5 proxy listeners |
| Runtime configuration (copy from |
| Template configuration with placeholder values |
| Cloudflare Worker source — deploy to Cloudflare |
| Google Apps Script relay source — deploy to GAS |
| Windows launcher |
| Linux/macOS launcher |
| Python dependencies |