Настройка удаленного интерфейса отладки браузера в Windows
Categories:
В этой статье описывается, как запустить Chrome на Windows и предоставить удаленный интерфейс отладки через CDP для подключения клиентов в локальной сети или MCP. Основная идея решения: Chrome слушает только 127.0.0.1, portproxy перенаправляет его на LAN-адрес, а доступ ограничивается через брандмауэр.
Топология и направление трафика
На схеме ниже показано направление трафика портов внутри хоста Windows и как клиенты в локальной сети подключаются.
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
Рекомендуется использовать отдельный каталог профиля и явно указать адрес удаленной отладки, чтобы 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 на LAN-адрес Windows 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 или туннели с нулевым доверием, соблюдая принцип наименьших привилегий и минимальной поверхности атаки.