В микротиках, при использовании чистого IPSEC, нет такого понятия как ipsec-интерфейс (как st0 в juniper или vti в vyos или в cisco).
Трафик в ipsec-туннель можно завернуть только политикой (policy-based vpn), написать маршрут через туннель (route-based vpn) или запустить протокол маршрутизации нельзя.
Мне больше нравится route-based vpn, т.к. проще рулить трафиком между несколькими ipsec-туннелями и проще распространить информацию о вновь появившейся сети.
Ну и с т.з. мониторинга наличие ipsec-интерфейса позволяет удобнее смотреть сколько трафика течёт через интерфейс, есть ли потери и какие задержки.
Сделать route-based vpn на микротиках можно через связку “GRE over IPSEC”.
Идея заключаеся в том, что сначала поднимается ipsec-туннель.
Далее на микротике заводится gre-интерфейс у которого, соответственно, есть есть source и destination адреса для постоения gre-туннеля.
После, через политику, в ipsec-туннель заворачивается трафик только между source и destination адресами gre-туннеля.
Как итог, мы получаем на микротике gre-интерфейс, трафик через который будет завернут в ipsec-туннель. Этот gre-интерфейс можно использовать в работе route-based vpn, стыковать микротик с обычными маршрутизаторами и запускать динамические протоколы маршрутизации.
Ниже рассмотрены примеры настройки route-basev ipsec между микротиком и двумя Juniper SRX. Причем у одного из SRX нет постоянного публичного ip-адреса.
Между всеми тремя маршрутизаторами работает OSPF.
Площадки и оборудование:
Настроим GRE over IPSEC между OFFICE42 и OFFICE47.
У обоих маршрутизаторов есть статические публичные ip-адереса.
Настраиваем интерфейсы.
Интерфейсу st0.47 присваеваем source-адреc 192.168.133.2/30 gre-туннеля, т.о. gre будет завернут в ipsec.
interfaces { interface-range OFFICE42 { member-range fe-0/0/2 to fe-0/0/7; unit 0 { family ethernet-switching { port-mode access; vlan { members OFFICE42; } } } } fe-0/0/0 { description WIRE_TO_WESTCALL_c227; unit 0 { description ISP_WESTCALL; family inet { filter { input ACL-OUTSIDE-IN; } address 41.0.0.42/24; } } } gr-0/0/0 { unit 47 { description GRE-TO-OFFICE47; tunnel { source 192.168.133.2; destination 192.168.133.1; ttl 255; } family inet { mtu 1400; address 10.47.250.2/30; } } } st0 { unit 47 { description VPN-TO-OFFICE47; family inet { address 192.168.133.2/30; } } vlan { unit 2500 { family inet { address 10.42.42.1/24; } } } } ,,, vlans { OFFICE42 { vlan-id 2500; l3-interface vlan.2500; } }
Распределяем интерфейсы по зонам безопасности и пишем политики безопастности.
В данном примере политики безопасности написаны как “permit any any”.
security { zones { security-zone TRUST { interfaces { vlan.2500 { host-inbound-traffic { system-services { ping; traceroute; dns; ssh; dhcp; snmp; } } } } security-zone UNTRUST { interfaces { fe-0/0/0.0 { host-inbound-traffic { system-services { ping; traceroute; snmp; ike; ssh; } } } } } security-zone VPN { interfaces { st0.47 { host-inbound-traffic { system-services { ping; } } } gr-0/0/0.47 { host-inbound-traffic { system-services { ping; } protocols { ospf; } } } } } } policies { from-zone TRUST to-zone UNTRUST { policy TR-TO-UNT-P-ALL { match { source-address any; destination-address any; application any; } then { permit; } } } from-zone TRUST to-zone VPN { policy TR-TO-VPN-P-ALL { match { source-address any; destination-address any; application any; } then { permit; } } } from-zone VPN to-zone TRUST { policy VPN-TO-TR-P-ALL { match { source-address any; destination-address any; application any; } then { permit; } } } from-zone UNTRUST to-zone TRUST { policy UNT-TO-TR-D-ANY-LOG { match { source-address any; destination-address any; application any; } then { deny; log { session-init; } } } } from-zone UNTRUST to-zone VPN { policy UNT-TO-VPN-D-ANY { match { source-address any; destination-address any; application any; } then { reject; log { session-init; } } } } from-zone VPN to-zone VPN { policy VPN-TO-VPN-P-ALL { match { source-address any; destination-address any; application any; } then { permit; } } } } }
Настраиваем ipsec.
security { ike { proposal DEFAULT-IKE-PROPOSAL { authentication-method pre-shared-keys; dh-group group5; authentication-algorithm sha1; encryption-algorithm aes-256-cbc; lifetime-seconds 86400; } policy IKE-POLICY-OFFICE47 { mode main; proposals DEFAULT-IKE-PROPOSAL; pre-shared-key ascii-text "$9$fTQ30ORSy...UjqmPQ"; ## SECRET-DATA } gateway IKE-GW-OFFICE47 { ike-policy IKE-POLICY-OFFICE47; address 31.0.0.47; dead-peer-detection always-send; external-interface fe-0/0/0.0; } } ipsec { proposal DEFAULT-IPSEC-PROPOSAL { protocol esp; authentication-algorithm hmac-sha1-96; encryption-algorithm aes-256-cbc; lifetime-seconds 3600; } policy DEFAULT-VPN-POLICY { perfect-forward-secrecy { keys group5; } proposals DEFAULT-IPSEC-PROPOSAL; } vpn IKE-VPN-OFFICE47 { bind-interface st0.47; ike { gateway IKE-GW-OFFICE47; ipsec-policy DEFAULT-VPN-POLICY; } establish-tunnels immediately; } } }
Заводим gre интерфейс, который смотрит в сторону OFFICE42
/interface gre add !keepalive local-address=192.168.133.1 mtu=1400 name=GRE-TUN42 remote-address=192.168.133.2
Вешаем адреса на интерфейс GRE-TUN42.
Без адресов из 133 сети GRE-TUN42 будет в состоянии unrechable.
/ip address add address=10.47.250.1/30 interface=GRE-TUN42 network=10.47.250.0 add address=192.168.133.1/30 interface=GRE-TUN42 network=192.168.133.0
Настраиваем ipsec.
/ip ipsec policy group add name=IPSEC-POLICY-GROUP-SRX /ip ipsec profile add dh-group=modp1536 enc-algorithm=aes-256 name=DEFAULT-IPSEC-PROPOSAL nat-traversal=no /ip ipsec peer add address=41.0.0.42/32 name=PEER-R42 profile=DEFAULT-IPSEC-PROPOSAL /ip ipsec proposal set [ find default=yes ] disabled=yes add enc-algorithms=aes-256-cbc name=DEFAULT-IKE-PROPOSAL pfs-group=modp1536 /ip ipsec identity add peer=PEER-R42 policy-template-group=IPSEC-POLICY-GROUP-SRX secret=xxx /ip ipsec policy set 0 disabled=yes add dst-address=192.168.133.2/32 peer=PEER-R42 proposal=DEFAULT-IKE-PROPOSAL src-address=192.168.133.1/32 tunnel=yes
В “ip ipsec policy” описываем политику, в которой трафик между source и destination адресами gre-туннеля будет завернут в ipsec-туннель.
Всё, проверяем, что туннели поднялись.
Настроим GRE over IPSEC между OFFICE45 и OFFICE47.
У маршрутизатора R45 нет статического публичного адреса, от провайдера по dhcp выдаётся приватный адрес и где-то дальше натится в публичный.
Настраиваем интерфейсы.
Интерфейсу st0.47 присваеваем source-адреc 192.168.133.6/30 gre-туннеля gr-0/0/0.47.
Из-за traffic-selector (см. часть про настройку ipsec ниже) в таблицу маршрутизации добавится “статический” роут до destination-адреcа через st0.47.
interfaces { interface-range INT-RANGE-TRUST { member-range fe-0/0/1 to fe-0/0/7; unit 0 { family ethernet-switching { port-mode access; vlan { members VLAN-5-TRUST; } } } } fe-0/0/0 { description GPON-ONT/port1; unit 0 { description ISP_BLIZKO; family inet { dhcp; } } } gr-0/0/0 { unit 47 { description GRE-TO-OFFICE47; tunnel { source 192.168.133.6; destination 192.168.133.5; ttl 255; } family inet { mtu 1400; address 10.47.250.6/30; } } } st0 { unit 47 { description VPN-TO-OFFICE47; family inet { address 192.168.133.6/30; } } } vlan { unit 5 { description VLAN-5-TRUST; family inet { address 10.45.45.1/24; } } } }
Схема распределения интерфейсов по зонам безопасности и политики безопастности как на R42, детали в подкате.
Настраиваем ipsec.
Используем IKEv1 и traffic-selector, без этого ipsec через нат до микортика не поднимался.
ike { proposal DEFAULT-IKE-PROPOSAL { authentication-method pre-shared-keys; dh-group group5; authentication-algorithm sha1; encryption-algorithm aes-256-cbc; lifetime-seconds 86400; } policy IKE-POLICY-OFFICE47 { mode aggressive; proposals DEFAULT-IKE-PROPOSAL; pre-shared-key ascii-text "$9$BJW1Rc8LNbYoyl8...Kv7NUjHmz"; ## SECRET-DATA } gateway IKE-GW-OFFICE47 { ike-policy IKE-POLICY-OFFICE47; address 31.0.0.47; dead-peer-detection always-send; external-interface fe-0/0/0.0; version v1-only; } } ipsec { proposal DEFAULT-IPSEC-PROPOSAL { protocol esp; authentication-algorithm hmac-sha1-96; encryption-algorithm aes-256-cbc; lifetime-seconds 3600; } policy DEFAULT-VPN-POLICY { perfect-forward-secrecy { keys group5; } proposals DEFAULT-IPSEC-PROPOSAL; } vpn IKE-VPN-OFFICE47 { bind-interface st0.47; ike { gateway IKE-GW-OFFICE47; ipsec-policy DEFAULT-VPN-POLICY; } traffic-selector TS-FOR-MIKROTIK { local-ip 192.168.133.6/32; remote-ip 192.168.133.5/32; } establish-tunnels immediately; } }
Заводим gre интерфейс, который смотрим в сторону OFFICE45.
/interface gre add !keepalive local-address=192.168.133.5 mtu=1400 name=GRE-TUN45 remote-address=192.168.133.6
Настраиваем адреса на GRE-TUN45.
/ip address add address=192.168.133.5/30 interface=GRE-TUN45 network=192.168.133.4 add address=10.47.250.5/30 interface=GRE-TUN45 network=10.47.250.4
/ip ipsec policy group add name=IPSEC-POLICY-GROUP-SRX1 /ip ipsec profile add dh-group=modp1536 enc-algorithm=aes-256 name=DEFAULT-IPSEC-PROPOSAL nat-traversal=no /ip ipsec peer add exchange-mode=aggressive name=PEER-R45 passive=yes profile=DEFAULT-IPSEC-PROPOSAL /ip ipsec proposal set [ find default=yes ] disabled=yes add enc-algorithms=aes-256-cbc name=DEFAULT-IKE-PROPOSAL pfs-group=modp1536 /ip ipsec identity add peer=PEER-R45 policy-template-group=IPSEC-POLICY-GROUP-SRX1 secret=xxx /ip ipsec policy set 0 disabled=yes add dst-address=192.168.133.5/32 peer=PEER-R45 proposal=DEFAULT-IKE-PROPOSAL src-address=192.168.133.5/32 tunnel=yes
Внимательно вчитаться в traffic-selector, без него фаза 2 на Микротике не проходила, там было видно 0.0.0.0/0.
И ещё раз вчитаться в local-identity, сейчас работает без него.
Добавляем правила в firewall для ike и esp.
/ip firewall filter ... add action=accept chain=input comment=PERMIT-IKE dst-address=31.0.0.47 dst-port=500,4500 protocol=udp add action=accept chain=input comment=PERMIT-IPSEC dst-address=31.0.0.47 protocol=ipsec-esp ...
Настроим чистый IPSEC между OFFICE42 и OFFICE45.
Статический публичный адрес есть только у R42.
Настраиваем интерфейсы.
interfaces { ... fe-0/0/0 { description WIRE_TO_WESTCALL_c227; unit 0 { description WESTCALL; family inet { filter { input ACL-OUTSIDE-IN; } address 41.0.0.42/24; } } } ... st0 { unit 45 { description VPN-TO-OFFICE45; family inet { address 10.40.102.1/24; } } ... }
Схема распределения интерфейсов по зонам и политикам безопасности такая же как выше.
Настройки ipsec.
security { ike { proposal DEFAULT-IKE-PROPOSAL { authentication-method pre-shared-keys; dh-group group5; authentication-algorithm sha1; encryption-algorithm aes-256-cbc; lifetime-seconds 86400; } policy IKE-POLICY-OFFICE45 { mode aggressive; proposals DEFAULT-IKE-PROPOSAL; pre-shared-key ascii-text "$9$u7WI....P5FnC"; ## SECRET-DATA } gateway IKE-GW-OFFICE45 { ike-policy IKE-POLICY-OFFICE45; dynamic hostname OFFICE45-R45; dead-peer-detection always-send; external-interface fe-0/0/0.0; } } ipsec { proposal DEFAULT-IPSEC-PROPOSAL { protocol esp; authentication-algorithm hmac-sha1-96; encryption-algorithm aes-256-cbc; lifetime-seconds 3600; } policy DEFAULT-VPN-POLICY { perfect-forward-secrecy { keys group5; } proposals DEFAULT-IPSEC-PROPOSAL; } vpn IKE-VPN-OFFCE45 { bind-interface st0.45; ike { gateway IKE-GW-OFFICE45; ipsec-policy DEFAULT-VPN-POLICY; } } }
Настраиваем интерфейсы.
interfaces { interface-range INT-RANGE-TRUST { member-range fe-0/0/1 to fe-0/0/7; unit 0 { family ethernet-switching { port-mode access; vlan { members VLAN-5-TRUST; } } } } fe-0/0/0 { description GPON-ONT/port1; unit 0 { description ISP_BLIZKO; family inet { dhcp; } } } st0 { unit 42 { description VPN-TO-OFFCE42; family inet { address 10.42.250.2/30; } } } vlan { unit 5 { description VLAN-5-TRUST; family inet { address 10.45.45.1/24; } } } } ... vlans { VLAN-5-TRUST { vlan-id 5; l3-interface vlan.5; } }
Схема распределения интерфейсов по зонам и политикам безопасности такая же как выше.
Настраиваем ipsec.
security { ike { proposal DEFAULT-IKE-PROPOSAL { authentication-method pre-shared-keys; dh-group group5; authentication-algorithm sha1; encryption-algorithm aes-256-cbc; lifetime-seconds 86400; } policy IKE-POLICY-OFFICE42 { mode aggressive; proposals DEFAULT-IKE-PROPOSAL; pre-shared-key ascii-text "$9$u7WIB1...Rh"; ## SECRET-DATA } gateway IKE-GW-OFFICE42 { ike-policy IKE-POLICY-L5E-LTE; address 41.0.0.42; dead-peer-detection always-send; local-identity hostname OFFICE45-R45; external-interface fe-0/0/0.0; version v1-only; } } ipsec { proposal DEFAULT-IPSEC-PROPOSAL { protocol esp; authentication-algorithm hmac-sha1-96; encryption-algorithm aes-256-cbc; lifetime-seconds 3600; } policy DEFAULT-VPN-POLICY { perfect-forward-secrecy { keys group5; } proposals DEFAULT-IPSEC-PROPOSAL; } vpn IKE-VPN-OFFICE42 { bind-interface st0.42; ike { gateway IKE-GW-OFFICE42; ipsec-policy DEFAULT-VPN-POLICY; } establish-tunnels immediately; } }
Заводим новую area.
/routing ospf area set [ find default=yes ] disabled=yes add area-id=0.0.0.10 name=area10
Задаём router-id.
/routing ospf instance set [ find default=yes ] router-id=10.47.47.1
Перечисляем интерфейсы, которые будут работать в пассивном режиме.
Надо сделать до того, как интефейрс будет задан через “routing ospf network”.
/routing ospf interface add interface=bridge network-type=broadcast passive=yes
Добавляем в ospf gre-интерфейсы через перечиление сетей.
/routing ospf network add area=area10 network=10.47.47.0/24 add area=area10 network=10.47.250.0/30 add area=area10 network=10.47.250.4/30
Проверяем установлленные через gre-интерфейсы соседства.
/routing ospf neighbor> print 0 instance=default router-id=10.45.45.1 address=10.47.250.6 interface=GRE-TUN45 priority=128 dr-address=0.0.0.0 backup-dr-address=0.0.0.0 state="Full" state-changes=4 ls-retransmits=0 ls-requests=0 db-summaries=0 adjacency=24m39s 1 instance=default router-id=10.42.42.1 address=10.47.250.2 interface=GRE-TUN42 priority=128 dr-address=0.0.0.0 backup-dr-address=0.0.0.0 state="Full" state-changes=12 ls-retransmits=0 ls-requests=0 db-summaries=0 adjacency=56m12s
Задаём router-id.
routing-options { ... router-id 10.45.45.1; }
Настраиваем area 0.0.0.10.
protocols { ospf { area 0.0.0.10 { interface vlan.5 { passive; } interface st0.42; interface gr-0/0/0.47; } } }
Проверяем соседство.
# run show ospf neighbor Address Interface State ID Pri Dead 10.47.250.5 gr-0/0/0.47 Full 10.47.47.1 1 33 10.42.250.2 st0.42 Full 10.42.42.1 128 37
Задаём router-id.
routing-options { ... router-id 10.42.42.1; }
Настраиваем area 0.0.0.10.
protocols { ospf { area 0.0.0.10 { interface vlan.2500 { passive; } interface st0.45; interface gr-0/0/0.47; } } }
Проверяем соседство.
> show ospf neighbor Address Interface State ID Pri Dead 10.47.250.1 gr-0/0/0.47 Full 10.47.47.1 1 39 10.42.250.1 st0.45 Full 10.45.45.1 128 37
Всё, должно работать.