우분투 실전 명령어 | ip neigh로 ARP 이웃 캐시 점검
언제 쓰는가
같은 서브넷에 있는 서버끼리는 통신이 되는데, 유독 한 대만 접속이 안 될 때가 있습니다. 이럴 때는 라우팅보다 ARP 이웃 정보가 꼬였는지 먼저 확인하면 원인을 빨리 좁힐 수 있습니다. 특히 IP를 재할당했거나 VM을 재기동한 직후에 자주 쓰입니다.
바로 쓰는 명령어
# 현재 ARP 이웃 테이블 확인
ip neigh show
# 특정 인터페이스 기준으로만 확인
ip neigh show dev eth0
# 특정 IP 상태만 확인
ip neigh show 192.168.0.25
# 문제가 의심되는 이웃 항목만 삭제해서 재학습 유도
sudo ip neigh del 192.168.0.25 dev eth0
# 즉시 통신 트리거해서 ARP 재생성
ping -c 2 192.168.0.25
# 갱신된 상태 재확인
ip neigh show 192.168.0.25
핵심 옵션/패턴
- show: 현재 커널이 들고 있는 이웃 정보를 조회합니다.
- dev 인터페이스명: 멀티 NIC 서버에서 정확한 경로를 지정할 때 필수입니다.
- del IP dev 인터페이스명: 특정 이웃 캐시만 지워서 영향 범위를 최소화합니다.
- 상태값 해석이 중요합니다.
- REACHABLE: 최근 통신 성공
- STALE: 오래되어 재검증 필요
- FAILED: ARP 해석 실패
- INCOMPLETE: ARP 질의 중
명령 출력 예시
$ ip neigh show dev eth0
192.168.0.1 lladdr 00:11:22:33:44:55 REACHABLE
192.168.0.25 lladdr 66:77:88:99:aa:bb STALE
192.168.0.77 FAILED
$ sudo ip neigh del 192.168.0.25 dev eth0
$ ping -c 1 192.168.0.25
64 bytes from 192.168.0.25: icmp_seq=1 ttl=64 time=0.541 ms
$ ip neigh show 192.168.0.25
192.168.0.25 dev eth0 lladdr 66:77:88:99:aa:bb REACHABLE
자주 하는 실수
- 인터페이스를 빼고 삭제해서 의도와 다른 NIC의 이웃 정보를 건드리는 경우
- FAILED 상태만 보고 원인을 ARP로 단정하는 경우
- 전체 flush를 바로 실행해서 정상 트래픽까지 순간적으로 끊어버리는 경우
- ping 테스트를 생략하고 상태값만 보고 판단하는 경우
검증 방법
# 1) 라우팅 경로 확인
ip route get 192.168.0.25
# 2) 이웃 상태 확인
ip neigh show 192.168.0.25
# 3) 실제 통신 확인
ping -c 3 192.168.0.25
# 4) 필요 시 L2 패킷 확인
sudo tcpdump -ni eth0 arp or host 192.168.0.25
정상이라면 route 결과의 인터페이스와 neigh의 인터페이스가 일치하고, ping 응답 후 상태가 REACHABLE 또는 STALE로 안정됩니다.
운영 팁
장애 대응 때는 무조건 전체 flush보다 특정 IP만 지우는 방식이 안전합니다. 또 네트워크 장비 교체 직후에는 동일 IP에 다른 MAC이 매핑되는지 먼저 확인하면 원인을 빠르게 찾을 수 있습니다.
출처
- Ubuntu Server Guide
- iproute2 man pages
- Linux Foundation Networking 자료