问题背景

今日在Windows10系统上安装了WSL2,之后安装了Ubuntu的系统,在Ubuntu系统上安装了宝塔面板。但是发现Ubuntu与Win10之间无法进行网络通讯,面板更加无法打开。

试了各种方法,最后找到了解决方法,这里记录一下。

问题重现

终极解决办法:

sudo rm /etc/resolv.conf
sudo bash -c 'echo "nameserver 8.8.8.8" > /etc/resolv.conf'
sudo bash -c 'echo "[network]" > /etc/wsl.conf'
sudo bash -c 'echo "generateResolvConf = false" >> /etc/wsl.conf'

重置Windows网络

在Win10的PowerShell上,使用管理员命令运行如下命令:

netsh winsock reset
netsh int ip reset all
netsh winhttp reset proxy
ipconfig /flushdns

之后重启Windows系统即可。

外网访问配置

通过端口转发实现外网访问WSL2中的服务:

netsh interface portproxy add v4tov4 listenport=22 listenaddress=0.0.0.0 connectport=22 connectaddress=localhost
netsh interface portproxy add v4tov4 listenport=21 listenaddress=0.0.0.0 connectport=21 connectaddress=localhost
netsh interface portproxy add v4tov4 listenport=8888 listenaddress=0.0.0.0 connectport=8888 connectaddress=localhost
netsh interface portproxy add v4tov4 listenport=801 listenaddress=0.0.0.0 connectport=801 connectaddress=localhost
netsh interface portproxy add v4tov4 listenport=80 listenaddress=0.0.0.0 connectport=80 connectaddress=localhost

注意:Win底下是不支持上述的Linux命令行的多行输入格式的,需要手动调整。

参数说明:

  • listenport:表示要监听的Windows端口
  • listenaddress:表示监听地址,0.0.0.0表示匹配所有地址,比如Windows既有Wifi网卡,又有有线网卡,那么访问任意两个网卡,都会被监听到,当然也可以指定其中之一的IP的地址
  • connectaddress:要转发的地址,这里设置为localhost,是因为我们可以通过localhost来访问WSL2,如果暂不支持,这里需要指定为WSL2的IP地址
  • connectport:要转发到的端口

端口转发管理命令

查看所有转发规则:

netsh interface portproxy show all

删除指定转发规则:

netsh interface portproxy delete v4tov4 listenport=22 listenaddress=0.0.0.0

安装依赖:

apt install libcares2
apt install libc-ares2

Win11 WSL2无法访问Host网络

在PowerShell(管理员)中执行:

New-NetFirewallRule -DisplayName "WSL" -Direction Inbound -InterfaceAlias "vEthernet (WSL)" -Action Allow

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部