작년 네트워킹 캠프 이후 제대로 된 네트워크 공부를 하지 않다보니 안그래도 잘 못하는 네트워크 실력이 입문자로 돌아간 느낌이 들어 네트워크 공부에 열정을 가지고 공부하던 초심을 되찾기 위해 네트워크 초심찾기를 1~2주에 한 번씩 작성하려고 한다.
첫 시간은 ACL과 NAT 이다.
ACL이란?
ACL은 Access Control List의 약자로, 네트워크 장비에서 트래픽을 허용하거나 차단하기 위해 사용하는 규칙 목록이다.
인바운드 규칙과 아웃바운드 규칙을 나눠서 설정한다.
인바운드
인바운드(Inbound) 는 외부에서 내부로 들어오는 데이터를 의미한다.
예시를 들자면, 아래의 G0/1을 기준으로, G0/1로 들어오는 것이 인바운드이다.
[외부망] ---> G0/1 <--- [라우터 내부]아웃바운드
아웃바운드(Outbound) 는 내부에서 외부로 들어오는 데이터를 의미한다.
예시를 들자면, 아래의 G0/1을 기준으로, G0/1에서 외부로 나가는 것이 아웃바운드이다.
[외부망] <--- G0/1 ---> [라우터 내부]ACL 기본 규칙
ACL에서는 기본적으로 항상 지켜지는 규칙이 존재한다.
- 위에서 부터 아래로 한줄씩 규칙을 검사함
- 여러 규칙 중, 첫 번째로 조건에 맞는 규칙을 적용함. 이후의 규칙들은 적용되지 않음
- 가장 마지막 조건은 항상 deny any(설정 이외 패킷은 전부 거부)
- ACL 정책에 여러 조건을 설정할 경우, 가장 최근에 설정한 조건이 마지막 조건으로 삽입
- Inbound와 Outbound를 필수적으로 명시해줘야 함
ACL의 종류
ACL은 Standard ACL과 Extended ACL로 나뉜다.
ACL에서는 ACL 번호 라는 것을 사용하는데, Standard와 Extended는 번호의 범위가 서로 다르다.
- Standard ACL : 1 ~ 99, 1300 ~ 1999
- Extended ACL : 100 ~ 199, 2000 ~ 2699
Standard ACL
Standard ACL은 패킷의 출발지 IP만을 확인하여 검사하는 ACL이다.
목적지 IP나 포트 번호 등은 확인하지 않아 세밀한 제어는 어렵지만 설정이 비교적 단순하다.
명령어
Router(config)# access-list [ACL 번호] [permit | deny] [송신측 IP 주소] [와일드카드마스크]Router(config)# interface [적용할 인터페이스명]Router(config)# ip access-list [ACL 번호] [in | out]Extended ACL
Extended ACL은 출발지 IP, 목적지 IP, 프로토콜, 포트 번호까지 확인해서 트래픽을 제어하는 ACL이다.
Standard ACL 보다 더 세밀하게 규칙을 설정할 수 있다.
명령어
Router(config)# access-list [ACL 번호] [permit | deny] [프로토콜] [송신측 IP 주소] [송신측 와일드카드마스크] [목적지 IP 주소] [목적지 와일드카드마스크]Router(config)# interface [적용할 인터페이스명]Router(config)# ip access-list [ACL 번호] [in | out]ACL 실습
실습은 패킷 트레이서에서 진행하며, 토폴로지는 아래 사진과 같다.

기본적인 ip 주소 할당은 건너뛰겠다.
Router0
Router(config)#access-list 10 permit host 192.168.1.10Router(config)#access-list 10 deny host 192.168.1.11Router(config)#int g0/0Router(config-if)#ip access-group 10 inRouter1
Router(config)#access-list 100 permit host 192.168.2.10 host 192.168.1.10Router(config)#access-list 100 deny host 192.168.2.10 host 192.168.1.11Router(config)#int g0/0Router(config-if)ip access-group 100 in해설
토폴로지를 보면 192.168.1.10과 192.168.2.10 끼리 서로 통신이 가능하고,
192.168.1.11과 192.168.2.10 끼리 서로 통신이 불가능 하게 acl을 설정해야 한다.
Router0
router 0에서는 Standard ACL을 이용해 192.168.1.* 에서 192.168.2.10 으로의 트래픽을 설정해 줬다.
이 때, 명령어에 있는 host가 정확히 무엇인지를 몰라서 찾아본 결과,
host는 특정 IP 주소 하나만 정확하게 지정하기 위한 Cisco IOS의 문법 키워드(keyword) 였다.
예를 들어 아래 명령어는
Router(config)#access-list 10 permit host 192.168.1.10실제로는 아래 명령어와 동일한 의미를 가진다.
Router(config)#access-list 10 permit 192.168.1.10 0.0.0.0ACL에서 사용하는 와일드카드 마스크는 0이면 반드시 비교하고, 1이면 무시한다는 의미를 가진다.
즉, 0.0.0.0 은 모든 비트를 정확하게 비교한다는 뜻이므로, 오직 192.168.1.10 하나의 IP 주소만 허용하게 된다.
반대로 아래와 같은 경우에는
Router(config)#access-list 10 permit 192.168.1.0 0.0.0.255마지막 8비트를 무시하게 되므로 192.168.1.X 대역 전체를 의미하게 된다.
처음에는 host가 프로토콜 종류라고 생각했는데, 실제로는 프로토콜이 아니라 Cisco IOS CLI 내부에서 사용하는 문법용 키워드에 가까운 개념이었다.
Router1
router 1에서는 Extended ACL을 이용해 192.168.1.10과 192.168.1.11에서 192.168.2.10으로의 트래픽을 설정해 줬다.
Extended ACL이기 때문에 Standard ACL과는 다르게 출발지 IP 주소 뿐 만 아니라 목적지 IP 주소도 적어줬다.
정답 체크
pc0(192.168.1.10) -> pc2(192.168.2.10) 성공
pc1(192.168.1.11) -> pc2(192.168.2.10) 실패
pc2(192.168.2.10) -> pc0(192.168.1.10) 성공
pc2(192.168.2.10) -> pc1(192.168.1.11) 실패

NAT란?
IPv4는 32비트로, 약 43억개의 주소를 사용할 수 있다.
주소는 한정되어 있지만 이를 필요로 하는 네트워크 장비들이 계속 증가함에 따라 이를 해결 하는 것이 중요해졌다.
이에 맞춰 등장하게 된 기술이 바로 NAT이다.
NAT는 Network Addess Translation의 약자로, 사설 IP를 공인 IP로 변경하는데 필요한 주소 변환 서비스 입니다.
사설 IP
사설 IP는 인터넷과 직접 연결되지 않는 내부 네트워크에서 사용하는 IP 주소이다.
내부 네트워크에서만 유효하며, 다른 네트워크에서는 중복 사용이 불가능하다.

공인 IP
공인 IP는 인터넷과 직접 연결할 수 있는 IP 주소로, 인터넷을 통해 접근할 수 있는 모든 장치에 할당된다.
인터넷 서비스 제공 업체인 ISP나 공인 IP 주소를 관리하는 기관에 의해 할당되며, 중복해서 사용이 불가능하다.

NAT가 필요한 이유
NAT는 단순히 사설 IP를 공인 IP로 바꾸는 기술 이상의 의미가 있다.
실제로는 아래와 같은 이유 때문에 사용된다.
1. IPv4 주소 부족 문제 해결
IPv4 주소는 약 43억 개밖에 존재하지 않는다.
하지만 인터넷 장비 수는 이미 이를 훨씬 초과했기 때문에, 모든 장비에 공인 IP를 직접 할당하는 것은 현실적으로 어렵다.
그래서 대부분의 환경에서는 내부 네트워크에서는 사설 IP를 사용하고, 외부 인터넷과 통신할 때만 공인 IP로 변환해서 사용한다.
2. 내부 네트워크 구조 은닉
외부에서는 NAT 장비의 공인 IP만 보이기 때문에 내부 IP 구조가 직접 노출되지 않는다.
예를 들어 내부 PC가 아래와 같은 주소를 사용하더라도
192.168.1.10192.168.1.11192.168.1.12외부에서는 NAT 장비의 공인 IP 하나만 보게 된다.
203.0.113.10즉, 내부 네트워크 구조를 어느 정도 숨길 수 있다는 장점이 있다.
NAT 동작 과정
예를 들어 내부 PC인 192.168.1.10 이 인터넷 서버인 8.8.8.8 로 패킷을 전송한다고 가정하자.
처음 패킷은 아래와 같다.
출발지 IP : 192.168.1.10목적지 IP : 8.8.8.8하지만 사설 IP는 인터넷에서 직접 사용할 수 없기 때문에, 라우터는 NAT Table을 참고하여 출발지 IP를 공인 IP로 변경한다.
출발지 IP : 203.0.113.10목적지 IP : 8.8.8.8이후 응답 패킷이 다시 돌아오면, NAT 장비는 NAT Table을 참고하여 다시 내부 사설 IP로 변환해준다.
203.0.113.10 → 192.168.1.10즉, NAT는 단순 치환이 아니라 양방향 주소 변환 작업이라고 볼 수 있다.
NAT Table
NAT 장비는 주소 변환 내용을 NAT Table 에 저장한다.
예를 들어 아래와 같은 통신이 발생했다고 가정하자.
192.168.1.10 → 203.0.113.10192.168.1.11 → 203.0.113.11그러면 NAT Table에는 대략 아래와 같은 정보가 저장된다.
Inside Local Inside Global192.168.1.10 203.0.113.10192.168.1.11 203.0.113.11여기서 중요한 개념이 있다.
- Inside Local : 내부에서 사용하는 실제 사설 IP
- Inside Global : 외부에 공개되는 공인 IP
Cisco에서는 NAT 관련 용어를 아래처럼 구분한다.
Inside Local 내부 사설 IPInside Global 변환된 공인 IPOutside Local 외부 장비 주소Outside Global 실제 외부 공인 주소확인 명령어
router# show ip nat translations예시 출력:
Pro Inside global Inside local Outside local Outside globaltcp 203.0.113.10:1025 192.168.1.10:1025 8.8.8.8:80 8.8.8.8:80현재 어떤 사설 IP가 어떤 공인 IP로 변환되었는지 확인할 수 있다.
통계 정보는 아래 명령어로 확인 가능하다.
router# show ip nat statisticsNAT의 종류
NAT의 종류로는 Static NAT, Dynamic NAT, PAT가 있다.
Static NAT
Static NAT는, 사설 ip와 공인 ip를 미리 1:1로 매핑 해놓는 방식의 NAT이다.
명령어
router(config)# (ACL 설정)router(config)# ip nat inside source static [사설 ip 주소] [변환할 공인 ip 주소]router(config)# interface [사설 네트워크 인터페이스]router(config-if)# ip nat insiderouter(config-if)# interface [공인 네트워크 인터페이스]router(config-if)# ip nat outsideDynamic NAT
Dynamic NAT는 출발지나 목적지의 ip가 사전에 정해져 있지 않고, NAT가 필요할 때마다 ip pool에서 선택한 ip로 매핑하는 방식의 NAT이다.
명령어
router(config)# (ACL 설정)router(config)# ip nat pool [풀 이름] [변환할 공인 IP 주소] netmask [서브넷마스크]router(config)# ip nat inside source list [ACL 번호] pool [풀 이름]router(config)# interface [사설 네트워크 인터페이스]router(config-if)# ip nat insiderouter(config-if)# interface [공인 네트워크 인터페이스]router(config-if)# ip nat outsideNAT Pool?
Dynamic NAT는 사용할 공인 IP들을 미리 묶어서 관리하는데, 이를 NAT Pool 이라고 한다.
예를 들어 아래와 같이 공인 IP 대역을 할당 받았다고 치자.
203.0.113.10203.0.113.11203.0.113.12이 공인 IP들을 하나의 pool로 등록해 두고, 내부 사용자가 인터넷에 접속할 때마다 사용 가능한 공인 IP를 임시로 할당한다.
PAT
PAT는 Port Address Translation의 약자로, 공인 ip 주소 1개에 사설 ip 주소 여러 개를 n:1로 매핑하는 NAT이다.
변환된 ip 주소로는 사내망 호스트들을 구분할 수 없기 때문에 포트 번호를 부여하여 구분한다.
명령어
router(config)# (ACL 설정)router(config)# ip nat inside source list [ACL 번호] interface [외부 인터페이스 이름] overloadrouter(config)# interface [사설 네트워크 인터페이스]router(config-if)# ip nat insiderouter(config-if)# interface [공인 네트워크 인터페이스]router(config-if)# ip nat outside