ip6tables命令接受icmp和icmpv6协议:
$ sudo ip6tables -A INPUT -p icmp -j ACCEPT
$ sudo ip6tables -A INPUT -p ipv6-icmp -j ACCEPT但是,当我使用ping命令进行测试时:
$ ping6 fe80::a00:1234:1234:1234%eth1我从来没有遵守过icmp规则:
Chain INPUT (policy ACCEPT 133 packets, 13501 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT icmp * * ::/0 ::/0
112 11488 ACCEPT icmpv6 * * ::/0 ::/0 如果达不到icmp协议,为什么ip6tables会接受它?
发布于 2022-09-23 08:17:05
协议只是一个数字:
$ grep icmp /etc/protocols
icmp 1 ICMP # internet control message protocol
ipv6-icmp 58 IPv6-ICMP # ICMP for IPv6这些数字共享相同的“名称空间”:Internet,有些协议是常见的,例如: UDP (17)、TCP (6)、SCTP (132),但其他协议则不然,特别是当IPv4和IPv6之间存在差异时。ICMP的情况就是这样:两种不同的协议。
在正常环境下,在其上层协议报头中永远不会出现带有ICMP (值1)的IPv6数据包。同样,在IPv4上永远不应该有一个类型为ICMPv6 (又名IPv4 6-ICMP)的IPv4数据包(值58)。也许一些使用NAT64的环境可能会不完美地泄漏此类数据包(ICMP通过IPv6,或者ICMPv6通过IPv4)。
同时,ip6tables只处理IPv6:它不会过滤所有类型为IPv4的数据包,就像iptable只处理IPv4和不过滤IPv6类型的数据包一样。
因此,过滤(或此处计数)的正确方法是有一个IPv4规则和一个IPv6规则,每个规则都有正确的上层协议。
sudo iptables -A INPUT -p icmp -j ACCEPT
sudo ip6tables -A INPUT -p ipv6-icmp -j ACCEPThttps://unix.stackexchange.com/questions/718360
复制相似问题