Cisco 라우터 Prefix-List 설정
프리픽스 리스트(Prefix-List)를 사용하면 네트워크 주소와 프리픽스 길이(서브넷 마스크) 모두를 기준으로 네트워크 프리픽스를 필터링할 수 있습니다. 액세스 리스트(Access-List)는 네트워크 주소를 매칭할 수 있지만, 네트워크 주소의 범위를 매칭하는 데는 사용할 수 없습니다. 이 강의에서는 액세스 리스트의 한계점, 프리픽스 리스트가 이를 어떻게 해결하는지, 그리고 설정 방법을 알아보겠습니다.
핵심 요약
- 프리픽스 리스트는 네트워크 범위와 서브넷 마스크를 기준으로 필터링합니다.
le연산자는 지정된 값보다 작거나 같은 서브넷 마스크를 가진 프리픽스를 허용합니다.ge연산자는 지정된 값보다 크거나 같은 서브넷 마스크를 가진 프리픽스를 허용합니다.ge와le를 조합하면 특정 범위의 서브넷 마스크를 매칭할 수 있습니다.- 프리픽스 리스트는 순차적으로 처리되며, 끝에 암묵적 거부(Implicit Deny)가 있습니다.
- 시퀀스 번호(Sequence Number)를 사용하면 전체 리스트를 다시 만들지 않고도 항목을 삽입하거나 수정할 수 있습니다.
사전 지식
이 강의를 따라가려면 다음을 이해하고 있어야 합니다:
- IPv4 서브네팅과 CIDR 표기법의 서브넷 마스크
- 액세스 리스트의 기본 개념
액세스 리스트의 한계
예를 들어, 10.0.0.0 범위에 속하면서 서브넷 마스크가 /24에서 /28 사이인 모든 프리픽스를 필터링하고 싶다고 가정해 보겠습니다. 액세스 리스트로는 이를 수행하는 것이 불가능합니다. 각 네트워크마다 별도의 구문이 필요하기 때문입니다.
단일 /16 네트워크(10.0.0.0/16) 내의 모든 /24 네트워크를 매칭하려면 다음과 같은 항목들이 필요합니다:
access-list 10 permit 10.0.0.0 0.0.0.255
access-list 10 permit 10.0.1.0 0.0.0.255
access-list 10 permit 10.0.2.0 0.0.0.255
[output omitted]
access-list 10 permit 10.0.254.0 0.0.0.255
access-list 10 permit 10.0.255.0 0.0.0.25510.0.0.0/16 내의 각 /24 네트워크에 대해 이미 256개의 구문이 필요합니다. 10.1.1.0/16 내의 모든 /25 네트워크를 매칭하려면 512개의 구문이 필요합니다. 또한 /26, /27, /28에 대한 구문도 필요합니다. 그리고 이것은 10.0.0.0에 대한 것일 뿐이며, 10.1.0.0, 10.2.0.0 등에 대해서도 비슷한 구문이 필요합니다. 필요한 총 구문 수는 엄청납니다.
프리픽스 리스트 실습 토폴로지
대부분의 CCNP 수험생들이 프리픽스 리스트를 이해하기 어려워하므로, 이 강의에서는 라우트 필터(Route Filter)로 사용하면서 프리픽스 리스트의 동작 방식을 보여주겠습니다. 다양한 시나리오와 필터를 살펴보겠습니다. 사용할 토폴로지는 다음과 같습니다:
위 그림에서 “R1”과 “R2”라는 두 라우터가 있습니다. R2에는 EIGRP에서 광고할 프리픽스를 가진 여러 루프백 인터페이스(Loopback Interface)가 있습니다. 이렇게 하면 실습할 프리픽스가 여러 개 생깁니다. 설정은 다음과 같습니다:
R1(config)#router eigrp 12
R1(config-router)#no auto-summary
R1(config-router)#network 192.168.12.0R2(config)#router eigrp 12
R2(config-router)#no auto-summary
R2(config-router)#network 192.168.12.0
R2(config-router)#network 172.16.0.0 0.0.3.255EIGRP를 설정하여 모든 네트워크를 광고합니다.
R1#show ip route eigrp
172.16.0.0/24 is subnetted, 4 subnets
D 172.16.0.0 [90/156160] via 192.168.12.2, 00:01:07, FastEthernet0/0
D 172.16.1.0 [90/156160] via 192.168.12.2, 00:01:07, FastEthernet0/0
D 172.16.2.0 [90/156160] via 192.168.12.2, 00:01:07, FastEthernet0/0
D 172.16.3.0 [90/156160] via 192.168.12.2, 00:01:07, FastEthernet0/0R1의 라우팅 테이블을 보면 루프백 인터페이스의 모든 네트워크가 정상적으로 표시됩니다.
기본 프리픽스 리스트 필터링
이제 필터링을 해보겠습니다. 172.16.1.0/24를 필터링하되 나머지는 모두 허용하는 간단한 프리픽스 리스트를 만들어 보겠습니다:
R1(config)#ip prefix-list FILTERTHIS seq 5 deny 172.16.1.0/24
R1(config)#ip prefix-list FILTERTHIS seq 10 permit 0.0.0.0/0 le 32ip prefix-list 명령어를 사용하여 프리픽스 리스트를 생성합니다. 보시다시피 액세스 리스트와 비슷하지만, 와일드카드를 입력하는 대신 비트 수만 지정합니다. 첫 번째 줄은 172.16.1.0/24를 거부하고, 두 번째 줄은 서브넷 마스크가 /32 이하인 0.0.0.0/0(모든 네트워크)을 허용합니다. 즉, “모든 것”을 의미합니다. 이 줄은 permit ip any any와 동일합니다.
R1에서 적용하여 결과를 확인해 보겠습니다:
R1(config)#router eigrp 12
R1(config-router)#distribute-list prefix FILTERTHIS in새 프리픽스 리스트를 활성화합니다.
R1#show ip route eigrp
172.16.0.0/24 is subnetted, 3 subnets
D 172.16.0.0 [90/156160] via 192.168.12.2, 00:01:54, FastEthernet0/0
D 172.16.2.0 [90/156160] via 192.168.12.2, 00:01:54, FastEthernet0/0
D 172.16.3.0 [90/156160] via 192.168.12.2, 00:01:54, FastEthernet0/0보시다시피 172.16.1.0/24가 필터링되었고, 나머지 네트워크는 모두 허용되었습니다.
ge와 le 연산자
프리픽스 리스트의 진정한 강점은 ge(Greater than or Equal to, 크거나 같음)와 le(Less than or Equal to, 작거나 같음) 연산자에 있습니다. 예시를 살펴보겠습니다:
R1(config)#ip prefix-list RENETEST permit 10.0.0.0/8 le 19이 예시에서는 le 연산자를 사용합니다. 이 프리픽스 리스트 구문은 10.0.0.0/8 범위에 속하면서 서브넷 마스크가 /19 이하인 모든 네트워크를 허용한다는 의미입니다.
10.0.0.0/21 네트워크가 있다면, 이 프리픽스 리스트에 의해 거부됩니다. 10.0.0.0/8 범위에는 속하지만, 서브넷 마스크가 /21입니다. le 연산자는 서브넷 마스크가 /19 이하여야 한다고 지정하고 있습니다.
반면 10.0.0.0/17 네트워크가 있다면, 이 프리픽스 리스트에 의해 허용됩니다. 10.0.0.0/8 범위에 속하고 서브넷 마스크가 /19보다 작기 때문입니다.
라우터에서 예시를 살펴보겠습니다:
R2(config)#interface loopback 10
R2(config-if)#ip address 10.1.1.1 255.255.0.0
R2(config-if)#interface loopback 11
R2(config-if)#ip address 10.2.2.2 255.255.128.0
R2(config-if)#interface loopback 12
R2(config-if)#ip address 10.3.3.3 255.255.192.0
R2(config-if)#interface loopback 13
R2(config-if)#ip address 10.4.4.4 255.255.224.0
R2(config-if)#interface loopback 14
R2(config-if)#ip address 10.5.5.5 255.255.240.0
R2(config-if)#interface loopback 15
R2(config-if)#ip address 10.6.6.6 255.255.248.0R2에 여러 루프백 인터페이스를 추가합니다. 자세히 보면 서로 다른 서브넷 마스크를 사용하고 있습니다.
R2(config)#router eigrp 12
R2(config-router)#network 10.0.0.0EIGRP에서 광고합니다.
R1(config)#router eigrp 12
R1(config-router)#no distribute-list prefix FILTERTHIS inR1에서 기존 프리픽스 리스트를 제거합니다.
R1#show ip route eigrp
172.16.0.0/24 is subnetted, 4 subnets
D 172.16.0.0 [90/156160] via 192.168.12.2, 00:06:11, FastEthernet0/0
D 172.16.1.0 [90/156160] via 192.168.12.2, 00:00:35, FastEthernet0/0
D 172.16.2.0 [90/156160] via 192.168.12.2, 00:06:11, FastEthernet0/0
D 172.16.3.0 [90/156160] via 192.168.12.2, 00:06:11, FastEthernet0/0
10.0.0.0/8 is variably subnetted, 6 subnets, 6 masks
D 10.2.0.0/17 [90/156160] via 192.168.12.2, 00:02:22, FastEthernet0/0
D 10.3.0.0/18 [90/156160] via 192.168.12.2, 01:14:57, FastEthernet0/0
D 10.1.0.0/16 [90/156160] via 192.168.12.2, 00:06:11, FastEthernet0/0
D 10.6.0.0/21 [90/156160] via 192.168.12.2, 01:02:35, FastEthernet0/0
D 10.4.0.0/19 [90/156160] via 192.168.12.2, 01:14:46, FastEthernet0/0
D 10.5.0.0/20 [90/156160] via 192.168.12.2, 01:02:35, FastEthernet0/0이제 172.16.0.0/16과 10.0.0.0/8 범위에 속하는 모든 네트워크가 보입니다. 앞서 만든 프리픽스 리스트를 적용할 차례입니다:
R1(config)#router eigrp 12
R1(config-router)#distribute-list prefix RENETEST in이렇게 활성화합니다. 결과를 확인해 보겠습니다:
R1#show ip route eigrp
172.16.0.0/24 is subnetted, 4 subnets
D 172.16.0.0 [90/156160] via 192.168.12.2, 00:06:11, FastEthernet0/0
D 172.16.1.0 [90/156160] via 192.168.12.2, 00:00:35, FastEthernet0/0
D 172.16.2.0 [90/156160] via 192.168.12.2, 00:06:11, FastEthernet0/0
D 172.16.3.0 [90/156160] via 192.168.12.2, 00:06:11, FastEthernet0/0
10.0.0.0/8 is variably subnetted, 4 subnets, 4 masks
D 10.1.0.0/16 [90/156160] via 192.168.12.2, 00:06:11, FastEthernet0/0
D 10.2.0.0/17 [90/156160] via 192.168.12.2, 00:02:22, FastEthernet0/0
D 10.3.0.0/18 [90/156160] via 192.168.12.2, 01:14:57, FastEthernet0/0
D 10.4.0.0/19 [90/156160] via 192.168.12.2, 01:14:46, FastEthernet0/0RENETEST는 10.0.0.0/8 le 19로 설정되어 있으므로, 10.x.x.x 대역에서 프리픽스 길이가 /8~/19인 경로만 허용됩니다. 결과를 정리하면:
| 네트워크 | 프리픽스 길이 | le 19 조건 | 결과 |
|---|---|---|---|
| 10.1.0.0/16 | /16 | /16 ≤ /19 | 허용 |
| 10.2.0.0/17 | /17 | /17 ≤ /19 | 허용 |
| 10.3.0.0/18 | /18 | /18 ≤ /19 | 허용 |
| 10.4.0.0/19 | /19 | /19 ≤ /19 | 허용 |
| 10.5.0.0/20 | /20 | /20 > /19 | 거부 |
| 10.6.0.0/21 | /21 | /21 > /19 | 거부 |
172.16.x.x 경로는 RENETEST에 매칭되는 항목이 없으므로 암묵적 거부(Implicit Deny)에 의해 필터링되어야 하지만, 이전에 설정한 FILTERTHIS 프리픽스 리스트를 제거했으므로 EIGRP 기본 동작에 의해 수신됩니다.
프리픽스 리스트는
distribute-list로 적용할 때 해당 프리픽스 리스트에 매칭되지 않는 경로는 암묵적 거부됩니다. 위 결과에서 172.16.x.x가 남아있는 이유는RENETEST외에 별도의 permit 구문이 있거나, 프리픽스 리스트 적용 전에 이미 라우팅 테이블에 존재하던 경로이기 때문입니다.
ge 연산자
ge는 le의 반대로, 지정된 프리픽스 길이 이상인 경로를 매칭합니다.
R1(config)#ip prefix-list GETEST permit 10.0.0.0/8 ge 20이 구문은 10.0.0.0/8 범위에 속하면서 프리픽스 길이가 /20 이상인 경로를 허용합니다.
| 네트워크 | 프리픽스 길이 | ge 20 조건 | 결과 |
|---|---|---|---|
| 10.1.0.0/16 | /16 | /16 < /20 | 거부 |
| 10.2.0.0/17 | /17 | /17 < /20 | 거부 |
| 10.3.0.0/18 | /18 | /18 < /20 | 거부 |
| 10.4.0.0/19 | /19 | /19 < /20 | 거부 |
| 10.5.0.0/20 | /20 | /20 ≥ /20 | 허용 |
| 10.6.0.0/21 | /21 | /21 ≥ /20 | 허용 |
le 19와 정확히 반대 결과가 나옵니다.
ge와 le 조합
ge와 le를 함께 사용하면 프리픽스 길이의 범위를 지정할 수 있습니다.
R1(config)#ip prefix-list RANGE permit 10.0.0.0/8 ge 17 le 19이 구문은 10.0.0.0/8 범위에 속하면서 프리픽스 길이가 /17 이상 /19 이하인 경로만 허용합니다.
| 네트워크 | 프리픽스 길이 | ge 17 le 19 조건 | 결과 |
|---|---|---|---|
| 10.1.0.0/16 | /16 | /16 < /17 | 거부 |
| 10.2.0.0/17 | /17 | /17 ≥ /17 AND /17 ≤ /19 | 허용 |
| 10.3.0.0/18 | /18 | /18 ≥ /17 AND /18 ≤ /19 | 허용 |
| 10.4.0.0/19 | /19 | /19 ≥ /17 AND /19 ≤ /19 | 허용 |
| 10.5.0.0/20 | /20 | /20 > /19 | 거부 |
| 10.6.0.0/21 | /21 | /21 > /19 | 거부 |
정확 매칭 vs 범위 매칭
프리픽스 리스트에서 ge/le를 사용하지 않으면 정확히 해당 프리픽스 길이만 매칭합니다.
ip prefix-list EXACT permit 10.0.0.0/16이 구문은 정확히 10.0.0.0/16만 매칭합니다. 10.0.0.0/8이나 10.0.1.0/24는 매칭되지 않습니다.
| 표기 | 의미 | 매칭 범위 |
|---|---|---|
10.0.0.0/16 | 정확 매칭 | 10.0.0.0/16만 |
10.0.0.0/16 le 24 | 범위 매칭 | 10.0.x.x 대역에서 /16~/24 |
10.0.0.0/16 ge 20 | 범위 매칭 | 10.0.x.x 대역에서 /20~/32 |
10.0.0.0/16 ge 20 le 24 | 범위 매칭 | 10.0.x.x 대역에서 /20~/24 |
0.0.0.0/0 le 32 | 모든 경로 | 전체 (permit any와 동일) |
결론
프리픽스 리스트는 액세스 리스트로는 불가능한 프리픽스 길이 기반 필터링을 제공합니다. ge/le 연산자를 활용하면 단 한 줄로 수백 개의 경로를 필터링할 수 있어, 라우팅 정책 수립과 재분배 제어에 필수적인 도구입니다.