V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Knuth
V2EX  ›  Windows

请教一个 WSL2 上代理的问题

  •  1
     
  •   Knuth · 2021-10-23 10:03:52 +08:00 · 7708 次点击
    这是一个创建于 1132 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    终端走代理的检测办法是
    > curl "https://www.youtube.com" -X GET -I
    如果有 200 结果,则说明终端的当前 session 对 youtube.com 网址已经走代理了
    hingbong
        9
    hingbong  
       2021-10-23 13:08:30 +08:00 via Android   ❤️ 1
    你 ping 一下$(hostname). 就能发现神奇的地方了,记得有个点
    ch2
        10
    ch2  
       2021-10-23 13:11:19 +08:00   ❤️ 1
    终极办法:windows 下开 openvpn 或者 pptp,任何流量都会走代理
    次要:wsl2 下 proxychains
    charlie21
        11
    charlie21  
       2021-10-23 14:00:57 +08:00   ❤️ 1
    win clash - Proxies 选 Global (而非 Rule)
    以上设置可以达到你想要的效果
    johnniang
        12
    johnniang  
       2021-10-23 15:00:05 +08:00 via Android   ❤️ 1
    试试 “宿主机名称.mshome.net” 域名,可以不用担心 IP 变动。
    mchl
        13
    mchl  
       2021-10-23 15:20:16 +08:00   ❤️ 1
    分享一个我一直在使用的解决方案:
    mchl
        14
    mchl  
       2021-10-23 15:24:22 +08:00
    分享一个我一直在使用的解决方案:
    新建文件 /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 15:25:37 +08:00
    @canbingzt 这个是我想要的,不过有点问题,我尝试修改一下
    @ch2 这样更新也得走代理了,太慢了,我就想要 git 和 wget 走代理
    chihiro2014
        16
    chihiro2014  
       2021-10-23 16:48:42 +08:00
    用 docker ,wsl 里面装 docker ,然后要装软件的时候通过 docker ,它的 ip 就是你的 localhost ,而不是动态分配的了
    SenLief
        17
    SenLief  
       2021-10-23 17:07:27 +08:00
    你的没问题呀,clash 有么有开局域网。
    ch2
        18
    ch2  
       2021-10-23 17:20:29 +08:00
    @Knuth #15 git 很简单:git config --global https.proxy 'http://宿主机的 ip:1080'
    wget 也有类似的方法,你可以单独设置,不走全局的
    airborne007
        19
    airborne007  
       2021-10-23 18:03:28 +08:00
    其实也可以反过来,在 wsl2 里面开 clash ,然后 windows 用 wsl2 里面的代理上网
    Knuth
        20
    Knuth  
    OP
       2021-10-23 20:00:49 +08:00
    @ch2 我之前就是这么做的,但是这个 ip 是动态变化的,每次变化后,得手动更新有点麻烦
    @SenLief 开了的。。。
    @airborne007 未曾设想的道路
    Knuth
        21
    Knuth  
    OP
       2021-10-23 20:04:10 +08:00
    @canbingzt 不太懂 bash ,请教一下,根据你这样设置后,git proxy 是有效的。但 http_proxy 、https_proxy 没有生效,我在终端`echo $http_proxy`没有返回呢?
    Knuth
        22
    Knuth  
    OP
       2021-10-23 20:06:40 +08:00
    @johnniang 哈 ping 了一下返回了 wsl 的 ip,有点意外昂,这个宿主机名称不担心重复的吗
    SenLief
        23
    SenLief  
       2021-10-23 20:16:33 +08:00
    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 20:18:22 +08:00 via Android
    @Knuth 可以用分流模式啊)按域名选
    interim
        25
    interim  
       2021-10-23 23:19:37 +08:00   ❤️ 1
    用 clash 的 tun 模式就可以了,宿主机和 WSL2 直接走代理
    Huelse
        26
    Huelse  
       2021-10-24 00:40:13 +08:00
    我就设置了 https_proxy 和 http_proxy ,不过 host_ip 是指定的 192.168...,因为 ip addr 里能看到我本地局域网的地址,然后 clash 开启了 lan 就能用了,git 之类的都能通过外面的 clash 跑
    kohoh
        27
    kohoh  
       2021-10-24 16:27:55 +08:00
    w7938940
        28
    w7938940  
       2021-10-24 20:34:28 +08:00
    虚拟机开个 openwrt 装 openclash 做旁路由,wsl2 设置旁路由为网关
    xgao
        29
    xgao  
       2021-10-25 09:18:58 +08:00
    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 09:21:56 +08:00
    我用 v2ray 的,按照这个帖子设置的没有问题: https://syz913.github.io/2021/03/20/wsl2/

    但是 v2ray 好像对 ssl 支持非常差,很多东西(比如说 python )要访问网络都会报错,不知道大家有没有什么办法
    AoEiuV020
        31
    AoEiuV020  
       2021-10-25 10:09:01 +08:00
    我是直接写死 windows 在局域网的 ip ,就是路由器分配的那个,路由器上设置分配固定 ip ,然后把 windows 上的代理软件设置监听 0.0.0.0 允许局域网连接,再打开防火墙,
    就不需要考虑 wsl ip 变化的影响了,
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3760 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 10:34 · PVG 18:34 · LAX 02:34 · JFK 05:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.