이 글은 2021년 11월 기준 기록입니다.
EIGRP는 거리 벡터이면서 링크 상태의 성격을 함께 가진다
EIGRP는 IGRP를 개선한 프로토콜로, 시스코에서 개발한 거리 벡터 라우팅 프로토콜입니다. 다만 거리 벡터와 링크 상태의 특징을 섞어서 가지고 있습니다. 그런데도 거리 벡터로 분류하는 이유는 그 출발점인 IGRP가 거리 벡터 라우팅 프로토콜이었기 때문입니다. OSPF와 함께 가장 많이 사용되는 IGP입니다.
장점은 두 가지입니다. 언이퀄 코스트(Unequal Cost) 부하 분산을 지원하고, 기본적인 설정이 간단합니다. 단점도 두 가지입니다. 시스코 제품에서만 사용할 수 있는 프로토콜이고, 뒤에서 다룰 SIA 때문에 대규모 네트워크에서는 관리가 어렵습니다.
기본 설정은 AS 번호와 광고할 네트워크를 지정하는 일이다
먼저 실습 토폴로지를 구성합니다. 스위치에 VLAN과 트렁크를 잡고, 라우터마다 루프백과 서브인터페이스에 주소를 붙입니다.
SW1(config)#vlan 12,13,24
SW1(config-vlan)#exit
SW1(config)#int range e0/0-3
SW1(config-if-range)#no sh
SW1(config-if-range)#switchport trunk encapsulation dot1q
SW1(config-if-range)#switchport mode trunk
R1#conf t
R1(config)#int lo0
R1(config-if)#ip add 2.2.1.1 255.255.255.0
R1(config-if)#exit
R1(config)#int e0/0
R1(config-if)#no sh
R1(config-if)#int e0/0.12
R1(config-subif)#enc dot 12
R1(config-subif)#ip add 2.2.12.1 255.255.255.0
R1(config-subif)#int e0/0.13
R1(config-subif)#enc dot 13
R1(config-subif)#ip add 2.2.13.1 255.255.255.0
R1(config-subif)#exit
R2#conf t
R2(config)#int lo0
R2(config-if)#ip add 2.2.2.2 255.255.255.0
R2(config-if)#exit
R2(config)#int e0/0
R2(config-if)#no sh
R2(config-if)#int e0/0.12
R2(config-subif)#enc dot 12
R2(config-subif)#ip add 2.2.12.2 255.255.255.0
R2(config-subif)#int e0/0.24
R2(config-subif)#enc dot 24
R2(config-subif)#ip add 2.2.24.2 255.255.255.0
R2(config-subif)#exit
R3#conf t
R3(config)#int lo0
R3(config-if)#ip add 2.2.3.3 255.255.255.0
R3(config-if)#exit
R3(config)#int e0/0
R3(config-if)#no sh
R3(config-if)#int e0/0.13
R3(config-subif)#enc dot 13
R3(config-subif)#ip add 2.2.13.3 255.255.255.0
R3(config-subif)#exit
R3(config)#int s1/0
R3(config-if)#no sh
R3(config-if)#ip add 2.2.34.3 255.255.255.0
R3(config-if)#exit
R4#conf t
R4(config)#int lo0
R4(config-if)#ip add 2.2.4.4 255.255.255.0
R4(config-if)#exit
R4(config)#int e0/0
R4(config-if)#no sh
R4(config-if)#int e0/0.24
R4(config-subif)#enc dot 24
R4(config-subif)#ip add 2.2.24.4 255.255.255.0
R4(config-subif)#exit
R4(config)#int s1/0
R4(config-if)#no sh
R4(config-if)#ip add 2.2.34.4 255.255.255.0
R4(config-if)#exit
여기까지가 주소 설계이고, 이제 EIGRP를 켭니다. AS 번호를 지정해 프로세스에 들어가고, 라우터를 구분할 라우터 ID를 정한 뒤, 광고할 네트워크를 와일드카드 마스크와 함께 등록합니다.
// eigrp 프로토콜 설정, AS 번호를 지정
// 같은 AS 번호끼리 eigrp가 작동
R1(config)#router eigrp 1
// router를 구분하기 위한 router-id 지정
// 지정 안하면 자동으로 루프백 인터페이스 아이피 중 가장 높은 아이피 지정
// 루프백이 없으면 실제 인터페이스에 설정된 아이피 중 가장 높은 아이피 지정
// 직접 지정해주는 것이 관리가 용이함
R1(config-router)#eigrp router-id 2.2.1.1
// 네트워크 광고에는 와일드카드 마스크를 사용
// 0.0.0.0 마스크를 사용하면 편리함
// 2.2.2.0과 2.2.3.0 네트워크를 묶어서 광고하고 싶으면
// network 2.2.2.0 0.0.1.255 로 광고하는 방식도 가능
// 서브넷팅 되지 않은 네트워크는 와일드카드 마스크를 생략해도 됨
R1(config-router)#network 2.2.1.1 0.0.0.0
R1(config-router)#network 2.2.12.1 0.0.0.0
R1(config-router)#network 2.2.13.1 0.0.0.0
R2(config)#router eigrp 1
R2(config-router)#eigrp router-id 2.2.2.2
R2(config-router)#network 2.2.2.2 0.0.0.0
R2(config-router)#network 2.2.12.2 0.0.0.0
R2(config-router)#network 2.2.24.2 0.0.0.0
R2(config-router)#exit
R3(config)#router eigrp 1
R3(config-router)#eigrp router-id 2.2.3.3
R3(config-router)#net 2.2.3.3 0.0.0.0
R3(config-router)#net 2.2.13.3 0.0.0.0
R3(config-router)#net 2.2.34.3 0.0.0.0
R3(config-router)#exit
R4(config)#router eigrp 1
R4(config-router)#eigrp router-id 2.2.4.4
R4(config-router)#net 2.2.4.4 0.0.0.0
R4(config-router)#net 2.2.24.4 0.0.0.0
R4(config-router)#net 2.2.34.4 0.0.0.0
R4(config-router)#exit
설정을 마치고 라우팅 테이블을 보면 EIGRP는 D로 표시되며, EIGRP의 AD 값은 90입니다. 메트릭 값을 비교해 보면 시리얼 인터페이스를 지나는 경로가 더 나쁜 경로임을 확인할 수 있습니다.
다섯 가지 패킷이 세 개의 테이블을 만든다
EIGRP는 네이버 테이블을 만들고, 토폴로지 테이블을 만들고, 라우팅 테이블에 저장합니다. 이 과정에서 헬로·업데이트·라우팅 정보요청·응답·수신확인의 다섯 가지 패킷을 사용합니다.
헬로 패킷 — 네이버를 만들고 유지한다
헬로 패킷은 네이버를 구성하고 유지하기 위해 사용하며, 멀티캐스트 주소 224.0.0.10을 목적지 IP로 씁니다. EIGRP는 주기적으로 인접 라우터에게 헬로 패킷을 전송하고, 헬로 주기의 3배에 해당하는 시간 동안 헬로 패킷을 받지 못하면 네이버를 해제합니다. 이렇게 헬로 패킷을 기다리는 시간을 홀드 시간이라고 합니다. 이더넷에서는 헬로 주기가 5초, 홀드 시간이 15초입니다.
헬로 주기와 홀드 시간은 해당 인터페이스에서 설정합니다.
R1(config)#int e0/0.12
R1(config-subif)#ip hello-interval eigrp ?
<1-65535> AS number
R1(config-subif)#ip hello-interval eigrp 1 ?
<1-65535> Seconds between hello transmissions
R1(config-subif)#ip hello-interval eigrp 1 10
R1(config-subif)#ip hold-time eigrp ?
<1-65535> AS number
R1(config-subif)#ip hold-time eigrp 1 ?
<1-65535> Seconds before neighbor is considered down
R1(config-subif)#ip hold-time eigrp 1 30
두 값의 의미가 다르다는 점을 짚어 둘 필요가 있습니다. 헬로 주기는 라우터 자신이 헬로 패킷을 전송하는 주기이고, 홀드 시간은 인접 라우터에게 알려주는 자신의 홀드 시간입니다.
나머지 네 가지 패킷
업데이트 패킷은 라우팅 정보를 전송할 때 사용합니다. 브로드캐스트를 지원하는 네트워크에서는 멀티캐스트 주소 224.0.0.10을 쓰고, 지원하지 않는 경우(NBMA, 포인트 투 포인트)에는 유니캐스트를 씁니다.
라우팅 정보요청 패킷은 쿼리(query) 패킷이라고도 합니다. 라우팅 정보를 요청할 때 사용하며, 라우팅 테이블의 경로가 다운되었거나 대체 경로가 없을 때 라우팅 경로 정보를 요청합니다.
응답 패킷은 요청받은 라우팅 정보를 전송할 때 사용하며, 항상 유니캐스트를 씁니다.
수신확인 패킷은 업데이트·라우팅 정보요청·응답 패킷의 수신을 확인하는 패킷입니다. 헬로 패킷과 수신확인 패킷 자체에 대해서는 수신 확인을 하지 않으며, 역시 항상 유니캐스트를 씁니다.
메트릭은 대역폭과 지연으로 계산된다
EIGRP는 주로 대역폭(BW)과 지연(Delay) 값을 기준으로 메트릭을 계산합니다. 정확히는 대역폭·지연·신뢰도·부하·MTU·홉 카운트라는 벡터 메트릭을 사용하고, 이 벡터 메트릭으로 복합 메트릭을 계산합니다.
벡터 메트릭 값은 show interface 명령으로 확인할 수 있습니다.
R1#show interfaces e0/0.12
Ethernet0/0.12 is up, line protocol is up
Hardware is AmdP2, address is aabb.cc00.0100 (bia aabb.cc00.0100)
Internet address is 2.2.12.1/24
MTU 1500 bytes, BW 10000 Kbit/sec, DLY 1000 usec,
reliability 255/255, txload 1/255, rxload 1/255
Encapsulation 802.1Q Virtual LAN, Vlan ID 12.
...
홉 카운트는 기본적으로 100으로 설정되어 있습니다.
R1(config)#router eigrp 1
R1(config-router)#metric maximum-hops ?
<1-255> Hop count
계산 규칙은 이렇습니다. BW는 목적지까지 가는 모든 인터페이스 대역폭 중 가장 낮은(느린) 값을 취한 뒤 10^7 / 가장 느린 대역폭으로 구하고 소수점 이하는 버립니다. DLY는 목적지까지 가는 경로상의 모든 지연 값을 합친 다음 10으로 나눕니다. 신뢰도는 에러 발생률을, 부하는 인터페이스 부하를 의미합니다.
각 요소에 얼마의 가중치를 줄지는 K 상수가 결정합니다. 기본값은 K1 = K3 = 1, K2 = K4 = K5 = 0이고, 이 기본 K 상수를 적용한 복합 메트릭 계산식은 (BW + DLY) * 256입니다.
K 상수는 다음 명령으로 바꿉니다.
R1(config)#router eigrp 1
R1(config-router)#metric weights 0 1 0 1 0 0
// 첫 숫자는 TOS로 항상 0
// 그 뒤부터 차례대로 K1, K2, K3, K4, K5
여기서 반드시 지켜야 할 것이 있습니다. K 상수 값이 다르면 네이버가 구성되지 않습니다. 따라서 모든 라우터에서 K 상수는 동일하게 설정해야 합니다.
실제로 한 번 계산해 보면 식이 손에 잡힙니다.
// R1에서 2.2.2.2로 가는 경우
R1(e0/0.12) > R2(lo0)
BW 값 계산
R1 e0/0.12 : 10000
R2 lo0 : 8000000
BW = 10^7 / 10000 = 1000
DLY 값 계산
R1 e0/0.12 : 1000
R2 lo0 : 5000
DLY = (1000 + 5000)/10 = 600
복합 메트릭 = (BW + DLY) * 256 = (1000 + 600) * 256 = 409600
EIGRP는 AD 값을 세 개 가진다
EIGRP는 경로의 출처에 따라 서로 다른 AD 값을 붙입니다. EIGRP 광고를 통해 전달된 내부 네트워크는 90, EIGRP에 재분배시킨 외부 네트워크는 170, 그리고 축약 네트워크는 5입니다.
외부 네트워크는 다음처럼 만들어 확인할 수 있습니다. 라우팅 테이블에 D EX로, AD가 170으로 표시됩니다.
R1(config)#int lo1
R1(config-if)#ip add 201.1.1.1 255.255.255.0
R1(config)#router eigrp 1
R1(config-router)#redistribute connected
R1(config-router)#exit
R2#sh ip ro eigrp
D 2.2.34.0/24 [90/2195456] via 2.2.24.4, 01:21:28, Ethernet0/0.24
D EX 201.1.1.0/24 [170/409600] via 2.2.12.1, 00:00:35, Ethernet0/0.12
라우팅 프로토콜의 세부 정보는 R1#sh ip protocols로 조회합니다.
네이버가 없으면 라우팅 정보도 없다
EIGRP, OSPF, BGP는 네이버가 구성되지 않으면 라우팅 정보를 전달하지 않습니다. 그래서 문제가 생기면 네이버부터 확인해야 합니다.
R1#show ip eigrp neighbors
EIGRP-IPv4 Neighbors for AS(1)
H Address Interface Hold Uptime SRTT RTO Q Seq
(sec) (ms) Cnt Num
1 2.2.13.3 Et0/0.13 11 01:27:28 6 100 0 9
0 2.2.12.2 Et0/0.12 10 01:29:13 12 100 0 13
RTO 시간 동안 수신확인 패킷을 받지 못하면 해당 패킷을 재전송하고, 업데이트 패킷은 16회 동안 수신확인 패킷을 받지 못하면 해당 네이버를 해제합니다. 네이버를 구성하는 방식 자체는 단순합니다. 헬로 패킷을 받으면 상대 라우터를 네이버로 설정합니다.
DUAL은 대체 경로를 미리 정해 둔다
인접 라우터와 네이버 관계를 구성한 다음, EIGRP는 DUAL(Diffusing Update ALgorithm) 알고리즘으로 라우팅 정보를 계산합니다.
계산의 재료가 되는 것이 토폴로지 테이블입니다. 인접 라우터에게 수신받은 네트워크와 메트릭 정보를 저장하는 테이블입니다.
R4#show ip eigrp topology
EIGRP-IPv4 Topology Table for AS(1)/ID(2.2.4.4)
Codes: P - Passive, A - Active, U - Update, Q - Query, R - Reply,
r - reply Status, s - sia Status
P 2.2.4.0/24, 1 successors, FD is 128256
via Connected, Loopback0
P 201.1.1.0/24, 1 successors, FD is 435200
via 2.2.24.2 (435200/409600), Ethernet0/0.24
via 2.2.34.3 (2323456/409600), Serial1/0
P 2.2.13.0/24, 1 successors, FD is 332800
via 2.2.24.2 (332800/307200), Ethernet0/0.24
via 2.2.34.3 (2195456/281600), Serial1/0
여기에 등장하는 네 가지 용어가 DUAL의 전부입니다.
- FD(Feasible Distance, 피저블 디스턴스) — 현재 라우터에서 목적지 네트워크까지의 최적 메트릭입니다. 최적 경로 메트릭과 같은 의미입니다.
- 석세서(successor) — 최적 경로상의 넥스트 홉 라우터입니다.
- RD(Reported Distance, 리포티드 디스턴스) — 넥스트 홉 라우터에서 목적지 네트워크까지의 메트릭 값입니다.
- 피저블 석세서(Feasible Successor) — 석세서가 아닌 라우터 중
RD < FD를 만족하는 라우터입니다. 없을 수도 있습니다.
네이버 관계가 구성되면 자신의 토폴로지 테이블에 있는 최적 경로를 업데이트 패킷으로 전송합니다. 그리고 업데이트 패킷을 수신했을 때 DUAL은 네 가지 경우로 나뉘어 동작합니다.
- 기존 경로보다 메트릭이 더 좋거나 동일한 업데이트를 수신했을 때 — 새 경로를 알려준 네이버를 석세서로 지정하고, 새 경로를 다른 네이버에게 알립니다.
- 기존 경로보다 나쁜 라우팅 정보를 석세서가 아닌 네이버에게서 수신했을 때 — 무시합니다.
- 석세서에게서 기존 경로보다 나쁜 정보를 수신했고 피저블 석세서가 있을 때 — 피저블 석세서를 석세서로 지정하고, 새 경로를 네이버에게 알립니다.
- 석세서에게서 기존 경로보다 나쁜 정보를 수신했고 피저블 석세서가 없을 때 — 네이버에게 쿼리 패킷을 전송합니다. 이것이 확산입니다. 쿼리 패킷에 대한 응답 패킷을 모두 수신하면 석세서와 피저블 석세서를 결정하고, 새 경로를 네이버에게 알립니다.
미리 계산해 둔 피저블 석세서가 있으면 3번으로 끝나고, 없으면 4번의 확산이 시작됩니다. 이 차이가 EIGRP의 성능을 좌우합니다.
쿼리 패킷은 어디까지 퍼지는가
4번 상황에서 쿼리 패킷을 수신한 라우터는 인접 라우터에게 다시 쿼리 패킷을 전송합니다. 확산은 다음 조건 중 하나를 만나면 멈춥니다. 토폴로지 테이블에 해당 네트워크 정보가 없거나, 액티브 상태이거나, 네이버가 없거나, 피저블 석세서가 존재하는 경우입니다.
여기서 상태 용어가 나옵니다. 쿼리 패킷을 전송하고 응답 패킷을 아직 받지 못한 상태가 액티브(Active), 응답을 받았거나 애초에 쿼리 패킷을 전송하지 않은 상태가 패시브(Passive)입니다. 라우터는 쿼리 패킷을 전송한 네이버 리스트를 유지하면서 응답을 보내는 라우터를 확인하는데, 쿼리 패킷을 전송한 모든 네이버에게서 응답 패킷을 받아야 패시브로 바뀝니다.
라우터 ID는 직접 지정하는 편이 안전하다
EIGRP는 설정된 루프백 주소 중 가장 높은 것을 라우터 ID로 결정하고, 루프백 IP가 없으면 물리 인터페이스에서 가장 높은 IP를 선택합니다.
문제는 라우터 ID가 중복되는 경우입니다. 동일한 ID를 가진 라우터에서 전송된 라우팅 정보는 무시됩니다. 그러므로 라우터 ID는 직접 지정하는 것이 좋습니다.
한편 EIGRP 패킷은 기본적으로 대역폭의 50%까지 사용할 수 있습니다. 이 비율은 인터페이스에서 조정합니다.
R1#conf t
R1(config)#int e0/0.12
R1(config-subif)#ip bandwidth-percent eigrp ?
<1-65535> AS number
R1(config-subif)#ip bandwidth-percent eigrp 1 ?
<1-999999> Maximum bandwidth percentage that EIGRP may use
축약은 주 네트워크 경계에서 일어난다
EIGRP는 거리 벡터 라우팅 프로토콜이므로 자동 축약과 스플릿 호라이즌이 적용되며, 축약은 주 네트워크 경계에서 이루어집니다.
자동 축약
주 네트워크 경계를 만들기 위해 R1에 루프백을 하나 더 만들고 서로 다른 주 네트워크에 속하는 주소를 붙입니다.
// 주 네트워크 경계를 만들기 위해 R1에 lo1을 만들어서
// 1.1.2.1/24와 1.1.3.1/24 주소를 지정
R1(config)#int lo1
R1(config-if)#ip add 1.1.2.1 255.255.255.0
R1(config-if)#ip add 1.1.3.1 255.255.255.0 sec
R1(config-if)#exit
// 1번 네트워크를 eigrp로 광고
R1(config)#router eigrp 1
R1(config-router)#net 1.1.2.0 0.0.1.255
R1(config-router)#exit
이 상태에서 R2를 보면 축약되지 않은 두 개의 서브넷이 그대로 보입니다. 자동 축약은 주 네트워크가 다른 주 네트워크에 의해 분리될 때 라우팅 문제를 일으킬 수 있어 최근에는 기본적으로 꺼져 있기 때문입니다.
R2#sh ip ro
Gateway of last resort is not set
1.0.0.0/24 is subnetted, 2 subnets
D 1.1.2.0 [90/409600] via 2.2.12.1, 00:00:45, Ethernet0/0.12
D 1.1.3.0 [90/409600] via 2.2.12.1, 00:00:45, Ethernet0/0.12
자동 축약을 켜면 결과가 달라집니다.
// eigrp 자동 축약 활성화
R1(config)#router eigrp 1
R1(config-router)#auto-summary
// 활성화 해주면 자동 축약 적용된 것이 확인됨
R2#sh ip ro
Gateway of last resort is not set
1.0.0.0/8 is subnetted, 1 subnets
D 1.0.0.0 [90/409600] via 2.2.12.1, 00:00:51, Ethernet0/0.12
수동 축약
수동 축약은 축약된 네트워크를 전송하고자 하는 인터페이스에서 설정합니다. 먼저 자동 축약을 다시 끕니다.
// 수동 축약 테스트를 위해 자동 축약 해제
R1(config-router)#no auto-summary
R2#conf t
R2(config)#int e0/0.24
R2(config-subif)#ip summary-address eigrp 1 ?
A.B.C.D Summary IP address
A.B.C.D/nn Summary <network>/<length>, e.g. 192.168.0.0/16
R2(config-subif)#ip summary-address eigrp 1 1.1.2.0/23
R3#conf t
R3(config)#int s1/0
R3(config-if)#ip summary-address eigrp 1 1.1.2.0 255.255.254.0
R4#sh ip ro
Gateway of last resort is not set
1.0.0.0/23 is subnetted, 1 subnets
D 1.1.2.0 [90/435200] via 2.2.24.2, 00:01:06, Ethernet0/0.24
축약 네트워크와 null0
축약에는 라우팅 루프 위험이 따라옵니다. 축약에 포함된 네트워크가 모두 다운되어야 축약 네트워크가 다운되었다고 알리기 때문에, 일부만 다운된 상태에서는 라우팅 루프가 발생할 수 있습니다. 이를 해결하기 위해 축약 네트워크의 패킷을 null0 인터페이스로 보내 폐기하도록 합니다. 이때 축약한 네트워크는 축약을 설정한 라우터에서 AD 5를 가집니다.
R2#sh ip ro 1.1.2.0 255.255.254.0
Routing entry for 1.1.2.0/23
Known via "eigrp 1", distance 5, metric 409600, type internal
Redistributing via eigrp 1
디폴트 루트는 재분배로도, 축약으로도 만든다
먼저 확인용으로 R5를 토폴로지에 추가합니다.
// R5 추가
SW1#conf t
SW1(config)#vlan 45
SW1(config-vlan)#exit
SW1(config)#int e1/0
SW1(config-if)#no sh
SW1(config-if)#sw tr enc dot
SW1(config-if)#sw mo tr
SW1(config-if)#end
SW1#wr
R4(config)#int e0/0.45
R4(config-subif)#enc dot 45
R4(config-subif)#ip add 2.2.45.4 255.255.255.0
R4(config-subif)#exit
R5#conf t
R5(config)#int lo0
R5(config-if)#ip add 2.2.5.5 255.255.255.0
R5(config-if)#exit
R5(config)#int e0/0
R5(config-if)#no sh
R5(config-if)#int e0/0.45
R5(config-subif)#enc dot 45
R5(config-subif)#ip add 2.2.45.5 255.255.255.0
R5(config-subif)#end
R5#wr
첫 번째 방법은 재분배입니다. 정적 디폴트 루트를 만들고 EIGRP에 재분배합니다.
// R4에서 R5로 디폴트 루트 설정 후 재분배
R4(config)#ip route 0.0.0.0 0.0.0.0 2.2.45.5
R4(config)#router eigrp 1
R4(config-router)#redistribute static
두 번째 방법은 축약입니다. 0.0.0.0/0으로 축약하면 그것이 곧 디폴트 루트입니다. 앞서 만든 재분배 디폴트 루트는 제거하고 진행합니다.
R4(config)#router eigrp 1
R4(config-router)#net 2.2.45.4 0.0.0.0
R5(config)#router eigrp 1
R5(config-router)#eigrp router-id 2.2.5.5
R5(config-router)#net 2.2.5.5 0.0.0.0
R5(config-router)#net 2.2.45.5 0.0.0.0
// 재분배 디폴트 루트 제거
R4(config)#no ip route 0.0.0.0 0.0.0.0 2.2.45.5
R4(config)#router eigrp 1
R4(config-router)#no redistribute static
// R2, R3에서 R1로 축약 디폴트 루트 정보 광고
R2(config)#int e0/0.12
R2(config-subif)#ip summary-address eigrp 1 0.0.0.0/0
R3(config)#int e0/0.13
R3(config-subif)#ip summary-address eigrp 1 0.0.0.0/0
플로팅 축약 경로
축약 디폴트 루트에는 AD 충돌 문제가 있습니다. R5가 디폴트 루트를 축약 경로로 R4에게 광고하면,
// R5에서 디폴트 루트를 축약 경로로 R4에게 광고
R5(config)#int e0/0.45
R5(config-subif)#ip summary-address eigrp 1 0.0.0.0/0
R4에서는 R5로 가는 디폴트 루트가 EIGRP 내부 경로로 광고되어 AD 90으로 등록됩니다. 그런데 R2와 R3에서는 R1의 라우팅 테이블을 줄이려고 디폴트 루트로 축약한 네트워크가 AD 5로 null0을 향하게 됩니다. AD 5가 90보다 낮으므로 잘못된 경로가 이깁니다. 따라서 R2와 R3에서 축약할 때 AD를 90보다 크게 설정하면 정상적인 경로가 등록됩니다.
R2(config)#router eigrp 1
R2(config-router)#summary-metric 0.0.0.0/0 distance 220
R3(config)#router eigrp 1
R3(config-router)#summary-metric 0.0.0.0/0 distance 220
SIA는 쿼리의 확산을 끊어서 막는다
SIA 현상은 정보요청 패킷을 보낸 뒤 응답 패킷을 받지 못한 상태(액티브)가 장시간 유지되는 것입니다. 응답 패킷을 받지 못하면 최대 3분을 대기하고, 그 이후에는 네이버 관계를 해제합니다. 앞서 EIGRP의 단점으로 꼽았던 "대규모 네트워크에서 관리가 어렵다"는 것이 바로 이 문제입니다.
가장 단순한 대응은 SIA 타이머 조정으로 기존 3분의 대기 시간을 늘리는 것이지만, 컨버전스 시간이 길어질 수 있으므로 좋은 방법은 아닙니다.
축약으로 쿼리를 멈춘다
정보요청 패킷은 요청받은 네트워크와 동일한 네트워크가 토폴로지 테이블에 존재하지 않으면 전파를 멈춥니다. 이 성질을 이용해 축약으로 확산을 끊을 수 있습니다.
R2(config)#int e0/0.24
R2(config-subif)#ip summary-address eigrp 1 2.2.0.0 255.255.0.0
R3(config)#int s1/0
R3(config-if)#ip summary-address eigrp 1 2.2.0.0 255.255.0.0
R2#sh eigrp address-family ipv4 topology 2.2.1.0/24
이렇게 하면 R4는 2.2.0.0/16 정보는 광고받지만 2.2.1.0/24 정보는 받지 않습니다. 따라서 정보요청 패킷은 R4에서 더 이상 확산되지 않습니다. 실제 동작은 디버깅으로 확인합니다.
// 정보요청 패킷 디버깅
R4#debug eigrp packets query
R5#debug eigrp packets query
스텁 라우팅으로 쿼리 대상에서 빼 준다
스텁 라우터는 자신에게 직접 접속된 네트워크와 축약 네트워크만 네이버에게 전송합니다. 그리고 네이버는 스텁 라우터에게 어떠한 정보요청 패킷도 전송하지 않습니다. 업데이트·수신확인·응답 패킷은 그대로 주고받습니다.
R5(config)#router eigrp 1
R5(config-router)#eigrp stub ?
connected Do advertise connected routes
leak-map Allow dynamic prefixes based on the leak-map
receive-only Set receive only neighbor
redistributed Do advertise redistributed routes
static Do advertise static routes
summary Do advertise summary routes
<cr>
재분배로 EIGRP 영역 자체를 줄인다
종단 라우터에서 아예 EIGRP를 사용하지 않는 방법도 있습니다. 정적 경로로 잇고, 그것을 EIGRP에 재분배합니다.
R4(config)#router eigrp 1
R4(config-router)#no net 2.2.45.4 0.0.0.0
R5(config)#no router eigrp 1
R5(config)#ip route 0.0.0.0 0.0.0.0 2.2.45.4
R4(config)#ip route 2.2.5.0 255.255.255.0 2.2.45.5
R4(config)#router eigrp 1
// 2.2.5.0 네트워크 eigrp 재분배
R4(config-router)#redistribute static
// 2.2.45.0 네트워크 eigrp 재분배
R4(config-router)#redistribute connected
언이퀄 코스트 부하 분산이 EIGRP의 무기다
ECMP는 특정 네트워크에 대해 동일 메트릭 값을 가지는 경로를 자동으로 활용해 부하를 분산합니다. 기본값으로 4개의 경로까지 부하를 분산하며, show ip protocols로 확인할 수 있습니다. 경로 개수는 다음 명령으로 조절합니다.
// 다음 설정을 통해 부하 분산 경로 개수 조절 가능
R5(config)#router eigrp 1
R5(config-router)#maximum-paths ?
<1-32> Number of paths
UCMP, 곧 언이퀄 코스트 부하 분산은 여기서 한 걸음 더 나갑니다. 메트릭 값이 다른 경로에 대해서도 부하 분산이 가능하며, 메트릭 값에 역비례하게 경로를 사용합니다. 다만 조건이 있습니다. 피저블 석세서를 통하는 경로여야 하고, 경로의 메트릭 값이 FD × variance 값보다 적어야 합니다.
첫 번째 방법은 오프셋 리스트로 메트릭 값을 인위적으로 더해 주는 것입니다.
// 오프셋 리스트 적용을 위해 액세스 리스트 생성
R1(config)#ip access-list standard R4
R1(config-std-nacl)#permit 2.2.4.0
R1(config-std-nacl)#exit
// 오프셋 리스트에서 메트릭 값 더해줌
R1(config)#router eigrp 1
R1(config-router)#offset-list R4 in ?
<0-2147483647> Offset
R1(config-router)#offset-list R4 in 1862657 e0/0.12
// variance값 조정
R1(config)#router eigrp 1
R1(config-router)#variance ?
<1-128> Metric variance multiplier
R1(config-router)#variance 128
두 번째는 벡터 메트릭 자체를 조정하는 방법입니다. 대역폭과 지연 중 하나를 바꿀 수 있는데, 대역폭을 변경하는 방식은 좋지 않고 지연 값을 변경하는 편이 낫습니다.
// 오프셋 리스트 적용 해제
R1(config)#router eigrp 1
R1(config-router)#no offset-list R4 in 1862657 e0/0.12
R1(config-router)#exit
// 대역폭과 지연을 조정할 수 있는데, 대역폭을 변경하는 방식은 좋지 않음
// 지연값을 변경시키는 것이 좋음
R1(config)#int e0/0.12
R1(config-subif)#delay 8370
메트릭 조정이 아예 필요 없는 경우도 있습니다. 이미 피저블 석세서 조건을 만족한다면 variance만 올려 주면 됩니다.
R5(config)#router eigrp 1
R5(config-router)#variance 128
인증하지 않으면 남의 트래픽이 넘어온다
보안이 왜 필요한지는 침해 예시가 잘 보여 줍니다. 25비트로 동일한 IP 주소를 설정하면, 다른 목적지로 가야 할 데이터를 대신 받아 볼 수 있습니다.
// 보안 침해 예시
// 25비트로 동일한 아이피 주소를 설정하면
// 다른 목적지로 가야할 데이터를 받아볼 수 있음
R1(config)#int lo2
R1(config-if)#ip add 2.2.4.4 255.255.255.128
R1(config-if)#exit
R1(config)#line vty 0 4
R1(config-line)#password cisco
R1(config-line)#transport input all
R1(config-line)#exit
R1(config)#router eigrp 1
R1(config-router)#net 2.2.4.4 0.0.0.0
R2에서 R4의 주소로 텔넷을 시도하면 R4가 아니라 R1에 접속됩니다.
// 텔넷으로 R4가 아닌 R1에 접속되는 것을 확인
R2#telnet 2.2.4.4
Trying 2.2.4.4 ... Open
User Access Verification
Password:
R1>exit
이를 막는 것이 패킷 인증입니다. 키 체인을 만들고 인터페이스에 MD5 인증을 적용합니다.
R2(config)#key chain EIGRP
R2(config-keychain)#key 1
R2(config-keychain-key)#key-string ICT
R2(config-keychain-key)#exit
R2(config-keychain)#exit
R2(config)#int e0/0.123
R2(config-subif)#ip authentication key-chain eigrp 1 EIGRP
R2(config-subif)#ip authentication mode eigrp 1 md5
R3(config)#key chain EIGRP
R3(config-keychain)#key 1
R3(config-keychain-key)#key-string ICT
R3(config-keychain-key)#exit
R3(config-keychain)#exit
R3(config)#int e0/0.123
R3(config-subif)#ip authentication key-chain eigrp 1 EIGRP
R3(config-subif)#ip authentication mode eigrp 1 md5
또 하나의 방법은 액세스 네트워크를 아예 EIGRP 광고 대상에서 빼고 재분배로 넣는 것입니다.
R2(config)#router eigrp 1
R2(config-router)#no net 2.2.123.2 0.0.0.0
R2(config-router)#redistribute connected
R3(config)#router eigrp 1
R3(config-router)#no net 2.2.123.3 0.0.0.0
R3(config-router)#redistribute connected
또는 패시브 인터페이스 설정으로 해당 인터페이스로의 라우팅 광고를 차단할 수 있습니다.
// 또는 passive-interface 설정으로 해당 인터페이스로 라우팅 광고 차단할 수 있음
R3(config)#router eigrp 1
R3(config-router)#network 2.2.123.3 0.0.0.0
R3(config-router)#passive-interface e0/0.123'IT·테크 > 인프라' 카테고리의 다른 글
| BGP — AS와 AS 사이를 정책으로 잇는 라우팅 프로토콜 (0) | 2026.08.14 |
|---|---|
| OSPF — 링크 상태로 전체 지도를 그려 길을 찾는다 (0) | 2026.08.13 |
| RIP — 홉 수만 세는 가장 단순한 라우팅 프로토콜 (0) | 2026.08.12 |
| 라우팅 개요 — 라우터는 무엇을 보고 경로를 고르는가 (0) | 2026.08.12 |
| MSTP 네트워크 조정 — 단일 영역과 복수 영역에서 경로 나누기 (0) | 2026.08.09 |