DHCP6이 작동하려면 ip6tables 규칙이 필요한 이유는 무엇입니까? (반대로 IPv4는 아무것도 필요하지 않습니다)

DHCP6이 작동하려면 ip6tables 규칙이 필요한 이유는 무엇입니까? (반대로 IPv4는 아무것도 필요하지 않습니다)

DHCP6에 ip6tables 규칙이 필요한 이유는 무엇입니까? (반대로 IPv4에서는 필요하지 않습니다.)


이것은 제가 작성한 최소한의 IPv4 규칙입니다.특별한 DHCPv4(위키피디아) 규칙:

IPv4:iptables --list-rules INPUT

-P INPUT DROP
-A INPUT -i lo -m comment --comment loopback -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -m comment --comment traffic4 -j ACCEPT

이것은 제가 작성한 최소 IPv6 규칙입니다.특수 DHCPv6(위키피디아) 규칙:

IPv6:ip6tables --list-rules INPUT

-P INPUT DROP
-A INPUT -i lo -m comment --comment loopback -j ACCEPT
-A INPUT -p ipv6-icmp -m limit --limit 10/sec --limit-burst 30 -m comment --comment icmp6 -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -m comment --comment traffic6 -j ACCEPT
-A INPUT -d fe80::/64 -p udp -m conntrack --ctstate NEW -m udp --dport 546 -m comment --comment dhcp6 -j ACCEPT

질문

ip6tablesLinux에서 작동하려면 IPv6에는 DHCPv6이 작동하기 위해 특수 규칙이 필요 하지만 IPv4( )에서는 작동하지 않는 이유를 알고 싶습니다 iptables. 반면 DHCPv4에서는 작동하기 위해 어떤 규칙도 필요하지 않습니다.

답변1

DHCPv4에서는 초기 검색/제안/요청/승인 교환이 브로드캐스트 주소를 사용하여 발생하고 클라이언트에 의해 시작되므로 iptables연결 추적이 클라이언트에서 이를 추적하는 데 문제가 없습니다. 모든 후속 갱신은 유니캐스트일 수 있지만 클라이언트에서 시작되므로 추적하는 데 문제가 없습니다. 그리고 DHCPv4 클라이언트는 일반적으로 허용되지 않는 소스 IP 주소 0.0.0.0을 사용해야 하므로 교환을 위해 대부분을 우회하는 원시 소켓을 사용해야 합니다 iptables.

IPv6에는 브로드캐스트가 없으므로 클라이언트는 "범위 내의 모든 DHCPv6 서버 및 릴레이 에이전트" 주소로 멀티캐스트 패킷을 보냅니다. 그러나 서버는 멀티캐스트 요청에 유니캐스트 응답을 보낼 수 있으므로 클라이언트 요청과 서버 응답 간의 상관관계는 DHCPv4만큼 직접적이고 명확하지 않습니다.

또한 IPv6에서는 각 인터페이스에 기본적으로 링크-로컬 IPv6 주소가 있고 DHCPv6 멀티캐스트의 소스 주소로 사용될 수 있으므로 원시 소켓이 필요하지 않습니다. 이를 iptables통해 기본적으로 일반 UDP + IPv6 기능만 사용하므로 DHCPv6 교환을 완전히 제어할 수 있습니다 .

또한 DHCPv6 서버는 클라이언트가 재구성 메시지를 계속 수신하도록 요구할 수 있습니다. 서버가 초기 DHCPv6 교환에서 이 옵션을 협상한 경우서버가 시작될 수 있습니다.DHCPv6 재구성. 재구성은 서버가 클라이언트에 패킷을 보내는 것으로 시작되므로 이 시점에서는 연결(conntrack 의미에서)이 설정되지 않으며 클라이언트는 인바운드 재구성 메시지를 수락하기 위해 명시적인 iptables 규칙이 필요합니다.

관련 정보