Skip to Content

Cisco 라우터 Prefix-List 설정

프리픽스 리스트(Prefix-List)를 사용하면 네트워크 주소와 프리픽스 길이(서브넷 마스크) 모두를 기준으로 네트워크 프리픽스를 필터링할 수 있습니다. 액세스 리스트(Access-List)는 네트워크 주소를 매칭할 수 있지만, 네트워크 주소의 범위를 매칭하는 데는 사용할 수 없습니다. 이 강의에서는 액세스 리스트의 한계점, 프리픽스 리스트가 이를 어떻게 해결하는지, 그리고 설정 방법을 알아보겠습니다.

핵심 요약

  • 프리픽스 리스트는 네트워크 범위와 서브넷 마스크를 기준으로 필터링합니다.
  • le 연산자는 지정된 값보다 작거나 같은 서브넷 마스크를 가진 프리픽스를 허용합니다.
  • ge 연산자는 지정된 값보다 크거나 같은 서브넷 마스크를 가진 프리픽스를 허용합니다.
  • gele를 조합하면 특정 범위의 서브넷 마스크를 매칭할 수 있습니다.
  • 프리픽스 리스트는 순차적으로 처리되며, 끝에 암묵적 거부(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.255

10.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)로 사용하면서 프리픽스 리스트의 동작 방식을 보여주겠습니다. 다양한 시나리오와 필터를 살펴보겠습니다. 사용할 토폴로지는 다음과 같습니다:

09__img_p03_01

위 그림에서 “R1”과 “R2”라는 두 라우터가 있습니다. R2에는 EIGRP에서 광고할 프리픽스를 가진 여러 루프백 인터페이스(Loopback Interface)가 있습니다. 이렇게 하면 실습할 프리픽스가 여러 개 생깁니다. 설정은 다음과 같습니다:

R1(config)#router eigrp 12 R1(config-router)#no auto-summary R1(config-router)#network 192.168.12.0
R2(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.255

EIGRP를 설정하여 모든 네트워크를 광고합니다.

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/0

R1의 라우팅 테이블을 보면 루프백 인터페이스의 모든 네트워크가 정상적으로 표시됩니다.

기본 프리픽스 리스트 필터링

이제 필터링을 해보겠습니다. 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 32

ip 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.0

R2에 여러 루프백 인터페이스를 추가합니다. 자세히 보면 서로 다른 서브넷 마스크를 사용하고 있습니다.

R2(config)#router eigrp 12 R2(config-router)#network 10.0.0.0

EIGRP에서 광고합니다.

R1(config)#router eigrp 12 R1(config-router)#no distribute-list prefix FILTERTHIS in

R1에서 기존 프리픽스 리스트를 제거합니다.

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/0

RENETEST10.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 연산자

gele의 반대로, 지정된 프리픽스 길이 이상인 경로를 매칭합니다.

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 조합

gele를 함께 사용하면 프리픽스 길이의 범위를 지정할 수 있습니다.

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 연산자를 활용하면 단 한 줄로 수백 개의 경로를 필터링할 수 있어, 라우팅 정책 수립과 재분배 제어에 필수적인 도구입니다.