Table of Contents
Настройка route-based ipsec vpn на Микротик
Вводная
В микротиках, при использовании чистого 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.
Площадки и оборудование:
- OFFICE47: R47, Mikrotik hAP, RouterOS v6.49.18.
- OFFICE45: R45, Juniper SRX 100H, ver. 12.1.
- OFFICE42: R42, Juniper SRX 100H, ver. 11.2.
GRE/IPSEC между Mikrotik и SRX, два публичных адреса
Настроим GRE over IPSEC между OFFICE42 и OFFICE47.
У обоих маршрутизаторов есть статические публичные ip-адереса.
Настройка R42 (SRX) в OFFICE42
Настраиваем интерфейсы.
Интерфейсу 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;
}
}
}
Настройка R47 (Mikrotik) в OFFICE47
Заводим 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/IPSEC между Mikrotik и SRX, один публичный адрес
Настроим GRE over IPSEC между OFFICE45 и OFFICE47.
У маршрутизатора R45 нет статического публичного адреса, от провайдера по dhcp выдаётся приватный адрес и где-то дальше натится в публичный.
Настройка R45 (SRX) в OFFICE45
Настраиваем интерфейсы.
Интерфейсу 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;
}
}
Настройка R47 (Mikrotik) в OFFICE45
Заводим 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 между двумя SRX, один статический публичный адрес
Настроим чистый IPSEC между OFFICE42 и OFFICE45.
Статический публичный адрес есть только у R42.
Настройка R42 (SRX) в OFFICE42
Настраиваем интерфейсы.
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;
}
}
}
Настройка R45 (SRX) в OFFICE45
Настраиваем интерфейсы.
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;
}
}
Настройки OSPF
OSPF на R47 (Mikrotik)
Заводим новую 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
OSPF на R45 (SRX)
Задаём 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
OSPF на R42 (SRX)
Задаём 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
Всё, должно работать.


