wsl_network_fix
WSL 网络故障修复命令
补充说明
wsl_network_fix 提供一组用于诊断和修复 WSL2 网络问题的命令集合,涵盖 DNS 解析失败、代理配置错误、网络桥接异常、防火墙阻断等常见场景。
诊断命令
# 检查 WSL 网络状态
wsl --status
# 查看 WSL 网络配置
wsl -d <发行版> -- ip addr show
wsl -d <发行版> -- ip route show
# 检查 DNS 配置
wsl -d <发行版> -- cat /etc/resolv.conf
# 测试网络连通性
wsl -d <发行版> -- ping -c 4 8.8.8.8
wsl -d <发行版> -- curl -I https://www.google.com
# 检查 Windows 防火墙
Get-NetFirewallRule | Where-Object DisplayName -like "*WSL*"
DNS 修复
# 方法一:重启 WSL 重新生成 resolv.conf
wsl --shutdown
wsl
# 方法二:手动配置 DNS
wsl -d <发行版> -u root -- bash -c "echo 'nameserver 8.8.8.8' > /etc/resolv.conf"
wsl -d <发行版> -u root -- bash -c "echo 'nameserver 114.114.114.114' >> /etc/resolv.conf"
# 方法三:固定 DNS 配置(防止重启被重置)
wsl -d <发行版> -u root -- bash -c "cat > /etc/wsl.conf << 'EOF'
[network]
generateResolvConf = false
EOF"
wsl --shutdown
wsl
代理修复
# 查看代理配置
wsl -d <发行版> -- env | grep -i proxy
# 清除代理
wsl -d <发行版> -- unset http_proxy https_proxy all_proxy
# 自动获取宿主机 IP 并设置代理
wsl -d <发行版> -- bash -c 'host_ip=$(cat /etc/resolv.conf | grep nameserver | awk "{print \$2}"); export http_proxy="http://$host_ip:7890"; export https_proxy="http://$host_ip:7890"; echo "代理已设置"'
网络桥接修复
# 重置 Winsock
netsh winsock reset
# 重置 WinHTTP 代理
netsh winhttp reset proxy
# 重置 WSL 虚拟交换机
wsl --shutdown
Get-VMSwitch | Where-Object Name -like "*WSL*" | Disable-VMSwitch -Force
# 重新启动 WSL 后自动重建虚拟交换机
wsl
防火墙配置
# 添加防火墙规则放行 WSL
New-NetFirewallRule -DisplayName "WSL Network" -Direction Inbound -Action Allow -LocalPort Any -RemoteAddress "172.16.0.0/12,192.168.0.0/16"
# 临时关闭防火墙(测试用)
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False
# 测试后重新开启
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled True
一键重置
# 完全重置 WSL 网络
wsl --shutdown
netsh winsock reset
netsh int ip reset all
netsh winhttp reset proxy
ipconfig /flushdns
# 重启电脑后生效
shutdown /r /f /t 0
注意事项
- 部分命令需要以管理员身份运行 PowerShell
wsl --shutdown会停止所有运行中的 WSL 实例- VPN 软件可能干扰 WSL 网络连接,排查时可先断开 VPN
- 中国地区 DNS 建议使用
114.114.114.114或223.5.5.5