尝试给 WSL 设置代理,试了这两种方法都没有成功,哪位 V 友能帮我指点指点?
一、设置 wslconfig
[wsl2]
networkingMode=mirrored
firewall=true
dnsTunneling=true
autoProxy=true
设置之后启动 WSL 报错: 不支持镜像网络模式,正在回退到 NAT 网络
二、设置 http_proxy
host_ip=$(cat /etc/resolv.conf |grep "nameserver" |cut -f 2 -d " ")
export http_proxy='http://192.168.10.1:18888'
export https_proxy='http://192.168.10.1:18888'
设置之后执行 wget www.google.com
, 一直在Connecting to 192.168.10.1:18888
。
我代理软件开启了 “Allow LAN” 选项,防火墙设置了专业网络和公共网络都可通信。实在不知道还能怎么办了
感谢各位的帮助,设置 http_proxy 的方式暂时能用了。
如果你遇到了这个问题,请参考:
ip route show | grep -i default | awk '{ print $3}'
, 返回的 IP 是 Windows 宿主机的 IP。它的值应该和在 Windows 中执行 ipconfg
返回的 WSL 的 IPv4 地址相同export http_proxy='http://{第一步中的 IP 地址}:port'
, 执行 wget www.google.com
, 应该能访问成功.wslconfig
解决代理问题。如果你想用这种方法,记得检查版本:WSL 版本: 2.2.1.0
Windows 版本: 10.0.19045.4170
1
justsomac 241 天前
系统太旧,不支持,升级系统
|
2
Goooooos 241 天前
确认下宿主机的 IP ,我的可以正常访问宿主机的 socks5 代理
|
6
body007 241 天前 1
|
7
yushiro 241 天前 via iPhone
wsl 里面装个 v2raya ,默认全局代理,不需要配置任何环境变量
|
8
chinaguaiu 241 天前
老实说我就是像你这么干的,就是每次启动 wsl 都要看/etc/resolv.conf 很折磨
|
9
chinaguaiu 241 天前
你不妨确认一下代理软件的端口有没有设置好,仔细看一下,可能端口被重置掉了
|
10
chensuixiang 241 天前
//注意写本机地址
export ALL_PROXY="http://本机 ip:7890" //测试 curl https://www:google.com //取消代理 export ALL_PROXY= 我之前是这样的,本机开的 clash 端口 7890 ,然后到 wsl2 上输入上面 export 命令。缺点是一次性的,每次重启 wsl2 如果要代理都得手动输入一遍。至于 Allow LAN 开不开,忘了,不过之前我确实可行的 |
11
uliah 241 天前 1
可以在 profile 或 bashrc 里面获取一下网关
GATEWAY=`ip route show default|awk '{print $3}'` tee ~/.ssh/config <<EOF Host opendev.org User git ProxyCommand nc -v -x ${GATEWAY}:1081 %h %p EOF tee ~/.gitconfig <<EOF [credential] helper = store [gitreview] username = hailu [https] proxy = http://${GATEWAY}:1081 [http] proxy = http://${GATEWAY}:1081 EOF export HTTP_PROXY=http://${GATEWAY}:1081 export HTTPS_PROXY=http://${GATEWAY}:1081 |
12
SuperMaskv 241 天前 1
```bash
#!/bin/sh hostip=$(cat /etc/resolv.conf | grep nameserver | awk '{ print $2 }') wslip=$(hostname -I | awk '{print $1}') port=10800 PROXY_HTTP="http://${hostip}:${port}" set_proxy(){ export http_proxy="${PROXY_HTTP}" export HTTP_PROXY="${PROXY_HTTP}" export https_proxy="${PROXY_HTTP}" export HTTPS_proxy="${PROXY_HTTP}" git config --global http.proxy "${PROXY_HTTP}" git config --global https.proxy "${PROXY_HTTP}" } unset_proxy(){ unset http_proxy unset HTTP_PROXY unset https_proxy unset HTTPS_PROXY git config --global --unset http.proxy git config --global --unset https.proxy } test_setting(){ echo "Host ip:" ${hostip} echo "WSL ip:" ${wslip} echo "Current proxy:" $https_proxy } if [ "$1" = "set" ] then set_proxy elif [ "$1" = "unset" ] then unset_proxy elif [ "$1" = "test" ] then test_setting else echo "Unsupported arguments." fi ```bash 这段脚本是我自己在用的,同时设置了 shell 的代理和 git 的代理。 启用代理就`. ./proxy.sh set` ,禁用就`. ./proxy unset`,查看当前状态就`. ./proxy test` |
13
kaleido 241 天前
没人用 clash 的 tun 吗,啥也不用设置,打开 tun 模式就完了
|
14
mclxly 241 天前
我每次按需手动执行:
export http_proxy=socks5://[宿主机 IP]:2080 https_proxy=socks5://[宿主机 IP]:2080 |
15
cslive 241 天前
打开 tun 模式完事
|
16
alexsz 241 天前
供参考:
我使用 win11 + clash-verge + WSL2 ,系统代理模式 WSL2 的网络代理工作正常 我的.wslconfig 文件内容如下: [experimental] autoMemoryReclaim=gradual networkingMode=mirrored dnsTunneling=true firewall=false autoProxy=true |
17
selca 241 天前
proxychains4
|
18
Goooooos 241 天前
@chinaguaiu 不需要,新版 wsl2 宿主机 ip 不会乱变
而且把 OP 的第二部的代码放到.bashrc 也行 export hostip=$(cat /etc/resolv.conf |grep -oP '(?<=nameserver\ ).*') export https_proxy="http://${hostip}:7890" export http_proxy="http://${hostip}:7890" |
19
eaststarpen 241 天前
我有一个暴力做法
wsl 的环境变量是包含 windows host 的环境变量的; 就是说可以直接在 wsl bash 里运行 windows 命令 我之前的做法是 ipconfig.exe 获取宿主机 ip, 而且可以直接通过管道同时运行 Windows 和 wsl 指令, 如 "ipconfig.exe | grep -i ipv4" |
20
heiher 241 天前
我之前在 WSL2 上实测过 tun2socks 方式可以: https://github.com/heiher/hev-socks5-tunnel
|
21
MortonL 241 天前
使用的 clash 的 tun 模式
|
22
eaststarpen 241 天前
但是不管是 tun 还是设置 http_proxy 环境变量, 总有一些应用无法代理, 或者代理效果不理想 (主要是 neovim update 和 npm install; 我 git 和 npm 都设置代理变量了); 我后来的做法是路由器透明代理
|
23
zed1018 241 天前
不支持 mirrored network 是因为你系统版本太老了
|
24
sjkdsfkkfd 241 天前
一律建议在路由器上搞代理,完全透明,支持任何设备,任何环境
|
25
listenerri 240 天前 via Android 1
推荐下我的方法,用着挺爽,我是在 .bashrc 里声明两个交互式函数:
- http-proxy-set 用于普通 linux 下设置代理,默认值 127.0.0.1:1080 ,临时要用其他的就手动输入,不然直接回车就行 - http-proxy-set-wsl 用于在 wsl 里设置代理,默认值 IP 取自 wsl 网关,也就是 win 主机本身,一般直接回车 链接分别为: - https://github.com/listenerri/dotfiles/blob/0a8e14a2aa6dbea3477af39dee53b7538fcf2a47/bashrc#L287 - https://github.com/listenerri/dotfiles/blob/0a8e14a2aa6dbea3477af39dee53b7538fcf2a47/bashrc#L306 再赠送一个 http-proxy-unset: - https://github.com/listenerri/dotfiles/blob/0a8e14a2aa6dbea3477af39dee53b7538fcf2a47/bashrc#L328 三个函数定义其实都在同一个文件里,挨着呢 |
26
dxcqcv 146 天前
研究了好久,如果用 socks5 和 privoxy 代理的话,要记得开启`listen-address 0.0.0.0:8118`
|
27
gqfBzoLVY3Wl4Tng 144 天前
借楼问个关联问题,网上爬文设置了镜像网络,但是宿主机器无法通过浏览器访问容器的镜像了,镜像网络是生效的,因为 immich 的 remote machine learning 工作了。在设置镜像网络之前是没法工作的,但是可以通过 HTTP://localhost:port 访问 porainer 。不知道有什么解决方案,或者有什么关键词。折腾一天了。
虽然初衷只是帮助孱弱的 nas 识别人面,但有可能的话,还是像看看怎么彻底设置好。 win11 ,23h2 ,wsl 最新版,cfw 不是 tun 模式,docker desktop 使用代理是没问题的。 |
28
gqfBzoLVY3Wl4Tng 144 天前
@pierrec 暂时成功使用 ip 访问了,不需要禁用 iptable ,不用 host 模式创建容器。
|
29
Limoncrist 48 天前 1
@kaleido it worked !
|