iptables双栈 – ipv6不能正常工作

我有我的iptables安装问题。 我想要完全双重堆叠的服务器,所以我使用相同的IPv4和IPv6规则。 然而,所有的IPv6连接都是在IPv4工作的时候被丢弃的,没有任何问题。

以下是我用来填充防火墙规则的所有文件: 这里 – 第一个文件是我运行的脚本,第二个文件包含IPv4和IPv6的共同(共享)规则,第三个和第四个文件包含特定的IPv4和IPv6规则。

我想指出的是,所有的东西在IPv4上都是完美的。

问题不仅在于像FTP这样的服务,而且我甚至无法ping通服务器(从许多不同networking上的许多计算机上进行testing)。

只要你确定,这是命令的输出iptables -L -n -v

 Chain INPUT (policy DROP 511 packets, 79527 bytes) pkts bytes target prot opt in out source destination 1765 739K ACCEPT all -- !eth0 * 0.0.0.0/0 0.0.0.0/0 43146 1980K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcpflags: 0x10/0x10 180 26305 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 138 8300 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp multiport dports 20,21,25,80,443,465 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpts:50000:50500 0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:1194 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 0 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 3 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 4 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 8 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 11 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 12 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 11171 packets, 65M bytes) pkts bytes target prot opt in out source destination 

这是命令ip6tables -L -n -v的输出:

 Chain INPUT (policy DROP 32 packets, 3076 bytes) pkts bytes target prot opt in out source destination 8 832 ACCEPT all !eth0 * ::/0 ::/0 0 0 ACCEPT tcp * * ::/0 ::/0 tcpflags: 0x10/0x10 0 0 ACCEPT all * * ::/0 ::/0 state RELATED,ESTABLISHED 0 0 ACCEPT tcp * * ::/0 ::/0 tcp multiport dports 20,21,25,80,443,465 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpts:50000:50500 0 0 ACCEPT udp * * ::/0 ::/0 udp dpt:1194 0 0 ACCEPT icmpv6 * * ::/0 ::/0 ipv6-icmptype 129 0 0 ACCEPT icmpv6 * * ::/0 ::/0 ipv6-icmptype 1 0 0 ACCEPT icmpv6 * * ::/0 ::/0 ipv6-icmptype 128 0 0 ACCEPT icmpv6 * * ::/0 ::/0 ipv6-icmptype 3 0 0 ACCEPT icmpv6 * * ::/0 ::/0 ipv6-icmptype 4 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 

输出iptables-save

 *filter :INPUT DROP [93:13846] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [4788:4752203] -A INPUT ! -i eth0 -j ACCEPT -A INPUT -p tcp -m tcp --tcp-flags ACK ACK -j ACCEPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp -m multiport --dports 20,21,25,80,443,465 -j ACCEPT -A INPUT -p tcp -m tcp --dport 50000:50500 -j ACCEPT -A INPUT -p udp -m udp --dport 1194 -j ACCEPT -A INPUT -p icmp -m icmp --icmp-type 0 -j ACCEPT -A INPUT -p icmp -m icmp --icmp-type 3 -j ACCEPT -A INPUT -p icmp -m icmp --icmp-type 4 -j ACCEPT -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT -A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT -A INPUT -p icmp -m icmp --icmp-type 12 -j ACCEPT COMMIT 

输出ip6tables-save

 *filter :INPUT DROP [6:778] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT ! -i eth0 -j ACCEPT -A INPUT -p tcp -m tcp --tcp-flags ACK ACK -j ACCEPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp -m multiport --dports 20,21,25,80,443,465 -j ACCEPT -A INPUT -p tcp -m tcp --dport 50000:50500 -j ACCEPT -A INPUT -p udp -m udp --dport 1194 -j ACCEPT -A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 129 -j ACCEPT -A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 1 -j ACCEPT -A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 128 -j ACCEPT -A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 3 -j ACCEPT -A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 4 -j ACCEPT COMMIT 

如果我尝试通过IPv6来ping服务器( ping -6 2a02:2b88:2:1::2498:1 ),那么我得到Request timed out 。 如果我尝试在服务器(通过SSH)上ping它,那么它ping没有任何问题:

64 bytes from 2a02:2b88:2:1::2498:1: icmp_seq=1 ttl=64 time=0.034 ms ping6 2a02:2b88:2:1::2498:1 – > 64 bytes from 2a02:2b88:2:1::2498:1: icmp_seq=1 ttl=64 time=0.034 ms

要么

ping6 localhost – > ping6 localhost 64 bytes from localhost: icmp_seq=1 ttl=64 time=0.031 ms

我也忘了提及,如果我改变整个INPUT链接受,那么一切正常。 当然,这不幸是不是一个select…

问题到底是在ICMP数据包中。 确切地说,我不知道IPv6不再使用ARP和其他一些服务 – 它使用它自己的机制。 要做到这一点,需要很多ICMPv6数据包才能通过。 在使所有事情按预期工作之后。

我通过尝试启用所有ICMPv6数据包来解决这个问题 – 一切正常。 于是我查找了一些指南,找出需要启用哪些ICMPv6数据包。

我想推荐这个规则集: https : //gist.github.com/jirutka/3742890

我基于他们的防火墙设置,我将在未来从现在开始。