推荐阅读
我们主机如果使用了代理,可能会配置 http_proxy=localhost:7890
之类的东西。此时 WSL 会报错:
wsl: 检测到 localhost 代理配置,但未镜像到 WSL。NAT 模式下的 WSL 不支持 localhost 代理。
WSL 在 NAT 模式下运行时,它自己的网络是隔离的,无法直接访问 Windows 主机上的 localhost。
此时我们需要在 WSL 中配置代理,ip 应该是主机的 ip。
主机 ip 可能会在网络环境变化的时候发生变化,所以需要一个脚本在 WSL 启动时获取主机 ip,并将其配置为 proxy
。
我们可以新建一个 set_proxy.sh
文件,填充以下内容。(保存后记得添加上可执行权限 chmod +x set_proxy.sh
)
#!/bin/bash
# 1. 获取 Windows 主机的 IP 地址
host_ip=$(ip route | grep default | awk '{print $3}')
# 假设你的代理端口是 1080
host_port=1080
# 检查是否获取到有效的主机 IP
if [[ -z "$host_ip" ]]; then
echo "Error: Unable to detect the host IP. Ensure your WSL is properly configured."
exit 1 # 如果没有找到主机 IP,就退出脚本
fi
# 2. 设置代理
export http_proxy="http://$host_ip:$host_port"
export https_proxy="http://$host_ip:$host_port"
export all_proxy="socks5h://$host_ip:$host_port"
# 大写也配置一下,提高兼容性
export HTTP_PROXY="$http_proxy"
export HTTPS_PROXY="$https_proxy"
export ALL_PROXY="$all_proxy"
# 3. log 当前设置的代理
echo "current proxy: $http_proxy"
# 4. 需要使用 `source ~/set_proxy.sh` 命令来使设置生效
# 5. 如果希望脚本在每次启动时自动运行,可以将上述命令放到 ~/.bashrc 或 ~/.zshrc 中
# 例如将 `[[ -f ~/set_proxy.sh ]] && source ~/set_proxy.sh` 放到 `~/.zshrc` 的恰当位置
clash for windows (以下简称 clash) 需要配置 allow LAN: true
明明配置了 http_proxy, curl 就是不通,查看 clash 的 log 也没有。
嗯嗯,请求根本就没到 host 机器。临时关闭防火墙试试,诶,通了。那我知道了,是防火墙的问题。
然后通过命令设置了允许 clash 的端口 1080 入站,但还是没用。
查看防火墙的所有入站规则,竟然发现有一条规则是禁止 clash 的所有端口,也不知道什么时候设置的。
把这条规则禁用后,就通了。
如非特别声明,本站作品均为原创,遵循【自由转载-保持署名-非商用-非衍生 创意共享 3.0 许可证】。
对于转载作品,如需二次转载,请遵循原作许可。