WSL2 + OpenClaw 远程控制 Windows 隔离 Chrome 环境搭建与诊断全归档

WSL2 + OpenClaw 远程控制 Windows 隔离 Chrome 环境搭建与诊断全归档

最后更新:2026-06-26
适用环境:Windows 11 + WSL2(Ubuntu 发行版名称:XiaomiBookPro14)、Chrome 149、OpenClaw 2026.6.10
目的:在 WSL2 内的 OpenClaw 智能体通过 CDP 远程操控 Windows 桌面上一个独立、有头可见的 Chrome 窗口,用于浏览器自动化,且不影响用户日常浏览器。


一、最终稳定架构

Windows 隔离 Chrome (独立 user-data-dir)
  监听 0.0.0.0:9222 (含 --remote-allow-origins=*)
       ↑ TCP (跨虚拟交换机)
       │
WSL2 内 socat 转发 (systemd 服务)
  127.0.0.1:19222  →  172.18.80.1:9222
       ↑ CDP (本地回环)
       │
OpenClaw Gateway (local 模式)
  cdpUrl: http://127.0.0.1:19222

设计要点

  • socat 将远程连接转为“本地回环”,绕过 OpenClaw 网关的“禁止连接远程 CDP”安全策略。
  • Windows 虚拟网卡 IP 固定为 172.18.80.1,防止重启后变动。
  • Chrome 使用 --remote-allow-origins=* 放行来自 WSL2(非本机)的调试请求。

二、Windows 主机配置

2.1 固定 WSL 虚拟网卡 IP

  1. 打开“网络和共享中心”→“更改适配器设置”。
  2. 找到 vEthernet (WSL (Hyper-V firewall)),右键 → 属性。
  3. 双击“Internet 协议版本 4 (TCP/IPv4)”,选择“使用下面的 IP 地址”:
    • IP 地址:172.18.80.1
    • 子网掩码:255.255.240.0(请先用 ipconfig 查看当前掩码并保持一致)
    • 默认网关:留空
  4. 确定保存。

2.2 Chrome 启动脚本

将以下内容保存为 openclaw-chrome.bat,每次自动化前双击运行:

"C:\Program Files\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222 --remote-debugging-address=0.0.0.0 --user-data-dir="C:\Users\liang\openclaw\browser-profile" --remote-allow-origins=*

参数说明

  • --remote-debugging-port=9222:开启 CDP 服务端口。
  • --remote-debugging-address=0.0.0.0:监听所有接口(WSL2 才能访问)。
  • --user-data-dir=…:独立的用户数据目录,完全隔离日常浏览器。
  • --remote-allow-origins=*必须,允许来自任何来源的连接;Chrome 149 对有头模式强制拒绝非本机请求,不加此参数会收到 Connection reset

2.3 防火墙规则

以管理员身份在 PowerShell 中执行(若已存在规则则确保“公用”“专用”均勾选):

New-NetFirewallRule -DisplayName "OpenClaw Chrome Debug" -Direction Inbound -Protocol TCP -LocalPort 9222 -Action Allow -Profile Any

三、WSL2 内部配置

3.1 安装 socat

sudo apt update && sudo apt install socat -y

3.2 创建 systemd 转发服务

服务文件 /etc/systemd/system/openclaw-cdp-proxy.service

[Unit]
Description=OpenClaw CDP Proxy (127.0.0.1:19222 -> 172.18.80.1:9222)
After=network.target

[Service]
ExecStart=/usr/bin/socat TCP-LISTEN:19222,fork,reuseaddr TCP:172.18.80.1:9222
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

注意WantedBy 必须为 multi-user.target,否则 WSL2 重启后服务可能不自动启动。

创建并启用:

sudo tee /etc/systemd/system/openclaw-cdp-proxy.service <<'EOF'
[Unit]
Description=OpenClaw CDP Proxy (127.0.0.1:19222 -> 172.18.80.1:9222)
After=network.target

[Service]
ExecStart=/usr/bin/socat TCP-LISTEN:19222,fork,reuseaddr TCP:172.18.80.1:9222
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable --now openclaw-cdp-proxy.service

3.3 验证转发(健康检查)

curl -s http://127.0.0.1:19222/json/version | python3 -m json.tool

看到 Chrome 版本信息即表示链路畅通。之后也可用此命令快速检测全链路。

3.4 常见故障:端口占用

若服务无法启动(Address already in use),杀死残留的 socat 进程:

sudo pkill -9 socat
sudo systemctl restart openclaw-cdp-proxy

四、OpenClaw 配置

# 1. 添加浏览器配置(attachOnly 附着模式,不自行启动浏览器)
openclaw config set browser.profiles.win-chrome \
  '{"cdpUrl":"http://127.0.0.1:19222","attachOnly":true,"color":"#4285F4"}'

# 2. 设置网关模式为 local(解除 browser endpoint blocked by policy)
openclaw config set gateway.mode local

# 3. 重启网关
openclaw gateway restart

验证

openclaw browser --browser-profile win-chrome doctor --deep
openclaw browser --browser-profile win-chrome open https://www.liangliang.org.cn

若看到 opened: … 且 Windows 上 Chrome 跳转,即全部打通。


五、问题溯源对比——踩过的“四重障碍”

整个过程不是单一 Bug,而是层层叠加的安全限制,每解决一层才暴露下一层。

障碍层 错误认知/尝试 实际原因 最终解决方案 关键现象
1. 网络隔离 认为 WSL2 内 127.0.0.1:9222 可直接连 Windows 服务 WSL2 是独立虚拟机,拥有自己的回环地址,与 Windows 的 127.0.0.1 不同 使用 Windows 虚拟交换机 IP 172.18.80.1,Chrome 监听 0.0.0.0 curl 127.0.0.1:9222 → 拒绝连接
2. Chrome 应用层拒绝 以为 --remote-debugging-address=0.0.0.0 就足够 Chrome 149 在有头模式下默认会拒绝非 localhost 来源的 CDP 请求(发送 TCP RST) 启动时加入 --remote-allow-origins=* curl -v 显示 Recv failure: 连接被对方重置,而非超时
3. OpenClaw 安全策略 以为能连上 CDP 端口就万事大吉 OpenClaw 网关有一条策略:禁止连接外部 IP 的浏览器端点browser endpoint blocked by policy 使用 socat172.18.80.1:9222 映射为 127.0.0.1:19222,并设置 gateway.mode local 网关日志提示 blocked by policy
4. 跨系统启动超时 尝试用 openclaw browser start 在 WSL 内直接启动 Chromium WSLg 环境缺失、跨系统启动慢,默认超时失败 改为 Windows 手动启动 Chrome,OpenClaw 使用 attachOnly 模式附着 $DISPLAY 未设置错误;start 命令超时

排错教训

  • 使用 curl -v 观察 TCP 层行为(RST vs 超时)能快速定位问题层级。
  • 现代 Chrome 的 --remote-allow-origins 是必备参数,旧教程可能不提及。
  • 当被“策略”阻挡时,从目标视角(让 OpenClaw 看到 127.0.0.1)解决问题往往比解除限制更简单稳定。

六、日常使用流程与健康检查

  1. Windows:双击 openclaw-chrome.bat,等待独立 Chrome 窗口出现。

  2. WSL2 内:确认转发服务与 Chrome 连通(一行命令):

    curl -s http://127.0.0.1:19222/json/version | python3 -m json.tool
  3. 若网关未运行:openclaw gateway start

  4. 启动 TUI 或通过 API 调用:

    openclaw tui

    然后即可在对话中让智能体操作浏览器,例如:

    “打开我的博客,提取所有文章标题并保存为 todo。”

注意:每次 Windows 重启或注销后,需重新启动 Chrome。socat 服务已设为开机自启,无需手动干预。

七、"一键启动"脚本

  1. WSL2流程启动自检脚本
cat > ~/openclaw-start.sh << 'EOF'
#!/bin/bash
# 检查 socat 转发
if ! curl -s --connect-timeout 2 http://127.0.0.1:19222/json/version > /dev/null 2>&1; then
    echo "[!] socat 转发不通,请确认 Windows 端 Chrome 已启动"
    echo "    提示:双击 openclaw-chrome.bat"
    exit 1
fi
echo "[✓] CDP 转发正常"

# 启动 Gateway
openclaw gateway start 2>/dev/null
sleep 2
openclaw gateway status
echo "[✓] 就绪"
EOF
chmod +x ~/openclaw-start.sh
cat > ~/openclaw-start.sh << 'EOF'
#!/bin/bash
# 检查 socat 转发
if ! curl -s --connect-timeout 2 http://127.0.0.1:19222/json/version > /dev/null 2>&1; then
    echo "[!] socat 转发不通,请确认 Windows 端 Chrome 已启动"
    echo "    提示:双击 openclaw-chrome.bat"
    exit 1
fi
echo "[✓] CDP 转发正常"

# 启动 Gateway
openclaw gateway start 2>/dev/null
sleep 2
openclaw gateway status
echo "[✓] 就绪"
EOF
chmod +x ~/openclaw-start.sh

2. 建议加一个"Chrome 开机自启动"的小技巧——把 openclaw-chrome.bat 的快捷方式放到 Windows 的启动文件夹:

Win+R → shell:startup → 把快捷方式拖进去
Win+R → shell:startup → 把快捷方式拖进去

这样不用每次手动双击。


八、命令速查附录

任务 命令
查看 WSL 内 Windows 可通达地址 ip route show default
检查 socat 转发状态 curl -s http://127.0.0.1:19222/json/version
查看 socat 服务状态 systemctl status openclaw-cdp-proxy
查看 socat 日志 sudo journalctl -u openclaw-cdp-proxy -f
深度检查浏览器连接 openclaw browser --browser-profile win-chrome doctor --deep
打开测试页面 openclaw browser --browser-profile win-chrome open https://example.com
重启 OpenClaw 网关 openclaw gateway restart
查看完整配置 cat ~/.openclaw/openclaw.jsonopenclaw config get(需带路径)
杀掉残留 socat 进程 sudo pkill -9 socat

归档完毕。本方案可直接复用于同类“WSL2 控制宿主机浏览器”场景,亦可作为跨系统浏览器自动化连接问题的通用排查手册。