如何匹配gre键使用?

时间:2014-07-14 18:19:24

标签: iptables netfilter

我想使用iptables匹配gre隧道密钥(5),我的命令是 下面:

iptables -A OUTPUT -t raw -p gre -o eth2 -m conntrack --ctrepldstport 5 -j LOG --log-level debug

但是,这不起作用。任何人都可以帮助指出哪里出错了?

root @ promg-2n-a-dhcp85:〜/ openvswitch #iptables --version iptables v1.4.12

谢谢,

2 个答案:

答案 0 :(得分:0)

http://www.gossamer-threads.com/lists/iptables/devel/66339

  

移植2.6.21-rc7 pptp / proto_gre conntrack的一些变化   和nat模块到2.4.32内核我注意到了gre_key函数   返回错误的指向版本0数据包的GRE密钥的指针,从而破坏   包有效载荷   GREv0数据包的预期行为就像是一样   nf_conntrack_proto_generic / nf_nat_proto_unknown所以我撕开了   违规函数(不再使用)并修改了xx_nat_proto_gre   模块不接触版本0(非PPTP)数据包。“

解决问题的好方法: - (

似乎这个补丁被静默接受,并且通过gre键匹配将在linux中再次更新工作,这与iptables man中宣称的相反。

答案 1 :(得分:0)

我的一个OSS模块的无耻自我宣传。前段时间我写了一个自定义IPTables模块" xt_bfl4"为了解决IPv6匹配问题,它也适用于这种情况。

使用下面的BPF表达式匹配0x917e805a

的键
udp[0:1]&0x20=0x20 and ((udp[0:1]&0xA0=0x20 and udp[4:4]=0x917e805a) or (udp[0:1]&0xA0=0xA0 and udp[16:4]=0x917e805a))

这编译为:

(000) ldb      [0]
(001) and      #0x20
(002) jeq      #0x20            jt 3    jf 12
(003) ldb      [0]
(004) and      #0xa0
(005) jeq      #0x20            jt 6    jf 8
(006) ld       [4]
(007) jeq      #0x917e805a      jt 11   jf 12
(008) jeq      #0xa0            jt 9    jf 12
(009) ld       [16]
(010) jeq      #0x917e805a      jt 11   jf 12
(011) ret      #65535
(012) ret      #0

或以xt_bpf&所需的格式xt_bpfl4:

13,48 0 0 0,84 0 0 32,21 0 9 32,48 0 0 0,84 0 0 160,21 0 2 32,32 0 0 4,21 3 4 2440986714,21 0 3 160,32 0 0 16,21 0 1 2440986714,6 0 0 65535,6 0 0 0

因此符合以下规则:

iptables -I INPUT -p 47 -m bpfl4 --bytecodel4 '13,48 0 0 0,84 0 0 32,21 0 9 32,48 0 0 0,84 0 0 160,21 0 2 32,32 0 0 4,21 3 4 2440986714,21 0 3 160,32 0 0 16,21 0 1 2440986714,6 0 0 65535,6 0 0 0'