ARP! Tell your network to explain itself
ARP로 네트워크에 설명을 요구해 보세요
ARP와 arp-scan을 이용해 로컬 네트워크의 기기별 IP 주소와 MAC 주소, 제조사를 확인하는 방법을 설명합니다. ARP 요청이 브로드캐스트로 전달되고 대상 기기가 응답하는 과정을 살펴보며 ARP 스푸핑과 브로드캐스트 폭풍도 언급합니다.
- 주제
에디터 노트
ARP 요청과 응답을 설명하는 데 초점을 둔 글이며, arp-scan으로 기기를 찾는 실용적인 출발점을 제공합니다. 다만 ARP 테이블이 알려주는 정보는 IP와 MAC의 대응, 제조사 범위 정도라서 기기 이름이나 네트워크 설정까지 파악하는 도구로 보기는 어렵습니다. 댓글에서도 DHCP와 DNS를 함께 관리하는 dnsmasq나 MikroTik의 자동 DNS 등록 기능이 보완책으로 거론됩니다. 댓글의 지적처럼 ARP는 IPv4에 한정되고 IPv6에서는 NDP가 비슷한 역할을 합니다. 따라서 글의 명령과 arp-scan 설명은 IPv4 로컬 네트워크에 적용되는 내용입니다. 네트워크의 모든 기기를 한 번에 설명하는 방법이라기보다 ARP가 주소를 알아내는 과정과 그 한계를 보여주는 안내로 읽는 편이 정확합니다.
AI 요약
네트워크에 연결된 기기의 IP 주소를 기억하기 어렵다면 arp-scan으로 로컬 네트워크를 검색할 수 있습니다. 이 도구는 기기의 IP와 MAC 주소, 제조사 정보를 나열합니다.
ARP가 IP와 MAC을 연결하는 방식
로컬 네트워크에서 컴퓨터가 IP 주소를 가진 기기에 패킷을 보내려면 목적지 MAC 주소도 알아야 합니다. 스위치는 MAC 주소를 기준으로 프레임을 어느 물리 포트로 보낼지 결정합니다. 컴퓨터가 아직 모르는 IP 주소로 통신하려 하면 ARP 요청을 네트워크에 브로드캐스트합니다. 해당 IP를 가진 기기가 자신의 MAC 주소를 응답하면 컴퓨터는 그 정보를 바탕으로 통신합니다.
Linux에서는 ip neighbour show 명령으로 컴퓨터가 알고 있는 이웃 기기 목록을 확인합니다. sudo ip neighbour flush all을 실행하면 목록을 비워 새로 ARP 요청을 보내는 상황을 볼 수 있습니다. 잘못된 기기가 다른 기기의 IP를 주장하면 ARP 스푸핑이 발생할 수 있고, 브로드캐스트를 지나치게 많이 보내면 브로드캐스트 폭풍으로 이어질 수 있습니다.
커뮤니티 반응
- @nemin — RPi를 네트워크에 연결했는데 IP를 모를 때도 arp-scan은 훌륭한 도구입니다. 라우터에 로그인하거나 IP 스캐너를 실행하는 것보다 훨씬 빠릅니다. 더 똑똑했다면 고정 로컬 IP를 줬겠지만요.
- @benj — 공감합니다. nmap은 너무 느리고 RPi 방화벽이 ICMP를 막으면 곤란합니다. 라우터의 DHCP 임대 목록을 뒤지는 일도 귀찮고요.
- @sammko — arp-scan도 IP 스캐너입니다. 다만 아주 빠르고 단순한 도구입니다.
- @avm99963 — 글을 재미있게 읽었습니다. arp-scan은 이미 알고 있었지만 설명을 따라가며 많이 배웠고 ARP 스푸핑과 브로드캐스트 폭풍을 알려준 점도 좋았습니다. 전에는 ARP를 쓰는 것 같은 독점 소프트웨어 Fing을 사용했습니다.
- @benj — 감사합니다. 친구와 디스코드에서 이야기하듯 흥미로운 내용을 풀어놓을 때 글쓰기가 가장 즐겁습니다. 느낌표를 너무 많이 쓰지 않도록 해야겠네요.
- @donio — 예전에 사용한 Tcl 기반 네트워크 관리 도구 Scotty/tkined가 떠올랐습니다. ARP 스캔으로 기기를 찾았다고 생각했는데 ICMP 브로드캐스트와 SNMP만 사용했던 것 같습니다. Flightaware가 아직도 포크를 관리한다는 사실에 놀랐습니다.
- @gir — ARP 테이블에서 MikroTik MAC 주소를 봤습니다. DHCP 기기의 DNS 항목을 자동으로 등록하는 방법도 있습니다.
- @benj — MikroTik RouterOS의 DHCP 서버는 예전에는 임대 기기의 호스트 이름을 DNS에 등록하는 기능을 기본 지원하지 않았지만, 이제
add-dns-entries와add-dns-entries-suffix설정을 제공합니다. 예전 글은 오래됐습니다. - @gir — 드디어 생겼네요. 개인적으로 TTL이 긴 설정은 좋아하지 않습니다. 호스트 이름이 충돌하면 어떻게 처리하는지도 궁금합니다.
- @yorickpeterse — 직접 추가한 항목과 자동 생성 항목이 충돌하는 경우 새 항목을 추가하지 않는 것 같습니다. 선착순으로 처리하는 듯합니다.
- @intelfx — MikroTik이 수요가 큰 기능을 10년이나 기다린 뒤 내놓고도 반쪽짜리로 만들었군요. dnsmasq의
ra-names에 해당하는 기능도 없고 DHCPv6 AAAA 지원도 사실상 쓸 수 없습니다. DHCPv6 클라이언트는 대체로 FQDN 옵션을 보내지 않으며 관련 DHCP 서버에서 호스트 이름을 조회하지도 않는 것 같습니다. - @koala — ARP는 네트워크 내부를 파악하기에 적절한 도구가 아닙니다. 가정용 네트워크에선 ISP 라우터가 DHCP와 DNS를 제대로 처리하지 않는 경우가 많아 dnsmasq를 DHCP와 DNS 서버로 설정했습니다. ARP는 MAC 주소를 다루는 프로토콜입니다. MAC 주소를 따로 기록하지 않았다면 알 수 있는 정보는 해당 MAC을 쓰는 기기가 있다는 점과 제조사 주소 범위 정도입니다.
- @benj — MikroTik RouterOS의 DHCP 서버는 예전에는 임대 기기의 호스트 이름을 DNS에 등록하는 기능을 기본 지원하지 않았지만, 이제
- @muvlon — ARP는 IPv4 전용이라는 점을 덧붙이고 싶습니다. IPv6에는 비슷한 역할을 하는 NDP가 있지만 작동 방식은 다릅니다. arp-scan은 NDP에 쓸 수 없지만
ip neigh는 대부분 사용할 수 있습니다.
원문: 개인 블로그 / 번역·요약: Trawling