라우터에서 트래픽을 제어하고 사설망을 인터넷에 연결하기 위해 꼭 알아야 하는 두 개념, ACLNAT를 정리한다.


1. ACL (Access Control List)

네트워크 장비에서 트래픽을 허용(permit) 하거나 차단(deny) 하기 위해 사용하는 규칙 목록.

인바운드/아웃바운드 규칙을 나눠서 설정한다.

인바운드 vs 아웃바운드

구분 방향 역할
인바운드(Inbound) 외부 → 내부 악성 트래픽 차단, 내부망 보안 강화
아웃바운드(Outbound) 내부 → 외부 외부로 나가는 데이터 흐름 관리

ACL 기본 규칙

  1. ACL은 위에서 아래 순서대로 검사된다.
  2. 조건에 맞는 첫 번째 규칙이 적용되며, 이후 규칙은 확인하지 않는다.
  3. 마지막에는 보이지 않는 deny any가 존재한다.
    • 허용할 트래픽은 반드시 명시적으로 permit 해야 한다.

Standard ACL

  • 출발지 IP 주소만 확인해서 트래픽을 제어
  • 목적지 IP나 포트 번호는 확인하지 않음
  • 세밀한 제어는 어렵지만 설정이 단순함
  • 보통 목적지에 가까운 라우터에 적용 (출발지 IP만 보니까 목적지 가까이 둬야 다른 트래픽까지 막지 않음)
router(config)# access-list [ACL 번호] [permit | deny] [송신측 IP 주소] [와일드카드마스크]
router(config)# interface [적용할 인터페이스명]
router(config-if)# ip access-group [ACL 번호] [in | out]
ACL 번호: Standard는 1~99 사용

Extended ACL

  • 출발지 IP, 목적지 IP, 프로토콜, 포트 번호까지 확인
  • "특정 네트워크에서 특정 서버의 웹 서비스만 허용" 같은 세밀한 정책 가능
  • 보통 출발지에 가까운 라우터에 적용 (불필요한 트래픽이 네트워크를 타고 멀리 가지 않게)
router(config)# access-list [ACL 번호] [permit | deny] [프로토콜] [송신측 IP] [송신측 와일드카드마스크] [목적지 IP] [목적지 와일드카드마스크]
router(config)# interface [적용할 인터페이스명]
router(config-if)# ip access-group [ACL 번호] [in | out]
ACL 번호: Extended는 100~199 사용

2. NAT (Network Address Translation)

사설 IP를 공인 IP로 변환하는 주소 변환 서비스.

사설 IP vs 공인 IP

구분 특징
사설 IP 내부 네트워크에서만 유효, 다른 네트워크에서 중복 사용 가능, 인터넷 직접 통신 불가
공인 IP 인터넷 직접 연결 가능, ISP가 할당, 전 세계에서 중복 불가

사설 IP 대역:

  • 10.0.0.0/8
  • 172.16.0.0/12
  • 192.168.0.0/16

NAT가 필요한 이유

IPv4 주소 공간은 약 43억 개로 한정되어 있는데 인터넷 연결 장비는 계속 늘어났다. 모든 장비에 공인 IP를 하나씩 줄 수 없어서 내부망에는 사설 IP를 쓰고 인터넷 나갈 때만 NAT로 공인 IP로 변환하는 방식이 자리잡았다.

NAT 동작 원리 (Masquerading)

  1. 내부 장비가 외부 서버로 요청을 보낸다.
  2. 라우터가 출발지 IP/포트를 공인 IP/포트로 변경한다.
  3. NAT 테이블에 변환 정보를 기록한다.
  4. 응답이 돌아오면 NAT 테이블을 보고 원래 내부 장비로 전달한다.
Masquerading: 내부의 여러 장비가 하나의 공인 IP를 공유하는 것처럼 보이게 하는 NAT 방식.

NAT의 3가지 종류

Static NAT (1:1)

출발지와 목적지 IP를 미리 1:1로 매핑해놓는 방식. 매핑 관계가 항상 일정하므로 방향성 고려 없이 양방향 통신이 가능하다.

대표적인 활용: 내부 서버를 외부에 공개할 때 사용 (예: 사내 웹서버에 외부 접속 허용).

router(config)# ip nat inside source static [사설 IP] [공인 IP]
router(config)# interface [사설 네트워크 인터페이스]
router(config-if)# ip nat inside
router(config)# interface [공인 네트워크 인터페이스]
router(config-if)# ip nat outside

Dynamic NAT (n:n)

IP를 사전에 정하지 않고, NAT가 필요할 때마다 IP 풀(Pool)에서 선택해서 매핑하고 NAT 테이블에 저장한다. 1:1 매핑이지만 동적으로 할당된다.

router(config)# access-list [ACL 번호] permit [사설 네트워크] [와일드카드마스크]
router(config)# ip nat pool [풀 이름] [시작 IP] [끝 IP] netmask [서브넷마스크]
router(config)# ip nat inside source list [ACL 번호] pool [풀 이름]
router(config)# interface [사설 네트워크 인터페이스]
router(config-if)# ip nat inside
router(config)# interface [공인 네트워크 인터페이스]
router(config-if)# ip nat outside

PAT (Port Address Translation, n:1)

공인 IP 1개에 사설 IP 여러 개를 n:1로 매핑하는 방식. 변환된 IP만으로는 호스트 구분이 안 되니까 포트 번호로 구분한다. Dynamic NAT의 한 종류로 볼 수 있다.

가정용 공유기, 회사 내부망 등에서 가장 흔하게 쓰는 방식.

PAT의 한계: 포트 번호는 16비트(약 65,000개)로 제한되어 있어서 동시 사용자가 많으면 공인 IP 하나로는 부족하다. 이런 경우 풀(Pool)로 구성해야 한다.

router(config)# access-list [ACL 번호] permit [사설 네트워크] [와일드카드마스크]
router(config)# ip nat inside source list [ACL 번호] interface [공인 인터페이스] overload
router(config)# interface [사설 네트워크 인터페이스]
router(config-if)# ip nat inside
router(config)# interface [공인 네트워크 인터페이스]
router(config-if)# ip nat outside
overload 키워드가 PAT의 핵심. 이게 있어야 포트로 구분하는 n:1 매핑이 활성화됨.

3. 실습 문제 풀이

실습 1 - Standard ACL

조건

  • 192.168.1.10 → 192.168.2.10 통신 허용
  • 192.168.1.11 → 192.168.2.10 통신 차단

전략: Standard ACL은 출발지 IP만 보므로 목적지 가까이(Router1의 Gig0/0 아웃바운드)에 적용.

Router1 (192.168.2.0/24 측) 설정

Router1> enable
Router1# configure terminal
Router1(config)# access-list 1 deny host 192.168.1.11
Router1(config)# access-list 1 permit any

Router1(config)# interface GigabitEthernet0/0
Router1(config-if)# ip access-group 1 out
Router1(config-if)# end
Router1# write memory

확인

Router1# show access-lists
Router1# show ip interface GigabitEthernet0/0 | include access list
deny를 먼저 쓰고 permit any로 나머지 허용하는 순서가 중요. 반대로 하면 deny가 영원히 안 걸린다 (위에서부터 매칭).

실습 2 - Static NAT + Dynamic NAT

조건

  • Router0: 192.168.10.0/24 → 풀 R0_POOL (100.100.100.10~20), ACL 10
  • Router2: 192.168.20.0/24 → 풀 R2_POOL (200.200.200.10~20), ACL 11
  • Server0(192.168.20.3) 외부 공개 주소: 200.200.200.3 (Static NAT)

Router0 설정 (Dynamic NAT)

Router0(config)# access-list 10 permit 192.168.10.0 0.0.0.255

Router0(config)# ip nat pool R0_POOL 100.100.100.10 100.100.100.20 netmask 255.255.255.0
Router0(config)# ip nat inside source list 10 pool R0_POOL

Router0(config)# interface GigabitEthernet0/0/0
Router0(config-if)# ip nat inside
Router0(config-if)# exit

Router0(config)# interface Serial0/1/0
Router0(config-if)# ip nat outside

Router2 설정 (Dynamic NAT + Server Static NAT)

Router2(config)# access-list 11 permit 192.168.20.0 0.0.0.255

Router2(config)# ip nat pool R2_POOL 200.200.200.10 200.200.200.20 netmask 255.255.255.0
Router2(config)# ip nat inside source list 11 pool R2_POOL

! Server0 외부 공개용 Static NAT
Router2(config)# ip nat inside source static 192.168.20.3 200.200.200.3

Router2(config)# interface GigabitEthernet0/0/0
Router2(config-if)# ip nat inside
Router2(config-if)# exit

Router2(config)# interface Serial0/1/1
Router2(config-if)# ip nat outside

확인 명령어

Router0# show ip nat translations
Router0# show ip nat statistics
핵심 포인트:Dynamic NAT: PC들이 외부로 나갈 때마다 풀에서 IP를 빌려 쓴다 (1:1 동적 매핑).Static NAT: Server0는 외부에서 항상 200.200.200.3으로 접근 가능. 풀이랑은 별개로 동작.

실습 3 - PAT

조건

  • Router0 (ACL 10): 192.168.10.0/24 허용
  • Router2 (ACL 11): 192.168.20.0/24 전부 통신 가능
  • 인터페이스 IP 하나로 모든 내부 호스트가 공유 (PAT)

Router0 설정

Router0(config)# access-list 10 permit 192.168.10.0 0.0.0.255

Router0(config)# ip nat inside source list 10 interface Serial0/1/0 overload

Router0(config)# interface GigabitEthernet0/0/0
Router0(config-if)# ip nat inside
Router0(config-if)# exit

Router0(config)# interface Serial0/1/0
Router0(config-if)# ip nat outside

Router2 설정

Router2(config)# access-list 11 permit 192.168.20.0 0.0.0.255

Router2(config)# ip nat inside source list 11 interface Serial0/1/1 overload

Router2(config)# interface GigabitEthernet0/0/0
Router2(config-if)# ip nat inside
Router2(config-if)# exit

Router2(config)# interface Serial0/1/1
Router2(config-if)# ip nat outside

확인

Router0# show ip nat translations
! Inside global 컬럼에 동일한 공인 IP가 여러 줄, 각각 다른 포트 번호로 보여야 함
! 예: 10.10.10.1:1024, 10.10.10.1:1025, 10.10.10.1:1026 ...
Dynamic NAT vs PAT 차이Dynamic NAT: ip nat inside source list 10 pool R0_POOL → 풀에서 IP 빌려 씀PAT: ip nat inside source list 10 interface Serial0/1/0 overload → 인터페이스 IP 하나를 포트로 나눠 씀

마무리

개념 역할 위치
Standard ACL 출발지 IP 기반 차단/허용 목적지 가까이
Extended ACL IP/포트/프로토콜 기반 정밀 제어 출발지 가까이
Static NAT 1:1 고정 매핑 외부 공개 서버
Dynamic NAT n:n 동적 매핑 풀이 있는 사내망
PAT n:1 포트 기반 매핑 가정/일반 사내망

ACL과 NAT는 단순히 설정 문법을 외우는 게 아니라 "트래픽이 어느 방향으로 흐르는가" 를 먼저 그려보는 게 핵심이다. 인바운드/아웃바운드, inside/outside가 헷갈리는 순간 모든 설정이 꼬여버린다. 패킷의 출발지와 목적지를 그림에 그려놓고 시작하면 훨씬 명확해진다.