在使用 iptables 设置规则并检查一切正常后,我还为 IPv6 地址设置了相同的规则,并注意到我无法连接到任何服务器的 IPv6 地址和端口。默认策略是DROP
除我手动允许的端口之外的所有内容。
规则如下:
-P INPUT DROP
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
...
老实说,我使用iptables
和运行了这些命令ip6tables
,虽然使用 IPv4 一切正常,但我无法从外部通过 IPv6 进行连接。
我是否应该允许 IPv6 添加 IPv4 不需要的内容?
答案1
IPv4 使用单独的协议来查找属于 IPv4 地址的 MAC 地址:ARP。因为它是一个单独的协议,所以 iptables 不会影响它。
IPv6 集成了该功能,不需要/使用 ARP。该功能使用 ICMPv6 消息实现。不同之处在于 ICMPv6是受 ip6tables 影响。如果您不允许正确的 ICMPv6 消息通过,那么您实际上就是在阻止自己使用网络。您将无法找到 LAN 上的其他系统(如默认网关),其他人也找不到您。
您至少需要接受邻居请求和邻居广告消息。如果您使用路由器广告来资助默认网关和/或使用地址自动配置,您也需要接受这些消息。并且 ping 您的机器进行调试也很有用,因此您可能也想接受回显请求消息。
有关可能的 ICMPv6 消息的完整列表,请参阅https://www.iana.org/assignments/icmpv6-parameters。