라우터에서 트래픽을 제어하고 사설망을 인터넷에 연결하기 위해 꼭 알아야 하는 두 개념, ACL과 NAT를 정리한다.
1. ACL (Access Control List)
네트워크 장비에서 트래픽을 허용(permit) 하거나 차단(deny) 하기 위해 사용하는 규칙 목록.
인바운드/아웃바운드 규칙을 나눠서 설정한다.
인바운드 vs 아웃바운드
| 구분 | 방향 | 역할 |
|---|---|---|
| 인바운드(Inbound) | 외부 → 내부 | 악성 트래픽 차단, 내부망 보안 강화 |
| 아웃바운드(Outbound) | 내부 → 외부 | 외부로 나가는 데이터 흐름 관리 |
ACL 기본 규칙
- ACL은 위에서 아래 순서대로 검사된다.
- 조건에 맞는 첫 번째 규칙이 적용되며, 이후 규칙은 확인하지 않는다.
- 마지막에는 보이지 않는
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/8172.16.0.0/12192.168.0.0/16
NAT가 필요한 이유
IPv4 주소 공간은 약 43억 개로 한정되어 있는데 인터넷 연결 장비는 계속 늘어났다. 모든 장비에 공인 IP를 하나씩 줄 수 없어서 내부망에는 사설 IP를 쓰고 인터넷 나갈 때만 NAT로 공인 IP로 변환하는 방식이 자리잡았다.
NAT 동작 원리 (Masquerading)
- 내부 장비가 외부 서버로 요청을 보낸다.
- 라우터가 출발지 IP/포트를 공인 IP/포트로 변경한다.
- NAT 테이블에 변환 정보를 기록한다.
- 응답이 돌아오면 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가 헷갈리는 순간 모든 설정이 꼬여버린다. 패킷의 출발지와 목적지를 그림에 그려놓고 시작하면 훨씬 명확해진다.