一、以管理员身份打开 Windows 终端
默认情况下,鼠标右击桌面弹出的快捷菜单上有一项 “在终端中打开”,点击它后就会启动 Windows 终端。此时的终端并不是以管理员身份运行的。
点击 Windows 终端标题栏上的 “∨” 符号以展开菜单,然后点击 “设置”。
在 “设置” 窗口左侧栏 “配置文件” 下找到 “Windows PowerShell” 并点击它,然后在右侧找到 “以管理员身份运行此配置文件” 并点击开关按钮将其置于 “开” 状态。然后点击 “保存”,最后点击右上角“X” 关闭它。至此,以后开启的 Windows 终端就都是以管理员身份运行的了。
二、配置 vEthernet (WSL) 虚拟网卡 IP
由于每次执行 wsl ~ 命令进入 WSL2 子系统后,宿主机就自动创建了一个名为 “vEthernet (WSL)” 的隐藏的虚拟网卡(需要在终端执行 Get-NetAdapter -IncludeHidden 才能列出来),该虚拟网卡默认被系统随机分配了一个 IPv4 地址,该 IP 也自动成为了 WSL2 中的 Linux 子系统的 DNS。由于该虚拟网卡的 IP 存储策略(PolicyStore)始终无法设置成 PersistentStore,导致每次重启宿主机后 IP 依旧变动。因此,我们需要在桌面新建一个 wsl2.ps1 脚本,然后复制粘贴以下命令后保存并关闭脚本。接着,在上一步以管理员身份打开的 Windows 终端中执行 Set-ExecutionPolicy Unrestricted 以放开运行脚本权限。最后,在终端中执行 .\Desktop\wsl2.ps1 以运行该脚本(注:宿主机每次重启后都必须运行 1 次该脚本)。
Get-NetAdapter -IncludeHidden 'vEthernet (WSL)' | Get-NetIPAddress | Remove-NetIPAddress -Confirm:$False;
New-NetIPAddress -InterfaceAlias 'vEthernet (WSL)' -IPAddress 192.168.23.1 -PrefixLength 24;
Get-NetNat | ? Name -Eq WSLNat | Remove-NetNat -Confirm:$False;
New-NetNat -Name WSLNat -InternalIPInterfaceAddressPrefix 192.168.23.0/24;
Write-Host "固定 IP: 192.168.23.1 配置完成";
Start-Sleep –s 3;
Set-ExecutionPolicy Undefined;
三、启用 systemd 及禁止 WSL2 自动生成 /etc/resolv.conf 文件
在 Windows 终端中执行 wsl ~ 以启动并进入 Linux 子系统(本例为 Ubuntu-22.04),执行以下命令。
vi /etc/wsl.conf
# 粘贴以下内容后保存并退出编辑
[boot]
systemd=true
[network]
generateResolvConf = false
执行 exit 退出子系统,然后依次执行 wsl --shutdown、wsl ~ 使配置生效。
四、设置静态 IP、广播 IP、网关、代理、DNS
设置静态 IP、广播 IP、网关、代理。执行如下命令。
vi /etc/profile
# 粘贴如下内容至文件末尾后保存并退出编辑
# static ip
if [ "$(ip addr show eth0 | grep 'inet\b' | awk '{print $2}' | head -n 1)" != "192.168.23.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 192.168.23.2/24 broadcast 192.168.23.255 dev eth0
sudo ip route add 0.0.0.0/0 via 192.168.23.1 dev eth0
fi
# add for proxy(可选,用于对接 v2rayN)
export hostip=$(ip route | grep default | awk '{print $3}')
export hostport=10808
alias proxy='
export HTTPS_PROXY="socks5://${hostip}:${hostport}";
export HTTP_PROXY="socks5://${hostip}:${hostport}";
export ALL_PROXY="socks5://${hostip}:${hostport}";
echo -e "Acquire::http::Proxy \"http://${hostip}:${hostport}\";" | sudo tee -a /etc/apt/apt.conf.d/proxy.conf > /dev/null;
echo -e "Acquire::https::Proxy \"http://${hostip}:${hostport}\";" | sudo tee -a /etc/apt/apt.conf.d/proxy.conf > /dev/null;
'
alias unproxy='
unset HTTPS_PROXY;
unset HTTP_PROXY;
unset ALL_PROXY;
sudo sed -i -e '/Acquire::http::Proxy/d' /etc/apt/apt.conf.d/proxy.conf;
sudo sed -i -e '/Acquire::https::Proxy/d' /etc/apt/apt.conf.d/proxy.conf;
'
设置 DNS。执行如下命令。
vi /etc/resolv.conf
# 粘贴如下内容后保存并退出编辑
# 114公共DNS: 114.114.114.114 和 114.114.115.115
# 阿里DNS: 223.5.5.5 和 223.6.6.6
# 腾讯DNS: 119.29.29.29 和 182.254.116.116
# 百度DNS(最快): 180.76.76.76
# 谷歌DNS: 8.8.8.8 和 8.8.4.4
nameserver 180.76.76.76
nameserver 8.8.8.8
执行 exit 退出子系统,然后依次执行 wsl --shutdown、wsl ~ 使配置生效。然后执行 ip addr 即可列出更改后的静态 IP。最后执行 ping www.baidu.com 以验证是否可以访问互联网。