我在 tcpdump 中看到某些数据包,但无法跟踪它们发生了什么。我在所有接口上rp_filter to 0
都设置了log_martians to 1
。我也在 iptables 中启用了跟踪。
root@sindhu# iptables --list-rules -t raw
-P PREROUTING ACCEPT
-P OUTPUT ACCEPT
-A PREROUTING -p tcp -j TRACE
-A OUTPUT -p tcp -j TRACE
我仍然没有看到任何与我在 tcpdump 中看到的数据包相关的踪迹。我在 iptables 中为这些数据包创建了一条特定规则,但该规则上的计数没有增加。我是不是漏掉了什么?我已经调试了两天了。任何帮助都将不胜感激。
编辑:根据要求添加更多详细信息。
TCP转储:
03:01:07.625357 IP (tos 0x0, ttl 63, id 6637, offset 0, flags [DF], proto TCP (6), length 60)
192.168.103.1.33950 > 192.168.100.100.81: Flags [S], cksum 0x29b9 (correct), seq 2582058365, win 29200, options [mss 1460,sackOK,TS val 4467432 ecr 0,nop,wscale 7], length 0
03:01:07.625362 IP (tos 0x0, ttl 63, id 41508, offset 0, flags [DF], proto TCP (6), length 60)
192.168.103.1.33951 > 192.168.100.100.81: Flags [S], cksum 0x7ddb (correct), seq 2897653386, win 29200, options [mss 1460,sackOK,TS val 4467432 ecr 0,nop,wscale 7], length 0
Iptables:
# iptables --list -vxn
Chain INPUT (policy ACCEPT 1278 packets, 102705 bytes)
pkts bytes target prot opt in out source destination
0 0 DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:81
Chain FORWARD (policy ACCEPT 42 packets, 2520 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 779 packets, 104083 bytes)
pkts bytes target prot opt in out source destination
# iptables --list -vxn -t nat
Chain PREROUTING (policy ACCEPT 7 packets, 420 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:81
Chain INPUT (policy ACCEPT 1 packets, 60 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:81
Chain OUTPUT (policy ACCEPT 37 packets, 2306 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 17 packets, 1146 bytes)
pkts bytes target prot opt in out source destination
48 3072 MASQUERADE all -- * vEth0 0.0.0.0/0 0.0.0.0/0
# iptables --list -vxn -t raw
Chain PREROUTING (policy ACCEPT 1491 packets, 119478 bytes)
pkts bytes target prot opt in out source destination
0 0 DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:81
2088 169549 TRACE tcp -- * * 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT 891 packets, 117135 bytes)
pkts bytes target prot opt in out source destination
1236 169357 TRACE tcp -- * * 0.0.0.0/0 0.0.0.0/0
可以看出,所有特定于 dport 81 的输入/预路由规则的数据包数均为 0。
其他设置:
# sysctl -a | grep \\.rp_filter
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.vEth0.rp_filter = 0
# sysctl -a| grep martians
net.ipv4.conf.all.log_martians = 1
该数据包的目的地是运行在端口 81 上的本地网络服务器。
# netstat -at | grep 81
tcp 0 0 *:81 *:* LISTEN
数据包的目的地址,192.168.100.100是机器上vEth0的地址。
root@cfae:/opt/pep/filesystem# ifconfig vEth0
vEth0 Link encap:Ethernet HWaddr 0e:c9:59:d9:75:ce
inet addr:192.168.100.100 Bcast:192.168.100.255 Mask:255.255.255.0
# ip route get 192.168.100.100 from 192.168.103.1 iif vEth0
local 192.168.100.100 from 192.168.103.1 dev lo src 192.168.100.100
cache <local> iif vEth0
答案1
我发现了问题,以太网帧有问题(因为目标 mac 地址不是 vEth0 mac 地址)。我没有意识到 tcpdump 甚至在第 2 层处理之前就嗅探了数据包。