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