إعداد نقطة دخول للتصحيح عن بُعد للمتصفح على Windows

إعداد نقطة دخول للتصحيح عن بُعد للمتصفح على Windows عبر Chrome Remote Debugging Port مع إعادة توجيه المنفذ، لتمكين العميل Linux أو MCP من الاتصال من الشبكة المحلية.

本文说明如何在 Windows 主机上运行 Chrome 并通过 CDP 提供远程调试入口, 供局域网内的 Linux 客户端或 MCP 连接使用. 方案核心是 Chrome 仅监听 127.0.0.1, 由 portproxy 映射到 LAN 地址, 再通过防火墙限制远端来源.

拓扑与流向

下图展示了端口在 Windows 主机内部的流向, 以及客户端如何通过 LAN 地址访问.

flowchart TB
    subgraph Windows
        A[Chrome DevTools 127.0.0.1:9222] --> B[portproxy 192.168.31.2:9222]
        B --> C[Windows Firewall]
    end
    D[Linux Client] -->|CDP| B

    classDef local fill:#2c3e50,stroke:#ecf0f1,stroke-width:2px,color:#ecf0f1
    classDef proxy fill:#3498db,stroke:#2980b9,stroke-width:2px,color:#fff
    classDef firewall fill:#f39c12,stroke:#d35400,stroke-width:2px,color:#fff
    classDef client fill:#27ae60,stroke:#229954,stroke-width:2px,color:#fff

    class A local
    class B proxy
    class C firewall
    class D client

启动 Chrome

建议使用独立的用户目录, 并显式指定 remote debugging 地址, 这样 Chrome 只对本机开放调试端口. 下面示例以 9222 端口为例, 请根据实际情况调整.

& "C:\Program Files\Google\Chrome\Application\chrome.exe" `
  --remote-debugging-address=127.0.0.1 `
  --remote-debugging-port=9222 `
  --user-data-dir="$env:TEMP\chrome-profile-mcp"

配置端口转发

使用 portproxy 将本机 127.0.0.1:9222 映射到 Windows 的 LAN 地址 192.168.31.2:9222, 这样局域网客户端才能访问.

netsh interface portproxy add v4tov4 `
  listenaddress=192.168.31.2 listenport=9222 `
  connectaddress=127.0.0.1 connectport=9222 `
  protocol=tcp

需要确认规则已经生效, 可以查看当前的转发配置.

netsh interface portproxy show v4tov4

设置防火墙

为了限制暴露面, 建议只允许指定的客户端 IP 访问该端口. 下面示例允许来自 192.168.31.162 的连接.

New-NetFirewallRule `
  -DisplayName "Allow CDP 9222 from Linux" `
  -Direction Inbound `
  -Action Allow `
  -Protocol TCP `
  -LocalPort 9222 `
  -RemoteAddress 192.168.31.162

验证连接

当本机和 LAN 地址都能返回 /json/version 时, 说明链路可用. 这一步也能帮助快速定位是 Chrome, portproxy 还是防火墙的问题.

curl http://127.0.0.1:9222/json/version
curl http://192.168.31.2:9222/json/version

下图展示了验证请求在各组件之间的转发过程.

sequenceDiagram
    participant Client as Client
    participant Proxy as Portproxy
    participant Chrome as Chrome
    Client->>Proxy: HTTP /json/version
    Proxy->>Chrome: 127.0.0.1:9222
    Chrome-->>Proxy: JSON
    Proxy-->>Client: JSON

接入 MCP

完成端口暴露后, MCP 只需要指向 LAN 地址即可. 以下示例直接使用 chrome-devtools-mcp 连接到 192.168.31.2:9222.

{
  "chrome-devtools": {
    "command": "npx",
    "args": [
      "-y",
      "chrome-devtools-mcp@latest",
      "--browser-url=http://192.168.31.2:9222"
    ]
  }
}

清理与恢复

portproxy 规则是持久的, 如果不再使用, 应及时删除映射并移除防火墙规则, 以避免意外暴露调试端口.

netsh interface portproxy delete v4tov4 listenaddress=192.168.31.2 listenport=9222 protocol=tcp

如果你更换端口或 IP, 需要同时调整 Chrome 参数, portproxy 规则, 防火墙规则, 以及 MCP 配置, 否则会出现连接不一致.

远程调试端口拥有完全的浏览器控制能力, 不应暴露到公网, 也不建议在生产环境中长期开启. 如果必须跨网络使用, 请优先考虑 VPN 或零信任隧道, 并保持最小权限和最小暴露面.