在使用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从外部连接.
我是否应该允许IPv4不需要的其他内容?
解决方法
IPv4使用单独的协议来查找属于IPv4地址的MAC地址:ARP.因为它是一个单独的协议iptables不会影响它.
IPv6集成了该功能,不需要/使用ARP.该功能使用ICMPv6消息实现.区别在于ICMPv6受ip6tables的影响.如果您不允许通过正确的ICMPv6消息阻止自己使用网络.您将无法在LAN上找到其他系统(如默认网关),而其他系统则找不到您.
您至少需要接受邻居请求和邻居广告消息.如果您使用路由器广告为默认网关提供资金和/或使用地址自动配置,您也需要接受这些广告. ping你的机器进行调试也很有用,所以也许你也想接受echo-request消息.
有关可能的ICMPv6消息的完整列表,请参阅https://www.iana.org/assignments/icmpv6-parameters.