Route-map 소개
Route-map은 Cisco 장비에서 if-then 로직을 사용하여 네트워크 정책을 구현하는 도구입니다. 액세스 리스트(Access-list), BGP AS 경로 리스트, BGP 커뮤니티, 인터페이스, 패킷 길이, 라우팅 프로토콜 메트릭 등 다양한 항목에 대해 match(매칭)할 수 있습니다. 선택적으로 출력 인터페이스, 라우팅 프로토콜 메트릭, BGP 속성, 태그 등의 값을 set(설정)할 수도 있습니다.
다음은 몇 가지 간단한 예시입니다:
- 일부 EIGRP 경로만 네이버에게 광고합니다.
- 예: 프리픽스가 액세스 리스트의 192.168.1.0/24와 매칭되면 광고합니다.
- 특정 매칭 조건에 따라 BGP 속성을 설정합니다.
- 예: 프리픽스가 192.168.0.0/24와 매칭되면 로컬 프리퍼런스(Local Preference)를 500으로 설정합니다.
- 특정 매칭 조건에 따라 OSPF에서 EIGRP로 네트워크를 재분배(Redistribute)합니다.
- 예: 프리픽스가 192.168.4.0/24와 매칭되면 OSPF에서 EIGRP로 재분배합니다.
- 정책 기반 라우팅(Policy-Based Routing)으로 넥스트 홉 IP 주소를 변경합니다.
- 예: 패킷 길이가 500바이트보다 크면 넥스트 홉 IP 주소를 192.168.1.254로 변경합니다.
Route-map은 다양한 용도로 사용되며 매우 유연합니다. 이 강의에서는 route-map의 동작 원리에 대한 전반적인 개요를 설명하고, 설정 방법을 보여드리겠습니다.
핵심 요약
- Route-map은 구문(Statement)을 위에서 아래로 순차적으로 처리하며, 첫 번째 매칭에서 멈춥니다.
- 각 구문은 permit 또는 deny일 수 있으며, 선택적으로 match 및 set 명령을 포함합니다.
- 빈 route-map 구문(매칭 조건 없음)은 모든 것과 매칭됩니다.
- Route-map은 액세스 리스트와 마찬가지로 보이지 않는 암시적 거부(implicit deny) 로 끝납니다.
- 매칭 조건에는 프리픽스 리스트(Prefix-list), 액세스 리스트, BGP 속성, 패킷 길이 등이 포함됩니다.
- Set 명령은 메트릭, 넥스트 홉 주소, BGP 속성, DSCP 값 등을 변경합니다.
- 하나의 구문에 여러 매칭 조건을 넣으면 논리적 OR로 동작합니다.
- 하나의 구문에 여러 set 명령을 설정할 수 있습니다.
사전 지식
Route-map을 학습하기 전에, 액세스 리스트(Access-list)의 기본 동작 원리를 이해하고 있어야 합니다. 이전 강의에서 다룬 프리픽스 리스트(Prefix-list)에 대한 이해가 있으면 도움이 됩니다.
설명
액세스 리스트와 마찬가지로, route-map은 다양한 permit 또는 deny 구문으로 동작합니다:
맨 위에서 시작하여 첫 번째 구문을 처리합니다. 두 가지 결과가 가능합니다:
- 매칭(Match): 매칭이 되면, 해당 액션을 적용하고 끝납니다. 다른 route-map 구문에서 또 다른 매칭이 있는지 확인하지 않습니다.
- 미매칭(No match): 다음 route-map 구문으로 넘어갑니다.
어떤 구문에도 매칭되지 않으면, route-map 맨 아래에 있는 보이지 않는 암시적 거부(implicit deny)에 도달합니다. 이는 액세스 리스트의 동작 방식과 유사합니다.
각 route-map에는 하나 이상의 매칭 조건이 있을 수 있습니다. 예시를 보겠습니다:
처음 두 구문(10과 20)에는 매칭 조건이 있습니다. 매칭 가능한 조건은 매우 다양합니다. 몇 가지만 나열하면:
- prefix-list
- access-list
- BGP local preference
- BGP AS path
- Packet Length
- 그 외 다수…
매칭 조건이 없으면 해당 구문은 모든 것과 매칭됩니다.
매칭 조건 외에도, set 명령으로 값을 변경할 수 있습니다:
Route-map 구문 10과 30에는 set 명령이 있습니다. set 명령의 예시는 다음과 같습니다:
- BGP AS 경로 길이를 변경합니다.
- BGP 커뮤니티(Community)를 설정합니다.
- BGP 가중치(Weight)를 설정합니다.
- 재분배에서 OSPF 또는 EIGRP 경로의 메트릭을 설정합니다.
- 재분배 태그를 설정합니다.
- 정책 기반 라우팅에서 넥스트 홉 IP 주소를 설정합니다.
- IP 패킷의 DSCP 값을 설정합니다.
- 그 외 다양한 옵션…
이것이 route-map의 “if-then” 로직입니다. 특정 매칭 조건에 IF(만약) 해당하면, THEN(그러면) 무언가를 SET(설정)합니다.
설정
Route-map을 배우는 가장 좋은 방법은 실제로 동작하는 것을 보는 것입니다.
Route-map을 시연하기 위해, route-map을 생성하고 적용할 대상이 필요합니다. 이 강의에서는 두 대의 라우터를 사용합니다.
EIGRP가 사전 구성되어 있고, R1은 일부 루프백 인터페이스를 R2에게 광고합니다. Route-map을 사용하여 R1이 R2에게 광고하는 네트워크를 필터링하겠습니다.
초기 설정은 다음과 같습니다.
R1
hostname R1
!
ip cef
!
interface Loopback0
ip address 192.168.0.1 255.255.255.0
!
interface Loopback1
ip address 192.168.1.1 255.255.255.0
!
interface Loopback2
ip address 192.168.2.1 255.255.255.0
!
interface Loopback3
ip address 192.168.3.1 255.255.255.0
!
interface GigabitEthernet0/1
ip address 192.168.12.1 255.255.255.0
!
router eigrp 1
network 192.168.0.0 0.0.255.255
!
endR2
hostname R2
!
ip cef
!
interface GigabitEthernet0/1
ip address 192.168.12.2 255.255.255.0
!
router eigrp 1
network 192.168.0.0 0.0.255.255
!
endR2는 다음 네 개의 네트워크를 학습했습니다:
R2#show ip route eigrp | include /24
D 192.168.0.0/24
D 192.168.1.0/24
D 192.168.2.0/24
D 192.168.3.0/24Route-map으로 무엇을 할 수 있는지 살펴보겠습니다.
Match 조건 - Permit
새로운 route-map을 만들고 어떤 옵션이 있는지 확인해 보겠습니다:
R2(config)#route-map ?
WORD Route map tag먼저 이름을 지정해야 합니다. TEST_1이라고 이름 짓겠습니다:
R2(config)#route-map TEST_1 ?
<0-65535> Sequence to insert to/delete from existing route-map entry
deny Route map denies set operations
permit Route map permits set operationspermit 또는 deny 구문을 선택할 수 있습니다. 지금까지는 액세스 리스트와 유사합니다. permit을 선택하고 시퀀스 번호 10을 사용하겠습니다:
R2(config)#route-map TEST_1 permit 10route-map의 옵션을 살펴보겠습니다:
R2(config-route-map)#?
Route Map configuration commands:
continue Continue on a different entry within the route-map
default Set a command to its defaults
description Route-map comment
exit Exit from route-map configuration mode
help Description of the interactive help system
match Match values from routing table
no Negate a command or set its defaults
set Set values in destination routing protocol선택할 수 있는 옵션이 여러 가지 있습니다. match부터 시작하겠습니다:
R2(config-route-map)#match ?
additional-paths BGP Add-Path match policies
as-path Match BGP AS path list
clns CLNS information
community Match BGP community list
extcommunity Match BGP/VPN extended community list
interface Match first hop interface of route
ip IP specific information
ipv6 IPv6 specific information
length Packet length
local-preference Local preference for route
mdt-group Match routes corresponding to MDT group
metric Match metric of route
mpls-label Match routes which have MPLS labels
policy-list Match IP policy list
route-type Match route-type of route
rpki Match RPKI state of route
security-group Security Group
source-protocol Match source-protocol of route
tag Match tag of route
track tracking object위에서 매칭할 수 있는 항목의 긴 목록을 볼 수 있습니다. 매칭 조건으로 액세스 리스트를 사용하려면 ip 매개변수 아래에서 찾을 수 있습니다:
R2(config-route-map)#match ip ?
address Match address of route or match packet
flowspec Match src/dest prefix component of flowspec prefix
next-hop Match next-hop address of route
redistribution-source route redistribution source (EIGRP only)
route-source Match advertising source address of route몇 가지 옵션이 있습니다. address를 선택하겠습니다:
R2(config-route-map)#match ip address ?
<1-199> IP access-list number
<1300-2699> IP access-list number (expanded range)
WORD IP access-list name
prefix-list Match entries of prefix-lists이제 액세스 리스트 또는 프리픽스 리스트를 선택할 수 있습니다. “R1_L0_PERMIT”이라는 액세스 리스트를 참조하겠습니다:
R2(config-route-map)#match ip address R1_L0_PERMIT이제 route-map이 생겼습니다. 하지만 아직 아무 동작도 하지 않으며, 액세스 리스트도 생성해야 합니다.
Access-list Permit
Route-map에서 참조하는 액세스 리스트를 생성하겠습니다. 네트워크 192.168.0.0/24에 매칭되는 permit 구문을 만들겠습니다:
R2(config)#ip access-list standard R1_L0_PERMIT
R2(config-std-nacl)#permit 192.168.0.0 0.0.0.255마지막으로 route-map을 무언가에 적용해야 합니다. 간단하게 EIGRP의 distribute-list에 적용하겠습니다. 이를 통해 R1이 R2에게 광고하는 네트워크를 필터링할 수 있습니다:
R2(config)#router eigrp 1
R2(config-router)#distribute-list route-map TEST_1 inEIGRP의 장점은 distribute-list를 적용하면 자동으로 재동기화한다는 것입니다. 테스트할 때 속도를 높이는 데 도움이 됩니다. 콘솔에 다음과 같은 메시지가 표시됩니다:
%DUAL-5-NBRCHANGE: EIGRP-IPv4 1: Neighbor 192.168.12.1 (GigabitEthernet0/1) is resync: route configuration changed현재 다음과 같은 액세스 리스트와 route-map이 있습니다:
ip access-list standard R1_L0_PERMIT
permit 192.168.0.0 0.0.0.255
route-map TEST_1 permit 10
match ip address R1_L0_PERMITR2의 라우팅 테이블을 확인해 보겠습니다:
R2#show ip route eigrp | include /24
D 192.168.0.0/24192.168.0.0/24 네트워크만 보입니다. 무슨 일이 있었을까요?
- Route-map에는 액세스 리스트를 매칭 조건으로 사용하는 단일 permit 구문이 있습니다.
- 액세스 리스트에는 192.168.0.0/24에 대한 단일 permit 구문이 있습니다.
- 나머지는 모두 액세스 리스트의 보이지 않는 암시적 deny any에 의해 거부됩니다.
- Route-map 구문이 하나뿐이므로 route-map의 보이지 않는 암시적 deny any에 도달합니다.
다음 예시로 넘어가겠습니다.
Access-list Deny
다른 것을 시도해 보겠습니다. permit 구문이 있는 route-map과 deny 구문이 있는 액세스 리스트를 만들겠습니다:
R2(config)#ip access-list standard R1_L0_DENY
R2(config-std-nacl)#deny 192.168.0.0 0.0.0.255다음으로, 이 액세스 리스트를 사용하는 새 route-map을 만들겠습니다:
R2(config)#route-map TEST_2 permit 10
R2(config-route-map)#match ip address R1_L0_DENYRoute-map을 EIGRP에 적용하겠습니다:
R2(config)#router eigrp 1
R2(config-router)#distribute-list route-map TEST_2 in지금 무엇이 있을까요? 확인해 보겠습니다:
R2#show ip route eigrp | include /24어떤 경로도 없습니다. 무슨 일이 있었을까요?
- Route-map에는 하나의 permit 구문이 있고, 액세스 리스트를 매칭 조건으로 사용합니다.
- 액세스 리스트에는 192.168.0.0/24에 대한 deny 구문이 있습니다.
- 액세스 리스트에 permit 구문이 없으므로 모든 것이 암시적 deny any에 의해 거부됩니다.
- Route-map 구문이 하나뿐이므로 route-map의 암시적 deny any에 도달합니다.
192.168.0.0/32만 거부하고 나머지는 모두 허용하려면, 액세스 리스트에 “permit any”를 추가해야 합니다.
Match 조건 - Deny
Route-map의 로직을 반대로 해보겠습니다. 이전 두 예시에서는 permit 구문을 사용했습니다. 이제 deny 구문을 시도하겠습니다.
Access-list Permit
첫 번째 예시에서 만든 동일한 액세스 리스트를 사용하겠습니다:
R2#show access-lists R1_L0_PERMIT
Standard IP access list R1_L0_PERMIT
10 permit 192.168.0.0, wildcard bits 0.0.0.255그리고 액세스 리스트를 매칭 조건으로 사용하는 deny 구문의 route-map을 만들겠습니다:
R2(config)#route-map TEST_3 deny 10
R2(config-route-map)#match ip address R1_L0_PERMITEIGRP에 적용하겠습니다:
R2(config)#router eigrp 1
R2(config-router)#distribute-list route-map TEST_3 in지금 무엇이 있을까요? R2의 라우팅 테이블을 확인해 보겠습니다:
R2#show ip route eigrp | include /24아무것도 없습니다… 무슨 일이 있었을까요?
- 액세스 리스트의 모든 것을 거부하는 단일 route-map 구문이 있습니다.
- 액세스 리스트는 192.168.0.0/24만 매칭합니다. 매칭이 되므로 192.168.0.0/24의 광고를 거부합니다.
- 나머지는 모두 액세스 리스트의 암시적 deny any에 도달합니다.
- 다른 route-map 구문이 없으므로 나머지 모든 것이 route-map의 암시적 deny any에 도달합니다.
192.168.0.0/24는 거부하고 나머지는 모두 허용하려면 어떻게 해야 할까요?
이를 해결하려면 추가 route-map 구문을 추가해야 합니다:
R2(config)#route-map TEST_3 permit 20이 시퀀스 번호에는 어떤 매칭 규칙도 추가하지 않습니다. 빈 route-map 구문은 모든 것과 매칭됩니다.
결과는 다음과 같습니다:
R2#show ip route eigrp | include /24
D 192.168.1.0/24
D 192.168.2.0/24
D 192.168.3.0/24다른 모든 네트워크가 이제 나타납니다. Route-map과 액세스 리스트를 다시 한번 보여드리겠습니다:
route-map TEST_3 deny 10
match ip address R1_L0_PERMIT
route-map TEST_3 permit 20정리하면, 첫 번째 route-map 구문은 192.168.0.0/24 네트워크를 거부합니다. 두 번째 route-map 구문은 나머지 모든 것을 허용합니다.
Access-list Deny
이 예시는 보통 일부 사람들을 혼란스럽게 합니다. deny 구문이 있는 액세스 리스트를 사용하겠습니다:
R2#show access-lists R1_L0_DENY
Standard IP access list R1_L0_DENY
10 deny 192.168.0.0, wildcard bits 0.0.0.255그리고 단일 deny 구문의 새 route-map을 만들겠습니다:
R2(config)#route-map TEST_4 deny 10
R2(config-route-map)#match ip address R1_L0_DENYEIGRP에 적용하겠습니다:
R2(config)#router eigrp 1
R2(config-router)# distribute-list route-map TEST_4 in라우팅 테이블에 무엇이 있을까요? 확인해 보겠습니다:
R2#show ip route eigrp | include /24아무것도 없습니다. 무슨 일이 있었을까요?
- Route-map에는 단일 deny 구문이 있습니다. 액세스 리스트의 모든 것을 거부합니다.
- 액세스 리스트는 192.168.0.0/24를 거부합니다. 나머지도 모두 암시적 deny any에 의해 거부됩니다.
- 첫 번째 route-map 구문이 아무것도 매칭하지 않으므로 다음 route-map 구문으로 넘어갑니다.
- 다음 route-map 구문이 없으므로 모든 것이 route-map의 암시적 deny any에 의해 삭제됩니다.
일부 사람들이 혼란스러워하는 것은, “이중 부정”(route-map에서의 deny와 액세스 리스트에서의 deny)이 매칭된다고 생각하는 것입니다. Route-map은 그렇게 동작하지 않습니다.
이것이 이와 같이 동작한다는 것을 증명하기 위해, 모든 것을 허용하는 빈 route-map 구문을 추가할 수 있습니다:
R2(config)#route-map TEST_4 permit 20R2의 라우팅 테이블을 다시 확인해 보겠습니다:
R2#show ip route eigrp | include /24
D 192.168.0.0/24
D 192.168.1.0/24
D 192.168.2.0/24
D 192.168.3.0/24이제 permit/deny 구문의 매칭 동작 방식을 확인했습니다.
지금까지 본 permit/deny 구문의 조합에 따른 결과를 빠르게 정리하겠습니다:
| Route-map | Match 조건 | 결과 |
|---|---|---|
| permit | 매칭 | 매칭되었으므로 다른 route-map 구문을 처리하지 않습니다. |
| permit | 미매칭 | 매칭되지 않았으므로 다음 route-map 구문으로 넘어갑니다. |
| deny | 매칭 | 매칭되었으므로 다른 route-map 구문을 처리하지 않습니다. |
| deny | 미매칭 | 매칭되지 않았으므로 다음 route-map 구문으로 넘어갑니다. |
다중 매칭 조건
이제 route-map의 permit 및 deny 구문이 어떻게 동작하는지 알았습니다. 단일 매칭 대신 여러 조건을 매칭할 수도 있습니다.
두 개의 새 액세스 리스트를 만들겠습니다:
R2(config)#ip access-list standard R1_L1_PERMIT
R2(config-std-nacl)#permit 192.168.1.0 0.0.0.255
R2(config)#ip access-list standard R1_L2_PERMIT
R2(config-std-nacl)#permit 192.168.2.0 0.0.0.255이 액세스 리스트는 R1의 루프백 인터페이스 중 두 개에 매칭됩니다. 하나의 구문에서 두 액세스 리스트를 모두 매칭하는 새 route-map을 만들겠습니다:
R2(config)#route-map MULTIPLE_MATCH permit 10
R2(config-route-map)#match ip address R1_L1_PERMIT R1_L2_PERMITEIGRP에 적용하겠습니다:
R2(config)#router eigrp 1
R2(config-router)#distribute-list route-map MULTIPLE_MATCH inR2의 라우팅 테이블을 확인하겠습니다:
R2#show ip route eigrp | include /24
D 192.168.1.0/24
D 192.168.2.0/24액세스 리스트에서 매칭한 두 네트워크가 모두 라우팅 테이블에 있습니다. 계속하기 전에 distribute-list를 제거하겠습니다:
R2(config)#router eigrp 1
R2(config-router)#no distribute-list route-map MULTIPLE_MATCH inSet 동작
지금까지 route-map에 대해 본 내용도 좋지만, match 구문만 있는 route-map은 약간 고급 액세스 리스트에 불과합니다.
Route-map의 진정한 힘은 set 명령입니다.
이를 시연하기 위해 EIGRP의 distribute-list를 사용할 수 없습니다. 새로운 루프백 인터페이스를 EIGRP로 재분배하는 다른 예시를 사용하겠습니다.
새 루프백 인터페이스와 이에 매칭되는 액세스 리스트를 만들겠습니다:
R1(config)#interface Loopback4
R1(config-if)#ip address 172.16.1.1 255.255.255.0
R1(config)#ip access-list standard R1_L4
R1(config-std-nacl)#permit 172.16.1.0 0.0.0.255다음으로, 액세스 리스트를 매칭 조건으로 사용하는 단일 permit 구문의 route-map을 만들겠습니다:
R1(config)#route-map SET permit 10
R1(config-route-map)#match ip address R1_L4set 명령을 자세히 살펴보겠습니다:
R1(config-route-map)#set ?
aigp-metric accumulated metric value
as-path Prepend string for a BGP AS-path attribute
automatic-tag Automatically compute TAG value
clns OSI summary address
comm-list set BGP community list (for deletion)
community BGP community attribute
dampening Set BGP route flap dampening parameters
default Set default information
extcomm-list Set BGP/VPN extended community list (for deletion)
extcommunity BGP extended community attribute
global Set to global routing table
interface Output interface
ip IP specific information
ipv6 IPv6 specific information
level Where to import route
lisp Locator ID Separation Protocol specific information
local-preference BGP local preference path attribute
metric Metric value for destination routing protocol
metric-type Type of metric for destination routing protocol
mpls-label Set MPLS label for prefix
origin BGP origin code
tag Tag value for destination routing protocol
traffic-index BGP traffic classification number for accounting
vrf Define VRF name
weight BGP weight for routing table옵션이 매우 많습니다. EIGRP로 재분배하고 있으므로, set 명령을 사용하여 메트릭을 설정하겠습니다:
R1(config-route-map)#set metric ?
+/- Add or subtract metric
<0-4294967295> Metric value or Bandwidth in Kbits per secondEIGRP는 복합 메트릭(Composite Metric)을 사용하므로 대역폭, 지연, 신뢰성, 부하, MTU를 설정해야 합니다:
R1(config-route-map)#set metric 1500 10 255 255 1500이제 루프백을 EIGRP로 재분배하고 route-map을 참조할 수 있습니다:
R1(config)#router eigrp 1
R1(config-router)#redistribute connected route-map SETR2를 확인해 보겠습니다:
R2#show ip route eigrp
172.16.0.0/24 is subnetted, 1 subnets
D EX 172.16.1.0
[170/1709312] via 192.168.12.1, 00:01:41, GigabitEthernet0/1위에서 재분배된 경로와 그 메트릭을 볼 수 있습니다. 메트릭 값을 변경하여 route-map이 동작하는지 확인할 수 있습니다:
R1(config)#route-map SET permit 10
R1(config-route-map)#set metric 15000 1000 100 100 1500라우팅 테이블에서 새로운 메트릭 값을 확인하겠습니다:
R2#show ip route eigrp | include 170
[170/426752] via 192.168.12.1, 00:00:29, GigabitEthernet0/1메트릭이 변경되었습니다.
매칭 조건과 마찬가지로, 여러 set 명령을 설정할 수도 있습니다.
최종 설정은 다음과 같습니다.
R1
hostname R1
!
ip cef
!
interface Loopback0
ip address 192.168.0.1 255.255.255.0
!
interface Loopback1
ip address 192.168.1.1 255.255.255.0
!
interface Loopback2
ip address 192.168.2.1 255.255.255.0
!
interface Loopback3
ip address 192.168.3.1 255.255.255.0
!
interface Loopback4
ip address 172.16.1.1 255.255.255.0
!
interface GigabitEthernet0/1
ip address 192.168.12.1 255.255.255.0
!
router eigrp 1
network 192.168.0.0 0.0.255.255
redistribute connected route-map SET
!
ip access-list standard R1_L4
permit 172.16.1.0 0.0.0.255
!
route-map SET permit 10
match ip address R1_L4
set metric 15000 1000 100 100 1500
!
endR2
hostname R2
!
ip cef
!
interface GigabitEthernet0/1
ip address 192.168.12.2 255.255.255.0
!
router eigrp 1
network 192.168.0.0 0.0.255.255
!
ip access-list standard R1_L0_DENY
deny 192.168.0.0 0.0.0.255
ip access-list standard R1_L0_PERMIT
permit 192.168.0.0 0.0.0.255
ip access-list standard R1_L1_PERMIT
permit 192.168.1.0 0.0.0.255
ip access-list standard R1_L2_PERMIT
permit 192.168.2.0 0.0.0.255
!
route-map MULTIPLE_MATCH permit 10
match ip address R1_L1_PERMIT R1_L2_PERMIT
!
route-map TEST_1 permit 10
match ip address R1_L0_PERMIT
!
route-map TEST_3 deny 10
match ip address R1_L0_PERMIT
!
route-map TEST_3 permit 20
!
route-map TEST_2 permit 10
match ip address R1_L0_DENY
!
route-map TEST_4 permit 10
match ip address R1_L0_DENY 1 2 3
!
route-map TEST_4 permit 20
!
end결론
Route-map의 기본 사항을 학습했습니다:
- Route-map은 Cisco 장비의 “if-then” 솔루션입니다.
- 매칭 조건을 확인한 후, 선택적으로 값을 설정합니다.
- BGP 속성, 정책 기반 라우팅, 재분배, DSCP 값 설정, 필터링 등에 자주 사용됩니다.
- 다양한 permit 및/또는 deny 구문에서의 route-map 동작 방식을 이해하는 것이 중요합니다.