네트워크 기초 — 리눅스 VM 에서 손으로 · 주소·서브넷·ARP · 실습
ARP 를 프레임으로 본다
이 실습은 VM 에서 돕니다
네트워크 네임스페이스 둘을 만들어 호스트 두 대로 씁니다. veth 한 쌍이
둘을 잇는 케이블입니다. 전부 VM 한 대 안이지만 커널 입장에서는 진짜 두 대입니다.
목표
IP 주소를 MAC 주소로 바꾸는 ARP 를 프레임 단위로 잡아 보고, 이웃 테이블을
읽고, 정적 항목을 넣어 틀린 MAC 이 통신을 어떻게 죽이는지 확인합니다.
왜 중요한가
같은 서브넷 안의 통신은 IP 가 아니라 MAC 으로 갑니다. IP 는 "누구에게" 를
말하고, 실제 프레임은 MAC 을 보고 배달됩니다. 그 둘을 잇는 것이 ARP 이고,
그 결과가 이웃 테이블(ARP 캐시)입니다. 그래서 IP 설정이 다 맞는데 통신이
안 되면 이웃 테이블부터 봅니다 — 낡은 항목, 중복 IP, 잘못된 정적 항목이 거기
있습니다. 클라우드와 쿠버네티스가 ARP 를 감추고 있어도 바닥은 같습니다.
단계
1. 네임스페이스 alice 와 bob 을 만드세요.
2. veth 쌍 va·vb 를 만들어 va 는 alice 에, vb 는 bob 에 넣으세요.
3. alice 의 va 에 10.10.0.1/24, bob 의 vb 에 10.10.0.2/24 를 붙이고 lo 까지 UP 해서 alice 에서 bob 으로 ping 이 되게 하세요.
4. ping 뒤 alice 의 이웃 테이블(ip -n alice neigh)을 /root/arp/neigh.txt 에 저장하세요. bob 의 MAC 이 보여야 합니다.
5. alice 의 이웃 테이블을 비우고 tcpdump 로 va 의 ARP 를 잡으면서 arping 을 보내, 요청과 응답 프레임을 /root/arp/capture.txt 에 저장하세요.
6. alice 에 bob 의 MAC 을 정적(permanent) 이웃 항목으로 넣으세요.
7. 정적 항목을 틀린 MAC 으로 바꿔 ping 이 죽는 것을 /root/arp/broken.txt 에 남기고, 올바른 MAC 의 정적 항목으로 되돌리세요.
8. /root/arp/report.md 에 bob_mac= 한 줄과 함께, ARP 요청이 왜 브로드캐스트인지와 틀린 정적 항목이 왜 IP 층에서는 보이지 않는지를 적으세요.
참고
- 네임스페이스 안에서 명령:
ip netns exec alice <명령>, 또는 ip 명령만이면ip -n alice .... ip link add va type veth peer name vb가 케이블 한 쌍을 만듭니다.ip link set va netns alice로 옮깁니다.- 이웃 테이블:
ip -n alice neigh. 비우기:ip -n alice neigh flush all. 정적:ip -n alice neigh replace 10.10.0.2 lladdr <MAC> dev va nud permanent. - 캡처는
ip netns exec alice timeout 6 tcpdump -i va -nn -l arp > 파일 2>&1 &처럼 백그라운드로 걸어 두고 arping 을 보낸 뒤 기다립니다. - 흔한 실수:
lo를 안 올리는 것. 네임스페이스의 lo 는 기본이 DOWN 입니다.
단계 8개
- 호스트 두 대
- 케이블 잇기
- 주소를 붙여 ping
- 이웃 테이블 읽기
- ARP 를 프레임으로
- 정적 이웃 항목
- 틀린 MAC 이면
- 무엇을 배웠나