WSL 2 中更改了与主机间的通信方式,以往通过 localhost
访问的方式在如今已经行不通了。具体详见 WSL 1 与 WSL 2 之间的用户体验更改。
获取主机 IP 地址
由于 WSL 2 是使用 Hyper-V 虚拟机实现的,也就不能跟主机共享同一个 localhost
了,而且每次重启后 IP 地址都会变。WSL 2 需要从主机的 IP 地址来访问主机上的应用程序。
从 WSL 2 访问主机的 IP 地址保存在 /etc/resolv.conf
文件的 nameserver
条目中。
主机上的代理软件允许局域网访问
Hyper-V 虚拟机构建了一个局域网,主机和 WSL 都在这个局域网中。因此 WSL 对主机的访问将被视为来自局域网的访问。这就需要设置代理软件允许局域网访问了。
以 v2rayN 为例,在「参数设置」中定位到「v2rayN设置」,勾选「允许来自局域网的连接」一项,确定即可:
设置 WSL 2 的代理
为了让代理设置永久生效,需要编辑配置文件 ~/.bashrc
:
$ nano ~/.bashrc
添加如下文本:
export hostip=$(cat /etc/resolv.conf | grep -oP '(?<=nameserver\ ).*')
export all_proxy=socks://$hostip:10808
Ctrl+O 并回车保存,Ctrl+X 退出 nano 编辑器。
其中 10808
是假设代理软件的 SOCKS 监听端口为 10808,具体请参考实际情况。
最后重启 WSL 终端就能生效了。