기초 물방울/네트워크

IP 라우팅 공부기록 #4 (OSPF)

Weeding 2023. 1. 9. 16:52
반응형
SMALL

OSPF의 등장 배경

인터넷의 전신인 ARPANET은 1969년에 만들어졌습니다.

그리고, 인터넷에서 사용하기 위해 만들어진 TCP/IP는 1982년 완성됬습니다.

그 이유는, 초기 ARPANET은 TCP/IP 환경이 아닌, NCP(Network Control Program) 기반의 IMP(Interface Message Processor, 1세대 게이트웨이) 장치에 의해 통신하도록 만들어졌기 때문입니다.

 

어쨋든, 1982년 TCP/IP가 등장하며 Best-Path를 찾는 라우팅 프로토콜이 필요했습니다.

이 때 RIP 라우팅 프로토콜이 표준 라우팅 프로토콜로 사용되었고, 발전을 해오다가 네트워크가 점점 커지면서 SPF 알고리즘을 이용한 Link-State 라우팅 프로콜을 개발하기 시작합니다.

 

이 때 ISO에서 OSI 7 Layer를 발표하며 Layer 3의 서비스를 CLNS(Connectionless Network Service)라고 정의하고, CLNS에서 사용하는 프로토콜로 CLNP(Connectionless Network Protocol)를 제안합니다. 그리고, CLNP를 기반으로 Best-Path를 계산하는 라우팅 프로콜이 나오는데 이게 IS-IS의 시초입니다.

 

그 이후, Link-State 라우팅 프로토콜 개발이 빠르게 이루어지며 1989년 OSPF version 1이 개발되었으며, 1991년 오늘날 우리가 사용하는 OSPF의 근간이 되는 OSPF version 2 가 표준화 되었습니다.

 

 

 

그래서, 기본적인 OSPF의 특징을 정리해보면

1. Link-state 라우팅 프로토콜이며,

2. Classless 라우팅 프로토콜(VLSM(variable Length Subnet Mask), CIDR(Classless Inter Domain Routing 지원)

3. Metric은 Cost를 사용합니다. (10^8/Bandwidth(bps))

4. AD값은 110

5. Multicast를 사용해서 정보를 전달합니다

--> 224.0.0.5 (DR이 BDR에게 전송할 때 사용)

--> 224.0.0.6 (BDR이 DR에게 전송할 때 사용)

6. SPF(Shortest Path First) 또는 Dijkstra 알고리즘을 이용해 각 목적지까지 최적 경로를 계산합니다.

 

 

OSPF가 라우팅 테이블을 만들고 유지하는 과정은 대략적으로 아래와 같습니다.

1. Hello packet을 주고 받아 neighbor 및 adjancent neighbor 관계를 구성한다. 

다른 라우팅 프로토콜과 다르게 OSPF는 모든 neighbor간에 라우팅 정보를 교환하지 않습니다.

라우팅 정보를 교환하는 neighbor를 adjancent neighbor 라고 합니다.

 

2. adjancent neighbor끼리 라우팅 정보를 교환하며, OSPF에서는 라우팅 정보를 LSA(Link State Advertisement)라고 한다. 각 라우터들은 전송받은 LSA를 링크 상태 데이터베이스에 저장한다.

 

3. LSA 교환이 끝나면 이를 근거로 SPF(Shortest Path First) 또는 다익스트라 알고리즘을 이용해 각 목적지까지 최적 경로를 계산하고 이를 라우팅 테이블에 저장한다.

 

4. 주기적으로 헬로 패킷을 전송하고, 만약 네트워크 상태가 변화면 위 과정을 반복해 다시 라우팅 테이블을 만든다.

 

 

추가로 장점을 정리해보면

OSPF는 네트워크를 Area 단위로 구성해 특정 area에서 발생하는 이슈가 다른 Area에 전송되지 않아 큰 규모에서 안정되게 운영할 수 있습니다. 즉, Area 각각이 OSPF 데이터베이스를 동기화한다는 뜻이죠.

 

또한, Stub이라는 강력한 축약 기능이 있습니다.

Stub Area에서는 ABR이 내부 라우터에게 외부 경로에 대한 LSA를 차단하고 대신 디폴트 루트를 전달합니다.

결과적으로 라우팅 테이블 크기를 대폭 감소하고, 네트워크 안정성, 성능 향상과 장애처리가 쉬워지는 장점이 있죠.

 

이런 특징들 덕분에 Convergence time이 전반적으로 빠른편입니다.

 

 

Area의 중요성과 장점

Area를 구분함으로써 OSPF 라우팅 프로토콜이 SPF 알고리즘 수행에 따른 CPU 사용량을 낮출 수 있게 되며, 또한 데이터베이스에서 다른 Area의 Link 정보를 삭제함으로써 메모리의 사용량을 줄일 수 있게 됩니다. 그리고, Area간에 데이터베이스를 교환하면서 서로 다른 Area 간에는 데이터베이스를 동기화 할 필요가 없기 때문에 네트워크 Filter나 Summary가 가능해집니다. 그래서 필요한 경우 네트워크 Filter나 Summary 기술을 통해 업데이트 양을 줄일 수 있습니다.

 

 

 

여기서 단점을 정리해보면

네트워크 종류에 따라 동작하는 방식과 설정이 다릅니다. 종류로는 Broadcast Multi Access, ★Point-to-PointNon Broadcast Multi Access 등이 있습니다. 또한, 정보 계산 및 유지를 위해 CPU, DRAM 같은 자원을 많이 사용하죠.

 

 

 

 

기본적인 OSPF 설정

OSPF 구성을 위한 물리적 구성
논리적으로 구성한 네트워크

 

위 그림과 같이 Area를 구분하고 R2,R3,R4의 loopback은 area 0에 포함시키도록 한다.

 

 

[외우기]

1. router ospf 1 명령어에서 1은 프로세스 ID이다. 

라우터에서 다수의 OSPF 프로세스를 동작시킬 때 상호 구분하기 위한 목적으로 사용되지만, 일반적으로는 하나의 라우터에서 하나의 프로세스만 사용한다. 프로세스 ID는 라우터별로 다른 값을 가져도 상관없다.

 

2. 라우터 ID는 각 라우터를 구분하는 용도로 사용된다. 

그러기 때문에 변동되지 않는 IP 주소 (보통 루프백주소)를 사용한다.

직접 지정하지 않는다면 동작중인 인터페이스 IP 중 높은걸로 자동 선택하기 때문에, 라우터 ID를 직접 지정하는 것이 안전하다

 

3. OSPF 라우터 ID는 한 번 결정되면 재부팅하거나 clear ip ospf process 명령어로 리셋을 하기 전에는 변경되지 않는다.

 

4. area가 2개 이상 있을 때는 하나는 반드시 백본 area , area 번호는 0(=0.0.0.0)이어야한다.

 

 

O - OSPF

IA - OSPF inter area

inter area는 다른 인터페이스에서 넘어온 ospf를 표시해주는거라 볼 수 있다.

>> O로 보여지는 경로는 LSA TYPE1(내부 area에서 작동)으로 광고를 받은 경로임
>> O IA로 보여지는 경로는 LSA TYPE3(외부 area에서 넘어온)으로 광고를 받은 경로임

 

루프백 인터페이스에 설정된 네트워크 서브넷 마스크는 32비트로 표시된다.

 

만약 원래의 서브넷 값으로 광고하게 하고 싶다면 인터페이스 설정 모드에서 아래 명령어를 사용하면 된다.

R1(config)#int loo 0
R1(config-if)#ip ospf network point-to-point

변경 전
point-to-point로 변경 후

 

 

 

OSFP 패킷 

패킷 타입 패킷 이름 역할
1 hello neighbor 구성 및 유지
Database Description database 내용 요약
3 Link State Request database 상세 내용 요청
Link State Update database 업데이트
5 Link State Ack ACK 전송

 

neighbor 라우터에서 일정 기간 헬로 패킷을 수신하지 못하면 해당 neighbor가 다운된것으로 간주해 해제한다.

 

hello 주기

- 브로드캐스트 네트워크 / 포인트 투 포인트 = 10초

- 논브로드캐스트 네트워크 = 30초

 

dead 주기

- 기본 값은 헬로 주기의 4배 = 40초 / 120초

 

 

DDP

OSPF의 네트워크 정보 = LSA (Link State Advertisement)

OSPF는 자신이 만든 LSA와 neighbor에게서 수신한 LSA 모두를 Link state database에 저장한다.

DDP(Database Description Packet)는 OSPF 라우터의 Link state database에 있는 LSA들을 요약한 정보를 알려주는 패킷이다. 

 

OSPF neighbor 라우터 간에 LSA들을 교환하기 전에 자신의 링크 상태 데이터베이스에 있는 LSA 목록을 상대 라우터에게 알려주기 위해 사용한다. DDP를 DBA 패킷이라고도 한다.

 

LSA

  • OSPF의 네트워크 정보
  • Router는 자신의 Link 상태 정보를 LSA로 만들어 동일한 Area에 있는 모든 장비에게 Flooding하여 LSDB를 만든다.
  • 각 LSA는 20byte 크기의 공통적인 헤더를 가지며, LS타입 / Link 상태 ID / LSA를 광고하는 라우터 ID등이 기록된다.

 

타입 이름 생성 라우터 내용 확인 명령어 전송범위
1 router 모든 라우터 인터페이스 상태 router area
2 network DR DR과 연결된 라우터 ID network area
3 summary ABR 타 area 네트워크 summary are
4 summary ABR ASBR 라우터 ID asbr-summary area
5 AS-external ASBR 외부 네트워크 external AS
7 AS-external NSSA ASBR NSSA 외부 네트워크 nssa-external AS

 

LSA Type 1 (Router LSA)

  • Type 1 LSA의 이름은 'Router Link' 이다.
  • 모든 Router는 LSA 1을 다른 라우터에게 전달한다.
  • Router에 접 연결된 Link의 상태 정보를 포함한다.
    (네트워크 번호, 종류, 메트릭 값 등)
  • Flooding은 자신의 Area로 한정되어 있다.
  • sh ip ospf database router

 

LSA Type 2 (Network LSA)

  • Broadcast or NBMA 네트워크의 DR에서 발생한다.
    고로 DR/BDR을 사용하는 네트워크가 없으면 Type 2 LSA가 없다.
  • DR의 Subnet Mask와 연결된 Router 목록을 나타낸다.
  • Flooding은 동일 Area로 한정되어 있다.
  • sh ip ospf database network

 

** LSA Type 1,2은 동일 Area 안에서 주고받는 Packet이다.

 

** ABR은 최소 2개 이상의 Area에 소속되어 있는 라우터를 의미한다

** ASBR은 OSPF와 다른 다이나믹 프로토콜이 동시에 동작하는 라우터를 의미한다.

 

LSA Type 3 (Summary LSA)

  • ABR이 다른 영역으로 자신이 소유한 네트워크 정보를 광고한다.
  • Link State ID는 다른 Area에 소속된 네트워크 주소를 의미한다.
  • Flooding은 해당 Area에 한정되어 있다.
  • sh ip ospf database summary

 

 

LSA Type 4 (Summary LSA)

  • ABR이 ABRP의 정보를 LSA Type 1번으로 수신하고 다른 영역으로 전달할 때 LSA Type 4번으로 전달한다.
  • 즉, 다른 Area에 소속된 ASBR의 라우터와 그 ASBR까지의 코스트를 현재의 Area에 소속된 라우터들에게 알리기 위하여 사용된다.
  • ASBR이 영역 안에 존재할 경우에만 만들어 진다.
  • sh ip ospf database asbr-summary

 

 

 

LSA Type 5 (External LSA)

  • Type3,4 처럼 ASBR이 만들며, 전체 AS로 Flooding 한다.
  • OSPF AS의 외부 영역으로 향하는 경로 정보를 표현한다.
    즉, OSPF 도메인 외부 네트워크를 OSPF 도메인 내부의 라우터들에게 알리기 위해 사용된다.
  • 링크 상태 ID는 OSPF 도메인 외부 네트워크를 의미한다.
  • 경로 정보를 요약하지 않으면 문제가 될 수 있다.
  • sh ip ospf database external

 

 

 

 

 

 

 

대규모 네트워크에서는 OSPF가 네트워크를 나눈다?

네트워크는 보통 스위치, 라우터를 통해 네트워크를 분할해 Broadcast와 Collision Domain을 나누지만, 프로토콜의 한 종류인 OSPF는 Area라는 영역을 통해 네트워크를 계층적으로 나눌 수 있으며 이를 권장한다.

 

Area가 단일 영역이고 네트워크 규모가 커지면 변화가 많을수록 LSA의 Flooding이 많아지고,

그 때마다 SPF 알고리즘에 의해 재계산이 이루어지면 LSA가 필요이상으로 많아진다.

그러면 LSDB 또한 커지면서 Memory 자원 낭비가 심해진다.

또한, Link의 사용량도 많아지고 반복되 계산으로 CPU 자원 또한 낭비하게 된다.

 

이것이 Area를 계층적으로 나누는 이유이다!

LSA Packet 확산 범위를 조절하고, 그로 인해 LSDB의 규모를 안정적으로 운영 및 관리할 수 있게 되는 것이다.

 

** OSPF Router의 종류

1. Internal Router 

= 특정 Area에만 속한 Router

 

2. ABR (Area Border Router)

= 두 개 이상의 Area에 속한 Router

 

3. ASBR (Automous System Boundary Router)

= 외부 네트워크와 연결되는 Router

 

 

 

 

OSPF 동작방식

1. hello packet을 이용해 인접한 라우터와 neighbor 관계를 구성한다.

 

2. 물리적으로 직접 연결되는 라우터 중에서 hello packet을 수신하고, hello packet에 포함된 neighbor list에 자신의 라우터 ID가 포함되어 있으면 그 라우터를 neighbor라고 간주한다. 이 때, 헬로 패킷에 기록된 area ID, 암호, 서브넷길이, hello/dead 주기, stub area 표시가 서로 동일해야한다.

3. multi access, point-to-point 같은 브로드캐스트가 지원되는 곳에선 224.0.0.0를 헬로 패킷의 목적지 주소로 사용!

그러나, 논브로드캐스트 네트워크에서는 상대 IP 주소인 유니캐스트 주소를 사용한다.

 

 

 

DR과 BDR

이더넷, NBMA 등의 멀티 액세스 네트워크에 접속된 모든 OSPF 라우터끼리 N:N으로 LSA를 교환하면 동일 네트워크에서 중복된 LSA 및 ACK가 많이 발생하게 된다. 이를 방지하기 위해 LSA를 하나의 대표 라우터에게만 보내고, 이 라우터가 나머지 라우터에게 중계하면 훨씬 효과적이다. 

DR이 없는 경우

 

DR을 사용하는 경우
R3 e0/2와 R4 e0/2 간을 ptp로 바꿔주고 확인해보니 DR/BDR 선출을 하지 않는다.

 

DR은 동일한 서브넷으로 연결된 다른 라우터들과 반드시 물리적으로 직접 연결되어야 한다.

 

 

 

 

OSPF 어드제이션시

OSPF 라우팅 정보(LSA)를 주고 받는 neighbor를 adjacent neighbor라고 합니다.

  • DR과 다른 라우터들
  • BDR과 다른 라우터들
  • Point to Point network로 연결된 두 라우터
  • Point to Multi-point network로 연결된 라우터들
  • virtual link로 연결된 두 라우터

 

 

OSPF Neighbor 상태

Two-way 상태에서는 DR/BDR 선출을 공정하게 하기 위해 dead 주기와 동일한 시간을 기다린다. (=wait 시간)

브로드캐스트 = 40초

논브로드캐스트 = 120초

따라서, OSPF 네트워크 타입을 PTP나 PTM으로 설정하여 DR/BDR 선출을 하지 않게 해야 기다림없이 바로 교환!

 

 

** OSPF 네이버간 상태는 항상 모든 상태를 거치면서 차례로 변화하는 것은 아니다.

각 상태에서 발생할 수 있는 상황에 따라 몇 단계를 건너 뛰기도 하고 다시 이전 상태로 돌아갈 수도 있다.

 

 

** OSPF 어드제이션시(adj) 과정 디버깅

 

 

Point-to-Point 네트워크에서 neighbor 관계 맺기 

 

1. 링크 계층 프로토콜이 HDLC이므로 P2P 네트워크라는 것을 감지.

2. point-to-point 네트워크라서 DR/BDR을 사용하지 않으므로 two-way 상태에서 기다리지 않고 즉시 EXstart 상태로 들어가서 Master와 Slave를 선출한다.

3. EXchange 상태에서 DBD와 LSU를 주고 받는다. 

4. 수신한 LSU로 인해 R3와 동일한 라우팅 정보를 가지게 되어 Full 상태가 된다.

 

이처럼 DR/BDR을 뽑지 앟는 PTP 네트워크 타입같은것4은 인터페이스가 살아난 다음 거의 바로 라우팅 정보를 수신한다. OSPF는 neighbor 라우터와 라우팅 정보 교환을 끝낸 다음 5초를 더 기다린 후 라우팅 알고리즘 계산을 하고 라우팅 테이블에 기록한다. 

 

 

 


 

OSPF 메트릭 

OSPF 메트릭을 cost라 부르며, 출발지로부터 목적지까지의 각 인터페이스에 기준 대역폭을 실제 대역폭으로 나눈 값의 합계이다. 시스코 IOS의 OSPF 기준 대역폭은 10⁸이다.

R1 -> R5 1.1.5.0/24 네트워크에 대한 OSPF 목적지까지는 가는 경로상의 OSPF 코스트 값들을 합친것이다.

패스트 이더넷(100,000,000bps)의 코스트는 10⁸/100,000,000 이므로 1입니다. 

 

루프백 인터페이스(8,000,000,000 bps)의 코스트는 10⁸/8,000,000,000 (=0.0125) 이므로

계산시 소수점 이하는 버리므로 1입니다.

결과적으로 R1에서 1.1.5.0/24까지의 cost 값은 4 (1+1+1+1) 입니다.

 

 

 


 

OSPF Stub area

다른 IGP들에 비해 OSPF가 가진 장점 중 하나가 stub area를 구성할 수 있다는 것이다.

ABR이 내부 라우터에게 외부 경로에 대한 LSA를 차단하고 대신 default route를 전달해 결과적으로 라우팅 테이블 크기를 대폭 감소하고 안정성이 향상되며 라우팅 성능도 좋아지고 장애처리도 쉬워진다.

 

1. stub area

2. 완전 스텁 area

3. NSSA (not-so-stubby area)

 

 

 

 

OSPF 네트워크 축약

임의의 인터페이스에서 축약이 가능한 Rip v2나 EIGRP와 달리 OSPF는 축약을 할 수 있는 위치가 정해져 있다.

자신의 area에 소속된 네트워크를 축약하여 다른 area로 전송시키려면 ABR에서,

외부 도메인에서 재분배된 네트워크를 축약하려면 ASBR에서 축약해야 한다.

 

 

 

내부 네트워크 축약

R2의 기존 라우팅 테이블

 

 

R4(config-router)#area 45 range 1.1.50.0 255.255.254.0

R4에서 ABR 축약 후 R2의 라우팅 테이블. 1.1.50.0 축약이 되있는것 확인.

 

 

R4의 라우팅 테이이블에 축약된 네트워크의 게이트웨이가 null 0 으로 지정되어 있다.

이것은 EIGRP와 마찬가지로 축약에 포함되는 상세 네트워크가 다운되었을 때 라우팅 루프를 방지하기 위함이다.

 

 

 

외부 네트워크 축약

OSPF로 재분배된 네트워크는 그 네트워크를 재분배한 ASBR에서만 축약이 가능하다.

 

이 네트워크는 R5에서 만들었고, OSPF 외부 네트워크이므로 축약하려면 반드시 ASBR인 R5에서만 가능하다.

 

ASBR에서 축약

 

확인해보면 5.5.50.0/23 네트워크가 저장된다.

 

 

OSPF 네트워크 보안

OSPF는 neighbor 인증 외에 특정 area 전체를 인증할 수 있다.

인증 범위 인증 방식 사용 명령어
neighbor 인증 평문 (clear text) interface xxx
ip ospf authentication
ip ospf authentication-key xxx
MD5 interface xxx
ip ospf authentication message-digest
ip ospf message-digest-key 1 md5 xxx
area 인증

** 동일한 area에 소속된
모든 라우터 인증방식은 동일해야한다.

** 인증키는 neighbor간에만
일치하면 된다.
평문 (clear text) router ospf 1
area xxx authentication
interface xxx
ip ospf authentication-key xxx
MD5 router ospf 1
area xxx authentication message-digest
interface xxx
ip ospf message-digest-key 1 md5 xxx

Type 0 = 인증을 하지 않는 것

Type 1 = 평문 인증

Type 2 = MD5 방식

 

 

Area 1 MD5 인증

R1에 MD5로 area 1을 인증하고 debug를 하면 다음과 같이 인증 타입이 다르다는 메시지가 나오게 된다.

 

R2, R3에도 각각 MD5로 area 인증을 해주고 나면 같은 area는 정상적으로 Full 상태가 된걸 확인할 수 있다.

 

 

 

 

Area 0 평문 인증

같은 area에서 처음에 인증을 하는 라우터에서는 당연히 인증 타입이 맞지 않기 때문에 Down이 된다.
R3와 R4도 인증 타입을 맞춰주니 정상적으로 Full 상태로 변화한 것을 확인할 수 있다.

 

이렇게 설정하게 되면 area 0에 소속된 라우터들이 상호 OSPF 패킷을 전송할 때 'cisco'라는 인증키를 함께 보내게된다.

 

 

 

neighbor 인증

R4, R5 간에 e0/0.45 인터페이스를 통해 OSPF 메시지를 주고 받을 때 평문으로 인증을 하기 위한 설정

 

디버깅을 해보면 위와 같이 수신하는 패킷의 인증 타입이 표시된다. 또, MD5 인증시 키 번호까지 표시해준다.

 

 

인증 키 변경은 하나의 인터페이스에 인증 키를 두 개 정의하면 두개의 인증 키를 모두 전송하게된다.

수신측에서는 수신한 인증 키 중에서 자신의 인터페이스에 설정된 키 중에서 가장 높은 키 번호와 일치하는 것을 선택하여 인증한다.

 

단, 평문 인증방식에서는 동일 인터페이스에서 동시에 두개의 인증 키를 사용할 수 없다.

MD5 인증을 사용해도 라우터에 저장시 인증 키가 암호화되지 않는다. 

따라서, show running-config 명령을 사용하면 인증 키가 노출된다.

 

 

이를 방지하려면 다음과 같이 service password-encryption 명령어를 사용하면 된다.

R5(config)#service password-encryption

 

 

 

 


 

OSPF 패시브 인터페이스 

OSPF neighbor가 없는 인터페이스에 대해서 passive-interface 명령어를 사용하면 간단하면서도 강력한 OSPF 보안 대책이 된다. 이 인터페이스로는 OSPF hello packet을 전송하지 않을 뿐만 아니라, 상대가 hello packet을 전송해도 무시한다.

 

 

반응형
LIST