WSLから特定IPへのルーティング設定マニュアル

概要

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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です