Построение связности между главным офисом и филиалами на базе DMVPN
DMVPN – это не просто отдельный протокол, а целый комплекс технологий Cisco, решающий фундаментальную проблему классических Site-to-Site VPN.
Главная идея DMVPN – избавиться от необходимости вручную прописывать настройки для каждого нового филиала. В традиционной схеме, если у вас главный офис и сотня точек, на головном маршрутизаторе нужно создать сотню криптографических политик и прописать сотни IP-адресов. DMVPN позволяет делать это динамически: филиал сам «регистрируется» на главном узле, а адреса филиалов могут быть вообще любыми и меняться со временем, что критически важно для подключений через бытовых провайдеров (DHCP, 4G-модемы).
С технической стороны это достигается объединением трех технологий. Во-первых, mGRE (Multipoint GRE) создает один туннельный интерфейс на головном роутере, способный обслуживать тысячи филиалов, в отличие от классического GRE, где для каждого соединения требовался отдельный интерфейс. Во-вторых, протокол NHRP работает как внутренний «телефонный справочник», позволяя филиалам запрашивать у хаба реальные публичные IP-адреса других участников сети, даже если эти адреса постоянно меняются. В-третьих, IPsec обеспечивает шифрование всего, что попадает в этот универсальный туннель.
DMVPN необходим для создания масштабируемой, отказоустойчивой и почти не требующей ручного обслуживания распределенной сети. Он решает главную боль сетевого инженера при росте компании: добавление нового офиса сводится к копированию универсального шаблона на новый роутер без каких-либо правок на головном узле. Более того, эта технология позволяет филиалам общаться напрямую друг с другом (например, для VoIP-звонков или передачи больших файлов), не нагружая канал главного офиса, что делает сеть не только удобной в настройке, но и экономически эффективной с точки зрения использования полосы пропускания.
Параметры сетевых устройств
| Template | Name/prefix | CPU | RAM (MB) | Ethernets |
|---|---|---|---|---|
| Cisco vIOS Router | RTR-ISP | 1 | 512 | 4 |
| Cisco vIOS Router | RTR-HQ | 1 | 512 | 4 |
| Cisco vIOS Router | RTR-BR1 | 1 | 512 | 4 |
| Cisco vIOS Router | RTR-BR2 | 1 | 512 | 4 |
| Cisco vIOS Switch | SW-ISP | 1 | 512 | 8 |
| Virtual PC (VPCS) | vPC-HQ | − | − | − |
| Virtual PC (VPCS) | vPC-BR1 | − | − | − |
| Virtual PC (VPCS) | vPC-BR2 | − | − | − |
Подключения между устройствами
| Наименование узла | Интерфейс | IP-адрес | Маска подсети | Шлюз по умолчанию |
|---|---|---|---|---|
| RTR-ISP | Gi0/0 | DHCP | DHCP | DHCP |
| RTR-ISP | Gi0/1.99 | − | − | − |
| RTR-ISP | Gi0/1.100 | − | − | − |
| SW-ISP | Gi0/0 | trunk | − | − |
| SW-ISP | Gi0/1 | VLAN 99 | − | − |
| SW-ISP | Gi0/2 | VLAN 100 | − | − |
| SW-ISP | Gi0/3 | VLAN 100 | − | − |
| RTR-HQ | Gi0/0 | PPPoE | − | − |
| RTR-HQ | Gi0/1 | 172.16.0.1 | 255.255.255.0 | − |
| RTR-HQ | Tunnel0 | 99.99.99.1 | 255.255.255.0 | − |
| RTR-BR1 | Gi0/0 | PPPoE | − | − |
| RTR-BR1 | Gi0/1 | 192.168.1.1 | 255.255.255.0 | − |
| RTR-BR1 | Tunnel0 | 99.99.99.2 | 255.255.255.0 | − |
| RTR-BR2 | Gi0/0 | PPPoE | − | − |
| RTR-BR2 | Gi0/1 | 192.168.2.1 | 255.255.255.0 | − |
| RTR-BR2 | Tunnel0 | 99.99.99.3 | 255.255.255.0 | − |
| vPC-HQ | NIC | 172.16.0.10 | 255.255.255.0 | 172.16.0.1 |
| vPC-BR1 | NIC | 192.168.1.10 | 255.255.255.0 | 192.168.1.1 |
| vPC-BR2 | NIC | 192.168.2.10 | 255.255.255.0 | 192.168.2.1 |
Топология сети

Настройка сети
Прежде, чем приступить к настройке, стоит заметить: основной акцент в данной практической работе направлен на настройку непосредственно маршрутизаторов, которые участвуют в создании DMVPN-сети, однако локальные сети упрощены до одного-единственного узла – vPC. Это позволит сконцентрироваться на настройке маршрутизирующего оборудования.
Сейчас необходимо настроить выход в Интернет через сеть ISP и сформировать PPPoE-сервер для подключения клиентов.
На RTR-ISP:
Would you like to enter the initial configuration dialog? [yes/no]: no
Router>enable
Router#config terminal
Router(config)#hostname RTR-ISP
RTR-ISP(config)#access-list 1 permit any
RTR-ISP(config)#ip nat inside source list 1 interface gi0/0 overload
RTR-ISP(config)#interface gi0/0
RTR-ISP(config-if)#no shutdown
RTR-ISP(config-if)#ip address dhcp
RTR-ISP(config-if)#ip nat outside
RTR-ISP(config-if)#exit
RTR-ISP(config)#aaa new-model
RTR-ISP(config)#aaa authentication ppp default local
RTR-ISP(config)#aaa authorization network default local
RTR-ISP(config)#ip local pool HQ_POOL 100.0.0.10 100.0.0.10
RTR-ISP(config)#ip local pool BRANCH_POOL 100.0.100.10 100.0.100.200
RTR-ISP(config)#username rtr-hq password 0 P@ssw0rd_HQ
RTR-ISP(config)#username rtr-br1 password 0 P@ssw0rd_BR1
RTR-ISP(config)#username rtr-br2 password 0 P@ssw0rd_BR2
RTR-ISP(config)#interface loopback0
RTR-ISP(config-if)#ip address 10.0.0.1 255.255.255.255
RTR-ISP(config-if)#exit
RTR-ISP(config)#interface loopback1
RTR-ISP(config-if)#ip address 20.0.0.1 255.255.255.255
RTR-ISP(config-if)#exit
RTR-ISP(config)#bba-group pppoe HQ
RTR-ISP(config-bba-group)#virtual-template 1
RTR-ISP(config-bba-group)#exit
RTR-ISP(config)#bba-group pppoe BRANCH
RTR-ISP(config-bba-group)#virtual-template 2
RTR-ISP(config-bba-group)#exit
RTR-ISP(config)#interface virtual-template1
RTR-ISP(config-if)#ip unnumbered lo0
RTR-ISP(config-if)#ip nat inside
RTR-ISP(config-if)#peer default ip address pool HQ_POOL
RTR-ISP(config-if)#ppp authentication chap pap ms-chap ms-chap-v2
RTR-ISP(config-if)#exit
RTR-ISP(config)#interface virtual-template2
RTR-ISP(config-if)#ip unnumbered lo1
RTR-ISP(config-if)#ip nat inside
RTR-ISP(config-if)#peer default ip address pool BRANCH_POOL
RTR-ISP(config-if)#ppp authentication chap pap ms-chap ms-chap-v2
RTR-ISP(config-if)#exit
RTR-ISP(config)#interface gi0/1
RTR-ISP(config-if)#no shutdown
RTR-ISP(config-if)#exit
RTR-ISP(config)#interface gi0/1.99
RTR-ISP(config-subif)#encapsulation dot1q 99
RTR-ISP(config-subif)#no ip address
RTR-ISP(config-subif)#pppoe enable group HQ
RTR-ISP(config-subif)#exit
RTR-ISP(config)#interface gi0/1.100
RTR-ISP(config-subif)#encapsulation dot1q 100
RTR-ISP(config-subif)#no ip address
RTR-ISP(config-subif)#pppoe enable group BRANCH
RTR-ISP(config-subif)#exit
RTR-ISP(config)#do write
Теперь необходимо настроить VLAN-ы на коммутаторе для того, чтобы клиенты взаимодействовали с нужными подинтерфейсами.
На SW-ISP:
Switch>enable
Switch#config terminal
Switch(config)#hostname SW-ISP
SW-ISP(config)#vlan 99
SW-ISP(config-vlan)#exit
SW-ISP(config)#vlan 100
SW-ISP(config-vlan)#exit
SW-ISP(config)#interface gi0/0
SW-ISP(config-if)#switchport trunk encapsulation dot1q
SW-ISP(config-if)#switchport mode trunk
SW-ISP(config-if)#exit
SW-ISP(config)#interface gi0/1
SW-ISP(config-if)#switchport access vlan 99
SW-ISP(config-if)#switchport mode access
SW-ISP(config-if)#exit
SW-ISP(config)#interface range gi0/2-3
SW-ISP(config-if-range)#switchport access vlan 100
SW-ISP(config-if-range)#switchport mode access
SW-ISP(config-if-range)#exit
SW-ISP(config)#do write
Теперь необходимо выполнить настройку главного офиса для подключения к сети ISP через PPPoE.
На RTR-HQ:
Would you like to enter the initial configuration dialog? [yes/no]: no
Router>enable
Router#config terminal
Router(config)#hostname RTR-HQ
RTR-HQ(config)#interface dialer1
RTR-HQ(config-if)#ip address negotiated
RTR-HQ(config-if)#mtu 1492
RTR-HQ(config-if)#encapsulation ppp
RTR-HQ(config-if)#dialer pool 1
RTR-HQ(config-if)#ppp authentication chap pap callin
RTR-HQ(config-if)#ppp chap hostname rtr-hq
RTR-HQ(config-if)#ppp chap password 0 P@ssw0rd_HQ
RTR-HQ(config-if)#ppp pap sent-username rtr-hq password P@ssw0rd_HQ
RTR-HQ(config-if)#ip nat outside
RTR-HQ(config-if)#exit
RTR-HQ(config)#access-list 1 permit any
RTR-HQ(config)#ip nat inside source list 1 interface dialer1 overload
RTR-HQ(config)#interface gi0/1
RTR-HQ(config-if)#ip address 172.16.0.1 255.255.255.0
RTR-HQ(config-if)#ip nat inside
RTR-HQ(config-if)#no shutdown
RTR-HQ(config-if)#exit
RTR-HQ(config)#inteface gi0/0
RTR-HQ(config-if)#no ip address
RTR-HQ(config-if)#no shutdown
RTR-HQ(config-if)#pppoe-client dial-pool-number 1
RTR-HQ(config-if)#exit
RTR-HQ(config)#ip route 0.0.0.0 0.0.0.0 dialer1
RTR-HQ(config)#do write
Чтобы убедиться в том, что PPPoE-соединение было установлено, можно посмотреть вывод команды «show ip interface brief» и выполнить запрос в Интернет «ping 1.1.1.1»:

По аналогии настройте маршрутизаторы филиалов RTR-BR1 и RTR-BR2!
Проверка на RTR-BR1 и RTR-BR2:


Теперь можно на vPC назначить IP-адреса и убедиться в том, что все работает:



Все vPC работают. Пора переходить к настройке DMVPN.
На RTR-HQ:
RTR-HQ>enable
RTR-HQ#config terminal
RTR-HQ(config)#crypto isakmp policy 10
RTR-HQ(config-isakmp)#encr aes 256
RTR-HQ(config-isakmp)#hash sha256
RTR-HQ(config-isakmp)#authentication pre-share
RTR-HQ(config-isakmp)#group 14
RTR-HQ(config-isakmp)#lifetime 86400
RTR-HQ(config-isakmp)#exit
RTR-HQ(config)#crypto isakmp key P@ssw0rd_VPN address 0.0.0.0 0.0.0.0
RTR-HQ(config)#crypto ipsec transform-set DMVPN-TS esp-aes 256 esp-sha256-hmac
RTR-HQ(cfg-crypto-trans)#mode transport
RTR-HQ(cfg-crypto-trans)#exit
RTR-HQ(config)#crypto ipsec profile DMVPN-PROFILE
RTR-HQ(ipsec-profile)#set transform-set DMVPN-TS
RTR-HQ(ipsec-profile)#exit
RTR-HQ(config)#interface tunnel0
RTR-HQ(config-if)#ip address 99.99.99.1 255.255.255.0
RTR-HQ(config-if)#no ip redirects
RTR-HQ(config-if)#ip nhrp authentication P@ssw0rd
RTR-HQ(config-if)#ip nhrp map multicast dynamic
RTR-HQ(config-if)#ip nhrp network-id 1
RTR-HQ(config-if)#ip ospf network point-to-multipoint
RTR-HQ(config-if)#tunnel source dialer1
RTR-HQ(config-if)#tunnel mode gre multipoint
RTR-HQ(config-if)#tunnel protection ipsec profile DMVPN-PROFILE
RTR-HQ(config-if)#exit
RTR-HQ(config)#do write
DMVPN настроен на RTR-HQ. Теперь необходимо настроить клиентов, которые будут подключаться к нему.
На RTR-BR1:
RTR-BR1>enable
RTR-BR1#config terminal
RTR-BR1(config)#crypto isakmp policy 10
RTR-BR1(config-isakmp)#encr aes 256
RTR-BR1(config-isakmp)#hash sha256
RTR-BR1(config-isakmp)#authentication pre-share
RTR-BR1(config-isakmp)#group 14
RTR-BR1(config-isakmp)#lifetime 86400
RTR-BR1(config-isakmp)#exit
RTR-BR1(config)#crypto isakmp key P@ssw0rd_VPN address 100.0.0.10
RTR-BR1(config)#crypto ipsec transform-set DMVPN-TS esp-aes 256 esp-sha256-hmac
RTR-BR1(cfg-crypto-trans)#mode transport
RTR-BR1(cfg-crypto-trans)#exit
RTR-BR1(config)#crypto ipsec profile DMVPN-PROFILE
RTR-BR1(ipsec-profile)#set transform-set DMVPN-TS
RTR-BR1(ipsec-profile)#exit
RTR-BR1(config)#interface tunnel0
RTR-BR1(config-if)#ip address 99.99.99.2 255.255.255.0
RTR-BR1(config-if)#ip nhrp authentication P@ssw0rd
RTR-BR1(config-if)#ip nhrp map 99.99.99.1 100.0.0.10
RTR-BR1(config-if)#ip nhrp map multicast 100.0.0.10
RTR-BR1(config-if)#ip nhrp network-id 1
RTR-BR1(config-if)#ip nhrp nhs 99.99.99.1
RTR-BR1(config-if)#ip nhrp registration timeout 60
RTR-BR1(config-if)#ip ospf network point-to-multipoint
RTR-BR1(config-if)#tunnel source dialer1
RTR-BR1(config-if)#tunnel mode gre multipoint
RTR-BR1(config-if)#tunnel protection ipsec profile DMVPN-PROFILE
RTR-BR1(config-if)#exit
RTR-BR1(config)#do write
Примерно то же самое необходимо сделать на RTR-BR2:
RTR-BR2>enable
RTR-BR2#config terminal
RTR-BR2(config)#crypto isakmp policy 10
RTR-BR2(config-isakmp)#encr aes 256
RTR-BR2(config-isakmp)#hash sha256
RTR-BR2(config-isakmp)#authentication pre-share
RTR-BR2(config-isakmp)#group 14
RTR-BR2(config-isakmp)#lifetime 86400
RTR-BR2(config-isakmp)#exit
RTR-BR2(config)#crypto isakmp key P@ssw0rd_VPN address 100.0.0.10
RTR-BR2(config)#crypto ipsec transform-set DMVPN-TS esp-aes 256 esp-sha256-hmac
RTR-BR2(cfg-crypto-trans)#mode transport
RTR-BR2(cfg-crypto-trans)#exit
RTR-BR2(config)#crypto ipsec profile DMVPN-PROFILE
RTR-BR2(ipsec-profile)#set transform-set DMVPN-TS
RTR-BR2(ipsec-profile)#exit
RTR-BR2(config)#interface tunnel0
RTR-BR2(config-if)#ip address 99.99.99.3 255.255.255.0
RTR-BR2(config-if)#ip nhrp authentication P@ssw0rd
RTR-BR2(config-if)#ip nhrp map 99.99.99.1 100.0.0.10
RTR-BR2(config-if)#ip nhrp map multicast 100.0.0.10
RTR-BR2(config-if)#ip nhrp network-id 1
RTR-BR2(config-if)#ip nhrp nhs 99.99.99.1
RTR-BR2(config-if)#ip nhrp registration timeout 60
RTR-BR2(config-if)#ip ospf network point-to-multipoint
RTR-BR2(config-if)#tunnel source dialer1
RTR-BR2(config-if)#tunnel mode gre multipoint
RTR-BR2(config-if)#tunnel protection ipsec profile DMVPN-PROFILE
RTR-BR2(config-if)#exit
RTR-BR2(config)#do write
Можно проверить на RTR-HQ, чтобы VPN-соединения были установлены корректно:

Для сходимости главного офиса и филиалов необходимо настроить протокол динамической маршрутизации OSPF.
На RTR-HQ:
RTR-HQ>enable
RTR-HQ#config terminal
RTR-HQ(config)#router ospf 1
RTR-HQ(config-router)#router-id 1.1.1.1
RTR-HQ(config-router)#passive-interface gi0/1
RTR-HQ(config-router)#network 172.16.0.0 0.0.0.255 area 0
RTR-HQ(config-router)#network 99.99.99.0 0.0.0.255 area 0
RTR-HQ(config-router)#exit
RTR-HQ(config)#do write
И на маршрутизаторах филиалов.
На RTR-BR1:
RTR-BR1>enable
RTR-BR1#config terminal
RTR-BR1(config)#router ospf 1
RTR-BR1(config-router)#router-id 2.2.2.2
RTR-BR1(config-router)#passive-interface gi0/1
RTR-BR1(config-router)#network 192.168.1.0 0.0.0.255 area 0
RTR-BR1(config-router)#network 99.99.99.0 0.0.0.255 area 0
RTR-BR1(config-router)#exit
RTR-BR1(config)#do write
На RTR-BR2:
RTR-BR2>enable
RTR-BR2#config terminal
RTR-BR2(config)#router ospf 1
RTR-BR2(config-router)#router-id 3.3.3.3
RTR-BR2(config-router)#passive-interface gi0/1
RTR-BR2(config-router)#network 192.168.2.0 0.0.0.255 area 0
RTR-BR2(config-router)#network 99.99.99.0 0.0.0.255 area 0
RTR-BR2(config-router)#exit
RTR-BR2(config)#do write
Итоговая проверка связности между главным офисом и филиалами:

Как видно, связность присутствует. DMVPN настроен успешно!