WSL2使用桥接网络,并指定IP

前言

微软终于解决了宇宙级难题了,一直以来的WSL2每次启动IP都是动态分配的,并且是NAT的网络。当然网上对此也有一些解决方案,编写脚本在启动时修改,但是太麻烦了,这次很完美的解决了这个难题。

检查

wsl --version
# 版本>1.0即可

如果出错,请安装最新版本

配置文件

  • .wslconfig
    用于在 WSL 2 上运行的所有已安装分发版 全局 配置设置。
  • wsl.conf
    为 WSL 1 或 WSL 2 上运行的 Linux 发行版配置 每个分发 版的设置。

这里详细配置介绍请移步 高级设置配置

配置WSL2使用外部网络

  • 使用Hyper-V创建外部网络(其他方式创建也行)
# 查看网络交换机名称
Get-VMSwitch -SwitchType External

image

  • 配置 .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=true # 动态分配 此处若设置为false, eth0只有一个IP地址,会导致上外网失败
ipv6=true

增加制定IP vim /usr/lib/systemd/network/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)
ip addr你会发现eth0已经有自定义的网络了
image

修改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

https://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

posted @ 2022-12-24 20:32  流年灬似氺  阅读(23393)  评论(0编辑  收藏  举报