清除 rp_filter 后数据包被丢弃

清除 rp_filter 后数据包被丢弃

我在 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 层处理之前就嗅探了数据包。

相关内容