本方法是为了尽可能让配置在wsl中执行,有一键脚本的方法,参见 给 WSL2 设置静态 IP 地址

有两个地方需要设置静态ip:

  1. wsl内部的eth0网卡;假定ip为172.22.0.2;
  2. Windows的vEthernet (WSL)网卡;假定ip为172.22.0.1;

Windows设置

cmd命令行以管理员权限执行以下语句:

powershell -c "Get-NetAdapter 'vEthernet (WSL)' | Get-NetIPAddress | Remove-NetIPAddress -Confirm:$False; New-NetIPAddress -IPAddress 172.22.0.1 -PrefixLength 24 -InterfaceAlias 'vEthernet (WSL)'; Get-NetNat | ? Name -Eq WSLNat | Remove-NetNat -Confirm:$False; New-NetNat -Name WSLNat -InternalIPInterfaceAddressPrefix 172.22.0.0/24;"

或者直接在power shell里执行上面双引号里的内容即可。

wsl设置

设置ip

在启动脚本 ~/.bashrc 里添加:

# static ip
if [ "$(ip addr show eth0 | grep 'inet\b' | awk '{print $2}' | head -n 1)" != "172.22.0.2/24" ];
then
sudo ip addr del $(ip addr show eth0 | grep 'inet\b' | awk '{print $2}' | head -n 1) dev eth0
sudo ip addr add 172.22.0.2/24 broadcast 172.22.0.255 dev eth0
sudo ip route add 0.0.0.0/0 via 172.22.0.1 dev eth0
fi

免密sudo权限

为了执行上一步,需要这个权限。
在 /etc/sudoers 里添加:

UserName ALL=(ALL) NOPASSWD:ALL

配置DNS

在 /etc/wsl.conf 文件写入

[network]
generateResolvConf = false # 不自动生成dns配置,必须
generateHosts = false # 是否生成hosts文件,可选

[interop]
enabled = false # 不能调用Windows进程,可选
appendWindowsPath = false # 不添加Windows路径,可选

在 /etc/wsl.resolv文件写入(如果原来是软连接文件,需要先删除)
勘误:这里文件应该是 /etc/resolv.conf 也可能是新版改了。

nameserver 8.8.4.4 # 写入你本地最好用的dns就行
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐