주소·서브넷·게이트웨이 · 클래스와 CIDR · 실습
주소를 계산하는 도구를 만든다
목표
주소와 마스크를 받아 네트워크 주소·브로드캐스트·쓸 수 있는 범위·호스트 수를
계산하는 도구를 파이썬으로 만들고, 그 도구로 같은 서브넷 판정과 대역 분류,
겹침 검사를 해 봅니다. 마지막에는 요구 호스트 수에 맞는 프리픽스를 골라
설계 메모를 남깁니다.
왜 중요한가
방화벽 규칙도 네트워크 정책도 VPC 설계도 전부 이 계산 위에 서 있습니다.
그런데 손으로 반복하면 언젠가 반드시 틀리고, 틀린 것은 대개 장애가 난 뒤에야
드러납니다. 그래서 한 번 만들어 두고 계속 쓰는 편이 낫습니다.
특히 /31 과 /32 가 중요합니다. 호스트 수를 "전체에서 2를 뺀다" 로만 짜 두면
이 둘에서 0과 -1 이 나오는데, 도구는 아무 오류도 내지 않고 그 값을 그대로
돌려줍니다. 검사기가 잡아 주지 않는 종류의 거짓말이라, 예외를 아는 사람만
피할 수 있습니다.
단계
1. 세 대역을 손으로 계산해 /root/cidr/01-hand.txt 에 한 줄씩 적으세요. 대역은 192.168.40.130/26, 10.10.6.75/20, 172.20.200.9/23 이고, 각 줄에 CIDR·네트워크 주소·브로드캐스트·첫 호스트·마지막 호스트·호스트 개수가 모두 들어가야 합니다.
2. /root/cidr/subnet.py 를 만드세요. python3 subnet.py 203.0.113.77/28 과 python3 subnet.py 203.0.113.77 255.255.255.240 이 같은 답을 내야 하고, 출력은 prefix= network= broadcast= first= last= hosts= 여섯 줄입니다. 두 번 돌린 결과를 /root/cidr/02-tool.txt 에 저장하세요.
3. 도구가 /31 과 /32 를 옳게 다루도록 고치세요. 이 둘은 broadcast=none 이고, /31 은 두 주소가 모두 호스트(hosts=2), /32 는 자기 자신 하나(hosts=1)입니다. 10.0.0.5/31 과 10.0.0.5/32 를 돌린 결과와 왜 그런지를 /root/cidr/03-edge.txt 에 적으세요.
4. /root/cidr/same.py 를 만드세요. python3 same.py <주소/프리픽스> <상대주소> 가 same 또는 different 한 낱말만 출력합니다. 다섯 쌍을 돌려 /root/cidr/04-same.txt 에 주소/프리픽스 상대주소 판정 으로 저장하세요.
5. /root/cidr/classify.py 를 만드세요. python3 classify.py <주소> 가 private link-local loopback cgnat multicast public 중 하나를 출력합니다. 아홉 주소를 돌려 /root/cidr/05-class.txt 에 주소 분류 로 저장하세요.
6. 10.60.8.0/22 를 /24 넷으로 쪼개 /root/cidr/06-split.txt 에 한 줄에 하나씩 네트워크/24 first= last= hosts= 로 적으세요.
7. 기존 대역 넷과 겹치는지 판정해 /root/cidr/07-overlap.txt 에 적으세요. 겹치면 후보 overlap=겹치는대역, 안 겹치면 후보 free 입니다.
8. /root/cidr/08-report.md 에 설계 메모를 쓰세요. 요구 호스트 수 셋(120대·600대·30대)에 맞는 최소 프리픽스, 대역을 연속으로 배치하면 무엇이 이득인지, /31 과 /32 를 언제 쓰는지가 들어가야 합니다.
참고
- 표준 라이브러리의
ipaddress만 씁니다. 이 파드는 밖으로 못 나가서pip install이 되지 않습니다. ipaddress.ip_network("10.10.6.75/20", strict=False)는 호스트 주소를 줘도 그 주소가 속한 대역으로 읽어 줍니다.strict=True(기본)면 오류가 납니다.- 4단계의 다섯 쌍:
10.30.4.9/22 10.30.7.250,10.30.4.9/23 10.30.7.250,192.168.9.60/26 192.168.9.65,172.20.15.1/12 172.31.255.254,100.64.3.1/10 100.127.0.9. 앞 두 쌍은 주소가 같고 마스크만 다릅니다. - 5단계의 아홉 주소:
10.4.4.4,172.31.255.1,172.32.0.1,192.168.0.1,169.254.10.9,127.0.0.53,100.100.5.5,224.0.0.251,8.8.8.8. - 7단계의 기존 대역:
10.10.0.0/16,10.20.0.0/16,10.244.0.0/16,172.17.0.0/16. 후보:10.20.5.0/24,10.100.0.0/16,172.17.30.0/24,10.245.0.0/16. - 172 사설 대역의 경계(
/12이므로 172.16~172.31)와100.64.0.0/10(CGNAT)이 함정입니다. - 채점기는 여러분이 만든 도구를 지시문에 없는 값으로도 한 번 더 돌려 봅니다. 답을 박아 두면 그 자리에서 떨어집니다.
단계 8개
- 세 대역을 손으로 계산한다
- 계산 도구를 만든다
- /31 과 /32 의 예외를 다룬다
- 같은 서브넷인지 판정한다
- 대역의 성격을 분류한다
- 대역을 잘게 나눈다
- 대역이 겹치는지 본다
- 설계 메모를 남긴다