Knuth
V2EX  ›  Windows

请教一个 WSL2 上代理的问题

By Knuth at 2021 年 10 月 23 日 · 9737 次点击

因为 windows 分配给 wsl2 的 IP 是动态变化的,所以我在.bashrc 设置了如下环境变量,我想用curl cip.cc检测终端是不走代理,但返回的是国内当地的 ip 地址

export host_ip=$(cat /etc/resolv.conf |grep -oP '(?<=nameserver\ ).*')
export https_proxy="http://${host_ip}:7890"
export http_proxy="http://${host_ip}:7890"
export all_proxy="http://${host_ip}:7890"

所以请教下大家,终端走代理的正确姿势该怎么操作呢?

第 1 条附言  ·  2021 年 10 月 23 日
看大家的都推荐 tun 模式,明天尝试下,谢谢大家
31 条回复  •  2021-10-25 10:09:01 +08:00
Nerv
   1
Nerv  
   2021 年 10 月 23 日   ❤️ 4
https://docs.cfw.lbyczf.com/contents/tun.html
直接 windows 端用 tun 吧,方便的很。
Knuth
   2
Knuth  
OP
   2021 年 10 月 23 日
@Nerv 一会尝试一下
nojsja
   3
nojsja  
   2021 年 10 月 23 日   ❤️ 1
linux 上我一直用 proxychain + ssr
ScepterZ
   4
ScepterZ  
   2021 年 10 月 23 日
我现在直接路由器挂小软件了,公司里应该也差不多是这么搞的吧,用起来比较省事
canbingzt
   5
canbingzt  
   2021 年 10 月 23 日 via iPhone   ❤️ 1
TypeError
   6
TypeError  
   2021 年 10 月 23 日 via Android   ❤️ 1
proxychains
jswh
   7
jswh  
   2021 年 10 月 23 日   ❤️ 1
netch
https://github.com/netchx/Netch
楼主收获了一大波软件
charlie21
   8
charlie21  
   2021 年 10 月 23 日   ❤️ 1
你这就是终端走代理的正确姿势

终端走代理的检测办法是
> curl "https://www.youtube.com" -X GET -I
如果有 200 结果,则说明终端的当前 session 对 youtube.com 网址已经走代理了
hingbong
   9
hingbong  
   2021 年 10 月 23 日 via Android   ❤️ 1
你 ping 一下$(hostname). 就能发现神奇的地方了,记得有个点
ch2
   10
ch2  
   2021 年 10 月 23 日   ❤️ 1
终极办法:windows 下开 openvpn 或者 pptp,任何流量都会走代理
次要:wsl2 下 proxychains
charlie21
   11
charlie21  
   2021 年 10 月 23 日   ❤️ 1
win clash - Proxies 选 Global (而非 Rule)
以上设置可以达到你想要的效果
johnniang
   12
johnniang  
   2021 年 10 月 23 日 via Android   ❤️ 1
试试 “宿主机名称.mshome.net” 域名,可以不用担心 IP 变动。
mchl
   13
mchl  
   2021 年 10 月 23 日   ❤️ 1
分享一个我一直在使用的解决方案:
mchl
   14
mchl  
   2021 年 10 月 23 日
分享一个我一直在使用的解决方案:
新建文件 /etc/profile.d/myenv.sh
内容是:
export http_proxy="http://$(grep -m 1 nameserver /etc/resolv.conf | awk '{print $2}'):10809"
export https_proxy=$http_proxy

保存后运行命令 source /etc/profile

这个文件会在每次重启时自动运行,而且是针对所有用户
别忘了设置 sudo 自动延用设置:
命令 sudo visudo
找到下面这行
Defaults env_reset
添加这一行
Defaults env_keep = "http_proxy https_proxy ftp_proxy all_proxy DISPLAY XAUTHORITY"
保存就可以了。
Knuth
   15
Knuth  
OP
   2021 年 10 月 23 日
@canbingzt 这个是我想要的,不过有点问题,我尝试修改一下
@ch2 这样更新也得走代理了,太慢了,我就想要 git 和 wget 走代理
chihiro2014
   16
chihiro2014  
   2021 年 10 月 23 日
用 docker ,wsl 里面装 docker ,然后要装软件的时候通过 docker ,它的 ip 就是你的 localhost ,而不是动态分配的了
SenLief
   17
SenLief  
   2021 年 10 月 23 日
你的没问题呀,clash 有么有开局域网。
ch2
   18
ch2  
   2021 年 10 月 23 日
@Knuth #15 git 很简单:git config --global https.proxy 'http://宿主机的 ip:1080'
wget 也有类似的方法,你可以单独设置,不走全局的
airborne007
   19
airborne007  
   2021 年 10 月 23 日
其实也可以反过来,在 wsl2 里面开 clash ,然后 windows 用 wsl2 里面的代理上网
Knuth
   20
Knuth  
OP
   2021 年 10 月 23 日
@ch2 我之前就是这么做的,但是这个 ip 是动态变化的,每次变化后,得手动更新有点麻烦
@SenLief 开了的。。。
@airborne007 未曾设想的道路
Knuth
   21
Knuth  
OP
   2021 年 10 月 23 日
@canbingzt 不太懂 bash ,请教一下,根据你这样设置后,git proxy 是有效的。但 http_proxy 、https_proxy 没有生效,我在终端`echo $http_proxy`没有返回呢?
Knuth
   22
Knuth  
OP
   2021 年 10 月 23 日
@johnniang 哈 ping 了一下返回了 wsl 的 ip,有点意外昂,这个宿主机名称不担心重复的吗
SenLief
   23
SenLief  
   2021 年 10 月 23 日
host_ip=$(cat /etc/resolv.conf |grep "nameserver" |cut -f 2 -d " ")
alias proxy="export ALL_PROXY="http://$host_ip:7890""
alias unproxy="unset ALL_PROXY"

我的配置,用的时候 proxy 就可以。不过现在用 tun ,没用这个了。
codehz
   24
codehz  
   2021 年 10 月 23 日 via Android
@Knuth 可以用分流模式啊)按域名选
interim
   25
interim  
   2021 年 10 月 23 日   ❤️ 1
用 clash 的 tun 模式就可以了,宿主机和 WSL2 直接走代理
Huelse
   26
Huelse  
   2021 年 10 月 24 日
我就设置了 https_proxy 和 http_proxy ,不过 host_ip 是指定的 192.168...,因为 ip addr 里能看到我本地局域网的地址,然后 clash 开启了 lan 就能用了,git 之类的都能通过外面的 clash 跑
kohoh
   27
kohoh  
   2021 年 10 月 24 日
FarAhead
   28
FarAhead  
   2021 年 10 月 24 日
虚拟机开个 openwrt 装 openclash 做旁路由,wsl2 设置旁路由为网关
xgao
   29
xgao  
   2021 年 10 月 25 日
hostip=$(cat /etc/resolv.conf | grep nameserver | awk '{ print $2 }')
alias socks='ALL_PROXY=socks5://${hostip}:10800/ \
http_proxy=http://${hostip}:10800/ \
https_proxy=http://${hostip}:10800/ \
HTTP_PROXY=http://${hostip}:10800/ \
HTTPS_PROXY=http://${hostip}:10800/'

先查询 wsl 分配的 ip ,然后 alias 一个 socks 。想走代理的话加 socks 前缀就行了:socks curl cip.cc
uni
   30
uni  
   2021 年 10 月 25 日
我用 v2ray 的,按照这个帖子设置的没有问题: https://syz913.github.io/2021/03/20/wsl2/

但是 v2ray 好像对 ssl 支持非常差,很多东西(比如说 python )要访问网络都会报错,不知道大家有没有什么办法
AoEiuV020
   31
AoEiuV020  
   2021 年 10 月 25 日
我是直接写死 windows 在局域网的 ip ,就是路由器分配的那个,路由器上设置分配固定 ip ,然后把 windows 上的代理软件设置监听 0.0.0.0 允许局域网连接,再打开防火墙,
就不需要考虑 wsl ip 变化的影响了,
© 2026 V2EX · 87ms · 3.9.8.5