文章目录

WSL2每次启动后的IP都不固定,如果需要一个固定的IP,需要做一些设置。

一、创建批处理文件设置静态IP

可以创建一个批处理文件,比如:E:\Ubuntu\ubuntu_static_ip.bat,内容如下:

1@echo off
2%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
3wsl -d Ubuntu-20.04 -u root ip addr del $(ip addr show eth0 ^| grep 'inet\b' ^| awk '{print $2}' ^| head -n 1) dev eth0
4wsl -d Ubuntu-20.04 -u root ip addr add 192.168.8.2/24 broadcast 192.168.8.255 dev eth0
5wsl -d Ubuntu-20.04 -u root ip route add 0.0.0.0/0 via 192.168.8.1 dev eth0
6::wsl -d Ubuntu-20.04 -u root echo nameserver 192.168.8.1 ^> /etc/resolv.conf
7powershell -c "Get-NetAdapter 'vEthernet (WSL)' | Get-NetIPAddress | Remove-NetIPAddress -Confirm:$False; New-NetIPAddress -IPAddress 192.168.8.1 -PrefixLength 24 -InterfaceAlias 'vEthernet (WSL)'; Get-NetNat | ? Name -Eq WSLNat | Remove-NetNat -Confirm:$False; New-NetNat -Name WSLNat -InternalIPInterfaceAddressPrefix 192.168.8.0/24;"
8exit

这里的固定IP为192.168.8.2,网关为:192.168.8.1,然后在Ubuntu系统中编辑~/.bashrc,添加如下内容:

1if [ `hostname -I` != 192.168.8.2 ]; then
2     cmd.exe /c "E:\Ubuntu\ubuntu_static_ip.bat" 1>nul
3fi

这样就可以在启动wsl2的时候自动设置IP地址为192.168.8.2了。

二、设置DNS

但是无法使用DNS上网,原因是/etc/resolv.conf中的nameserver不是192.168.8.1,从内容中可以看到有一句:

1::wsl -d Ubuntu-20.04 -u root echo nameserver 192.168.8.1 ^> /etc/resolv.conf

这句是注释了的,是因为打开也根本不起作用。/etc/resolv.conf只是一个软链接,实际文件是/run/resolvconf/resolv.conf,可以打开看到内容中有一句话:

1# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
2# [network]
3# generateResolvConf = false
4nameserver 172.30.208.1

即此文件是WSL自动生成的,如果想不自动生成,可以建立一个文件:/etc/wsl.conf,内容为:

1[network]
2generateResolvConf = false

则不会自动生成/run/resolvconf/resolv.conf。 由于原来的/etc/resolv.conf是一个软链接,需要删除它,重新创建一个真正的文件

1sudo rm /etc/resolv.conf

然后新建一个/etc/resolv.conf,内容如下:

1nameserver 192.168.8.1

即设定nameserver为我们指定的的网关。这样就可以正常上网了:

1$ ping 163.com
2PING 163.com (123.58.180.8) 56(84) bytes of data.
364 bytes from 123.58.180.8 (123.58.180.8): icmp_seq=1 ttl=53 time=38.1 ms
464 bytes from 123.58.180.8 (123.58.180.8): icmp_seq=2 ttl=53 time=37.9 ms
564 bytes from 123.58.180.8 (123.58.180.8): icmp_seq=3 ttl=53 time=37.6 ms
664 bytes from 123.58.180.8 (123.58.180.8): icmp_seq=4 ttl=53 time=43.6 ms
764 bytes from 123.58.180.8 (123.58.180.8): icmp_seq=5 ttl=53 time=37.4 ms

btw:如果想在启动的时候顺便启动ssh服务,可以在前面的批处理文件中添加一句指令:

1wsl -d Ubuntu-20.04 -u root service ssh start