-
-
Save libChan/3a804a46b532cc326a2ee55b27e8ac19 to your computer and use it in GitHub Desktop.
# 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" |
感谢
然而,在我的wsl上配置这三行代码并不生效。
我是直接将配置改成电脑的本地ip,而不是nameserver(运行
cat /etc/resolv.conf |grep -oP '(?<=nameserver\ ).*'
的值)比如:
export https_proxy="http://192.168.1.6:7890" export http_proxy="http://192.168.1.6:7890"
另外,我开启了7890的windows防火墙端口。
可以正常访问外网,但是ping无法成功。
根据我的经验,假设运行clash的ip为192.168.1.1
,那么只需要两步操作:
- 打开clash的
Allow LAN
- 运行代码(可以设置开机自动运行)
export http_proxy=http://192.168.1.1:7890
export https_proxy=http://192.168.1.1:7890
不需要打开防火墙,因为wsl和clash运行在同一台电脑。
如果其他设备(比如手机)需要通过电脑的clash进行代理,那么可以放开防火墙的7890
端口
根据我的经验,假设运行clash的ip为192.168.1.1,那么只需要两步操作:
设置代理确实可以成功,我在Android studio 中设置http代理,gradle 就可以正常下载
如果有人按照这个操作失败了,可以试试这里面的
如果有人按照这个操作失败了,可以试试这里面的
这对我有效,我使用如下配置(%USERPROFILE%\.wslconfig
):
[wsl2]
networkingMode=mirrored
dnsTunneling=true
firewall=true
autoProxy=true
[experimental]
# requires dnsTunneling but are also OPTIONAL
bestEffortDnsParsing=true
useWindowsDnsCache=true
如果有人按照这个操作失败了,可以试试这里面的
microsoft/WSL#10753这对我有效,我使用如下配置(
%USERPROFILE%\.wslconfig
):[wsl2] networkingMode=mirrored dnsTunneling=true firewall=true autoProxy=true [experimental] # requires dnsTunneling but are also OPTIONAL bestEffortDnsParsing=true useWindowsDnsCache=true
但是这样设置了之后,网络变得很慢,连 sudo apt update 都下半天,不知道你有没有遇到过这个情况?
如果有人按照这个操作失败了,可以试试这里面的
microsoft/WSL#10753这对我有效,我使用如下配置(
%USERPROFILE%\.wslconfig
):[wsl2] networkingMode=mirrored dnsTunneling=true firewall=true autoProxy=true [experimental] # requires dnsTunneling but are also OPTIONAL bestEffortDnsParsing=true useWindowsDnsCache=true但是这样设置了之后,网络变得很慢,连 sudo apt update 都下半天,不知道你有没有遇到过这个情况?
没有哦
我的问题比较奇怪,不知道有没有人有遇到过,直接用wsl2和clash的话,是可以访问外网的,但是使用apt-get update的时候,会一直卡在0%的进度,但是能ping通源的域名,单独关闭设置里的代理也不行,必须要把clash也关掉才能update成功。
我的问题比较奇怪,不知道有没有人有遇到过,直接用wsl2和clash的话,是可以访问外网的,但是使用apt-get update的时候,会一直卡在0%的进度,但是能ping通源的域名,单独关闭设置里的代理也不行,必须要把clash也关掉才能update成功。
If you are using the http_proxy variable, you need to check whether the http_proxy variable continues to be used after running sudo. Generally, sudo will clear the environment variables of the common user by default. Previously, I encountered this issue where sudo curl ip.gs
could not use the proxy due to this reason.
I eventually solved the issue by modifying the /etc/sudoers file using sudo visudo
and adding Defaults env_keep += "http_proxy https_proxy ftp_proxy no_proxy"
, which allowed sudo to use the proxy correctly.
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
的地址
微软官方详细
我的问题比较奇怪,不知道有没有人有遇到过,直接用wsl2和clash的话,是可以访问外网的,但是使用apt-get update的时候,会一直卡在0%的进度,但是能ping通源的域名,单独关闭设置里的代理也不行,必须要把clash也关掉才能update成功。
If you are using the http_proxy variable, you need to check whether the http_proxy variable continues to be used after running sudo. Generally, sudo will clear the environment variables of the common user by default. Previously, I encountered this issue where
sudo curl ip.gs
could not use the proxy due to this reason. I eventually solved the issue by modifying the /etc/sudoers file usingsudo visudo
and addingDefaults env_keep += "http_proxy https_proxy ftp_proxy no_proxy"
, which allowed sudo to use the proxy correctly.
worked for me, thanks you
我的问题比较奇怪,不知道有没有人有遇到过,直接用wsl2和clash的话,是可以访问外网的,但是使用apt-get update的时候,会一直卡在0%的进度,但是能ping通源的域名,单独关闭设置里的代理也不行,必须要把clash也关掉才能update成功。
If you are using the http_proxy variable, you need to check whether the http_proxy variable continues to be used after running sudo. Generally, sudo will clear the environment variables of the common user by default. Previously, I encountered this issue where
sudo curl ip.gs
could not use the proxy due to this reason. I eventually solved the issue by modifying the /etc/sudoers file usingsudo visudo
and addingDefaults env_keep += "http_proxy https_proxy ftp_proxy no_proxy"
, which allowed sudo to use the proxy correctly.
works for me also, but it's weird for I changed nothing recently
lz第一个帖子里面那三个指令就让我可以用vpn了,win11+wsl2+ubuntu22.04
然而,在我的wsl上配置这三行代码并不生效。
我是直接将配置改成电脑的本地ip,而不是nameserver(运行
cat /etc/resolv.conf |grep -oP '(?<=nameserver\ ).*'
的值)比如:
export https_proxy="http://192.168.1.6:7890" export http_proxy="http://192.168.1.6:7890"
另外,我开启了7890的windows防火墙端口。
可以正常访问外网,但是ping无法成功。
Good
官方文档(看场景二):https://learn.microsoft.com/zh-cn/windows/wsl/networking#identify-ip-address
按官方文档的说明,把获取 ip 地址的方式换一下
# 添加到环境变量设置中,例如~/.zshrc
export hostip=$(ip route show | grep -i default | awk '{ print $3}')
export https_proxy="http://${hostip}:7890"
export http_proxy="http://${hostip}:7890"
官方文档(看场景二):https://learn.microsoft.com/zh-cn/windows/wsl/networking#identify-ip-address
按官方文档的说明,把获取 ip 地址的方式换一下
# 添加到环境变量设置中,例如~/.zshrc export hostip=$(ip route show | grep -i default | awk '{ print $3}') export https_proxy="http://${hostip}:7890" export http_proxy="http://${hostip}:7890"
靠谱
官方文档(看场景二):https://learn.microsoft.com/zh-cn/windows/wsl/networking#identify-ip-address
按官方文档的说明,把获取 ip 地址的方式换一下
# 添加到环境变量设置中,例如~/.zshrc export hostip=$(ip route show | grep -i default | awk '{ print $3}') export https_proxy="http://${hostip}:7890" export http_proxy="http://${hostip}:7890"
靠谱
很奇怪,以前我用nat模式也是通过这种方式设置代理,但不知道为什么现在设置后还是访问不了外网
设置成mirrored模式后虽然可以自动代理,不再需要手动设置,但当我使用openVpn访问公司内网的时候却无法正常访问,据说是mirrored模式和openVpn某些版本有兼容性问题,OpenVPN 2.4.7及之前的版本是正常运行的(https://github.com/microsoft/WSL/issues/10879#issuecomment-1854559320)
官方文档(看场景二):https://learn.microsoft.com/zh-cn/windows/wsl/networking#identify-ip-address
按官方文档的说明,把获取 ip 地址的方式换一下
# 添加到环境变量设置中,例如~/.zshrc export hostip=$(ip route show | grep -i default | awk '{ print $3}') export https_proxy="http://${hostip}:7890" export http_proxy="http://${hostip}:7890"
靠谱
想知道export后面的变量是否区分大小写,这么配置变量的出处在哪里?