1. 程式人生 > 其它 >Windows中wsl2為虛擬Linux子系統設定固定IP的方法

Windows中wsl2為虛擬Linux子系統設定固定IP的方法

​ 在使用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.