机器 A 的 ssh 服务可以接收新的连接,但是不能用 telnet 连接机器 B 的 ssh 服务,会是什么原因呢?
当前环境是:
机器 A:172.31.15.148
机器 B:172.31.6.159
两机器在同一内网,linux 内核是 5.10.157 ,均有 ssh 服务
机器 A 已经有 102610 个连接了,此时 telnet 机器 B 不行:
[root@ip-172-31-15-148 ~]# ss -s
Total: 102810
TCP: 102635 (estab 102610, closed 1, orphaned 0, timewait 1)
[root@ip-172-31-15-148 ~]# telnet 172.31.6.159 22
Trying 172.31.6.159...
而机器 B 可以 telnet 机器 A:
[root@ip-172-31-6-159 ~]# telnet 172.31.15.148 22
Trying 172.31.15.148...
Connected to 172.31.15.148.
Escape character is '^]'.
SSH-2.0-OpenSSH_7.4
机器 A 释放了它的 102610 个连接后,telnet 机器 B 是 ok 的
[root@ip-172-31-15-148 ~]# telnet 172.31.6.159 22
Trying 172.31.6.159...
Connected to 172.31.6.159.
Escape character is '^]'.
SSH-2.0-OpenSSH_7.4
这会是什么原因呢?或者怎么排查呢?我用strace telnet 172.31.6.159 22
查看是卡在 connect 系统调用上。
1
crystom 2023-01-10 17:40:04 +08:00
65536 并发警告
|
2
julyclyde 2023-01-10 17:46:52 +08:00
抓包看看?
在 A 上执行 sudo tcpdump -X host B 的 IP 地址 and tcp port 22 |
4
xing393939 OP @julyclyde
这事抓包结果: ``` [root@ip-172-31-15-148 ~]# tcpdump -i any net 172.31.6.159 -nn tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes 10:03:36.321501 IP 172.31.15.148.22116 > 172.31.6.159.22: Flags [S], seq 3335570490, win 2048, options [mss 8961,sackOK,TS val 557774307 ecr 0,nop,wscale 7], length 0 10:03:37.332029 IP 172.31.15.148.22116 > 172.31.6.159.22: Flags [S], seq 3335570490, win 2048, options [mss 8961,sackOK,TS val 557775318 ecr 0,nop,wscale 7], length 0 10:03:39.348030 IP 172.31.15.148.22116 > 172.31.6.159.22: Flags [S], seq 3335570490, win 2048, options [mss 8961,sackOK,TS val 557777334 ecr 0,nop,wscale 7], length 0 10:03:43.380028 IP 172.31.15.148.22116 > 172.31.6.159.22: Flags [S], seq 3335570490, win 2048, options [mss 8961,sackOK,TS val 557781366 ecr 0,nop,wscale 7], length 0 ``` |
6
julyclyde 2023-01-11 09:25:02 +08:00
上述 A 抓包,看起来是发送了 SYN 但是没有收到 ACK 响应
倒是跟 strace 结果一致 那如果在 B 上抓包呢? |
7
crystom 2023-01-11 09:33:20 +08:00
我认为是本地端口占满了,就无法做 tcp 客户端了
|
8
crystom 2023-01-11 09:33:40 +08:00
做服务端时,没有这个限制。
|
9
xing393939 OP @julyclyde 机器 B 收不到包
|
10
julyclyde 2023-01-11 13:01:52 +08:00
@xing393939 你给 tcpdump 更换几次-i 看看,到底是从哪个网卡发出去的 SYN
|
11
bulay 2023-01-11 14:41:17 +08:00
我记得看到过,每个 tcp 连接的信息都会占用一定的内存空间,可以看看内存的利用率
|
12
xuboying 2023-01-11 14:45:01 +08:00
那你试试 telnet 别的 ip ,别的端口呢?先锁定问题是机器 A 或者机器 B
|
13
xing393939 OP |
16
julyclyde 2023-01-11 17:48:14 +08:00
@xing393939 确认 eth0 是正确的吗?那你查查网络?
|