TCP连接因源接口不同无法到达进程的问题排查求助
TCP连接因源接口不同无法到达进程的问题排查求助
我遇到了一个奇怪的问题:TCP连接能否到达监听套接字,居然取决于数据包的源接口。
背景情况
我正在给一台主机(AGENTIP)配置Zabbix Agent,需要Zabbix服务器(SERVERIP)通过TCP连接到AGENTIP的10050端口。
- 在AGENTIP本机上执行
telnet AGENTIP 10050,连接能正常工作,通过strace可以看到Zabbix Agent进程确实接收到了连接请求。 - 但从Zabbix服务器执行同样的
telnet AGENTIP 10050命令时,连接请求根本没到达zabbix-agent2进程,strace完全没相关日志。
抓包对比(tcpdump结果)
我用tcpdump抓包后发现,两种场景的数据包几乎一致,唯一明显的区别就是数据包到达的接口:
正常工作(AGENTIP本机连接自己的10050端口)
12:47:09.368585 lo In IP AGENTIP.36870 > AGENTIP.10050: Flags [S], seq 2114873310, win 65495, options [mss 65495,sackOK,TS val 973877732 ecr 0,nop,wscale 7], length 0
对应的strace日志显示进程接受了连接:
[pid 2456233] accept4(9, {sa_family=AF_INET, sin_port=htons(36870), sin_addr=inet_addr("AGENTIP")}, [112 => 16], SOCK_CLOEXEC|SOCK_NONBLOCK) = 11
无法工作(SERVERIP连接AGENTIP的10050端口)
12:48:05.298526 eth0 In IP SERVERIP.41580 > AGENTIP.10050: Flags [S], seq 2687217389, win 64240, options [mss 1460 ,sackOK,TS val 2072822359 ecr 0,nop,wscale 7], length 0
对应的strace日志完全没有接受连接的记录。
已尝试的排查步骤
- 已经关闭了AGENTIP上的防火墙(ufw)
- 尝试让Zabbix Agent监听
0.0.0.0和AGENTIP本身两种模式,问题依旧存在
我不太清楚在tcpdump显示数据包到达,到进程通过strace显示接受连接之间,还有什么环节会出问题?有没有我漏掉的排查点?
备注:内容来源于stack exchange,提问作者Daan Meijer
相关产品推荐
相关产品推荐

