
具体问题是发现我的程序在连接 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 NessajCN 2024-04-12 11:14:12 +08:00 先 sysctl net.ipv4.ip_local_port_range="32768 60999" 或者 echo "32768 61000" >/proc/sys/net/ipv4/ip_local_port_range 试一下 成功了再写进/etc/sysctl.conf |
2 leeyuzhe OP @NessajCN 你注意看我说的,可以改,但是改完就上不了网了。只要客户端端口不在它默认的 60500 到 60800 中间就连不上任何 tcp 连接 |
3 lolizeppelin 2024-04-12 14:33:47 +08:00 先确定你要多少个链接,然后按照具体数量设置/proc/sys/net/ipv4/ip_local_port_range 设置完后到 windows 中,找到对应分配端口的注册表 设置动态端口避开 ip_local_port_range 占用的动态分配端口 重启系统 |
4 leeyuzhe OP @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 |
5 lolizeppelin 2024-04-12 15:26:13 +08:00 win 系统默认的你别改多啊,改少一点试试 我也是猜的 |
6 leeyuzhe OP @lolizeppelin 新发现,当前条件下 wsl2 中的动态端口仅为 60700-61000 时可以联通 tcp ,还是 300 个,不多不少 |
7 leeyuzhe OP @lolizeppelin #5 主要是我之前没有这个注册表的键,我刚新增的,。,。 |
8 lolizeppelin 2024-04-12 15:30:39 +08:00 还有一个可能 60000-65000 之间的端口 是 win 某些服务的默认端口.... 你可以尝试把 ip_local_port_range 改到 3w 或者 4w 避开系统已经用到的端口,或者之际从 win 的默认动态端口里扣出来 |
9 leeyuzhe OP @lolizeppelin #8 查了下,windows 默认的动态端口范围为 49152 到 65535 ,我改成 50000-60000 还缩小了呢。 我尝试了 3w 或者 2w 附近的端口范围,通通不行。 最后感谢你的解答与猜测。 |
10 Dicks 2024-04-20 19:23:58 +08:00 我也遇到了这个问题 把 firewall 设置为 false 就正常了, 所以猜想应该是防火墙的啥规则导致的 [experimental] firewall=false |