最新版WSL启用Systemd和配置固定网络[WSL2.04]
WSL的安装最新版本:
wsl --update --pre-release
可以让WSL更新到2.0以上
现在最新已到2.05
启用systemd
WSL2.0已支持Systemd,通过在子系统中配置wsl.conf来启用
-
子系统中配置启用systemd脚本
vi /etc/wsl.conf 配置内容如下: [boot] systemd=true [network] generateResolvConf=false
-
配置后重启重新进入子系统使配置生效
wsl --shutdown
wsl -d CentOS8
配置固定IP
WSL的网络模式默认为NAT模式,以下内容仅是NAT模式下的固定IP配置,mirrored(镜像网络模式)下目前未研究出来,有经验的童学可以告知下
-
wsl的版本
>wsl --version WSL 版本: 2.0.4.0 内核版本: 5.15.123.1-1 WSLg 版本: 1.0.58 MSRDC 版本: 1.2.4485 Direct3D 版本: 1.608.2-61064218 DXCore 版本: 10.0.25880.1000-230602-1350.main Windows 版本: 10.0.22621.2428
-
设置子系统添加固定IP地址
- 先进入子系统查看WSL NAT网络模式下默认初始的网络接口和IP网段
C:\Users\Administrator>wsl -d CentOS8 [root@VPC-CentOS8 Administrator]# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.31.97.175 netmask 255.255.240.0 broadcast 172.31.111.255 inet6 fe80::215:5dff:fe83:5152 prefixlen 64 scopeid 0x20<link> ether 00:15:5d:83:51:52 txqueuelen 1000 (Ethernet) RX packets 66 bytes 7174 (7.0 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 12 bytes 920 (920.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 4 bytes 538 (538.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 4 bytes 538 (538.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
WSL默认NAT网络模式下,子系统启用的网络接口是eth0,IP和网段如下:
inet 172.31.97.175 netmask 255.255.240.0 broadcast 172.31.111.255
- 查看windows的ipconfig
C:\Users\Administrator>ipconfig
Windows IP 配置
无线局域网适配器 WLAN:
媒体状态 . . . . . . . . . . . . : 媒体已断开连接
连接特定的 DNS 后缀 . . . . . . . :
以太网适配器 本地连接-USB:
连接特定的 DNS 后缀 . . . . . . . :
本地链接 IPv6 地址. . . . . . . . : fe80::c551:735c:60f4:d8d8%7
IPv4 地址 . . . . . . . . . . . . : 10.132.110.197
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . : 10.132.110.1
以太网适配器 vEthernet (Default Switch):
连接特定的 DNS 后缀 . . . . . . . :
本地链接 IPv6 地址. . . . . . . . : fe80::5978:de47:9ab4:16c5%13
IPv4 地址 . . . . . . . . . . . . : 172.29.16.1
子网掩码 . . . . . . . . . . . . : 255.255.240.0
默认网关. . . . . . . . . . . . . :
以太网适配器 vEthernet (WSL (Hyper-V firewall)):
连接特定的 DNS 后缀 . . . . . . . :
本地链接 IPv6 地址. . . . . . . . : fe80::e194:e598:ee70:8b49%32
IPv4 地址 . . . . . . . . . . . . : 172.31.96.1
子网掩码 . . . . . . . . . . . . : 255.255.240.0
默认网关. . . . . . . . . . . . . :
可以看到windows下WSL初始了一个和子系统同网段的一个网络接口,
一般是以vEthernet (WSL开头,我以前的WSL版本是1.2.x时,它的名称是vEthernet (WSL),我升级到2.0.4了,现在显示是vEthernet (WSL (Hyper-V firewall))
- 给子系统添加固定ip
一般WSL初始的子系统ip虽然说是随机的,但我观察一般也没什么变化,为了以防万一,我们给添加一个固定IP:
wsl -d <子系统版本名> -u root ip addr add <固定IP>/<掩码> [broadcast <广播地址>] dev eth0 label eth0:1
示例:
-
可以和现有ip同网段
wsl -d CentOS8 -u root ip addr add 172.31.97.197/20 broadcast 172.31.111.255 dev eth0 label eth0:1
-
也可以自定义新的网段
wsl -d CentOS8 -u root ip addr add 172.20.197.101/20 broadcast 172.20.197.255 dev eth0 label eth0:1
自定义新的网段的话,windows下对应的vEthernet (WSL)网络接口也要添加一个该网段的ip地址:
netsh interface ip add address "vEthernet (WSL (Hyper-V firewall))" 172.20.197.199 255.255.240.0
示例设置固定IP的批处理脚本
@echo off
chcp 65001
echo '初始CentOS8 IP'
wsl -d CentOS8 -u root ip addr | findstr "172.20.197.101" > nul
if !errorlevel! equ 0 (
echo wsl ip has set,is:172.20.197.101
) else (
wsl -d CentOS8 -u root ip addr add 172.20.197.101/20 broadcast 172.20.197.255 dev eth0 label eth0:1
echo set wsl ip success: 172.20.197.101
)
ipconfig | findstr "172.20.197.199" > nul
if !errorlevel! equ 0 (
echo windows ip has set,is:172.20.197.102
) else (
netsh interface ip add address "vEthernet (WSL (Hyper-V firewall))" 172.20.197.199 255.255.240.0
echo set windows ip success: 172.20.197.199
)
附windows添加删除网卡IP命令
-
网卡添加IP
netsh interface ip add address “网卡名称” IP 掩码 [网关]
netsh interface ip add address "vEthernet (WSL (Hyper-V firewall))" 172.20.197.199 255.255.240.0
-
删除网卡IP
netsh interface ip delete address “网卡名称” IP 掩码 [网关]
netsh interface ip delete address "vEthernet (WSL (Hyper-V firewall))" 172.20.197.199 255.255.240.0