在 Windows 上搭建遠端瀏覽器調試入口

在 Windows 上透過 Chrome 遠端調試端口與端口轉發, 為局域網提供可控的瀏覽器調試入口.

本文說明如何在 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 或零信任隧道, 並保持最小權限和最小暴露面.