IPv6 ND 동작 원리와 이웃 캐시 운영
IPv6 Neighbor Discovery의 메시지, 주소 해결, DAD, 라우터 발견, 이웃 캐시와 보안·운영 설정을 정리한다.
2026-08-14 · 최초 발행 2025-07-16
ARP를 넘어선 IPv6의 이웃 통신 제어
IPv6에서 같은 링크에 있는 노드와 통신하려면 Neighbor Discovery(ND)가 필요하다. 이 프로토콜은 IPv4의 ARP뿐 아니라 ICMP 라우터 발견과 ICMP 리다이렉트가 맡던 기능까지 통합한다. RFC 4861은 ND를 IPv6 통신의 기반 프로토콜로 정의하며, 노드 사이의 상호작용은 ICMPv6 메시지로 이뤄진다.
ND는 링크 계층 주소와 IP 주소를 연결하는 데서 끝나지 않는다. 새 주소가 이미 사용 중인지 확인하고, 로컬 라우터와 프리픽스 정보를 발견하며, 더 나은 전달 경로를 알리는 역할도 맡는다. SLAAC를 통한 주소 자동 구성 역시 이 흐름과 연결된다.
메시지별 역할을 구분해 보기
호스트가 라우터 정보를 요청할 때는 Router Solicitation(RS, 타입 133)을 보낸다. 라우터는 Router Advertisement(RA, 타입 134)로 프리픽스, MTU, 홉 제한 등의 네트워크 매개변수를 알린다. RA는 주기적으로 전송되거나 RS에 대한 응답으로 전송된다.
Neighbor Solicitation(NS, 타입 135)은 대상 노드의 링크 계층 주소를 알아내는 데 사용된다. 같은 메시지는 DAD와 이웃 접근성 모니터링에도 쓰인다. 대상 노드는 Neighbor Advertisement(NA, 타입 136)로 자신의 링크 계층 주소를 응답하며, 네트워크 상태가 바뀌면 요청 없이 NA를 전송할 수도 있다.
Redirect(타입 137)는 더 적절한 전송 경로가 있을 때 이를 제안한다. 이 메시지는 패킷 전달 경로를 최적화하는 수단이다.
주소 확인, DAD, 라우터 발견이 이어지는 방식
주소 해결에서는 송신 호스트가 대상 IPv6 주소를 포함한 NS를 멀티캐스트로 전송한다. 대상 호스트는 NA를 유니캐스트로 응답하고, 송신 측은 이를 이웃 캐시에 반영한다.
DAD는 새 IPv6 주소를 쓰기 전에 중복 여부를 확인하는 과정이다. 새 노드는 임시 주소를 대상으로 NS를 보내고, 응답이 없으면 주소 구성을 완료한다. 이미 같은 주소를 쓰는 노드가 있으면 NA가 돌아오며 다른 주소를 시도해야 한다.
라우터 발견은 호스트가 RS를 보내고 라우터가 RA를 돌려주는 흐름이다. 호스트는 RA에 담긴 프리픽스, 라우터 수명, 기타 네트워크 매개변수를 적용한다.
이웃 캐시는 전달 상태까지 기억한다
이웃 캐시는 IPv6 주소와 MAC 주소의 매핑을 저장하며, 각 항목에 도달 가능성 상태도 함께 기록한다. 이 상태 정보는 불필요한 주소 확인을 줄이고 통신 문제를 감지하는 기반이 된다.
INCOMPLETE: 주소 해결이 진행 중이며, NS 전송 뒤 NA 응답을 기다리는 상태다.REACHABLE: 최근 양방향 통신이 확인된 상태다. ReachableTime은 일반적으로 30초 동안 유지된다.STALE: ReachableTime이 지난 상태다. 도달 가능성은 확인되지 않았지만 캐시는 남아 있다.DELAY: STALE 항목으로 패킷을 전송해야 할 때 전환된다. 즉시 확인하지 않고 짧은 지연 뒤 확인을 시도한다.PROBE: DELAY 이후 NS로 접근성을 다시 확인하는 상태다.
ND를 노리는 메시지 위조에 대비하기
ND는 주소 매핑과 라우터 정보를 전달하므로 스푸핑 대상이 될 수 있다. 거짓 NA로 트래픽을 가로채는 ND 스푸핑, 잘못된 라우팅 정보를 배포하는 악의적 라우터 광고, 합법적인 주소 구성을 방해하는 DAD DoS가 대표적이다.
SEND(SEcure Neighbor Discovery)는 RFC 3971의 ND 보안 확장으로, 공개 키 암호화 기반의 메시지 인증을 제공한다. 스푸핑과 중간자 공격을 막는 데 사용된다. RA Guard는 스위치 수준에서 승인되지 않은 라우터의 RA 메시지를 걸러 악의적 광고를 차단한다.
리눅스와 시스코 장비에서 확인할 설정
리눅스에서는 이웃 캐시와 ND 관련 커널 파라미터를 확인하고, 필요하면 DAD 시도 횟수를 조정할 수 있다.
# 이웃 캐시 확인
ip -6 neighbor show
# 이웃 캐시 항목 추가
ip -6 neighbor add 2001:db8::1 lladdr 00:11:22:33:44:55 dev eth0
# ND 관련 커널 파라미터 확인
sysctl -a | grep ipv6.*neigh
# DAD 시도 횟수 조정 (0=비활성화)
sysctl -w net.ipv6.conf.eth0.dad_transmits=1
시스코 장비에서는 ND inspection 정책과 RA Guard 정책을 인터페이스에 연결해 ND 메시지를 제어할 수 있다.
! ND 검사 활성화
ipv6 nd inspection policy POLICY1
device-role host
drop-unsecure
sec-level minimum 2
tracking enable
! 인터페이스에 적용
interface GigabitEthernet0/0
ipv6 nd inspection attach-policy POLICY1
! RA 가드 구성
ipv6 nd raguard policy RAGUARD_POLICY
device-role router
match ipv6 access-list TRUSTED_ROUTERS
! RA 가드 적용
interface GigabitEthernet0/1
ipv6 nd raguard attach-policy RAGUARD_POLICY
IPv4 ARP와 비교하면 달라지는 범위
| 특성 | IPv6 ND | IPv4 ARP |
|---|---|---|
| 프로토콜 | ICMPv6 | 독립 프로토콜 |
| 기능 범위 | 주소 해결, 라우터 발견, 경로 리다이렉션, DAD | 주소 해결만 담당 |
| 메시지 전송 | 멀티캐스트 | 브로드캐스트 |
| 효율성 | 높음 (멀티캐스트 사용) | 낮음 (브로드캐스트 부하) |
| 보안 | SEND 확장으로 향상된 보안 옵션 | 기본 보안 취약 |
| 자동화 | SLAAC 지원 | 제한적 |
네트워크 규모와 이동성에 맞춘 조정
대규모 네트워크에서는 RA 간격을 확대할 수 있으며, 기본값은 200초다. 반대로 모바일 환경에서는 빠른 네트워크 전환을 위해 RA 간격을 줄이는 방식을 고려한다.
ND 테이블은 대규모 환경에서 충분한 크기가 필요하고, 리소스가 제한된 환경에서는 엔트리 수명 최적화가 필요하다. 안정적인 환경에서는 DAD 시도 횟수를 줄일 수 있으며 기본값 1로 설정할 수 있다. 주소 충돌 방지가 중요한 서버는 기본값을 유지한다. 프리픽스 정보를 세분화하고 MTU를 조정하면 주소 관리와 단편화 최소화에 도움이 된다.
운영 환경에서 확인할 지점
데이터센터에서는 대규모 서버팜에 맞춰 ND 테이블을 확장하고, VLAN별로 RA 정책을 달리 둘 수 있다. ND inspection과 RA Guard를 함께 적용하는 방식도 보안 강화에 쓰인다.
엔터프라이즈 네트워크에서는 부서별 프리픽스 정책을 구분하고, SEND 구현과 백본 라우터의 ND 최적화 설정을 검토할 수 있다. 모바일·무선 환경에서는 빠른 핸드오버를 위한 ND 타이머, 제한된 대역폭에서의 RA 메시지 크기, 배터리 효율을 위한 ND 메시지 빈도가 주요 조정 대상이다.
장애가 발생하면 주소 해결 실패부터 분리해 확인한다. NS/NA 캡처, ICMPv6 필터링, 멀티캐스트 그룹 멤버십을 점검한다. DAD 문제는 dad_transmits 값과 NA 응답을 분석하고 네트워크 지연 시간을 측정한다. RA 문제가 의심되면 메시지 내용, 라우터 우선순위, 프리픽스 정보를 확인한다. 이웃 캐시는 상태 변화와 만료 정책을 관찰하며, 대규모 환경에서는 캐시 크기까지 함께 검토한다.
확장되는 ND 운영 범위
대규모 IoT 환경에서는 제한된 리소스 장치를 위한 경량 ND 변형과 저전력 장치의 메시지 빈도 조정이 필요해진다. 보안 측면에서는 SEND 구현 확대와 단순화, 머신러닝 기반 ND 공격 탐지가 다뤄진다.
SDN에서는 중앙 컨트롤러 기반 ND 관리와 프로그래밍 가능한 ND 정책이 가능하다. 5G/6G 네트워크에서는 초저지연 환경에 맞는 ND 타이머 조정과 모바일 엣지 컴퓨팅 환경 지원이 과제로 남는다.