问题:
在没有建立与远程 IP 的连接的情况下,在一定时间段后丢失与远程 IP 的 IPv6 连接。
我的设置:
我正在运行一个带有防火墙的服务器,ip6tables
该防火墙会过滤传入的 ICMPv6 数据包。我已根据以下设置了此防火墙RFC 4890INPUT
用于本地配置流量。接口链上允许以下 ICMPv6 eth0
:
type 1 (destination unreachable)
type 2 (packet too big)
type 3 (time exceeded)
type 4 (parameter problem)
type 128 limit 100/sec limit-burst 500 (Echo)
type 129 (Echo reply)
type 133 (Router Solicitation)
type 134 (Router Advertisement)
type 135 (Neighbor Solicitation)
type 136 (Neighbor Advertisement)
type 141 (Inverse Neighbor Discovery Solicitation)
type 142 (Inverse Neighbor Discovery Advertisement)
type 148 (Certificate Path Solicitation)
type 149 (Certificate Path Advertisement
type 151 (Multicast Router Advertisement)
type 152 (Multicast Router Solicitation)
type 153 (Multicast Router Termination)
所有其他类型均被丢弃。接口的 OUTPUT 链上允许所有 ICMPv6 数据包eth0
。
我尝试过什么:
启用规则后ip6tables
,所有 IPv6 流量均能顺利运行。但是,大约 1 天后,如果未连接到远程 IP 地址,流量就会突然无法访问。
在远程位置运行tcpdump
显示来自防火墙服务器的 ICMPv6 回显成功到达并发送了回复。但是回显回复没有返回。
如果放宽防火墙策略以允许所有 ICMPv6 数据包通过,则建立连接,然后重新启动原始防火墙 - 一切都继续工作。
我的问题:
如何防止连接丢失?
我猜我一定是丢弃了某种对建立连接很重要的 ICMPv6 数据包。
答案1
我错过了从 IPv4 防火墙导入的一条规则,该规则位于INPUT
链中较高的位置并阻止了所有多播数据包:
-t filter -A INPUT -m pkttype --pkt-type multicast
删除此规则后,连接恢复。
我在仔细检查防火墙服务器上的 ICMPv6 流量时发现了这个问题。服务器正在接收邻居请求数据包,但没有发送邻居通告作为回复。
我仍然觉得这很奇怪,因为多播丢弃规则位于INPUT
链上,因此它不应该阻止广告数据包。相反,我认为我甚至不应该收到征求请求...
抱歉造成了噪音。