이 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
답변1
계약은 숫자에 불과합니다.
$ grep icmp /etc/protocols
icmp 1 ICMP # internet control message protocol
ipv6-icmp 58 IPv6-ICMP # ICMP for IPv6
이 숫자는 동일한 "네임스페이스"를 공유합니다. 인터넷 프로토콜, 일부 프로토콜은 보편적입니다(예: UDP(17), TCP(6), SCTP(132)). 그러나 다른 프로토콜은 그렇지 않습니다. 특히 IPv4와 IPv6 사이의 차이가 그것들은 중요합니다. 이는 ICMP의 경우입니다. 두 가지 다른 프로토콜입니다.
일반적인 환경 설정에서는 상위 프로토콜 헤더에 ICMP(값 1)가 있는 IPv6 패킷이 절대 없습니다. 마찬가지로 IPv4에는 ICMPv6(ipv6-icmp라고도 함) 유형(값 58)의 IPv4 패킷이 있어서는 안 됩니다. 어쩌면 일부 환경에서는NAT64이러한 패킷(IPv6을 통한 ICMP 또는 IPv4를 통한 ICMPv6)은 완전히 유출될 수 있습니다.
동시에IP6 테이블IPv6만 처리합니다. 모든 IPv4 유형 패킷을 동일한 방식으로 필터링하지 않습니다.iptablesIPv4만 처리되며 IPv6 유형의 패킷은 필터링되지 않습니다.
따라서 둘 다 필터링(또는 계산)하는 올바른 방법은 각각 올바른 상위 계층 프로토콜을 사용하는 하나의 IPv4 규칙과 하나의 IPv6 규칙을 갖는 것입니다.
sudo iptables -A INPUT -p icmp -j ACCEPT
sudo ip6tables -A INPUT -p ipv6-icmp -j ACCEPT