linux – 在虚拟IP上发送的数据包不会命中iptables规则

linux – 在虚拟IP上发送的数据包不会命中iptables规则,第1张

概述我有一个虚拟接口eth1:3,IP地址为222.192.124.3,我已经设置了一个iptables规则,使用接口的IP记录该接口上的数据包(我知道iptables不关心虚拟接口标签),如下所示: iptables -A INPUT -d 222.192.124.3 -j LOG --log-level warning --log-prefix "VIP3-IN: " 当我运行tcpdump并从另 我有一个虚拟接口eth1:3,IP地址为222.192.124.3,我已经设置了一个iptables规则,使用接口的IP记录该接口上的数据包(我知道iptables不关心虚拟接口标签),如下所示:
iptables -A input -d 222.192.124.3 -j LOG --log-level warning --log-prefix "VIP3-IN: "

当我运行tcpdump并从另一台机器上发送这个IP的数据包时,我看到它们,所以我认为它们是由内核正确接收和处理的,但iptables从不记录这些数据包,当我运行iptables -nvL时,数据包计数为该规则不会增加,就像它们从未达到规则一样(或者如果iptables甚至看不到该接口上的数据包).

我首先想到了另一个与数据包匹配的规则,因此在它到达LOG规则之前处理它,所以我删除了每个iptables规则并只添加了日志记录规则,没有更多的成功.

服务器在RHEL 6.2上运行,具有2.6.32内核,在VMware ESX上进行虚拟化.

这是iptables -nvL的完整输出:

Chain input (policy ACCEPT 40 packets,2891 bytes)  pkts bytes target     prot opt in     out     source               destination  0     0    LOG        all  --  *      *       0.0.0.0/0            222.192.124.3 LOG flags 0 level 4 prefix `VIP3-IN: 'Chain FORWARD (policy ACCEPT 0 packets,0 bytes)  pkts bytes target     prot opt in     out     source               destinationChain OUTPUT (policy ACCEPT 34 packets,3816 bytes)  pkts bytes target     prot opt in     out     source               destination

以下是tcpdump输出的示例,显示传入的数据包(tcpdump -n -nn -vvv -i eth1“host 203.0.59.135”):

10:26:01.259409 IP (tos 0x50,ttl 121,ID 26746,offset 0,flags [DF],proto TCP (6),length 52)    203.0.59.135.62332 > 222.192.124.3.8888: Flags [S],cksum 0x8da8 (correct),seq 3373891789,win 8192,options [mss 1460,nop,wscale 8,sackOK],length 0

最后,ifconfig eth1:3输出:

eth1:3    link encap:Ethernet  HWaddr 00:50:56:AC:35:35      inet addr:222.192.124.3  Bcast:222.192.127.255  Mask:255.255.252.0      UP broADCAST RUNNING PROMISC MulTICAST  MTU:1500  Metric:1

更新:

iptables diagram http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/images/ce.Iptables.gif

在上图的帮助下,我在不同的表中设置了iptables规则,以查看数据包的去向.我想出了以下脚本:

IPT_FILTER="iptables -t filter"IPT_MANGLE="iptables -t mangle"IPT_NAT="iptables -t nat"$IPT_FILTER -F$IPT_FILTER -X$IPT_FILTER -A input -d 222.192.124.0/22 -j LOG --log-prefix "DEBUG filter: "$IPT_FILTER -Z$IPT_MANGLE -F$IPT_MANGLE -X$IPT_MANGLE -A PREROUTING -d 222.192.124.0/22 -j LOG --log-prefix "DEBUG mangle/prerouting: "$IPT_MANGLE -A input -d 222.192.124.0/22 -j LOG --log-prefix "DEBUG mangle/input: "$IPT_MANGLE -Z$IPT_NAT -F$IPT_NAT -X$IPT_NAT -A PREROUTING -d 222.192.124.0/22 -j LOG --log-prefix "DEBUG nat/prerouting: "$IPT_NAT -Z

并且看起来数据包通过mangle / PREROUTING和nat / PREROUTING表,但是没有击中mangle / input表,所以我猜它在“防火墙数据”上采用“否”分支.并不是一个网络或系统专家(最多是一个高级用户),这是我迷路的地方,不知道发生了什么……

最终编辑(解决方案)

正如@nodens在其答案中所建议的那样,问题是由RPF处于“严格”模式引起的……对于如此简单的设置来说,这太令人头疼……

解决方法 你确定在其他表中没有匹配的规则,比如mangle或nat吗?
您也可以尝试记录input中的每个paquet,或者甚至更好,在原始表(PREROUTING链)中尝试TRACE目标,如果在RHEL 6上可用

编辑(我还不能添加评论):

好的,所以数据包命中了界面,但它不被认为应该在本地处理.检查您的路由表,可能您没有到该网络的范围链接路由,或者由于RPF过滤器而导致数据包被丢弃(这可能会发生,具体取决于网络拓扑):检查https://access.redhat.com/site/solutions/53031

总结

以上是内存溢出为你收集整理的linux – 在虚拟IP上发送的数据包不会命中iptables规则全部内容,希望文章能够帮你解决linux – 在虚拟IP上发送的数据包不会命中iptables规则所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1040443.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存