Ситуация
Я должен поднять VPN соединение между двумя площадками в сети. В серверной, кажется, были шлюзы безопасности С-Терра Шлюз версии 4.2. Схема простая. Вендор даже опубликовал рекомендованный сценарий настройки. Но в сценарии вендора используется три сетевых интерфейса, а на моих шлюзах их только два.
Завариваю кофе, вспоминаю свой CCNA и пробую использовать то, что есть свободные порты в управляемых коммутаторах.
Моя сеть
Моя сеть это две территориально разделенные площадки в одном broadcast домене. Адресное пространство: 10.10.205.0/24:
На руках два шлюза безопасности С-Терра Шлюз версии 4.2 с пакетом С-Терра L2.
О пакете С-Терра L2
Пакет позволяет перевести один или несколько интерфейсов шлюза в PROMISC режим. PROMISC интерфейс перехватывает фреймы канального уровня, а С-Терра L2 инкапсулирует их в UDP.
Далее UDP пакеты зашифровываются (инкапсулируются в ESP). Так получается L2-over-L3 VPN соединение. С-Терра L2 предустановлен на все шлюзы безопасности и активируется отдельной лицензией.
В рекомендуемом сценарии шлюзы безопасности размещены на границе сети, а для управления выделен отдельный интерфейс:
Чтобы было понятнее опишу интерфейсы:
- Gi0/0 PROMISC интерфейсы;
- Gi0/1 L3 WAN интерфейсы;
- Gi0/2 выделенные интерфейсы управления. Я так понимаю, что вторым шлюзом безопасности я должен управлять через VPN туннель.
Решение
Первая кружка кофе закончилась, пока я читал на Хабре про 802.1Q вспоминал CCNA. Вторая кружка остыла (погрею в микроволновке), пока коммутировал оборудование, как показано на рисунке:
Выделяю три типа трафика:
- Основной трафик между устройствами R1 и R2. Обозначу как BULK DATA и вынесу в VLAN 205. Перед передачей между площадками BULK DATA должен быть зашифрован;
- Трафик управления шлюзами MGMT. Вынесу в VLAN 10. MGMT трафик до шлюза на удаленной площадке должен быть зашифрован;
- BULK DATA и MGMT после шифрования обозначу как ESP DATA и вынесу в VLAN 100.
По моим прикидкам, передача BULK DATA/ESP DATA в сети будет выглядеть так (зелеными линиями изобразил незашифрованный трафик, красными зашифрованный):
Передача MGMT для управления шлюзом на локальной площадке:
Передача MGMT/ESP DATA для управления шлюзом на удаленной площадке:
5 шагов настройки
Шаг 1. Разбираюсь с BULK DATA
Выделяю для BULK DATA отдельный VLAN 205. Для этого интерфейс Gi0/2 устройств SW1 и SW2 устанавливаю в access mode с VLAN 205:
sw1(config)#interface gi0/2 description BULK_TO_R1 switchport access vlan 205 no shutdownsw2(config)#interface gi0/2 description BULK_TO_R2 switchport access vlan 205 no shutdown
Делаю интерфейсы Gi0/0 шлюзов GW1 и GW2 PROMISC интерфейсами. Чтобы передать BULK DATA на PROMISC интерфейс, настраиваю trunk до PROMISC интерфейса:
sw1(config)#interface gi0/0 description LINK_TO_PROMISC_GW1 switchport mode trunk switchport trunk allowed vlan 205 switchport trunk encapsulation dot1q no shutdownsw2(config)#interface gi0/0 description LINK_TO_PROMISC_GW2 switchport mode trunk switchport trunk allowed vlan 205 switchport trunk encapsulation dot1q no shutdown
Шаг 2. Разбираюсь с локальным MGMT
Согласно плану, MGMT трафик выношув VLAN 10. Адресное пространство для VLAN 10: 10.76.76.128/28.
На устройстве SW1 и SW2 создаю виртуальные интерфейсы vlan10:
sw1(config)#interface vlan10 ip address 10.76.76.129 255.255.255.240 no shutdown sw2(config)#interface vlan10 ip address 10.76.76.142 255.255.255.240 no shutdown
Делаю VLAN 10 native VLANом, чтобы не настраивать 802.1Q интерфейсы на шлюзе:
sw1(config)#interface gi0/1 description LINK_TO_WAN_GW1 switchport mode trunk switchport trunk allowed vlan 10 switchport trunk native vlan 10 switchport trunk encapsulation dot1q no shutdownsw2(config)#interface gi0/1 description LINK_TO_WAN_GW2 switchport mode trunk switchport trunk allowed vlan 10 switchport trunk native vlan 10 switchport trunk encapsulation dot1q no shutdown
Настраиваю интерфейсы Gi0/1 шлюзов безопасности:
GW1(config)#interface gi0/1 ip address 10.76.76.137 255.255.255.240 no shutdownGW2(config)#interface gi0/1 ip address 10.76.76.138 255.255.255.240 no shutdown
Теперь GW1 доступен по SSH с устройства SW1:
sw1#ssh l root 10.76.76.137Password:S-Terra Gate 4.2.18201 (amd64)root@GW1~#
Аналогично GW2 доступен по SSH с устройства SW2:
sw2#ssh l root 10.76.76.138Password:S-Terra Gate 4.2.18201 (amd64)root@GW2~#
Неплохо, налил еще кружечку кофе.
Шаг 3. Разбираюсь с MGMT до шлюза на удаленной площадке
MGMT трафик до шлюза на удаленной площадке должен шифроваться. Для этого прокину VLAN 10 через VPN. В VPN туннель попадет весь трафик, перехваченный с PROMISC интерфейса. Добавлю в trunk до PROMISC интерфейса VLAN 10:
sw1(config)#interface gi0/0 description LINK_TO_PROMISC_GW1 switchport trunk allowed vlan 10, 205sw2(config)#interface gi0/0 description LINK_TO_PROMISC_GW1 switchport trunk allowed vlan 10, 205
Не тратьте полчаса на траблшутинг!
На PROMISC интерфейс не должен попадать ESP DATA, поэтому важно исключить VLAN 100 из транков LINK_TO_PROMISC_GW1 и LINK_TO_PROMISC_GW2 в вариантах:
switchport trunk allowed vlan 1-99,101-4096
Шаг 4. Дошел до ESP DATA
Выделяю ESP DATA в VLAN 100 на шлюзах GW1 и GW2. Адресное пространство для VLAN 100: 192.168.10.0/30
Для этого на WAN интерфейсе Gi0/1 шлюзов GW1 и GW2 создаю 802.1Q интерфейс Gi0/1.100.
Выходящий трафик с такого интерфейса будет принадлежать VLAN 100:
GW1(config)#interface gi0/1.100 ip address 192.168.10.1 255.255.255.252 no shutdownGW2(config)#interface gi0/1.100 ip address 192.168.10.2 255.255.255.252 no shutdown
Разрешаю прохождение VLAN 100 в trunk LINK_TO_WAN_GW1 и LINK_TO_WAN_GW2:
sw1(config)#interface gi0/1 description LINK_TO_WAN_GW1 switchport trunk allowed vlan 10,100sw2(config)#interface gi0/1 description LINK_TO_WAN_GW2 switchport trunk allowed vlan 10,100
Линк между устройствами SW1 и SW2 также должен передать тегированный VLAN 100 трафик:
sw1(config)#interface gi0/3 description LINK_TO_SW2 switchport mode trunk switchport trunk allowed vlan 100 switchport trunk encapsulation dot1q no shutdownsw2(config)#interface gi0/3 description LINK_TO_SW1 switchport mode trunk switchport trunk allowed vlan 100 switchport trunk encapsulation dot1q no shutdown
Шаг 5. Настраиваю С-Терра L2 и IPsec VPN с ГОСТом
С-Терра L2 настраивается в операционной системе с помощью конфигурационного файла /opt/VPNagent/etc/l2.conf. Для GW1:
vif tap0bridge br0capture eth0remote 192.168.10.2mssfix 1400passtos
где:
capture eth0 выбор PROMISC интерфейса, remote 192.168.10.2 IP адрес IPsec пира (Gi0/1.100 интерфейс шлюза GW2).
Для GW2:
vif tap0bridge br0capture eth0remote 192.168.10.1mssfix 1400passtos
Настраиваю параметры IKE/IPsec. Для GW1:
Шлюзы будут использовать в качестве идентификаторов hostname, задам предопределенный ключ для аутентификации (Правилам Пользования для аутентификации нужно использовать цифровые сертификаты, поменяю потом):
GW1(config)#crypto isakmp identity hostnameip host GW2 192.168.10.2crypto isakmp key KEY hostname GW2
Настраиваю параметры dead peer detection (DPD):
GW1(config)#crypto isakmp keepalive 10 2crypto isakmp keepalive retry-count 5
Задаю параметры IPsec Phase I:
GW1(config)#crypto isakmp policy 1 encr gost hash gost3411-256-tc26 auth pre-share group vko2
Задаю параметры IPsec Phase II:
GW1(config)#crypto ipsec transform-set TSET esp-gost28147-4m-imit mode tunnel
Поскольку перехваченные PROMISC интерфейсом L2 фреймы инкапсулируются в UDP, то список доступа, определяющий трафик для шифрования:
GW1(config)#ip access-list extended LIST permit udp host 192.168.10.1 host 192.168.10.2
Создаю криптокарту и привязываю ее к Gi0/1.100:
GW1(config)#crypto map CMAP 1 ipsec-isakmp match address LIST set transform-set TSET set peer 192.168.10.2interface gi0/1.100 crypto map CMAP
Указываю маршрут по умолчанию через IP адрес IPsec пира:
GW1(config)#ip route 0.0.0.0 0.0.0.0 192.168.10.2
Конфигурация шлюза GW2:
GW2(config)#crypto isakmp identity hostnameip host GW1 192.168.10.1crypto isakmp key KEY hostname GW1crypto isakmp keepalive 10 2crypto isakmp keepalive retry-count 5crypto isakmp policy 1 encr gost hash gost3411-256-tc26 auth pre-share group vko2crypto ipsec transform-set TSET esp-gost28147-4m-imit mode tunnelip access-list extended LIST permit udp host 192.168.10.2 host 192.168.10.1crypto map CMAP 1 ipsec-isakmp match address LIST set transform-set TSET set peer 192.168.10.1interface gi0/1.100 crypto map CMAPip route 0.0.0.0 0.0.0.0 192.168.10.1
Получилось?
С устройства R1 запускаю ping до R2:
R1#ping 10.10.205.2 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 10.10.205.2, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 2/2/3 ms</code>R2 отвечает на ICMP. Неужели получилось? Проверяю ARP таблицы устройств R1 и R2:<source>R1#show arp Protocol Address Age (min) Hardware Addr Type Interface Internet 10.10.205.1 - aabb.cc00.5020 ARPA GigabitEthernet0/2 Internet 10.10.205.2 54 aabb.cc00.6020 ARPA GigabitEthernet0/2R2#show arp Protocol Address Age (min) Hardware Addr Type Interface Internet 10.10.205.1 52 aabb.cc00.5020 ARPA GigabitEthernet0/2 Internet 10.10.205.2 - aabb.cc00.6020 ARPA GigabitEthernet0/2
Устройства R1 и R2 считают, что находятся в одной broadcast подсети.
Устройства SW1 и SW2 считают, что соединены друг с другом двумя линками:
sw1#show cdp neighborsDevice ID Local Intrfce Holdtme Capability Platform Port ID sw2 Gi0/0 146 R S I Linux Uni Gi0/0 sw2 Gi0/3 146 R S I Linux Uni Gi0/3 R1 Gi0/2 156 R B Linux Uni Gi0/2sw2#show cdp neighborsDevice ID Local Intrfce Holdtme Capability Platform Port ID sw1 Gi0/0 140 R S I Linux Uni Gi0/0 sw1 Gi0/3 140 R S I Linux Uni Gi0/3 R2 Gi0/2 156 R B Linux Uni Gi0/2
Пробую подключиться к GW2 по SSH с устройства SW1:
sw1#ssh l root 10.76.76.138Password:S-Terra Gate 4.2.18201 (amd64)root@GW2~#
Вывод: площадки 1 и 2 прозрачно связаны в единый broadcast домен. Проверю, есть ли в канале шифрование:
Статистика IPsec туннеля на устройстве GW1:
root@GW1:~# sa_mgr show ISAKMP sessions: 0 initiated, 0 respondedISAKMP connections: Num Conn-id (Local Addr,Port)-(Remote Addr,Port) State Sent Rcvd 1 2 (192.168.10.1,500)-(192.168.10.2,500) active 31378 31502IPsec connections: Num Conn-id (Local Addr,Port)-(Remote Addr,Port) Protocol Action Type Sent Rcvd 1 2 (192.168.10.1,*)-(192.168.10.2,*) 17 ESP tunn 508224 27672
Поднят IPsec туннель между 192.168.10.1 и 192.168.10.2.
Проверил, между устройствами SW1 и SW2 передается только ESP трафик, не считая STP. Вот дамп трафика с интерфейса gi0/3 устройства SW1:
В итоге
Выпил три кружки кофе потом не спал всю ночь, но не пришлось покупать новое железо и обновляться. Может и стоило, в версии 4.3 вендор довел L2 до ума. Думаю взять версию 4.3 на тестирование.
Анонимный инженер
t.me/anonimous_engineer