wsl2使用宿主机clash问题解决方案

2021/12/05 solution 共 1111 字,约 4 分钟

wsl2 使用宿主机 clash 问题解决方案

1. 确保代理有效

我使用的是 Clash for windows v0.14.3,确认在 Windows 上开启 Clash 是可以成功上外网的。

2. 确保wsl2可以正常上网

可以正常访问不需要翻墙的网络。

3. 确保wsl2和宿主Windows可以互相ping通

wsl2 的机制是虚拟机,相当于桥接在宿主机上,windows 会新建一个子网,分配给自己和 wsl2ip 。当 wsl2 需要访问外界网络的时候,会通过 win10 主机作为路由来上网,因此 linux 中的机器如果需要配置代理,使用windows 的 clash,需要把 windows 的 ip 作为代理的ip。

在 wsl2 中可以找到自己的 ip 和宿主的 ip,下面是一个 bash 脚本

#! /bin/bash

echo "----outer ip----"
curl cip.cc
echo ""
echo "----host ip----"
cat /etc/resolv.conf | grep nameserver | awk '{ print $2 }'
echo ""
echo "----wsl ip----"
hostname -I | awk '{print $1}'

可能遇到的问题

Windows 能 ping 通 wsl2,而 wsl2 ping 不通 Windows。

此时,可能是 windows 的防火墙在起作用。可以先简单的把所有设置都关闭,再测试一下能否 ping 通宿主机。

结构

结构

确认是否为防火墙问题。

如果是,则添加一条入站规则: 仅允许 wsl2 所在的网段主机对宿主机进行无障碍访问 。

结构结构

其他步骤默认即可。

4. 确保wsl2能访问宿主机的Clash

启动 clash 并开启 Allow LAN

结构

在 linux 中设置代理

export https_proxy="http://{windows Ip}:{clash port}"
export http_proxy="http://{windows Ip}:{clash port}"

可能遇到的问题

1. wsl2 ping 能通 Windows,但不能访问 Clash

此时,仍然可能是 windows 的防火墙在起作用。它不再拦截 wsl2,但它保护 clash。真安全啊,Windows,防不胜防。

结构结构

总之和 clash 有关的全部勾选吧。

5. 不要用 ping 测试网络是否连通

挂上了代理仍然会 ping 不通谷歌,因为代理是 http 和 https 的代理,ping 直接用 ip 层,不会通过 http。用 curl来测试是否成功上外网。

这就是一些网络的知识了,脑子一抽可能就忘了,卡在那半天回不过神来。

reference

WSL2 网络异常排查 [ping 不通、网络地址异常、缺少默认路由、被宿主机防火墙拦截]

[WSL2通过Clash for Windows使用Windows代理]

文档信息

Search

    Table of Contents