WSL 2 中更改了与主机间的通信方式,以往通过 localhost 访问的方式在如今已经行不通了。具体详见 WSL 1 与 WSL 2 之间的用户体验更改

获取主机 IP 地址

由于 WSL 2 是使用 Hyper-V 虚拟机实现的,也就不能跟主机共享同一个 localhost 了,而且每次重启后 IP 地址都会变。WSL 2 需要从主机的 IP 地址来访问主机上的应用程序。

从 WSL 2 访问主机的 IP 地址保存在 /etc/resolv.conf 文件的 nameserver 条目中。

WSL 2 通过 IP 地址访问主机

主机上的代理软件允许局域网访问

Hyper-V 虚拟机构建了一个局域网,主机和 WSL 都在这个局域网中。因此 WSL 对主机的访问将被视为来自局域网的访问。这就需要设置代理软件允许局域网访问了。

v2rayN 为例,在「参数设置」中定位到「v2rayN设置」,勾选「允许来自局域网的连接」一项,确定即可:

在 v2rayN 中设置允许局域网连接

设置 WSL 2 的代理

为了让代理设置永久生效,需要编辑配置文件 ~/.bashrc

1
$ nano ~/.bashrc

添加如下文本:

1
2
3
# set proxy
export hostip=$(cat /etc/resolv.conf | grep -oP '(?<=nameserver\ ).*')
export all_proxy=socks://$hostip:10808

Ctrl+O 并回车保存,Ctrl+X 退出 nano) 编辑器。

其中 10808 是假设代理软件的 SOCKS 监听端口为 10808,具体请参考实际情况。

最后重启 WSL 终端就能生效了。

评论