あとで消す
Windows PowerShell(管理者)で UDP portproxy を設定
powershellnetsh interface portproxy add v4tov4 `
listenport=5000 listenaddress=0.0.0.0 `
connectport=5000 connectaddress=172.24.112.1 protocol=udp
終わったら
戻す
netsh interface portproxy delete v4tov4 listenport=5000 listenaddress=0.0.0.0 protocol=udp確認
netsh interface portproxy show all
外部サーバ → Windows:5000 → WSL2:5000
Windows ファイアウォールを開ける
powershellNew-NetFirewallRule -DisplayName "WSL UDP 5000" `
-Direction Inbound -Protocol UDP -LocalPort 5000 -Action Allow
または
Windows Defender ファイアウォールを開く
左側の 「詳細設定」 をクリック
左のメニューから 「受信の規則」 を選択
右側の 「新しい規則…」 をクリック
種類は 「ポート」 を選択
UDP を選択
開けたいポート番号(例:5000)を入力
「接続を許可する」
プロファイル(通常はすべて)
名前をつけて完了
WSL2 側で UDP サーバを起動
WSL2 内で:
nc -u -l 5000
外部サーバから送信してテスト
外部 サーバで:
echo "hello" | nc -u <あなたのWindowsのグローバルIP> 5000
外への確認
echo -n "test" | nc -u -w1 resolver1.opendns.com 53 | hexdump -C
あとで
🛠️ 1. WSL2 → Windows の ping を通す方法
Windows 側で ICMP を許可する必要があります。方法 A:PowerShell(管理者)で許可
powershell
netsh advfirewall firewall add rule name="ICMPv4 Echo Allow" protocol=icmpv4:8,any dir=in action=allow
方法 B:GUI で許可
Windows Defender ファイアウォール
「詳細設定」
「受信の規則」
「ファイルとプリンターの共有(エコー要求 - ICMPv4)」を有効化
これで WSL2 → Windows の ping が通るようになります。
2. WSL2 からインターネットに出られない場合のチェック
WSL2 は Windows の NAT を経由してインターネットに出ます。
以下を順に確認すると原因が切り分けられます。🔍 (1) Windows 側の vEthernet (WSL) が正常か確認
PowerShell で確認:powershell
Get-NetAdapter
vEthernet (WSL) が Up になっているか確認。🔍 (2) WSL2 内の IP とゲートウェイ確認
Ubuntu で:bash
ip addr
ip route
通常はこうなります:WSL2 の IP: 172.27.x.x
デフォルトゲートウェイ: 172.27.0.1(Windows 側)
🔍 (3) DNS が壊れていないか確認
WSL2 の DNS が壊れるとネットに出られません。DNS のテスト
bash
ping 8.8.8.8
これが通る → DNS だけ壊れているこれも通らない → NAT/ルーティングの問題
DNS 修復(よく効く)
/etc/wsl.conf を作成:bash
sudo nano /etc/wsl.conf
内容:コード
[network]
generateResolvConf = false
次に /etc/resolv.conf を作成:bash
sudo rm /etc/resolv.conf
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
WSL を再起動:powershell
wsl --shutdown
🛠️ 3. Windows 側の NAT が壊れている場合の修復
Windows の WSL ネットワークをリセット:powershell
netsh winsock reset
netsh int ip reset all
再起動後:powershell
wsl --shutdown
ステップ1:Windows 側の WSL 仮想 NIC を再生成する
まず、Windows 側の仮想 NIC が壊れている可能性が高い。PowerShell(管理者)で次を実行:
powershell
Get-NetAdapter | Where-Object {$_.Name -like "*WSL*"}
もし vEthernet (WSL) が出てこない、または 状態が Down なら壊れている。👉 修復コマンド
powershell
wsl --shutdown
netsh interface set interface "vEthernet (WSL)" admin=disable
netsh interface set interface "vEthernet (WSL)" admin=enable
もし「インターフェイスが存在しません」と出たら、次のステップへ。
ステップ2:WSL のネットワークを完全リセット
PowerShell(管理者)で:powershell
wsl --shutdown
netsh winsock reset
netsh int ip reset all
その後 Windows を再起動。再起動後に:
powershell
wsl --shutdown
wsl
Ubuntu を起動して、次を確認:bash
ip route
通常はこう出る:コード
default via 172.27.0.1 dev eth0
これが出ない場合、次のステップへ。
ステップ3:WSL のネットワーク構成ファイルを強制再生成
WSL のネットワーク設定が壊れている可能性がある。PowerShell(管理者)で:
powershell
wsl --shutdown
del C:\Users\%USERNAME%\.wslconfig
(もし .wslconfig が存在しないならスキップ)次に Windows の WSL ネットワークを再生成:
powershell
Remove-Item -Recurse -Force "C:\Users\%USERNAME%\AppData\Local\Packages\MicrosoftCorporationII.WindowsSubsystemForLinux_*"
※ これは WSL のネットワークキャッシュを削除するだけで、Ubuntu 本体は消えない。その後:
powershell
wsl --shutdown
wsl
🔍 1. Hyper-V の仮想スイッチが存在するか確認
PowerShell(管理者)で:powershell
Get-VMSwitch
WSL という名前のスイッチが無いまたは存在するけど状態が怪しい(Type が Internal 以外)
→ 企業ポリシーでブロックされている可能性が高い。
🔍 2. NAT が存在するか確認
powershell
Get-NetNat
通常は WSL という NAT が自動生成される。これが無い
またはエラーが出る
→ NAT が作れない=WSL2 が外に出られない。
🔍 3. vEthernet (WSL) の状態確認
powershell
Get-NetAdapter | Where-Object {$_.Name -like "*WSL*"}
状態が Up でないそもそも存在しない
→ 仮想 NIC が作れない状態。