Skip to content

Instantly share code, notes, and snippets.

@libChan
Last active November 9, 2025 01:41
Show Gist options
  • Save libChan/3a804a46b532cc326a2ee55b27e8ac19 to your computer and use it in GitHub Desktop.
Save libChan/3a804a46b532cc326a2ee55b27e8ac19 to your computer and use it in GitHub Desktop.
WSL2使用clash for windows代理
# WSL通过Win访问网络,所以WSL的网关指向的是Windows,DNS服务器指向的也是Windows,设置WSL的proxy为win的代理ip+端口即可
# WSL中的DNS server在/etc/resolv.conf中查看,该文件是由/etc/wsl.conf自动生成的。
# 如果关闭了wsl.conf中自动生成resolve.conf并自行修改了resolve.conf,DNS nameserver并不是本机win ip
# 需要开启wsl.conf的自动生成,再运行以下命令
# https://zhuanlan.zhihu.com/p/153124468
# 添加到环境变量设置中,例如~/.zshrc
export hostip=$(cat /etc/resolv.conf |grep -oP '(?<=nameserver\ ).*')
export https_proxy="http://${hostip}:7890"
export http_proxy="http://${hostip}:7890"
@fuuhoo
Copy link

fuuhoo commented Oct 17, 2025

我的问题比较奇怪,不知道有没有人有遇到过,直接用wsl2和clash的话,是可以访问外网的,但是使用apt-get update的时候,会一直卡在0%的进度,但是能ping通源的域名,单独关闭设置里的代理也不行,必须要把clash也关掉才能update成功。

解决了吗

@zeicold
Copy link

zeicold commented Oct 23, 2025

我的问题

WSL Settings 设置 网络模式mirrored, 并激活 已启用自动代理 是可以在 WSL 的 ubuntu 中通过 clash verge 代理访问外网.
但是 buildah build 中一旦试图 apt update 就会提示不能访问 127.0.0.1:7897

原因

WSL 会自动设置 http_proxy, https_proxy127.0.0.1:7897.
apt update 会使用这个代理, 但是因为 mirrored 网络模式中 127.0.0.1:7897 (WSL 机) 并不是代理.

解决方法:

  1. 保持 WSL Settings 设置 网络模式mirrored, 并激活 已启用自动代理
  2. 删掉 http_proxy, https_proxy 还有 no_proxy 变量.
unset http_proxy
unset https_proxy
unset no_proxy
unset HTTP_PROXY
unset HTTPS_PROXY
unset NO_PROXY

之后 apt update 之类就可以用了

FROM ubuntu:24.04

并不受 http_proxy, https_proxy 影响

@LiuKay
Copy link

LiuKay commented Oct 26, 2025

我访问google是可以通了,但是TLS握手失败: try: context = ssl.create_default_context() with socket.create_connection((host, port), timeout=5) as sock: with context.wrap_socket(sock, server_hostname=host) as ssock: print(f"✅ TLS 握手成功: {ssock.version()}") except Exception as e: print("❌ TLS 握手失败:", e)

以下代码失败了,有朋友遇到了吗?

遇到相同问题,可以访问google, 比如 curl -v google.com, 但是比如 docker pull 就会 TLS handshake timeout(任何镜像仓库)

@fuuhoo
Copy link

fuuhoo commented Oct 28, 2025

问题和你一样,

unset http_proxy
unset https_proxy
unset no_proxy
unset HTTP_PROXY
unset HTTPS_PROXY
unset NO_PROXY

是从wsl的ubuntu里面执行码?我执行了还是不行呢

@zeicold
Copy link

zeicold commented Oct 28, 2025

问题和你一样,

unset http_proxy
unset https_proxy
unset no_proxy
unset HTTP_PROXY
unset HTTPS_PROXY
unset NO_PROXY

是从wsl的ubuntu里面执行码?我执行了还是不行呢

我把这些放在 ~/.bashrc 里了

@birchrust
Copy link

birchrust commented Oct 28, 2025

export https_proxy="http://127.0.0.1:7890"
export http_proxy="http://127.0.0.1:7890"
export all_proxy="socks5://127.0.0.1:7890"

Work for me

@LiuKay
Copy link

LiuKay commented Nov 9, 2025

我访问google是可以通了,但是TLS握手失败: try: context = ssl.create_default_context() with socket.create_connection((host, port), timeout=5) as sock: with context.wrap_socket(sock, server_hostname=host) as ssock: print(f"✅ TLS 握手成功: {ssock.version()}") except Exception as e: print("❌ TLS 握手失败:", e)
以下代码失败了,有朋友遇到了吗?

遇到相同问题,可以访问google, 比如 curl -v google.com, 但是比如 docker pull 就会 TLS handshake timeout(任何镜像仓库)

我的问题解决了,是Clash 的 TUN 模式的问题,改用普通的系统代理关闭 TUN 模式然后再设置 http proxy 就可以了。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment