求大神指导下 wsl2 的网络配置 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
wxyoung
V2EX    程序员

求大神指导下 wsl2 的网络配置

  •  
  •   wxyoung 2024-06-23 16:08:37 +08:00 3192 次点击
    这是一个创建于 523 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我在 wsl 里,设置了/etc/wsl.conf ,就无法访问外网,ping 不通,一旦删除/etc/wsl.conf 就可以访问了,但是无法使用 service 了,不知道哪里出的问题,下面是配置信息

    Windows 11 专业工作站版 23H2

    WSL 版本:2.2.4.0 内核版本:5.15.153.1-2 WSLg 版本:1.0.61 MSRDC 版本:1.2.5326 Direct3D 版本:1.611.1-81528511 DXCore 版本:10.0.26091.1-240325-1447.ge-release Windows 版本:10.0.22631.3447

    .wslconfig(windows)配置如下

    [wsl2] memory=20GB #限制最大内存 processors=8 #限制线程数 localhostforwarding=true nestedVirtualization=true guiApplicatiOns=true [experimental] autoMemoryReclaim=gradual # gradual | dropcache | disabled networkingMode=mirrored dnsTunneling=true firewall=true autoProxy=true sparseVhd=true [network] generateResolvCOnf= false 

    我的/etc/wsl.config 配置如下

    [boot] systemd=true [network] generateResolvCOnf= false [user] default = root 

    我的/etc/resolv.conf 配置如下:

    nameserver 8.8.8.8 nameserver 8.8.4.4 
    第 1 条附言    2024-06-24 13:47:26 +08:00
    统一回复一下,问题不在配置,我重装了 wsl ,按照这个配置来是没有问题的,也可以使用 vpn 代理,问题出在别的地方,我使用了一些脚本搭建本地环境,换成 apt-get install 就好了
    15 条回复    2024-06-24 12:08:31 +08:00
    javazero
        1
    javazero  
       2024-06-23 16:15:17 +08:00
    改桥接试试,目测是 dns 的问题。
    wxyoung
        2
    wxyoung  
    OP
       2024-06-23 16:21:44 +08:00
    @javazero 改桥接的话,windows 如何访问 wsl 里的 nginx ,应该不是固定 ip 吧
    zed1018
        3
    zed1018  
       2024-06-23 16:24:08 +08:00
    试试不要把 generateResolvConf 设为 false ,让 wsl2 用 windows 的 dns 。

    这是我的配置

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

    [experimental]
    sparseVhd=true
    autoMemoryReclaim=gradual
    hostAddressLoopback=true
    wxyoung
        4
    wxyoung  
    OP
       2024-06-23 16:37:43 +08:00
    @zed1018 你的/etc/wsl.conf 是什么
    liuhaitaoSB
        5
    liuhaitaoSB  
       2024-06-23 16:53:02 +08:00
    看你的需求应该是想访问 wsl2 里面的服务,并且 让 wsl2 能访问外网.
    generateResolvCOnf= true 或者删除.
    重启瞎 wsl
    再进入 wsl,查看/etc/resolv.conf
    打开 powershell ,ipconfig 看看上面 ip 对应的网卡, 比如说 以太网适配器 vEthernet (WSL (Hyper-V firewall)):
    然后,管理员执行
    New-NetFirewallRule -DisplayName "WL_Hyper-V firewall" -Direction Inbound -InterfaceAlias "vEthernet (WSL (Hyper-V firewall))" -Action Allow

    这时, 就可以用 resolv 里面的 ip 乃访问 wsl 了.
    liuhaitaoSB
        6
    liuhaitaoSB  
       2024-06-23 16:54:13 +08:00
    @wxyoung 桥接的时候可以指定 ip 啊.
    liuhaitaoSB
        7
    liuhaitaoSB  
       2024-06-23 17:03:56 +08:00
    @liuhaitaoSB 之前可以这样的.好像 G 了,
    liuhaitaoSB
        8
    liuhaitaoSB  
       2024-06-23 17:22:24 +08:00
    刚才瞄了一眼, 之前是 resolv.conf 里面默认是和 window 的虚拟网卡是同一个 ip, 现在改成 10.255.255.254 了.
    反着来.
    你的配置不用改,
    windows ipconfg 找到 vEthernet (WSL (Hyper-V firewall)),并且复制其 IP
    管理员运行
    New-NetFirewallRule -DisplayName "WSL_Hyper-V firewall" -Direction Inbound -InterfaceAlias "vEthernet (WSL (Hyper-V firewall))" -Action Allow
    进入 wsl, 修改/etc/resolv.conf 里面修改为上面复制的 IP
    重启下 wsl
    ip addr ,用这个 IP 访问即可.
    whusnoopy
        9
    whusnoopy  
       2024-06-23 19:04:07 +08:00
    我用 mirrored 模式,直接 wsl2 和本机共享对外 IP https://learn.microsoft.com/en-us/windows/wsl/networking#mirrored-mode-networking
    guzzhao
        10
    guzzhao  
       2024-06-23 22:06:10 +08:00
    我现在用的 mirrored,下面的配置是之前的,也可以固定 ip,可以试试




    ## ~~使用桥接网络 固定 ip 以及其他配置~~

    1. Hyper-V 虚拟机创建外部虚拟交换机
    2. 修改.wslconfig
    ```
    [wsl2]
    networkingMode=bridged
    vmSwitch=替换成你创建的虚拟交换机名称
    dhcp=false
    ```

    > 当 dhcp=false 时会读取 `/lib/systemd/network/wsl_external.network` 的网络配置

    `vim /lib/systemd/network/wsl_external.network`
    ```ini
    [Match]
    Name=eth0
    [Network]
    Description=bridge
    DHCP=false
    Address=192.168.1.10/24 # 自行修改
    Gateway=192.168.0.1 # 自行修改

    ```

    **修改 DNS 禁止自动生成**

    添加`/etc/wsl.conf`加入以下内容

    ```ini
    [boot]
    systemd=true
    [network]
    generateResolvCOnf= false
    ```

    ```bash
    rm -f /etc/resolv.conf
    echo "nameserver 223.5.5.5" > /etc/resolv.conf
    ```

    3. 重新启动 WSL 子系统
    leeyuzhe
        11
    leeyuzhe  
       2024-06-23 22:12:44 +08:00
    借楼问一下我 mirrored 模式会导致 idea 使用 debug 时被调试的程序会直接阻塞住,另外停止的时候也停不了
    /div>
    StarkXiao
        12
    StarkXiao  
       2024-06-23 22:27:49 +08:00
    我使用了以下配置,/etc/resolv.conf 是 WSL 自动生成的

    ```
    [wsl2]
    memory=18GB
    localhostforwarding=true
    ```

    在以前,我每次启动 WSL ,我必须执行以下 batch 脚本

    ``` batch
    @echo off
    setlocal enabledelayedexpansion

    rem Set Variables
    set wsl_hosts=wsl.local
    set win_hosts=win.local
    set HOSTS_PATH=%windir%\System32\drivers\etc\hosts

    rem Greping IPs
    for /f %%a in ('wsl -- bash -c "ip r | grep default | head -1 | cut -f3 -d ' '"') do set winip=%%a
    for /f %%a in ('wsl -- bash -c "hostname -I"') do set wslip=%%a
    echo win ip: %winip%
    echo wsl IP: %wslip%

    echo Setting below lines to Clipboard...
    echo !wslip! !wsl_hosts! # wsl_hosts
    echo !winip! !win_hosts! # win_hosts

    rem clear clipboard
    echo off | clip

    rem write to clipboard
    (
    echo %wslip% %wsl_hosts% # wsl_hosts
    echo %winip% %win_hosts% # win_hosts
    ) | clip

    echo Done

    rem echo new blank line
    echo.
    echo Opening editor to replace Hosts file manually...
    start explorer.exe C:\Windows\System32\drivers\etc\hosts

    echo.
    echo Ready to exec below lines, [press Any Key to continue] when you updated the host file
    echo ipconfig /flushdns

    pause >nul

    ipconfig /flushdns

    endlocal
    ```

    上述脚本设置了两个 host 映射 `wsl.local` 以及 `win.local` ,并把映射写到粘贴板,再打开 hosts 文件,人手粘贴更新,最后在 cmd 界面按下任意按键执行 DNS 缓存刷新。

    操作完之后,可以通过 `wsl.local` 访问到 wsl 里的服务端口,通过 `win.local` 访问到 Windows 里的服务端口,在 Windows 里使用 localhost 也能访问到 wsl 里。

    在今年不知道哪个版本开始,wsl 的 IP 固定了,基本上也就不需要执行上面的脚本了,但每次我开启 wsl 还是执行它,确认 host 有没有更新的必要。
    urlk
        13
    urlk  
       2024-06-23 22:50:36 +08:00
    网络模式改成镜像模式, 不过偶尔也会遇到网络不通的情况, 重启大法解决一切
    zed1018
        14
    zed1018  
       2024-06-23 23:22:22 +08:00
    @wxyoung #4

    [boot]
    systemd=true

    [automount]
    optiOns="metadata,umask=022"
    Pantheoon
        15
    Pantheoon  
       2024-06-24 12:08:31 +08:00
    是不是装 vpn 了,vpn 会改 dns
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2560 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 04:21 PVG 12:21 LAX 20:21 JFK 23:21
    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