Windows中wsl2為虛擬Linux子系統設定固定IP的方法
阿新 • • 發佈:2022-12-11
在使用Windows的wsl時,經常需要Linux子系統和Windows宿主機之間通訊。但wsl預設情況下,Linux子系統和Windows vEthernet虛擬介面卡的IP每次啟動後都不一樣。給很多應用帶來不便。在百度上很多解決方法,經過之次嘗試,認為下面的方法簡單有效。
我解決此問題時的系統環境:
宿主機:Windows 10 專業版 22H2 作業系統內部版本:19045.2311
子系統:Ubuntu 22.04.1 LTS Linux version 5.10.16.3-microsoft-standard-WSL2 (oe-user@oe-host)
1.設定Windows vEthernet為固定IP
2. 確認Linux子系統的名稱
開啟Windows命令提示符檢視Linux子系統名稱
C:\Users\zhangcheng>wsl -l
適用於 Linux 的 Windows 子系統分發版:
Ubuntu (預設) #記住這個名稱,腳本里要用
docker-desktop-data
docker-desktop
3. 編寫一個bat指令碼並執行
開啟記事本,把下面這段程式碼按照自己的執行環境配置。
@echo on REM 先關閉虛擬子系統 wsl --shutdown REM 把這裡理解為一個開機啟動指令碼就行 #以下的Ubuntu為第2步查到的Linux子系統名稱 #IP地址根據自己的需要配置 wsl -d Ubuntu -u root ip addr del $(ip addr show eth0 ^| grep 'inet\b' ^| awk '{print $2}' ^| head -n 1) dev eth0 wsl -d Ubuntu -u root ip addr add 172.30.16.2/24 broadcast 172.30.16.255 dev eth0 wsl -d Ubuntu -u root ip route add 0.0.0.0/0 via 172.30.16.1 dev eth0 powershell -c "Get-NetAdapter 'vEthernet (WSL)' | Get-NetIPAddress | Remove-NetIPAddress -Confirm:$False; New-NetIPAddress -IPAddress 172.30.16.1 -PrefixLength 24 -InterfaceAlias 'vEthernet (WSL)'; Get-NetNat | ? Name -Eq WSLNat | Remove-NetNat -Confirm:$False; New-NetNat -Name WSLNat -InternalIPInterfaceAddressPrefix 172.30.16.0/24;" REM 啟動對應Linux系統,我這裡是使用windows terminal wt -p Ubuntu
儲存成.bat檔案後雙擊執行。再次開啟Ubuntu就是腳本里指定的IP了。
Done.