자. 오늘은 제가 특정 고객으로부터 아래와 같은 RFP를 받은 네트워크 엔지니어라고 가정해보고,
하나하나씩 요구사항을 반영하는 식으로 글을 써볼까 합니다.
사업장 내부 LAN에는 IS-IS, EIGRP, OSPF 혹은 Static 라우팅과 같은 다양한 프로토콜을 사용할 수 있지만!
오늘은 OSPF로 구성된 사업장을 설계한다는 느낌으로 진행할겁니다.
전체적으로도, 각 부분적으로도 유익한 정보가 되면 좋겠습니다.
그럼 아래 구성도와 RFP를 한번 보시죠.
1. 고객 요청 구성도
2. 고객 요청 세부사항
- 구성도의 IP와 Area를 따르고, 인터페이스도 구성도와 동일하게 설정할 것
- 각 Loopback IP에 대해서는 모두 라우팅 테이블 내에 있어야함
- Area0과 Area1은 중요한 연결 구간으로, 어떤 이슈 상황에서도 빠른 Take-over와 상호 인증 절차가 필요함
- Area0과 Area1 간 Main link는 Router1<>Router3 구간을 이용하며, 이는 Inbound/Outbound 모두를 포함할 것
- Area1 내부 Router3과 Router4 사이는 Serial 이 아닌 SVI를 활용한 L2 Trunk 포트로 설정할 것
- 추후 Area1의 확장이 예상되기에, 10.10.0.0/16으로 광고하여, 라우팅 수량이 많아지는것을 제한 할 것
- Area1과 Area2 사이 DR/BDR 선출은 불필요 함
- 가급적 라우팅 갯수를 줄일 것
3. 설계
사실 2의 내용은 고객의 Needs에서 어느정도 네트워크 엔지니어의 필터링을 거쳐서 탄생한 내용이라고 봐주시면 감사하겠습니다.
적어보고나니, 저렇게 적을 수 있는 사람이라면 직접 구성을 할 수 있는 사람이지않을까 싶네요.
그럼 고객이 원하는 방향으로 네트워크를 설계해보도록 하겠습니다.
고민이 필요한 부분 이외에, 한꺼번에 처리 가능한 것들을 모아봤습니다.
- 구성도의 IP와 Area를 따르고, 인터페이스도 구성도와 동일하게 설정할 것
- 각 Loopback IP에 대해서는 모두 라우팅 테이블 내에 있어야함
- Area1 내부 Router3과 Router4 사이는 Serial 이 아닌 SVI를 활용한 L2 Trunk 포트로 설정할 것
- Area1과 Area2 사이 DR/BDR 선출은 불필요 함
기본적인 인터페이스 셋팅과 OSPF 설정이 있어, 한꺼번에 처리해도 무방해 보입니다.
Router1 config | Router2 config | Router3 config | Router4 config | Router5 config |
router ospf 1 | router ospf 1 | router ospf 1 | router ospf 1 | router ospf 1 |
int lo0 | int lo0 | int lo0 | int lo0 | int lo0 |
ip address 10.10.1.1 255.255.255.0 | ip address 10.10.2.1 255.255.255.0 | ip address 10.10.3.1 255.255.255.0 | ip address 10.10.4.1 255.255.255.0 | ip address 10.10.5.1 255.255.255.0 |
ip ospf 1 area 0 | ip ospf 1 area 0 | ip ospf 1 area 1 | ip ospf 1 area 1 | ip ospf 1 area 2 |
no shutdown | no shutdown | no shutdown | no shutdown | no shutdown |
int e0/0 | int e0/0 | int e0/0 | int e0/0 | int e0/0 |
no switchport | no switchport |
switchport trunk en dot | switchport trunk en dot | no switchport |
ip address 10.10.12.1 255.255.255.252 | ip address 10.10.12.2 255.255.255.252 | switchport mode trunk | switchport mode trunk | ip address 10.10.35.2 255.255.255.252 |
ip ospf 1 area 0 | ip ospf 1 area 0 | no shut | no shut | ip ospf 1 area 2 |
no shutdown | no shutdown | ip ospf network point-to-point | ||
int vlan 100 | int vlan 100 | |||
ip address 10.10.34.1 255.255.255.0 | ip address 10.10.34.2 255.255.255.0 | |||
ip ospf 1 area 1 | ip ospf 1 area 1 | |||
no shut | no shut | |||
int e0/1 | int e0/1 | int e0/1 | int e0/1 | |
no switchport | no switchport | no switchport | no switchport | |
ip address 10.10.13.1 255.255.255.252 | ip address 10.10.24.1 255.255.255.252 | ip address 10.10.13.2 255.255.255.252 | ip address 10.10.24.2 255.255.255.252 | |
ip ospf 1 area 0 | ip ospf 1 area 0 | ip ospf 1 area 0 | ip ospf 1 area 0 | |
no shutdown | no shutdown | no shutdown | no shutdown | |
int e0/2 | ||||
no switchport | ||||
ip address 10.10.35.1 255.255.255.252 | ||||
ip ospf 1 area 2 | ||||
ip ospf network point-to-point | ||||
위의 Config에서 처음보시는 Config는 없으실 겁니다.
기본적인 interface 혹은 VLAN 셋팅에 인터페이스별로 OSPF area를 지정해준것 밖에 없으니까요.
타 라우팅 프로토콜, 예를 들면 BGP나 EIGRP처럼 connect된 대역에 대해 Network설정을 해준다거나, Redistribute 설정을 하지않고,
인터페이스에 'ip ospf x area x'를 해준것만으로도, 해당 대역을 광고한다고 하는것과 다르지않습니다.
- Area1과 Area2 사이 DR/BDR 선출은 불필요 함
특이한 점은 위 요구사항으로 인해 Router3과 Router5사이 Serial interface에는 네트워크 타입을 지정하는 Config가 들어있습니다.
제가 OSPF이론편은 따로 준비를 해보겠습니다.
우선은 한 Broadcast 도메인 안의 장비가 DR/BDR 같은 역할을 할 필요없이, 단 2개의 장비가 연결된 형태이기에,
Network type을 Point-to-Point로 설정해줬니다.
그리고 L2장비의 경우, 기본적으로 모든 포트가 L2 포트설정 즉, 'switchport' 설정이 들어가 있어, ip를 설정할때는 반드시 'no switchport'를 해줘야하며, 반대로 L3 포트를 L2용도(Access, Trunk)로 사용할 땐 'switchport' 설정이 필요합니다.
제 실습 환경 특성상 기본적으로 switchport 설정이 되어있어, IP 설정을 위해서 no 해준것이니, 참고 부탁드립니다.
만약 헷갈리신다면, 초기 셋팅시에 그냥 포트별 용도에 맞게 Config하시는것도 좋습니다.
그리고, 간혹 놓칠 수 있는 부분이 하나 더 있습니다.
L2 포트를 Trunk로 셋팅할때, 반드시 Encapsulation type을 지정해야만 합니다. (미지정 시, mode trunk 불가)
어느 장비에는 Default로 들어가 있을수도 있지만, Cisco 장비의 경우 자체적인 Trunking protocol인 ISL이 있어,
잘못했다간 이기종간 Trunk 연결이 불안할 수 있습니다.
(아시다시피 ISL은 Native VLAN에도 Tagging을 하고 있습니다)
따라서, 습관처럼 해당 포트의 Mode를 Trunk로 변경하기 전에, 캡슐화 방식을 지정하는것을 추천드립니다.
그럼 다음번 요구사항을 해결해보시죠.
이 다음부터는 하나씩 설명하겠습니다.
- Area0과 Area1은 중요한 연결 구간으로, 어떤 이슈 상황에서도 빠른 Take-over와 상호 인증 절차가 필요함
OSPF neighborship 상호 인증과 빠른 상호 백업 절차에 대한 내용입니다.
우선 상호 인증에 대한 내용을 먼저 다루겠습니다.
우선 제가 확인해봤을때, OSPF의 상호 인증에는 2가지 설정 방법이 있습니다.
1) Text를 이용한 방식
2) message digest
사실 1)과 2)에 대한 내용을 계속 읽어봤는데, 정확하게 이해는 못했습니다.
인증을 어떻게 하는냐의 차이인것같은데, 인증 절차에 대해서는 조금더 공부하겠습니다.
Text를 이용한 방식에는 크게 두가지로 세분화 할 수 있습니다.
Cisco에서 제공하는 Encryption 방식을 사용할 것인지, 사용자가 원하는 Hashing 알고리즘대로 Key-chain을 생성하여,
해당 key-chain으로 암호화를 할것인지에 대한 차이입니다.
Configuration도 차이가 나는데, 본 예에서는 Key-chain을 활용한 방식으로 작성해보겠습니다.
key chain cisco |
key 1 |
key-string test |
cryptographic-algorithm hmac-sha-384 |
int e0/1 |
ip ospf authentication key-chain cisco |
우선 사전에 Router1,2,3,4 장비에 상단의 key-chain을 생성합니다.
key-string을 생성하고 난 후 cryptographic-algorithm은 장비가 제공하는 알고리즘 내에서 자유롭게 선택할 수 있습니다.
보안을 강화하는 측면에서 다수의 OSPF Neighbor가 등록되는 장비에,
1개의 Key chain내에 다수의 Key ID를 생성하여, Config 가독성을 향상하려고 했는데,
키체인을 한곳은 여러 키를 생성해서 각각 neighbor이랑 하고, Peer는 하나만해서 config를 단순화 하려고 했습니다만,
인증 단계의 SA를 Peer로 보내는 부분에서, 설정된 Key chain의 마지막 Key ID만을 사용해서,
동일한 Key-string과 Hashing 방식이 있는데도 불구하고, 인증 불일치가 되는 문제가 발생되고, Neighbor을 맺지 않았습니다.
Key chain에 있는 key ID를 순환시키는 방식이 있지않을까 했지만 결국 찾지못했습니다.
다만, 그런식으로 동작한다고 가정했을때, 인터페이스 Down 혹은 장비 Down이였다가 다시 살았을 때,
하나씩 Key ID를 바꾸면서 SA를 보낸다면 빠른 복구가 필요한 상황에서 Key Selection time 으로 인해,
장애가 길어지는 이슈가 있을 수 있어, key chain을 사용할때 1:1로 사용하는 편이 나아보입니다.
추가로 두가지 유의하실 내용이 있습니다.
첫번째는 Key-string으로 설정한 문자열의 암호화 입니다.
만약 장비에 'service password-encryption' 설정이 되어있지않다면, Plain text로 보이게 됩니다.
따라서 보안을 조금 더 강화하고자 한다면 꼭 적용하시면 됩니다.
실습을 하면서 배운게 있는데, key-string 7 test <- 이렇게 적용하면 hidden이라길래 적용을 해봤는데,
아무리 해봐도 invalid 암호라고 적용이 불가했습니다.
수차례 시도를 해봤는데, 해당 command는 타 장비에서 7로 암호화된 string을 그대로 붙여넣기하는 설정이였습니다.
Main장비에서 보유하고 있는 key-string의 plain text를 peer장비에 공개하지 않고, 연결할 수 있는 방법이죠.
예를 들어, A 회사와 B회사가 관문을 같이쓰면서, 각 장비들이 OSPF 연동된 상태라면,
A 회사에서 주로 Key-string으로 쓰는 특정 문자열을 타회사에 공개하고 싶지않을겁니다.
이럴때, 암호화된 String을 B회사로 주면, B회사는 그 암호화된 String을 이용하여 Key-chain을 생성하는것이죠.
인터페이스별로 설정되어있는 Key-chain의 key-string이 다르다고 가정하면,
임의의 B회사 장비를 A회사 네트워크에 OSPF연동되는것을 일부 방지 할 수 있는것이죠.
두번째는 휴먼 에러입니다.
BGP에서도 비슷한 사례가 있었는데, ' '(공백)도 string에 포함됩니다.
그렇기에 무심코 타이핑한 key-string에 공백이라도 들어간다면, 인증이 실패하게 됩니다.
항상 장비에 직접 Commad를 하기보다는 준비된 config를 복사/붙여넣기하는 습관을 들이면 좋습니다.
다음으로 넘어가겠습니다.
- Area0과 Area1 간 Main link는 Router1<>Router3 구간을 이용하며, 이는 Inbound/Outbound 모두를 포함할 것
해당 요구사항을 충족시키기 위해서는 간단한 commad가 필요합니다.
OSPF는 cost기반으로 낮은 cost를 가진 경로를 선정하므로, Backup link가 되는 인터페이스에,
BW별로 설정되는 cost말고, 별도의 큰 cost를 추가하는 방법이 있습니다.
그렇다면 적용해야할 장비와 인터페이스는 아래와 같아질겁니다.
Router2 config | Router4 config |
int e0/1 | int e0/1 |
ip ospf cost 200 | ip ospf cost 200 |
다음으로 넘어가겠습니다.
- 추후 Area1의 확장이 예상되기에, 10.10.0.0/16으로 광고하여, 라우팅 수량이 많아지는것을 제한 할 것
여기서는 OSPF 라우팅의 summarization이 필요하겠습니다.
그런데, 짚고넘어가야할 한가지가 있습니다.
물론 Router2에서도 인터페이스에 cost200을 줘서, Outbound향 트래픽에 대한 Main경로를 Router1으로 설정할 수 있지만,
기왕 summary하는 김에, Summary된 대역에 cost를 주는것이죠.
그렇게되면 굳이, Router2의 E0/1 인터페이스에 cost를 주지않아도 되고, 겸사겸사가 됩니다.
Router2 config | Router3 config | Router4 config |
int e0/1 | router ospf 1 | router ospf 1 |
no ip ospf cost 200 | area 1 range 10.10.0.0 255.255.0.0 | area 1 range 10.10.0.0 255.255.0.0 cost 200 |
위와 같이 설정한 후 라우팅 확인을 해보겠습니다.
Area1의 전파 Prefix는 Area 1 외부에서 보기에 10.10.0.0/16으로 퉁쳐지고,
Area0과 Area1사이의 메인경로는 Router1 E0/1 <> Router3 E0/1이 된것을 보실 수 있습니다.
Router4의 라우팅 테이블이 헷갈리실수 있는데, Router3 <> Router4는 SVI로 설정된 상태이기에 VLAN100으로 설정했습니다.
다음으로 넘어가겠습니다.
- 가급적 라우팅 갯수를 줄일 것
되게 말도 안되는 요구같지만, 의외로 니즈가 있는 요구사항입니다.
AWS, Azure등 CSP의 경우, VPN으로 전파받는 BGP Prefix의 수량을 일부 제한합니다.
따라서, 대규모 사업장과 다수 연결된 경우,
OSPF를 BGP에 Redistribute했을 때, 상당수의 Prefix가 전파되어, 서비스 불가로 이어질 수 있습니다.
그렇기에 OSPF가 활성화된 모든 장비에 아래 Command를 활용하여, Prefix의 수를 줄일 수 있습니다.
극단적인 비교를 위해서, Router5의 라우팅 테이블을 가져왔습니다.
보시는바와 같이, OSPF Neighborship을 위한 대역들이 모두 사라졌습니다.
라우팅 테이블에는 보이진않지만 LSA1 정보도 Peer장비까지만 전달되고, 그 Next-hop으로는 전파되지않아,
OSPF의 빠른 연산에도 도움을 준다는데, 사실 routing-table의 대다수가 사라진게 큰 장점입니다.
RouterX config |
router ospf 1 |
prefix-suppression |
이는 전역으로 설정하는 Config입니다.
근데, 삭제되길 원치않는 대역이 있을 수 있습니다.
그런 상황에서는 Interface에 'ip ospf prefix-suppression disable'을 적용해주시면 됩니다.
저는 Router1, Router2의 E0/0에 Disable을 적용했고, 아래와 같이 변했습니다.
보시는 바와 같이, 해당 대역이 정상적으로 router5까지 닿는것을 보실 수 있습니다.
또 한가지 방법이 더있는데, 이건 유의해서 사용해주세요.
바로 Router ospf 에서, passive-interface 처리를 진행하는 겁니다.
유의하셔야할 부분은 Passive interface처리를 진행한다면, prefix-suppression에 영향을 받지는 않겠지만,
만약 해당 인터페이스로 Peer와 neighbor을 맺고 있는다면, 대형 장애 입니다.
따라서 suppression 후, NW 디바이스가 없는 사용자 대역의 라우팅 테이블이 보이지않는다면, 두가지 방법 중 편하신 방법을 사용하시면 되고,
개인적으로는 인터페이스에 suppression disable이 조금 더 안전하다고 생각합니다.
Passive처리를 하면 OSPF의 부담은 줄겠지만 아무래도, 위험성이 크다보니 지양하게되네요.
4. Failover Test
이제 고객의 니즈를 맞춘 Network 설계가 완료되었습니다.
구축을 했다는 가정하에, 어떤 상황이던지 서비스가 정상이여야하니, Failover 테스트를 진행해보겠습니다.
문제가 발생하게 됩니다.
Router1과 Router3간 링크가 끊겼을 때, Router5에서의 라우팅 상태가 이상한 겁니다.
아래를 같이 보시죠.
뭐가 문제인지 단번에 확인하실 수 있습니다.
저희가 Prefix-suppression을 하면서 Link에 해당하는 LSA type2를 줄였기때문에,
Router1의 E0/1을 끊어도 라우팅 갯수는 제한이 없을 줄 알았는데, 제법 많이 사라져있습니다.
이유는 간단합니다.
정상적으로 동작하려면 어떤 Area던지 Area0과 연결이 되어있어야만 합니다.
보시면 Router3의 Uplink가 끊어지면서, Router 5의 Area2는 Area0과의 연결이 끊어졌습니다.
보통 이런식으로 Cascade를 구성하지 않지만, 반드시 필요한 상황도 있을겁니다.
물론 이런 구성을 가능하게 하는 방법도 있습니다.
바로 중간에 끼어있는 Area1에서 Virtual-link 설정을 진행하는 것이죠.
실제로 Area2가 Area0과 인접하지않았음에도, virtual link를 이용해서, Area0으로 가는 길을 뚫었다고 생각하시면 됩니다.
Router3 config | Router4 config |
router ospf 1 | router ospf 1 |
area 1 virtual-link 10.10.4.1 | area 1 virtual-link 10.10.3.1 |
config는 간단합니다.
양 장비에서 각 라우터의 Router-id를 virtual link로 설정하는것이죠.
설정이 완료되면 아래와 같이 Neighbor가 새로 생기게 됩니다.
이제 Area0과 Area2를 이어주는 Virtual link를 생성하였으니, Router5의 Routing table을 다시 보겠습니다.
이제야 정상적으로 라우팅이 보이기 시작합니다.
사실 이 내용은 Failover test를 진행했어야만 발견할 수 있는 취약점이였습니다.
물론 숙련된 네트워크 엔지니어라면 설계 단계에서 고려를 해야겠지만, 처음 구축을 진행하시는 분들은 놓칠 수 있는 부분이니,
꼭 기억해주셨으면 좋겠습니다.
맺으며 . .
사실 이번에도 다른 포스팅과 동일하게 쭈우욱 설명하면 됬었겠지만, 뭔가 Step-by-Step으로 설명을 하고픈 마음에 이렇게 진행을 하게 되었습니다.
3일에 걸쳐 LAB과 글쓰기를 진행했는데, 뭐가 이렇게 쓸게 많은지 모르겠습니다.
LAB을 하면서 배우는 것도 적잖이 있어서 뿌듯하기도 합니다.
언제든 확인이 필요한 구성이나 궁금하신 내용이 있다면 꼭 알려주시면 감사하곘습니다.
'Network 모험기' 카테고리의 다른 글
[기타]Prefix list와 ACL의 차이 (0) | 2024.12.03 |
---|---|
[#1] DHCP 가지고 놀기 3탄 (0) | 2024.12.02 |
[L2]Track을 활용한 Gateway 다중화 (0) | 2024.11.03 |
[L2]FHRP(VRRP, HSRP, GLBP)에 대한 간단한 이해 (4) | 2024.11.02 |
[L2]VTP와 MST 연계 구성 (3) | 2024.10.28 |