topic:mikrotik-route-based-ipsec

Настройка 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.

L3-схема.



OSPF-схема.


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.

show route на R42 после поднятия ipsec-интерфейса st0.47

show route на R42 после поднятия ipsec-интерфейса st0.47

192.168.133.0/30   *[Direct/0] 3d 03:59:09
                    > via st0.47
192.168.133.2/32   *[Local/0] 3d 03:59:31
                      Local via st0.47


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.

show route на R45 после поднятия ipsec-интерфейса st0.47

show route на R45 после поднятия ipsec-интерфейса st0.47

192.168.133.4/30   *[Direct/0] 00:06:47
                    > via st0.47
192.168.133.5/32   *[Static/5] 00:06:47
                    > via st0.47
192.168.133.6/32   *[Local/0] 3d 17:42:31
                      Local via 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, детали в подкате.

Зоны и политики безопасности на R45

Зоны и политики безопасности на R45

security {
    zones {
        security-zone TRUST {
            host-inbound-traffic {
                system-services {
                    all;
                }
                protocols {
                    all;
                }
            }
            interfaces {
                vlan.5;
            }
        }
        security-zone UNTRUST {
            screen untrust-screen;
            interfaces {
                fe-0/0/0.0 {
                    host-inbound-traffic {
                        system-services {
                            ping;
                            traceroute;
                            dhcp;
                            ike;
                        }
                    }
                }
            }
        }
        security-zone VPN {
            interfaces {
                st0.47 {
                    host-inbound-traffic {
                        system-services {
                            ping;
                            traceroute; 
                        }
                    }
                }
                gr-0/0/0.47 {
                    host-inbound-traffic {
                        system-services {
                            ping;
                            traceroute;
                            ssh;
                        }
                        protocols {
                            ospf;
                        }
                    }
                }
            }
        }
    }
    policies {
        from-zone TRUST to-zone UNTRUST {
            policy TR-TO-UNT-P-ANY {
                match {                 
                    source-address any;
                    destination-address any;
                    application any;
                }
                then {
                    permit;
                }
            }
        }
        from-zone TRUST to-zone TRUST {
            policy TR-TO-TR-P-ANY {
                match {
                    source-address any;
                    destination-address any;
                    application any;
                }
                then {
                    permit;
                }
            }
        }
        from-zone VPN to-zone TRUST {
            policy VPN-TO-TR-P-ANY {
                match {
                    source-address any;
                    destination-address any;
                    application any;
                }
                then {
                    permit;
                }
            }
        }
        from-zone TRUST to-zone VPN {
            policy TR-TP-VPN-P-ANY {
                match {
                    source-address any;
                    destination-address any;
                    application any;
                }
                then {
                    permit;
                }
            }
        }
        from-zone VPN to-zone VPN {
            policy VPN-TO-VPN-P-ANY {
                match {
                    source-address any;
                    destination-address any;
                    application any;
                }
                then {                  
                    permit;
                }
            }
        }
    }
}


Настраиваем 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

Всё, должно работать.


Полезные сслыки

topic/mikrotik-route-based-ipsec.txt · Last modified: by k

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki