Skip to content

Instantly share code, notes, and snippets.

@libChan
Last active April 3, 2026 03:56
Show Gist options
  • Select an option

  • Save libChan/3a804a46b532cc326a2ee55b27e8ac19 to your computer and use it in GitHub Desktop.

Select an option

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"
@zeicold
Copy link
Copy Markdown

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
Copy Markdown

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
Copy Markdown

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 就可以了。

@Qin-K
Copy link
Copy Markdown

Qin-K commented Dec 25, 2025

  1. window 防火墙 7890 端口放开。 cmd 命令行执行:
    netsh advfirewall firewall add rule name="Open Port 7890" dir=in action=allow protocol=TCP localport=7890
  2. clash 设置 allow lan
  3. wsl 更改 ~/.bash_profile
export hostip="192.168.31.151" #改成你自己的局域网IP地址
export https_proxy="http://$/{hostip}:7890"
export http_proxy="http://$/{hostip}:7890"
export all_proxy="socks5://${hostip}:7890"
  1. source ~/.bash_profile
  2. 使用 wget google.com 测试

https_proxy、http_proxy多了一个/斜杠啊

@Nomiracle
Copy link
Copy Markdown

环境: Windows 19045 + WSL 2 Ubuntu

问题: WSL 中 ping 172.25.x.x(从 /etc/resolv.conf 的 nameserver 获取,是 Windows 在 WSL NAT 中的虚拟 IP)能通,但 curl/telnet 连接失败。

原因 & 解决: WSL 2 的 NAT 模式只支持 ICMP,TCP 连接需要用 Windows 实际 IP。在 PowerShell 运行 ipconfig 找到以太网/WiFi 的 IPv4 地址(如 192.168.x.x),然后在 WSL 中运行 export http_proxy=http://192.168.x.x:7890 即可访问代理。

@Daya-Jin
Copy link
Copy Markdown

  1. window 防火墙 7890 端口放开。 cmd 命令行执行:
    netsh advfirewall firewall add rule name="Open Port 7890" dir=in action=allow protocol=TCP localport=7890
  2. clash 设置 allow lan
  3. wsl 更改 ~/.bash_profile
export hostip="192.168.31.151" #改成你自己的局域网IP地址
export https_proxy="http://$/{hostip}:7890"
export http_proxy="http://$/{hostip}:7890"
export all_proxy="socks5://${hostip}:7890"
  1. source ~/.bash_profile
  2. 使用 wget google.com 测试

可以,防火墙问题

@CodeRunnner
Copy link
Copy Markdown

cat /etc/resolv.conf | grep nameserve查看Wsl的网关(通常是在 Windows-WSL 2 这一体系中,Windows 的 IP 地址,即Wsl将Windows作为Dns服务器) ,是否与ipconfig命令获得的Ethernet adapter vEthernet (WSL)中的Windows IP地址一致,如果是其他,可能是resolv.conf文件中内容不一致,导致没办法正常提取到地址

以下为我的解决方案 powershell.exe -Command "(ipconfig)" # 此命令的结果和在windows中 ipconfig结果是一样的 可以看到这里是有Ethernet adapter vEthernet (WSL),然后抓取地址 powershell.exe -Command "(ipconfig)" | grep -a IPv4 | grep -a 17 | awk '{print $16}' # 我这里是16,可能需要修改

shell脚本中: hostip=$(powershell.exe -Command "(ipconfig)" | grep -a IPv4 | grep -a 172 | awk '{print $16}') hostip=$(echo -e "$hostip" | tr -d '\r') #将从powershell获得的CRLF 类型的转换为LF

其他解决方案: Windows中修改%USERPROFILE%\.wslconfig配置 加入如下内容

[wsl2]
networkingMode=mirrored
dnsTunneling=true
firewall=true
autoProxy=true

[experimental]
# requires dnsTunneling but are also OPTIONAL
bestEffortDnsParsing=true
useWindowsDnsCache=true

在较新版本中,在mirror模式下,WSL2 已经支持和宿主机共享 IP 可以直接使用127.0.0.1:port的地址 微软官方详细

有用!!!!!!!在试了防火墙等等N种方法后,你的方法解决了我的问题

@ipfred
Copy link
Copy Markdown

ipfred commented Mar 11, 2026

win10 专业版 19045 os版本
防火墙也开了
按这种方式配置

# 获取宿主机 IP
export hostip=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}')
# 设置代理端口(根据你的实际端口修改)
export hostport=20122

alias proxy='
    export HTTP_PROXY="http://$hostip:$hostport"
    export HTTPS_PROXY="http://$hostip:$hostport"
    export ALL_PROXY="socks5://$hostip:$hostport"
'
alias unproxy='
    unset HTTP_PROXY
    unset HTTPS_PROXY
    unset ALL_PROXY
'

telnet 都不通 访问谷歌也不行
image
有大佬吗
--- 解决方案 端口转发
powershell 管理员权限执行端口转发

netsh interface portproxy add v4tov4 listenaddress=172.22.0.1 listenport=20122 connectaddress=127.0.0.1 connectport=20122

或者用端口转发工具 PortProxyGUI

结合上面的脚本 现在访问谷歌 OK 但是ping www.google.com 还是不成功

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