解决云主机开放ip6tables端口后IPv6无法访问问题

问题

最近给云主机开通了IPv6服务,在IPv6静态地址、CIDR掩码、IPv6网关配置完成后,测试IPv6进出均通。但是在参照IPv4的iptables的规则配置ip6tables,放开了对应的端口后,却发现IPv6不通了。这该如何解决?

排查

首先dump下ip6tables确认下规则正确。执行ip6tables-save查看当前的规则。

可以看到对应的80, 443已经打开,且规则非常简单,没有特别的问题。ip6tables默认规则为DROP,开放了对应的端口。

那问题出在哪里呢? 先确认下IPv6的物理通道是否畅通,尝试ping IPv6静态网关试试。结果ping之后发现了端倪

ping6报告说网关不可达。看到这个结果我就反应过来了。IPv6不通过数据链路层的ARP协议来实现IP地址到MAC地址的转换,而是通过在网络层上使用邻居发现协议,来实现IP地址到MAC地址的转换(参考IPv6 邻居发现协议详解)。而这个邻居发现协议是通过ICMPv6来承载的,而ICMPv6是在网络层上,因此会被ip6tables给DROP掉。

到这里问题就比较简单了。即允许ip6tables通过NDP对应的ICMPv6报文即可。经过搜索,参照这个资料,添加了以下规则

执行完成后,ip6tables就不会阻止本机查找网关所在的MAC地址了。

验证

重新ping6网关,发现已经恢复畅通。访问443端口服务,正常得到返回。问题解决。

发表评论

为防机器,验证码请直接输入4个数字1

*