IPTables丢弃数据包

我们在连接到远程FTP站点时遇到了一些问题(我们随机在连接上获取超时),而我们倾向于认为这是远程FTP服务器的问题(一个线索是,我们只有这个具体问题服务器,所有其他工作正常),我们正在努力确保这个问题不是从我们这边来的。

我偶然发现了我们代理服务器(Debian 6.0)的kern.log中的以下内容:

proxy kernel: [ 4421.346444] deny-forward IN=eth0 OUT=eth1 SRC=xxx.xxx.xxx.xxx DST=yyy.yyy.yyy.yyy LEN=40 TOS=0x00 PREC=0x00 TTL=62 ID=59026 PROTO=TCP SPT=32116 DPT=21 WINDOW=8192 RES=0x00 ACK PSH FIN URGP=0 

iptables -L为链式转发提供以下输出(为了清晰起见缩短):

 Chain FORWARD (policy DROP) target prot opt source destination TCPMSS tcp -- 0.0.0.0/0 0.0.0.0/0 tcp flags:0x06/0x02 TCPMSS clamp to PMTU ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:53 flags:0x17/0x02 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 state NEW udp dpt:53 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:53 flags:0x17/0x02 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 state NEW udp dpt:53 ACCEPT tcp -- xxx.xxx.xxx.xxx 0.0.0.0/0 state NEW tcp dpt:21 flags:0x17/0x02 LOG all -- 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 4 prefix `deny-forward ' REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable 

那些与这里描述的问题有关的丢包? 难道那些连接到远程服务器的原因有时会失败吗?

丢弃的数据包可能是连接有时失败的原因。 而且由于问题只在服务器上,所以我相当确定问题不在你身边。 你可以做简单的testing,看看是否有丢包,比如ping几个小时,看是否报告丢包,还可以ping另一台服务器或两台服务器比较结果(有更好的方法来testing丢包,但是我发现ping是一个快速简便的testing方法,如果发现问题,可以从那里继续)。

至于什么原因导致丢包是任何人的猜测。 这可能是一个坏的路由器,过热的防火墙,坏的以太网端口或电缆,在某个地方…我有一个防火墙被利用太多,偶尔只是过热,变得不稳定,掉线连接,只是整体反应迟钝的经验。

您可能需要运行tcpdump来嗅探您的端口和远程服务器之间的ftpstream量。 它应该给你一个好主意正在发生的事情。 特别是如果你使它更冗长,即:

 tcpdump -w example.dump -i any -nnvvXSs 65535 tcp port XXX 

这将logging整个数据包。 然后使用tcpdump或其他一些工具来分析和pipe道,以grep,less,你有什么

 tcpdump -nnvvXSs 65535 -r example.dump 

你可以特别search像tcp-rst这样的东西:

 tcpdump -nnvvXSs 65535 -r example.dump 'tcp[tcpflags] & tcp-rst != 0 and tcp[tcpflags] & tcp-ack != 0' and tcp port XXX