안녕하세요!
이번 시간에는 VPN에서 동적인 대규모 Site-to-Site VPN을 구성하기 적합한
DMVPN에 대해 알아보고 실습을 진행해보겠습니다.
저도 다른 블로그의 포스팅을 확인하여 실습을 진행하였습니다.
https://peemangit.tistory.com/125
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=adh3305&logNo=220806555643
피망IT님과 우공이산님의 포스팅을 참고하여 실습을 진행하였습니다.
DMVPN이란?
동적인 대규모 Site-to-Site VPN을 구성하기 적합한 방식
DMVPN의 3가지 요소
mGRE (Multipoint GRE)
→ 다수의 Next-hop 장치와 연결될 수 있다
→ 동적 방식이기 때문에 목적지를 먼저 입력하는 방식은 사용할 수 없다.
NHRP (Next Hop Resolution Protocol)
→ 터널 인터페이스로 연결된 상대방의 터널 IP와 목적지 IP를 자동으로 학습한다.
Crypto profile
→ 반대편 지사가 사용할 공인 IP주소를 먼저 알 수 없기 때문에 IPSec 대상 트래픽 지정(ACL) 및 Crypto Map을 사용할 수 없다.
→ Point-to-Point GRE / Multipoint GRE 터널 인터페이스 송/수신 패킷들을 IPsec으로 보호하는 경우 Crypto Map 대신에 Crypto Profile을 사용하는 것이 가능하다.
→ Crypto Profile을 사용하면 IP 주소 정보를 자동으로 획득하여 Crypto Map을 생성하는 것이 가능하다.
DMVPN Topology 구성
본사(HQ), 본사 VPN(HQ_VPN), 인터넷 서비스 제공자(ISP), 지사1, 2(Branch), 엔드 유저로 구성
HQ_VPN 라우터와 Branch 라우터와 통신이 이루어지며 Branch가 요청하면 NHRP 프로토콜을 통해 응답
각 장비 별 네트워크 설정
//IP 설정
HQ(config)#int g0/0
HQ(config-if)#ip add 10.10.12.1 255.255.255.0
HQ(config-if)#no sh
HQ(config-if)#int lo0
HQ(config-if)#ip add 10.1.1.1 255.255.255.0
HQ_VPN(config)#int g0/0
HQ_VPN(config-if)#ip add 10.10.12.2 255.255.255.0
HQ_VPN(config-if)#no sh
HQ_VPN(config-if)#int g0/1
HQ_VPN(config-if)#ip add 1.1.100.1 255.255.255.252
HQ_VPN(config-if)#no sh
HQ_VPN(config)#ip route 0.0.0.0 0.0.0.0 g0/1 1.1.100.2
ISP(config)#int g0/0
ISP(config-if)#ip add 1.1.100.2 255.255.255.252
ISP(config-if)#no sh
ISP(config-if)#int g0/1
ISP(config-if)#ip add 1.1.100.5 255.255.255.252
ISP(config-if)#no sh
ISP(config-if)#int g0/2
ISP(config-if)#ip add 1.1.100.9 255.255.255.252
ISP(config-if)#no sh
Branch1(config)#int g0/0
Branch1(config-if)#ip add 1.1.100.6 255.255.255.252
Branch1(config-if)#no sh
Branch1(config-if)#int g0/1
Branch1(config-if)#ip add 10.2.2.2 255.255.255.0
Branch1(config-if)#no sh
Branch2(config)#int g0/0
Branch2(config-if)#ip add 1.1.100.10 255.255.255.252
Branch2(config-if)#no sh
Branch2(config-if)#int g0/1
Branch2(config-if)#ip add 10.3.3.3 255.255.255.0
Branch2(config-if)#no sh
HQ_VPN/ISP/Branch1/Branch2 라우터 OSPF 설정
//OSPF 설정
HQ_VPN(config)#router ospf 10
HQ_VPN(config-router)#network 1.1.100.1 0.0.0.0 area 0
ISP(config)#router ospf 10
ISP(config-router)#network 1.1.100.2 0.0.0.0 area 0
ISP(config-router)#network 1.1.100.5 0.0.0.0 area 0
ISP(config-router)#network 1.1.100.9 0.0.0.0 area 0
Branch1(config)#router ospf 10
Branch1(config-router)#network 1.1.100.6 0.0.0.0 area 0
Branch2(config)#router ospf 10
Branch2(config-router)#network 1.1.100.10 0.0.0.0 area 0
HQ/HQ_VPN/Branch1/Branch2 EIGRP 설정
//EIGRP 설정
HQ(config)#router eigrp 10
HQ(config-router)#no auto-summary
HQ(config-router)#network 10.10.12.1 0.0.0.0
HQ(config-router)#network 10.1.1.1 0.0.0.0
HQ_VPN(config)#router eigrp 10
HQ_VPN(config-router)#no auto-summary
HQ_VPN(config-router)#network 10.10.12.2 0.0.0.0
HQ_VPN(config-router)#network 10.100.1.1 0.0.0.0
HQ_VPN(config)#int tunnel 0
HQ_VPN(config-if)#no ip split-horizon eigrp 10
//ip split-horizon: 내가 받은 정보는 광고하지 않음
//Hub-Router에서는 이 기능을 꺼줘야 함
//이 설정을 하지 않으면 BR1과 BR2는 서로 정보 교환을 하지 못함
Branch1(config)#router eigrp 10
Branch1(config-router)#no auto-summary
Branch1(config-router)#network 10.100.1.2 0.0.0.0
Branch1(config-router)#network 10.2.2.2 0.0.0.0
Branch2(config)#router eigrp 10
Branch2(config-router)#no auto-summary
Branch2(config-router)#network 10.100.1.3 0.0.0.0
Branch2(config-router)#network 10.3.3.3 0.0.0.0
EIGRP 설정 시 주의할 점
Multipoint GRE(mGRE)란?
다수의 Next-hop 장치와 연결될 수 있다는 특징
→ DMVPN에서 사용
DMVPN의 경우 동적으로 지사가 증가/감소하는 특징
→ tunnel destination 명령어를 사용하여 지사의 IP 주소를 먼저 입력하는 것이 불가능
Multipoint GRE ↔ Point-to-Point GRE
Point-to-Point GRE
→ tunnel destination [tunnel-dest] → ACL 및 Set Peer 주소를 설정
→ 지사의 IP 주소를 먼저 입력하는 특징
HQ_VPN 라우터 Multipoint GRE(mGRE) 및 NHRP Server 설정
//mGRE 설정 - HQ_VPN
HQ_VPN(config)#int tunnel 0
HQ_VPN(config-if)#ip add 10.100.1.1 255.255.255.0
HQ_VPN(config-if)#ip nhrp authentication cisco
HQ_VPN(config-if)#tunnel source 1.1.100.1
HQ_VPN(config-if)#tunnel mode gre multipoint
HQ_VPN(config-if)#tunnel key 10
//mGRE를 여러개 만들었을 때 이 장비가 mGRE를 식별하기 위한 용도
//NHRP 설정 - HQ_VPN
HQ_VPN(config-if)#ip nhrp network-id 10
HQ_VPN(config-if)#ip nhrp holdtime 600
//600초마다 본사(HQ)에게 정보를 갱신
HQ_VPN(config-if)#ip nhrp map multicast dynamic
//Tunnel 0에 멀티캐스트를 보내야 하면 dynamic하게 알아온 장비(BR1, BR2)에도 하나씩
HQ_VPN(config-if)#no ip next-hop eigrp 10
Multipoint GRE(mGRE) 및 NHRP Server 주의점
Branch 라우터 Multipoint GRE(mGRE) 설정
//Branch 1, 2 공통 설정
//mGRE 설정 - Branch 1
Branch1(config)#int tunnel 0
Branch1(config-if)#ip add 10.100.1.2 255.255.255.0
Branch1(config-if)#ip nhrp authentication cisco
Branch1(config-if)#tunnel source 1.1.100.6
Branch1(config-if)#tunnel mode gre multipoint
Branch1(config-if)#tunnel key 10
//NHRP 설정 - Branch 1
Branch1(config-if)#ip nhrp network-id 10
Branch1(config-if)#ip nhrp nhs 10.100.1.1
//NHRP Server 주소는 10.100.1.1(HQ_VPN Tunnel 0)
Branch1(config-if)#ip nhrp map 10.100.1.1 1.1.100.1
//NHRP Server Tunnel IP는 10.100.1.1 이지만
//실제로는 1.1.100.1 가야한다는 뜻(터널의 논리적인 개념)
Branch1(config-if)#ip nhrp map multicast 1.1.100.1
//1.1.100.1로부터 오는 multicast를 받아옴
Branch1(config-if)#ip nhrp registration timeout 60
//60초마다 반복해서 본인의 Tunnel IP와 실제 올 수 있는 IP를 보냄
//mGRE 설정 - Branch 2
Branch2(config)#int tunnel 0
Branch2(config-if)#ip add 10.100.1.3 255.255.255.0
Branch2(config-if)#ip nhrp authentication cisco
Branch2(config-if)#tunnel source 1.1.100.10
Branch2(config-if)#tunnel mode gre multipoint
Branch2(config-if)#tunnel key 10
//NHRP 설정 - Branch 2
Branch2(config-if)#ip nhrp network-id 10
Branch2(config-if)#ip nhrp nhs 10.100.1.1
Branch2(config-if)#ip nhrp map 10.100.1.1 1.1.100.1
Branch2(config-if)#ip nhrp map multicast 1.1.100.1
Branch2(config-if)#ip nhrp registration timeout 60
HQ_VPN/Branch1/Branch2 IPSec 설정
//IPSec 설정
HQ_VPN(config)#crypto isakmp policy 10
HQ_VPN(config-isakmp)#authentication pre-share
HQ_VPN(config-isakmp)#encryption aes
HQ_VPN(config-isakmp)#exit
HQ_VPN(config)#crypto isakmp key cisco address 0.0.0.0 0.0.0.0
//Branch의 IP가 동적이기 때문에 고정 IP를 적어줄 수 없다
HQ_VPN(config)#crypto ipsec transform-set ts_HQ->Branch esp-aes esp-sha-hmac
HQ_VPN(cfg-crypto-trans)#mode transport
//GRE에서 쓰는 IP 패킷과 IPSec에서 사용하는 IP 패킷이 동일하기 때문에
//ESP 앞에 IP 패킷을 붙이지 않기 위해 IPSec을 transport 모드로 구성
Branch1(config)#crypto isakmp policy 10
Branch1(config-isakmp)#authentication pre-share
Branch1(config-isakmp)#encryption aes
Branch1(config-isakmp)#exit
Branch1(config)#crypto isakmp key cisco address 0.0.0.0 0.0.0.0
Branch1(config)#crypto ipsec transform-set ts_Branch->HQ esp-aes esp-sha-hmac
Branch1(cfg-crypto-trans)#mode transport
Branch1(cfg-crypto-trans)#crypto ipsec profile pf_HQ_Branch_VPN
Branch1(ipsec-profile)#set transform-set ts_Branch->HQ
Branch1(ipsec-profile)#exit
Branch1(config)#int tunnel 0
Branch1(config-if)#tunnel protection ipsec profile pf_HQ_Branch_VPN
Branch2(config)#crypto isakmp policy 10
Branch2(config-isakmp)#authentication pre-share
Branch2(config-isakmp)#encryption aes
Branch2(config-isakmp)#exit
Branch2(config)#crypto isakmp key cisco address 0.0.0.0 0.0.0.0
Branch2(config)#crypto ipsec transform-set ts_Branch->HQ esp-aes esp-sha-hmac
Branch2(cfg-crypto-trans)#mode transport
Branch2(cfg-crypto-trans)#crypto ipsec profile pf_HQ_Branch_VPN
Branch2(ipsec-profile)#set transform-set ts_Branch->HQ
Branch2(ipsec-profile)#exit
Branch2(config)#int tunnel 0
Branch2(config-if)#tunnel protection ipsec profile pf_HQ_Branch_VPN
HQ_VPN Crypto Profile 설정
```jsx
//IPSec 설정
HQ_VPN(config)#crypto isakmp policy 10
HQ_VPN(config-isakmp)#authentication pre-share
HQ_VPN(config-isakmp)#encryption aes
HQ_VPN(config-isakmp)#exit
HQ_VPN(config)#crypto isakmp key cisco address 0.0.0.0 0.0.0.0
//Branch의 IP가 동적이기 때문에 고정 IP를 적어줄 수 없다
HQ_VPN(config)#crypto ipsec transform-set ts_HQ->Branch esp-aes esp-sha-hmac
HQ_VPN(cfg-crypto-trans)#mode transport
//GRE에서 쓰는 IP 패킷과 IPSec에서 사용하는 IP 패킷이 동일하기 때문에
//ESP 앞에 IP 패킷을 붙이지 않기 위해 IPSec을 transport 모드로 구성
Branch1(config)#crypto isakmp policy 10
Branch1(config-isakmp)#authentication pre-share
Branch1(config-isakmp)#encryption aes
Branch1(config-isakmp)#exit
Branch1(config)#crypto isakmp key cisco address 0.0.0.0 0.0.0.0
Branch1(config)#crypto ipsec transform-set ts_Branch->HQ esp-aes esp-sha-hmac
Branch1(cfg-crypto-trans)#mode transport
Branch1(cfg-crypto-trans)#crypto ipsec profile pf_HQ_Branch_VPN
Branch1(ipsec-profile)#set transform-set ts_Branch->HQ
Branch1(ipsec-profile)#exit
Branch1(config)#int tunnel 0
Branch1(config-if)#tunnel protection ipsec profile pf_HQ_Branch_VPN
Branch2(config)#crypto isakmp policy 10
Branch2(config-isakmp)#authentication pre-share
Branch2(config-isakmp)#encryption aes
Branch2(config-isakmp)#exit
Branch2(config)#crypto isakmp key cisco address 0.0.0.0 0.0.0.0
Branch2(config)#crypto ipsec transform-set ts_Branch->HQ esp-aes esp-sha-hmac
Branch2(cfg-crypto-trans)#mode transport
Branch2(cfg-crypto-trans)#crypto ipsec profile pf_HQ_Branch_VPN
Branch2(ipsec-profile)#set transform-set ts_Branch->HQ
Branch2(ipsec-profile)#exit
Branch2(config)#int tunnel 0
Branch2(config-if)#tunnel protection ipsec profile pf_HQ_Branch_VPN
```
설정 내용 확인
WireShark로 패킷 확인
HQ에서 Branch로 Ping을 보낸 모습
ICMP가 먼저 Request, Reply한 후 IPSec으로 인해 ESP 형태로 전송
지사 추가(Branch3)
지사(Branch 3) 설정
ISP(config)#int g0/3
ISP(config-if)#ip add 1.1.100.13 255.255.255.252
ISP(config-if)#no sh
ISP(config)#router ospf 10
ISP(config-router)#network 1.1.100.13 0.0.0.0 area 0
Branch3(config)#int g0/0
Branch3(config-if)#ip add 1.1.100.14 255.255.255.252
Branch3(config-if)#no sh
Branch3(config-if)#int g0/1
Branch3(config-if)#ip add 10.4.4.4 255.255.255.0
Branch3(config-if)#no sh
Branch3(config-if)#router ospf 10
Branch3(config-router)#network 1.1.100.14 0.0.0.0 area 0
Branch3(config)#router eigrp 10
Branch3(config-router)#no auto-summary
Branch3(config-router)#network 10.4.4.4 0.0.0.0
Branch3(config-router)#network 10.100.1.4 0.0.0.0
Branch3(config)#int tunnel 0
Branch3(config-if)#ip add 10.100.1.4 255.255.255.0
Branch3(config-if)#tunnel source 1.1.100.14
Branch3(config-if)#tunnel mode gre multipoint
Branch3(config-if)#tunnel key 10
Branch3(config-if)#ip nhrp network-id 10
Branch3(config-if)#ip nhrp nhs 10.100.1.1
Branch3(config-if)#ip nhrp map 10.100.1.1 1.1.100.1
Branch3(config-if)#ip nhrp authentication cisco
Branch3(config-if)#ip nhrp registration timeout 60
Branch3(config-if)#ip nhrp map multicast 1.1.100.1
Branch3(config-if)#exit
Branch3(config)#crypto isakmp policy 10
Branch3(config-isakmp)#authentication pre-share
Branch3(config-isakmp)#encryption aes
Branch3(config-isakmp)#crypto isakmp key cisco address 0.0.0.0 0.0.0.0
Branch3(config)#crypto ipsec transform-set ts_Branch->HQ esp-aes esp-sha-hmac
Branch3(cfg-crypto-trans)#mode transport
Branch3(cfg-crypto-trans)#crypto ipsec profile pf_HQ_Branch_VPN
Branch3(ipsec-profile)#set transform-set ts_Branch->HQ
Branch3(ipsec-profile)#int tunnel 0
Branch3(config-if)#tunnel protection ipsec profile pf_HQ_Branch_VPN
Branch3(config-if)#exit
Branch3(config)#ip route 0.0.0.0 0.0.0.0 g0/0 1.1.100.13
지사(Branch 3)까지 정상적으로 VPN이 설정된 모습
문제점
→ Split-horizon은 특정 인터페이스로 광고받은 정보는 다시 해당 인터페이스로 광고하지 않는 특성
(Loop를 방지하기 위한 목적으로 활성화 되어있다→hub&spoke 방식에서는 비활성화해줘야 Spoke 간 정보교환을 수행한다)
→ Hub & Spoke는 Full-mesh, Fartial-mesh 방식에 비해서 안전하지 않다. 단일 장애점(SPOF:single point of failure) 이슈
이번 시간에는 DMVPN을 알아보고 설정해봤습니다.
감사합니다.
'Network > 네트워크' 카테고리의 다른 글
[네트워크] End-to-End VLAN과 Local VLAN 비교하기 (0) | 2022.07.13 |
---|---|
[네트워크] VLAN(Virtual LAN)에 대해서 알아보기 (0) | 2022.07.13 |
[네트워크] EVE-NG로 동적 경로 설정(Dynamic Routing) RIP 실습하기 (0) | 2022.06.05 |
[네트워크] EVE-NG로 Proxy-ARP 문제 실습하기 (0) | 2022.05.15 |
[네트워크] EVE-NG로 정적 경로 설정(Static Routing) 실습하기 (0) | 2022.05.15 |
클라우드, 개발, 자격증, 취업 정보 등 IT 정보 공간
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!