iptables 双栈 - ipv6 不工作

iptables 双栈 - ipv6 不工作

我的 iptables 设置有问题。我想要完全双栈服务器,因此我对 IPv4 和 IPv6 使用相同的规则。但是,所有 IPv6 连接都被断开,而 IPv4 工作正常。

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

我想指出的是,在 IPv4 上一切都运行良好。

问题不仅仅出在 FTP 之类的服务上,我甚至无法 ping 通服务器(从许多不同网络上的许多计算机进行了测试)。

只是为了让你确定,这是命令的输出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。如果我尝试在服务器上 ping 它(通过 SSH),则它会毫无问题地 ping 通:

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-->64 bytes from localhost: icmp_seq=1 ttl=64 time=0.031 ms

我还忘了说,如果我将整个 INPUT 链改为 ACCEPT,那么一切都会正常。当然,不幸的是这不是一个选项...

答案1

问题最终确实出在 ICMP 数据包中。确切地说,我不知道 IPv6 不再使用 ARP 和其他一些服务 - 它使用自己的机制。为此,它需要传递许多 ICMPv6 数据包。启用后,一切都按预期运行。

我通过尝试启用所有 ICMPv6 数据包找到了此解决方案 - 一切正常。因此我查阅了一些指南并找出需要启用哪些 ICMPv6 数据包。

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

我的防火墙设置均基于它们,并且从现在起我也将以此为基础进行设置。

相关内容