请教我设置 WSL2 网络代理 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tuoov
V2EX    宽带症候群

请教我设置 WSL2 网络代理

  •  1
     
  •   tuoov 2024-03-27 09:12:19 +08:00 6918 次点击
    这是一个创建于 639 天前的主题,其中的信息可能已经有所发展或是发生改变。

    尝试给 WSL 设置代理,试了这两种方法都没有成功,哪位 V 友能帮我指点指点?

    一、设置 wslconfig

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

    设置之后启动 WSL 报错: 不支持镜像网络模式,正在回退到 NAT 网络

    二、设置 http_proxy

    host_ip=$(cat /etc/resolv.conf |grep "namserver" |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” 选项,防火墙设置了专业网络和公共网络都可通信。实在不知道还能怎么办了

    第 1 条附言    2024-03-27 11:16:03 +08:00

    感谢各位的帮助,设置 http_proxy 的方式暂时能用了。

    如果你遇到了这个问题,请参考:

    1. 在 WSL 中执行 ip route show | grep -i default | awk '{ print $3}', 返回的 IP 是 Windows 宿主机的 IP。它的值应该和在 Windows 中执行 ipconfg 返回的 WSL 的 IPv4 地址相同
    2. export http_proxy='http://{第一步中的 IP 地址}:port', 执行 wget www.google.com, 应该能访问成功
    3. 开启 Clash 的 Tun 模式无效(但你的情况可能不一样)
    4. 这是我的 Windows 和 WSL 版本,这个版本无法通过配置 .wslconfig 解决代理问题。如果你想用这种方法,记得检查版本:
    WSL 版本: 2.2.1.0 Windows 版本: 10.0.19045.4170 
    第 2 条附言    2024-10-09 11:07:24 +08:00
    目前最佳方案: https://github.com/sakai135/wsl-vpnkit
    不需要改配置写脚本,按照 readme 执行即可。
    30 条回复    2025-05-30 00:17:48 +08:00
    justsomac
        1
    justsomac  
       2024-03-27 09:23:59 +08:00
    系统太旧,不支持,升级系统
    uNoBrain
        2
    uNoBrain  
       2024-03-27 09:27:29 +08:00
    确认下宿主机的 IP ,我的可以正常访问宿主机的 socks5 代理
    storyxc
        3
    storyxc  
       2024-03-27 09:28:29 +08:00
    可以参考下 /t/975098
    tuoov
        4
    tuoov  
    OP
       2024-03-27 09:38:21 +08:00
    @Goooooos 除了看 `/etc/resolv.conf`还有什么办法可以检查宿主机 IP 吗?
    uNoBrain
        5
    uNoBrain  
       2024-03-27 10:05:10 +08:00   1
    @tuoov

    ip route show
    body007     6
    body007  
       2024-03-27 10:14:21 +08:00   1
    直接 ipconfig 找到 win 系统的 WSL 网卡 ip ,在 wsl 里面用这个 ip ,我这边可以成功。

    yushiro
        7
    yushiro  
       2024-03-27 10:26:38 +08:00 via iPhone
    wsl 里面装个 v2raya ,默认全局代理,不需要配置任何环境变量
    chinaguaiu
        8
    chinaguaiu  
       2024-03-27 10:34:00 +08:00
    老实说我就是像你这么干的,就是每次启动 wsl 都要看/etc/resolv.conf 很折磨
    chinaguaiu
        9
    chinaguaiu  
       2024-03-27 10:36:31 +08:00
    你不妨确认一下代理软件的端口有没有设置好,仔细看一下,可能端口被重置掉了
    chensuixiang
        10
    chensuixiang  
       2024-03-27 10:36:46 +08:00
    //注意写本机地址
    export ALL_PROXY="http://本机 ip:7890"
    //测试
    curl https://www:google.com
    //取消代理
    export ALL_PROXY=

    我之前是这样的,本机开的 clash 端口 7890 ,然后到 wsl2 上输入上面 export 命令。缺点是一次性的,每次重启 wsl2 如果要代理都得手动输入一遍。至于 Allow LAN 开不开,忘了,不过之前我确实可行的
    uliah
        11
    uliah  
       2024-03-27 10:39:26 +08:00   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
    SuperMaskv
        12
    SuperMaskv  
       2024-03-27 10:41:25 +08:00   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`
    kaleido
        13
    kaleido  
       2024-03-27 10:41:58 +08:00
    没人用 clash 的 tun 吗,啥也不用设置,打开 tun 模式就完了
    mclxly
        14
    mclxly  
       2024-03-27 10:43:30 +08:00
    我每次按需手动执行:

    export http_proxy=socks5://[宿主机 IP]:2080 https_proxy=socks5://[宿主机 IP]:2080
    cslive
        15
    cslive  
       2024-03-27 10:44:59 +08:00
    打开 tun 模式完事
    alexsz
        16
    alexsz  
       2024-03-27 10:53:46 +08:00
    供参考:
    我使用 win11 + clash-verge + WSL2 ,系统代理模式
    WSL2 的网络代理工作正常
    我的.wslconfig 文件内容如下:
    [experimental]
    autoMemoryReclaim=gradual
    networkingMode=mirrored
    dnsTunneling=true
    firewall=false
    autoProxy=true
    selca
        17
    selca  
       2024-03-27 11:35:24 +08:00
    proxychains4
    uNoBrain
        18
    uNoBrain  
       2024-03-27 11:36:19 +08:00
    @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"
    eaststarpen
        19
    eaststarpen  
       2024-03-27 11:42:16 +08:00
    我有一个暴力做法

    wsl 的环境变量是包含 windows host 的环境变量的; 就是说可以直接在 wsl bash 里运行 windows 命令

    我之前的做法是 ipconfig.exe 获取宿主机 ip, 而且可以直接通过管道同时运行 Windows 和 wsl 指令, 如 "ipconfig.exe | grep -i ipv4"
    heiher
        20
    heiher  
       2024-03-27 11:42:52 +08:00
    我之前在 WSL2 上实测过 tun2socks 方式可以: https://github.com/heiher/hev-socks5-tunnel
    MortonL
        21
    MortonL  
       2024-03-27 11:43:43 +08:00
    使用的 clash 的 tun 模式
    eaststarpen
        22
    eaststarpen  
       2024-03-27 11:44:16 +08:00
    但是不管是 tun 还是设置 http_proxy 环境变量, 总有一些应用无法代理, 或者代理效果不理想 (主要是 neovim update 和 npm install; 我 git 和 npm 都设置代理变量了); 我后来的做法是路由器透明代理
    zed1018
        23
    zed1018  
       2024-03-27 11:47:24 +08:00
    不支持 mirrored network 是因为你系统版本太老了
    sjkdsfkkfd
        24
    sjkdsfkkfd  
       2024-03-27 16:18:16 +08:00
    一律建议在路由器上搞代理,完全透明,支持任何设备,任何环境
    listenerri
        25
    listenerri  
       2024-03-27 23:43:49 +08:00 via Android   1
    推荐下我的方法,用着挺爽,我是在 .bashrc 里声明两个交互式函数:
    - http-proxy-set 用于普通 linux 下设置代理,默认值 127.0.0.1:1080 ,临时要用其他的就手动输入,不然直接回车就行
    - http-proxy-set-wsl 用于在 wsl 里设置代理,默认值 IP 取自 wsl 网关,也就是 win 主机本身,一般直接回车

    链接分别为:
    - htps://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

    三个函数定义其实都在同一个文件里,挨着呢
    dxcqcv
        26
    dxcqcv  
       2024-06-30 14:23:37 +08:00
    研究了好久,如果用 socks5 和 privoxy 代理的话,要记得开启`listen-address 0.0.0.0:8118`
    gqfBzoLVY3Wl4Tng
        27
    gqfBzoLVY3Wl4Tng  
       2024-07-02 02:35:10 +08:00
    借楼问个关联问题,网上爬文设置了镜像网络,但是宿主机器无法通过浏览器访问容器的镜像了,镜像网络是生效的,因为 immich 的 remote machine learning 工作了。在设置镜像网络之前是没法工作的,但是可以通过 HTTP://localhost:port 访问 porainer 。不知道有什么解决方案,或者有什么关键词。折腾一天了。

    虽然初衷只是帮助孱弱的 nas 识别人面,但有可能的话,还是像看看怎么彻底设置好。

    win11 ,23h2 ,wsl 最新版,cfw 不是 tun 模式,docker desktop 使用代理是没问题的。
    gqfBzoLVY3Wl4Tng
        28
    gqfBzoLVY3Wl4Tng  
       2024-07-02 03:43:57 +08:00
    @pierrec 暂时成功使用 ip 访问了,不需要禁用 iptable ,不用 host 模式创建容器。
    Limoncrist
        29
    Limoncrist  
       2024-10-06 10:17:19 +08:00   1
    @kaleido it worked !
    daisyfloor
        30
    daisyfloor  
       210 天前
    @alexsz wls 是可以了,但里面的 docker pull 不下来,似乎里面的 docker 还要再设置一次代理。。
    关于     帮助文档     自助推广系统     博客     API     FAQ   &nbp; Solana     4223 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 43ms UTC 10:06 PVG 18:06 LAX 02:06 JFK 05:06
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86