我想使用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
谢谢,
答案 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'