Ryan Shang

生死看淡,不服就干

0%

WSL2设置静态IP

一、背景

1. 简介

微软的WSL(Windows Subsystem for Linux)是近几年我觉得对开发者最友好的功能之一,已经有了WSL1和WSL2两个不同的版本

WSL1:

用模拟Linux内核API的方式实现一个Linux环境
优点:和Windows宿主系统之间之间网络共享更加无缝,包括共享端口,共享文件系统等
缺点:底层内核并不是原生Linux内核,所以在一些更底层的开发上有区别,并且可能无法随着Linux内核更新而更新

WSL2:

使用Windows自己的Hyper-V虚拟技术虚拟化了一个Linux环境,类似于使用VirtualBox等虚拟机
优点:原生Linux,完全和Linux一致
缺点:和宿主机天然隔离,通过网络访问相互文件,跨文件系统的IO低

2. 个人选择

个人偏向使用WSL2,更加原生的Linux,并且利用虚拟机天然的隔离机制,把开发和娱乐环境分离,互不干扰

3. 现阶段问题

WSL2现阶段使用最大的一个问题是每次重启电脑,会分配新的IP,因为默认使用的是Hyper-V的NAT模式,请求会通过Hyper-V的交换机,由宿主系统转发出去。
因为这个IP会变,想访问WSL2中的服务,就需要每次关注IP的变化,之前是通过github上一个小工具,在每次WSL2启动时,获取WSL2的IP,向Windows宿主机的hosts写入一个域名。但是不够方便,而且随着版本Windows的版本更新,时不时会出现bug。

二、解决方案

通过网上查阅资料,发现可以通过给Hyper-V增加一个交换机让WSL2使用,走桥接模式,设置一个固定的IP,这样就能满足自己的需要了。
原理就相当于,对家里的路由器来说,把WSL2变成和宿主机Windows一个级别的设备,不再走NAT模式。

1. 在Windows宿主机增加Hyper-V交换机

系统: Windows 11 Pro
打开Hyper-V管理器,选择右侧的虚拟交换机管理器,新建虚拟网络交换机,选择外部网络。添加完成如下图:
交换机

2. 在Windows宿主机上增加WSL的config

在当前用户目录(C:\Users\xxx)下增加.wslconfig,内容:

1
2
3
4
[wsl2]
networkingMode=bridged
vmSwitch=Home # 此处的名称和指定的虚拟网络交换机一致
dhcp=false # 禁用DHCP,在WSL2系统中通过设置Linux的静态IP实现获取IP

3. 在WSL2中增加网络相关的配置

系统: Debian
修改下WSL2下/etc/wsl.conf,修改内容:

1
2
3
4
# wsl bridged
[network]
generateResolvConf = false # 禁止启动WSL2时生成/etc/resolv.conf
generateHosts = false # 禁止启动WSL2时修改/etc/hosts

4. 在WSL2中设置静态IP

修改WSL2下的/etc/network/interfaces,修改内容:

1
2
3
4
5
6
7
8
9
10
11
12
# The primary network interface
# 开机自动连接网络
# auto eth0 # 注释掉
# allow-hotplug eth0 # 注释掉
# iface eth0 inet dhcp # 注释掉

# 增加wsl bridged配置,设置静态IP
auto eth0
iface eth0 inet static
address 192.168.3.2 # 设置的静态IP
netmask 255.255.255.0 # 子网掩码
gateway 192.168.3.1 # 路由器的IP

5. 重新启动WSL2

在powershell中输入:

1
wsl --shutdown

再次打开WSL2,使用ip addr命令查看IP地址:

1
2
3
4
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
inet 192.168.3.2/24 brd 192.168.3.255 scope global eth0
valid_lft forever preferred_lft forever

已经成功设置完成。

三、方案不足

设置的IP和网络环境相关,如果更换一个网络环境,例如,从家里到公司,就需要重新配置了。

所以,这个方案更适合台式机这种不怎么移动的场景。