在“iptables”中多播的问题

我的问题是关于多播iptables

我希望允许来自本地VLAN 192.168.1.0/24以及CentOS机器上的0.0.0.0 ICMP和IGMP组播,所以我在入站链上添加了以下规则:

 #ACCEPT  - 来自当前VLAN的组播224.0.0.1以及0.0.0.0
 # -  ICMP
 iptables -A IP-INPUT -s 192.168.1.0/24 -d 224.0.0.1 -m pkttype -pkt-type multicast -protocol icmp -j ACCEPT
 iptables -A IP-INPUT -s 0.0.0.0 -d 224.0.0.1 -m pkttype -pkt-type multicast -protocol icmp -j ACCEPT
 # -  IGMP
 iptables -A IP-INPUT -s 192.168.1.0/24 -d 224.0.0.1 -m pkttype -pkt-type multicast -protocol igmp -j ACCEPT
 iptables -A IP-INPUT -s 0.0.0.0 -d 224.0.0.1 -m pkttype -pkt-type multicast -protocol igmp -j ACCEPT

我也确保xt_pkttype内核模块被加载。

但是,这似乎并没有工作…我得到否认:

 Oct 12 09:06:22 192.168.1.102 IPTABLES :: IN :: DENY 2 0.0.0.0 ==> 224.0.0.1

我注意到,拒绝行显示协议号( 2 ),而不是它的名字( IGMP ),但这似乎并不重要。 如果我用--protocol 2replace规则--protocol igmp ,它是一样的。

一些谷歌search后,我也注意到有些人这样做,但它也不适合我:

 #ACCEPT  - 来自当前VLAN的组播224.0.0.1以及0.0.0.0
 iptables -A IP-INPUT -s 192.168.1.0/24 -d 224.0.0.1 -j ACCEPT
 iptables -A IP-INPUT -s 0.0.0.0 -d 224.0.0.1 -j ACCEPT   

如果相关的话,我在内核版本为2.6.32-279.19.1.el6.x86_64 CentOS 6.3上使用iptables版本1.4.7

有谁能够帮助我? 提前致谢!

编辑:

  • /etc/sysconfig/iptables的请求内容(见下文)
  • 迈克尔汉普顿build议的规则的变化
 #由iptables-save v1.4.7生成1月16日星期三14:33:55 2013
 *过滤
 :INPUT DROP [0:0]
 :FORWARD DROP [0:0]
 :OUTPUT DROP [0:0]
 :IP-FORWARD  -  [0:0]
 :IP-INPUT  -  [0:0]
 :IP-OUTPUT  -  [0:0]
 -Ainput-j IPinput 
 -A向前-j IP向前 
 -A OUTPUT -j IP-OUTPUT 
 -A IP-FORWARD -j LOG  - 日志前缀“server-FORWARD:” 
 -IP-FORWARD -j DROP 
 -A IP-INPUT -i lo -m注释 - 注释“接收所有包ON LOOPBACK”-j ACCEPT 
 -A IP-INPUT -m状态 - 状态RELATED,ESTABLISHED -j ACCEPT 
 -A IP-INPUT -s 192.168.1.0/24 -d 224.0.0.1/32 -p icmp -m pkttype -pkt-type multicast -j ACCEPT 
 -A IP-INPUT -d 224.0.0.1/32 -p icmp -m pkttype -pkt-type multicast -j ACCEPT 
 -A IP-INPUT -s 192.168.1.0/24 -d 224.0.0.1/32 -p igmp -m pkttype -pkt-type multicast -j ACCEPT 
 -A IP-INPUT -d 224.0.0.1/32 -p igmp -m pkttype -pkt-type multicast -j ACCEPT
 -A IP-INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 22 -m状态--state NEW -j ACCEPT
 -A IP-INPUT -p icmp -f -m注释 - 注释“DROP fragmented icmp”-j DROP 
 -A IP-INPUT -p icmp -m注释 - 注释“ACCEPT incoming icmp”-j ACCEPT 
 -A IP-INPUT -p tcp -m tcp -tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -m注释 - 注释“DROP包含非法标志”-j DROP 
 -A IP-INPUT -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP 
 -A IP-INPUT -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP 
 -A IP-INPUT -p tcp -m tcp --tcp-flags FIN,RST FIN,RST -j DROP 
 -A IP-INPUT -p tcp -m tcp -tcp -flag FIN,ACK FIN -j DROP 
 -A IP-INPUT -p tcp -m tcp --tcp-flags PSH,ACK PSH -j DROP 
 -A IP-INPUT -p tcp -m tcp --tcp-flags ACK,URG URG -j DROP 
 -A IP-INPUT -m状态 - 状态无效-j日志 
 -A IP-INPUT -m状态 - 状态INVALID -j DROP 
 -A IP-INPUT -j LOG  - 日志前缀“server-INPUT:” 
 -A IP-OUTPUT -m状态 - 状态INVALID -j LOG  - 日志前缀“server-OUTPUT:” 
 -A IP-OUTPUT -m状态 - 状态INVALID -j DROP 
 -A IP-OUTPUT -o lo -m注释 - 注释“接受所有数据包ON LOOPBACK”-j ACCEPT 
 -A IP-OUTPUT -m状态 - 状态RELATED,ESTABLISHED -j接受 
 -A IP-OUTPUT -p icmp -f -m注释 - 注释“DROP fragmented icmp”-j DROP 
 -A IP-OUTPUT -p icmp -m注释 - 注释“ACCEPT outgoing icmp”-j ACCEPT 
 -A IP-OUTPUT -j LOG  - 日志前缀“server-OUTPUT:” 
承诺
 #2013年1月16日星期三14:33:55完成

您在LOG和DROPstream量的规则之后添加了规则。 这些规则应该是表中的最后规则。 只要重新排列线条,使它们最后出现。

如果你想让你的机器响应组播ping,你必须运行

 sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=0 

默认情况下,ICMP广播/多播被忽略,原因很明显。