SUNT的随手记

闲的时候,做一些对自己有益的事

0%

wsl2使用桥接模式

最近想熟悉一下 Linux ,大学安装的 VMware 使用不了了,正好看到 Windows 下可以安装子系统,也就正好试试 wsl2 ,wsl 启动后,默认 Hyper-v 创建 nat 模式的虚拟交换机,每次开机 IP 都会变,所以想改用桥接模式固定静态 IP ,这样部署服务也好通过 IP 端口直接访问

系统:Ubuntu22.04

1
2
3
4
5
6
7
8
9
10
11
12
13
版本	Windows 11 企业版
版本 22H2
安装日期 ‎2023/‎3/‎31
操作系统版本 22621.1413
体验 Windows Feature Experience Pack 1000.22639.1000.0

WSL 版本: 1.2.5.0
内核版本: 5.15.90.1
WSLg 版本: 1.0.51
MSRDC 版本: 1.2.3770
Direct3D 版本: 1.608.2-61064218
DXCore 版本: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows 版本: 10.0.22621.1413

进入 Windows 用户根目录创建 .wslconfig 文件,并写入以下配置。(注:快捷键 win+R ,输入 %UserProfile% 直接进入你当前用户的根目录)

1
2
3
4
5
[wsl2]
networkingMode=bridged #使用桥接方式启动wsl2
vmSwitch=WSL #桥接使用的虚拟交换机为WSL,这个名随便起,只要跟你稍后建的虚拟交换机名称相同就可以
dhcp=false #关闭wsl2自己的 DHCP 服务帮助程序
ipv6=true #启用ipv6,没有ipv6可以删除

创建上面名称为 WSL 的虚拟交换机,我用终端(管理员)创建,可以使用 Hyper-v 管理工具创建

1
2
3
4
//查看已有的网络适配器,多张网卡的话选一个有网的网卡,比如名称是'以太网 9'
Get-NetAdapter
//使用'以太网 9'创建虚拟交换机
New-VMSwitch 'WSL' -NetAdapterName '以太网 9'

终端运行 WSL 启动安装的 Linux 子系统,修改 sudo vim /etc/wsl.conf 中配置

1
2
3
4
5
6
[boot]
systemd=true
[network]
generateResolvConf = false
[interop]
appendWindowsPath = false

设置静态 IP ,创建网络配置文件 sudo vim /lib/systemd/network/wsl_external.network,设置你自己的静态 IP

1
2
3
4
5
6
7
[Match]
Name=eth0
[Network]
Description=WSL_external
DHCP=false
Address=192.168.0.93/24
Gateway=192.168.0.1

修改一下域名解析服务器 sudo vim /etc/resolv.conf

1
nameserver 8.8.8.8 #可以使用你本地服务商的域名解析服务器

重启一下网卡和域名解析服务

1
2
3
4
5
sudo systemctl restart systemd-networkd
sudo systemctl enable systemd-networkd
sudo systemctl restart systemd-resolved.service
sudo systemctl enable systemd-resolved.service
exit

终端彻底关闭重启一下 wsl

1
2
3
//查看已安装linux子系统状态
wsl -l -v
wsl --shutdown

一些发现:由于 WSL2 使用同一个网络空间且没有网络隔离,所以你使用 WSL2 同时运行多个分发版的 Linux 子系统,会发现多个子系统的 IP 一样,即使你为每个子系统都设置了静态 IP ,例如你同时运行两个发行版 Debian12 和 Ubuntu22 .04,并分别为两个子系统设置 IPV4 的 IP ,你会发现每个系统都会同时拥有这两个 IP

参考:
设置桥接
创建虚拟交换机
WSL2配置文档
[WSL 2] Multi WSL2 distributions use the same network namespace