OpenClawにブラウザ操作させるための設定まとめ(WSL + Windows Chrome + portproxy)
構成: Windows(Chrome)+ WSL(OpenClaw Gateway / Docker)
① Chromeを--remote-debugging-port=9222付きで起動
② Windowsでnetshによるportproxyを作成(9223→9222中継)
③ vEthernet (WSL)のIPアドレスを確認(例:172.27.96.1)
④ Dockerコンテナ内でopenclaw browser create-profile --name remote --cdp-url http://172.27.96.1:9223を実行
⑤ Discordから「remote プロファイルを使って〇〇して」と明示して指示
以下、「AIに調べ物をさせたい」という動機から始まった、ブラウザ設定の試行錯誤の全記録。
なぜブラウザ操作を試みたのか
OpenClawをDiscordと連携させ、AIエージェントとチャットで会話できるようになった。次に試したかったのが「AIに調べ物をさせる」こと——つまり、ウェブを自律的に検索・参照させることだ。
OpenClawはブラウザ操作機能を持っているが、それを使うにはブラウザとの接続設定が必要だった。何も設定しない状態では、エージェントはブラウザを見ることができない。
最初の想定:Brave Browserは有料の壁があった
コミュニティの情報を漁ると、OpenClawのブラウザ操作にBrave Browserを使う方法が自然と目に入った。しかし調べていくうちに、AI関連の連携機能には有料のサブスクリプションが絡んでくる可能性があると判明した。
毎月のAPIコストがかかるOpenClawの運用に、さらにブラウザのコストを乗せるのは現実的でない。そこで無償の方法を探すことにした。
現行の公式推奨:Browser Relay拡張ではなく「remote CDPプロファイル」
ChatGPTに詳細を確認しながら設定を進めた結果、重要な前提が判明した。
OpenClawのブラウザ接続方式は最近アップデートされており、旧来の「Browser Relay拡張」は現行の主流ではなくなっている。openclaw doctorを実行すると、旧来の拡張設定はexisting-sessionに正規化されると明記されているほどだ。
さらに、今回の構成——WSLでOpenClaw(Docker)、WindowsでChrome——という「split-host」構成では、userやexisting-sessionではなく、remote CDPプロファイルを使うのが公式の筋ということが分かった。
設定手順:全9ステップの試行錯誤
Step 1. ChromeをCDPポート付きで起動する
Windows側のPowerShellをAdmin権限で開き、まずChromeを完全終了してからフラグ付きで起動した。
# Chromeをすべて終了
taskkill /F /IM chrome.exe
# CDPポート+専用プロファイルで起動(普段使いChromeと分離するため--user-data-dirも指定)
& "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222 --user-data-dir="C:\temp\chrome-openclaw"
起動後、Windows側のブラウザでhttp://127.0.0.1:9222/json/versionを開くとJSONが返ってきた。これでChrome側のCDP公開は成功。
{
"Browser": "Chrome/146.0.7680.80",
"Protocol-Version": "1.3",
"webSocketDebuggerUrl": "ws://127.0.0.1:9222/devtools/browser/..."
}
Step 2. 最初のハマりポイント:WSL側からは届かない
「Windowsで見えたのだからWSLからも見えるだろう」——この思い込みが最初の罠だった。
# WSL側からWindows側IPへのcurlを試みる
cat /etc/resolv.conf
# → nameserver 10.255.255.254
curl http://10.255.255.254:9222/json/version
# → curl: (7) Failed to connect to 10.255.255.254 port 9222 after 0 ms: Connection refused
Windows側でnetstatを確認すると、こうなっていた。
TCP 127.0.0.1:9222 0.0.0.0:0 LISTENING 26008
9222ポートはWindowsのlocalhost(127.0.0.1)にしか開いていない。つまりWindows自身からは見えるが、WSLからは届かない状態だった。
⚠️ ハマりポイント①:127.0.0.1:9222が見えてもWSLから届くとは限らない
--remote-debugging-address=0.0.0.0を起動オプションに追加しても、環境によっては外向きbindにならないことがある。Chrome起動オプションだけで解決しようとすると詰まる。
Step 3. portproxyで橋渡しを作る
方針を変え、Windows側で「橋渡し(ポートフォワード)」を作ることにした。netshコマンドで、外から届く9223ポートを内部の127.0.0.1:9222に転送する設定だ。
# 管理者PowerShellで実行
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=9223 connectaddress=127.0.0.1 connectport=9222
# 確認
netstat -ano | findstr 9223
# → TCP 0.0.0.0:9223 0.0.0.0:0 LISTENING 4828
0.0.0.0:9223 LISTENINGが出た。外向きに受け口ができた。
Step 4. Windowsファイアウォールで9223ポートを許可
New-NetFirewallRule -DisplayName "OpenClaw Chrome CDP 9223" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 9223
Step 5. 二つ目のハマりポイント:resolv.confのIPでは届かない
ファイアウォール設定後にWSLから試みたが、まだ届かなかった。
curl http://10.255.255.254:9223/json/version
# → curl: (7) Failed to connect to 10.255.255.254 port 9223 after 0 ms: Connection refused
さらにWindows PowerShellから自分自身でcurl http://10.255.255.254:9223を試しても届かなかった。つまり/etc/resolv.confのnameserverがそのまま今回の接続先IPになるとは限らないことが判明した。
⚠️ ハマりポイント②:resolv.confのIPをそのまま信じてはいけない
WSLのネットワーク構成によっては、resolv.confのnameserverとvEthernet (WSL)のIPが異なることがある。
Step 6. 正解は vEthernet (WSL) のIPアドレスだった
Windows PowerShellでipconfigを実行すると、WSL用の仮想NICのIPが見つかった。
イーサネット アダプター vEthernet (WSL (Hyper-V firewall)):
IPv4 アドレス . . . . . . . . . . . .: 172.27.96.1
このIPでcurlを試すと——
# Windows PowerShell側
curl.exe http://172.27.96.1:9223/json/version
# → StatusCode: 200 "Browser": "Chrome/146.0.7680.80"
# WSL側
curl http://172.27.96.1:9223/json/version
# → {"Browser": "Chrome/146.0.7680.80", "Protocol-Version": "1.3", ...}
WSLからWindowsのChromeへの経路が開通した。使うべきエンドポイントはhttp://172.27.96.1:9223だ。
Step 7. 三つ目のハマりポイント:WSLから直接openclawコマンドは打てない
いよいよOpenClawへのプロファイル登録を試みたが——
openclaw browser create-profile --name remote --cdp-url http://172.27.96.1:9223
# → openclaw: command not found
今回の環境はOpenClawをDockerコンテナで動かしているため、WSLのホスト側にはopenclawコマンドが存在しない。コンテナの中で打つ必要があった。
docker exec -it openclaw-openclaw-gateway-1 sh
Step 8. コンテナ内でremote プロファイルを作成
$ openclaw browser create-profile --name remote --cdp-url http://172.27.96.1:9223
🦞 Created profile "remote"
cdpUrl: http://172.27.96.1:9223
color: #0066CC
続けて状態を確認。
$ openclaw browser profiles
◇
remote: running (3 tabs) [remote]
cdpUrl: http://172.27.96.1:9223, color: #0066CC
openclaw: stopped
port: 18800, color: #FF4500
chrome: running (0 tabs) [default]
port: 18792, color: #00AA00
remote: running (3 tabs)——OpenClawがWindowsのChromeに接続し、3つのタブを認識できている!ここでブラウザ接続は完成だ。
Step 9. Discordから使わせる:最後の落とし穴
Discordで「ブラウザの設定をしたけどどう?」と確認すると、意外な返答が来た。
いま確認した。まだ接続できてない状態です(tabs: 0)。
たぶん最後の1ステップだけ未実施👇
Chrome で OpenClaw Browser Relay の拡張アイコンをクリック
バッジが ON になるのを確認
CLIではremote: running (3 tabs)なのに、なぜ「未接続」と言うのか。
原因は、Discordから指示するとき「プロファイル名を明示しないと、デフォルトプロファイルを見にいく」という仕様にあった。Discordから「ブラウザを見て」とだけ言うと、remoteではなくopenclawやchromeという別のプロファイルを参照してしまうのだ。
そこで明示的に伝えた。
Relay拡張は使っていません。WSL2 + Windows Chromeのremote CDPで接続しています。
browser profileはremoteです。remote プロファイルを使って、現在のタブ一覧を確認してください。
AIの返答:
確認できた。remote プロファイルで接続OK。
いま見えてるタブ一覧はこれです:
・Omnibox Popup
・新しいタブ
・Example Domain (https://example.com/)
Discord → OpenClaw → remote profile → Windows Chrome の接続が完全に通った。
今回の接続構成の全体像
Discord(スマホ/PC)
↓
OpenClaw(WSL / Docker コンテナ)
↓ browser profile "remote"

http://172.27.96.1:9223
↓ Windows portproxy(9223→9222中継)

http://127.0.0.1:9222
↓
Chrome(Windows側 / 専用プロファイル)
ハマりポイント総まとめ
実際にブラウザ操作させてみて分かった限界
接続に成功した後、さっそくAIに旅行サイトで空室を調べさせてみた。「3/28 伊豆で露天風呂付き客室、夕朝食付きで空きを探して」という依頼だ。
候補の宿を複数抽出してくれたが、日付をカレンダーで絞り込む部分が正確に動かなかった。自身も「カレンダー操作、いまの自動操作だと取りこぼしてる」と認めていた。
ブラウザ操作AIの得意・不得意はこんな感じだ。
つまり、URL直打ちで済む単純作業ならブラウザ操作の意味は薄い。「検索結果を見て、どれを選ぶか判断する」「一覧から条件を絞る」「複数ページを渡って比較する」——そういった「Webを読んで判断するプロセス全体」を代行させるときにこそ、価値が出る。
まとめ
OpenClawにブラウザ操作をさせるために、無償でできる方法としてWindowsのportproxyを使ったCDP中継という方法にたどり着いた。
設定そのものは難しくないのだが、「ポートが開いているのにWSLから届かない」「resolv.confのIPが使えない」「Dockerコンテナの中からコマンドを打つ必要がある」など、WSL + Docker + Windows Chrome という組み合わせ特有のハマりが多かった。
同じ構成で詰まっている人の参考になれば幸いだ。
※2026年3月時点。OpenClaw 2026.3.2 (unknown) / Windows 11 + WSL2 + Docker環境で検証。Chrome 146.0.7680.80。vEthernet (WSL)のIPアドレスは環境によって異なる。

コメント