前言
微软终于解决了宇宙级难题了,一直以来的WSL2每次启动IP都是动态分配的,并且是NAT的网络。当然网上对此也有一些解决方案,编写脚本在启动时修改,但是太麻烦了,这次很完美的解决了这个难题。
检查
wsl --version
# 版本>1.0即可
如果出错,请安装最新版本
配置文件
- .wslconfig
用于在 WSL 2 上运行的所有已安装分发版 全局 配置设置。 - wsl.conf
为 WSL 1 或 WSL 2 上运行的 Linux 发行版配置 每个分发 版的设置。
这里详细配置介绍请移步 高级设置配置
配置WSL2使用外部网络
- 使用Hyper-V创建外部网络(其他方式创建也行)
# 查看网络交换机名称
Get-VMSwitch -SwitchType External
- 配置 .wslconfig
存储在目录中 %UserProfile%,或者 PowerShell 中使用 cd ~ 访问主目录
[wsl2]
networkingMode=bridged
vmSwitch=bridge # 上图中的Name值
ipv6=true
重启 WSL2
wsl --shutdown
wsl
ip a
可以看到eth0的网络是桥接网络了
设置特定静态IP
修改 .wslconfig
[wsl2]
networkingMode=bridged
vmSwitch=WSL_external
dhcp=false # 禁止动态分配
ipv6=true
当dhcp=false
时会读取 cd /lib/systemd/network/wsl_external.network
的网络配置
vim wsl_external.network 加入以下内容
[Match]
Name=eth0
[Network]
Description=bridge
DHCP=false
Address=192.168.1.10/24 # 自行修改
Gateway=192.168.0.1 # 自行修改
重启WSL2 (wsl --shutdown)
你会发现eth0已经有自定义的网络了
修改DNS禁止自动生成
添加 /etc/wsl.conf
加入以下内容
[boot]
systemd=true
[network]
generateResolvConf = false
先删除再创建,因为resolv.conf是软链接创建的
rm -f /etc/resolv.conf
echo "nameserver 223.5.5.5" > /etc/resolv.conf
重启WSL2 (wsl --shutdown)
而且还启用了systemd
(systemctl 命令回来了)
systemctl list-unit-files --type=service
systemctl restart systemd-networkd
systemctl enable systemd-networkd
systemctl restart systemd-resolved.service
systemctl enable systemd-resolved.service
常用配置
.wslconfig
[wsl2]
# Bridged networking
networkingMode=bridged
vmSwitch=bridge
dhcp=false
ipv6=true
# Limits VM memory to use no more than 4 GB, this can be set as whole numbers using GB or MB
memory=4GB
# Sets the VM to use two virtual processors
processors=2
# Turn on/off default connection to bind WSL 2 localhost to Windows localhost ; default is true
localhostforwarding=true
# Turns on/off output console showing contents of dmesg when opening a WSL 2 distro for debugging ; default is false
debugConsole=false
# Turns on/off running GUI apps ; default is true
guiApplications=true
wsl.conf
# Automatically mount Windows drive when the distribution is launched
[automount]
# Set to true will automount fixed drives (C:/ or D:/) with DrvFs under the root directory set above. Set to false means drives won't be mounted automatically, but need to be mounted manually or with fstab.
# enabled = true
# Sets the directory where fixed drives will be automatically mounted. This example changes the mount location, so your C-drive would be /c, rather than the default /mnt/c.
# root = /
# DrvFs-specific options can be specified.
options = "metadata,uid=1003,gid=1003,umask=077,fmask=11,case=off"
# Sets the `/etc/fstab` file to be processed when a WSL distribution is launched.
# mountFsTab = true
# Network host settings that enable the DNS server used by WSL 2. This example changes the hostname, sets generateHosts to false, preventing WSL from the default behavior of auto-generating /etc/hosts, and sets generateResolvConf to false, preventing WSL from auto-generating /etc/resolv.conf, so that you can create your own (ie. nameserver 1.1.1.1).
[network]
hostname = DemoHost
generateHosts = false
generateResolvConf = false
# Set whether WSL supports interop process like launching Windows apps and adding path variables. Setting these to false will block the launch of Windows processes and block adding $PATH environment variables.
[interop]
enabled = false
appendWindowsPath = false
# Set the user when launching a distribution with WSL.
[user]
default = DemoUser
# Set a command to run when a new WSL instance launches. This example starts the Docker container service.
[boot]
command = service docker start
标签:systemd,false,桥接,IP,WSL,wsl,true,WSL2 From: https://www.cnblogs.com/lic0914/p/17003251.htmlhttps://learn.microsoft.com/en-us/windows/wsl/wsl-config
https://github.com/luxzg/WSL2-fixes
https://github.com/luxzg/WSL2-fixes/blob/master/networkingMode%3Dbridged.md