windows实现透明代理需结合netsh端口转发或防火墙nat重定向、入站规则放行及squid透明模式配置,而非单纯开放端口;其中netsh适用于单机/wsl2场景,防火墙重定向需双网卡网关拓扑;squid须启用transparent/intercept并正确配置ssl bump。
要让 windows 防火墙支持透明代理所需的端口转发,关键不是“放行端口”,而是通过 nat 重定向 + 入站规则 + 代理服务协同 实现流量自动劫持。单纯开放端口无法达成透明效果,必须配合系统级端口转发与代理的透明监听模式。
明确透明代理在 Windows 上的实现路径
Windows 本身不原生提供 Linux 风格的 iptables PREROUTING,但可通过两种互补方式模拟透明代理的流量拦截能力:
- netsh portproxy:适用于将外部 IP:Port 的入向连接,静态转发到本机另一端口(如把 192.168.10.1:80 → 127.0.0.1:3128),适合单网卡、代理与客户端同机或 WSL2 场景
- Windows 防火墙 NAT 规则(高级安全):需配合双网卡网关拓扑(如物理机作内网网关),利用“入站规则→操作→重定向”功能,将来自内网接口的 80/443 流量强制跳转到 Squid 监听端口——此功能在 Windows Server 2019+ 和部分 Win10/11 专业版中可用,需确认防火墙策略支持“重定向到端口”动作
配置 netsh 端口转发(推荐用于 WSL2 或单机测试)
这是最轻量、最可控的方式,特别适配 WSL2 与 Windows 主机共存的开发/测试环境:
在 Windows 11 上"直接发声"的 TTS(从 WSL2/TUI 调用 powershell.exe + System.Speech)。适用于用户说"说出来/读出来/语音播报/用TTS",或反馈"没声音/tts 生成的 mp3 是空的/播不出来",以及需要中文语音但 OpenClaw 内置 tts 不可用时。
- 以管理员身份打开 PowerShell
- 执行转发命令(示例:把局域网访问本机 192.168.187.1:80 的请求,转给本地 Squid 的 3128 端口):
netsh interface portproxy add v4tov4 listenaddress=192.168.187.1 listenport=80 connectaddress=127.0.0.1 connectport=3128 protocol=tcp - 若需 HTTPS 支持,再加一条指向 443→3129(Squid 需额外配置 https_port ... intercept)
- 启用 IPv4 转发(确保系统允许转发):
reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v IpEnableRouter /t REG_DWORD /d 1 /f
然后重启网络服务或重启系统
配套设置 Windows 防火墙入站规则(保障代理端口可达)
即使做了端口转发,目标端口(如 3128)仍受防火墙拦截。必须显式放行:
- 打开「高级安全 Windows Defender 防火墙」→「入站规则」→「新建规则」
- 类型选「端口」→ 协议选 TCP → 特定本地端口填「3128,3129」
- 作用域中,建议限制「远程 IP 地址」为可信子网(如内网段 192.168.10.0/24 或 WSL2 子网 172.16.0.0/12),避免暴露代理到公网
- 命名如「Allow-Internal-to-Squid-HTTP-HTTPS」,启用规则
验证代理服务是否运行在透明模式
仅转发不够,Squid 必须识别并保留原始 Host 和 Client IP,否则就退化为普通代理:
- 检查 squid.conf 中有无以下关键行:
http_port 3128 transparent
https_port 3129 intercept ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB - 确认 Squid 启动时未报错 “transparent mode not supported on this platform”(Windows 支持 transparent,但不支持 intercept for HTTPS,需搭配 SSL Bump 证书信任)
- 客户端无需设置任何代理,直接访问 http://example.com 即应出现在 Squid access.log 中,且日志里显示的是真实客户端 IP(非 127.0.0.1)










