概要
WSL2環境でDockerブリッジネットワーク(172.18.0.0/16)と競合する外部サーバー(例:172.18.17.100)への通信を確立する方法。
問題の状況
- WindowsからはpingできるサーバーにWSLからpingできない
- WSL内にDockerブリッジ(172.18.0.0/16)があり、同じサブネット範囲の外部サーバーへのパケットが誤ってDockerブリッジ経由でルーティングされる
解決方法:systemdサービスによる恒久的なルート設定
1. systemdサービスファイルの作成
sudo nano /etc/systemd/system/setup-route.service
以下の内容を記述:
[Unit]
Description=Setup route to 172.18.17.100
After=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
ExecStart=/usr/sbin/ip route add 172.18.17.100/32 via 192.168.101.1 dev eth2
RemainAfterExit=yes
StandardOutput=journal
[Install]
WantedBy=multi-user.target
パラメータの説明:
172.18.17.100/32: 対象サーバーのIP(/32は単一ホストを意味)192.168.101.1: Windowsホストのゲートウェイ(ip route show | grep defaultで確認可能)dev eth2: 使用するネットワークインターフェース(ip addr showで確認可能)
2. サービスの有効化と起動
# systemdに新しいサービスを認識させる
sudo systemctl daemon-reload
# WSL起動時に自動実行されるよう設定
sudo systemctl enable setup-route.service
# 即座にサービスを開始(今すぐルートを追加)
sudo systemctl start setup-route.service
3. 動作確認
# サービスの状態を確認
sudo systemctl status setup-route.service
# ルートが追加されたか確認
ip route show | grep 172.18.17.100
# 通信テスト
ping -c 4 172.18.17.100
成功すると以下のような出力が得られます:
172.18.17.100 via 192.168.101.1 dev eth2
4. WSL再起動後の確認
PowerShellで:
wsl --shutdown
WSLを再起動後、自動的にルートが設定されていることを確認:
ip route show | grep 172.18.17.100
ping -c 4 172.18.17.100
トラブルシューティング
サービスが失敗する場合
# 詳細なログを確認
sudo journalctl -u setup-route.service -n 50
# サービスを再起動
sudo systemctl restart setup-route.service
ネットワークインターフェース名やゲートウェイIPの確認
# 現在のネットワーク構成を確認
ip addr show
# デフォルトゲートウェイを確認
ip route show | grep default
複数のサーバーを追加する場合
サービスファイルのExecStart行を複数記述:
[Service]
Type=oneshot
ExecStart=/usr/sbin/ip route add 172.18.17.100/32 via 192.168.101.1 dev eth2
ExecStart=/usr/sbin/ip route add 172.18.17.101/32 via 192.168.101.1 dev eth2
ExecStart=/usr/sbin/ip route add 172.18.17.102/32 via 192.168.101.1 dev eth2
RemainAfterExit=yes
StandardOutput=journal
設定変更後は必ず:
sudo systemctl daemon-reload
sudo systemctl restart setup-route.service
参考:一時的なルート追加(再起動で消える)
テスト用に一時的にルートを追加する場合:
sudo ip route add 172.18.17.100/32 via 192.168.101.1 dev eth2
削除する場合:
sudo ip route del 172.18.17.100/32
注意事項
- この設定はWSL2環境に特有の問題に対する対処法です
- ネットワーク構成が変わった場合(ゲートウェイIPやインターフェース名の変更)、サービスファイルの更新が必要です
- Windows側のネットワーク設定やファイアウォールも適切に設定されている必要があります
No responses yet