네트워크 기초 — 리눅스 VM 에서 손으로 · 라우팅과 DNS · 실습
네임스페이스 셋으로 라우터를 만든다
이 실습은 VM 에서 돕니다
네임스페이스 셋 — 호스트 h1, 라우터 r1, 호스트 h2 — 을 veth 두 쌍으로
잇습니다. 서브넷이 다른 두 호스트가 라우터를 거쳐 통신하는 가장 작은 네트워크입니다.
목표
라우팅 테이블을 읽고, 기본 경로와 정적 경로를 넣고, 리눅스 한 대를 라우터로
만드는 스위치(ip_forward)가 무엇을 바꾸는지 확인합니다.
왜 중요한가
"어떤 대역만 안 된다" 는 신고는 거의 언제나 라우팅입니다. 그런데 라우팅은
양쪽이 다 맞아야 됩니다 — 가는 길이 있어도 돌아오는 길이 없으면 똑같이
안 되고, 증상은 구별되지 않습니다. 그리고 리눅스는 기본으로 남의 패킷을
넘겨 주지 않습니다. ip_forward 한 줄이 호스트를 라우터로 바꾸는데, 쿠버네티스
노드·도커 호스트·VPN 서버가 전부 이 한 줄 위에 서 있습니다.
단계
1. 네임스페이스 h1·r1·h2 를 만들고 veth 쌍 h1r↔rh1, h2r↔rh2 를 만들어 h1r 은 h1, h2r 은 h2, rh1·rh2 는 r1 에 넣으세요.
2. h1r 에 10.20.1.10/24, rh1 에 10.20.1.1/24, rh2 에 10.20.2.1/24, h2r 에 10.20.2.10/24 를 붙이고 모든 인터페이스와 lo 를 UP 하세요.
3. h1 에서 h2(10.20.2.10) 로 ping 해 실패 메시지를 /root/route/unreach.txt 에 저장하세요.
4. h1 과 h2 에 각자의 라우터 주소를 기본 경로로 넣으세요.
5. r1 의 net.ipv4.ip_forward 를 1 로 켜서 h1→h2 ping 이 되게 하세요.
6. h1 에서 h2 로 traceroute -n 한 결과를 /root/route/trace.txt 에 저장하세요.
7. h2 에 더미 인터페이스 svc0 을 만들어 10.99.0.10/24 를 붙이고, r1 에 10.99.0.0/24 via 10.20.2.10 정적 경로를 넣어 h1 에서 10.99.0.10 이 닿게 하세요.
8. /root/route/report.md 에 hops= 한 줄, h1 에서 ip route get 10.99.0.10 결과 한 줄, 그리고 ip_forward 가 없으면 왜 안 되는지를 적으세요.
참고
- 인터페이스 넷을 만드니 명령이 많습니다. 셸 for 문을 쓰세요.
ip -n h1 route add default via 10.20.1.1. 게이트웨이는 반드시 h1 과 같은 서브넷이어야 합니다.ip netns exec r1 sysctl -w net.ipv4.ip_forward=1. 네임스페이스마다 값이 따로입니다.ip route get <주소>는 테이블을 눈으로 읽는 대신 커널에게 "이 목적지는 어디로 나가나" 를 직접 묻습니다.- 흔한 실수: 4단계에서 h2 의 기본 경로를 빠뜨리는 것. 가는 길은 있는데 답이 못 돌아옵니다.
단계 8개
- 셋을 잇는다
- 주소를 붙인다
- 길이 없으면
- 기본 경로
- 라우터로 만든다
- 경로를 따라가 본다
- 정적 경로
- 무엇을 배웠나