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

wsl2 的 mirrored 网络模式中的 net.ipv4.ip_local_port_range 如何修改?

  •  
  •   leeyuzhe · 232 天前 · 1095 次点击
    这是一个创建于 232 天前的主题,其中的信息可能已经有所发展或是发生改变。

    具体问题是发现我的程序在连接 kafka 的时候报错 Cannot assign requested address ,然后我就开始 debug 。结果发现刚开始 kafka 是能正常连接的,随着程序启动,各分区都开始连接然后就开始报错了,我就统计了下当前连接数,发现每次都是 299 个连接。最后发现/proc/sys/net/ipv4/ip_local_port_range 这里面只给了三百个端口,从 60500 到 60800 。然后我就尝试在/etc/sysctl.conf 中修改这个 net.ipv4.ip_local_port_range 范围结果发现一旦把它修改成别的数值后任何 tcp 连接就都建立不了了

    第 1 条附言  ·  228 天前
    相关 issue
    https://github.com/microsoft/WSL/issues/11450

    顺便问一下这玩意多久有人处理啊
    11 条回复    2024-04-21 22:15:17 +08:00
    NessajCN
        1
    NessajCN  
       232 天前
    先 sysctl net.ipv4.ip_local_port_range="32768 60999"
    或者 echo "32768 61000" >/proc/sys/net/ipv4/ip_local_port_range
    试一下
    成功了再写进/etc/sysctl.conf
    leeyuzhe
        2
    leeyuzhe  
    OP
       232 天前
    @NessajCN 你注意看我说的,可以改,但是改完就上不了网了。只要客户端端口不在它默认的 60500 到 60800 中间就连不上任何 tcp 连接
    lolizeppelin
        3
    lolizeppelin  
       232 天前   ❤️ 1
    先确定你要多少个链接,然后按照具体数量设置/proc/sys/net/ipv4/ip_local_port_range
    设置完后到 windows 中,找到对应分配端口的注册表
    设置动态端口避开 ip_local_port_range 占用的动态分配端口
    重启系统
    leeyuzhe
        4
    leeyuzhe  
    OP
       232 天前
    @lolizeppelin
    按照你说的,我在 windows 注册表里面把 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\TcpPortRange 改成了 50000-60000 然后在 wsl2 里面设置 sudo sysctl -w net.ipv4.ip_local_port_range="60001 63000"。
    重启电脑然后 wsl2 现在无法建立任何 tcp 连接了,我甚至连 ssh 我自己都不行了
    sudo netstat -tunalp | grep 10.0.16.110
    tcp 0 1 10.0.16.110:61565 10.0.16.110:22 SYN_SENT 3077/ssh
    lolizeppelin
        5
    lolizeppelin  
       232 天前
    win 系统默认的你别改多啊,改少一点试试
    我也是猜的
    leeyuzhe
        6
    leeyuzhe  
    OP
       232 天前
    @lolizeppelin 新发现,当前条件下 wsl2 中的动态端口仅为 60700-61000 时可以联通 tcp ,还是 300 个,不多不少
    leeyuzhe
        7
    leeyuzhe  
    OP
       232 天前
    @lolizeppelin #5 主要是我之前没有这个注册表的键,我刚新增的,。,。
    lolizeppelin
        8
    lolizeppelin  
       232 天前   ❤️ 1
    还有一个可能 60000-65000 之间的端口 是 win 某些服务的默认端口....
    你可以尝试把 ip_local_port_range 改到 3w 或者 4w
    避开系统已经用到的端口,或者之际从 win 的默认动态端口里扣出来
    leeyuzhe
        9
    leeyuzhe  
    OP
       232 天前
    @lolizeppelin #8 查了下,windows 默认的动态端口范围为 49152 到 65535 ,我改成 50000-60000 还缩小了呢。
    我尝试了 3w 或者 2w 附近的端口范围,通通不行。
    最后感谢你的解答与猜测。
    Dicks
        10
    Dicks  
       223 天前
    我也遇到了这个问题
    把 firewall 设置为 false 就正常了, 所以猜想应该是防火墙的啥规则导致的

    [experimental]
    firewall=false
    leeyuzhe
        11
    leeyuzhe  
    OP
       222 天前
    @Dicks 你也是因为客户端端口不够用导致的么?我防火墙一直是 false ,这不起作用呀。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2698 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 10:12 · PVG 18:12 · LAX 02:12 · JFK 05:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.