Windows에서 원격 브라우저 디버깅 엔트리 포인트 설정하기

Windows에서 Chrome 원격 디버깅 포트와 포트 포워딩을 통해 LAN에 제어 가능한 브라우저 디버깅 엔트리 포인트를 제공하는 방법.

본 문서는 Windows 호스트에서 Chrome을 실행하고 CDP를 통해 원격 디버깅 엔트리 포인트를 제공하는 방법을 설명합니다. 이를 통해 LAN 내 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로 매핑하면, LAN 클라이언트가 접근할 수 있습니다.

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이나 제로 트러스트 터널을 우선 고려하고, 최소 권한과 최소 노출 면을 유지하십시오.