Цель


Необходимо организовать VPN Tunnel между двумя устройствами, таких как Mikrotik и Juniper линейки SRX.

Что имеем


Из микротиков выбрали на сайте микротика вики, модель которая сможет поддерживать аппаратное шифрование IPSec, на наш взгляд она оказалась достаточно компактная и недорогая, а именно Mikrotik hEXS.

USB Modem был куплен в ближайшем сотовом операторе, модель была Huawei E3370. Никакие операции по отвязки от оператора мы не проводили. Все штатное и прошито самим оператором.

В ядре установлен центральный маршрутизатор Juniper SRX240H.

Что удалось


Удалось реализовать схему работы, которая позволяет через сотового оператора, не имея статического адреса, посредством модема создать IPsec соединение в который заворачивается GRE Tunnel.

Данная схема подключения используется и работает на USB модемах Билайн и Мегафон.

Конфигурация следующая:

В ядре установлен Juniper SRX240H
Local Address: 192.168.1.1/24
External Address: 1.1.1.1/30
GW: 1.1.1.2

Удаленная точка

Mikrotik hEX S
Local Address: 192.168.152.1/24
External Address: Dynamic

Небольшая диаграмма для понимания работы:



Конфигурация Juniper SRX240:

Версия ПО JUNOS Software Release [12.1X46-D82]

Конфигурация Juniper
interfaces {
    ge-0/0/0 {
        description Internet-1;
        unit 0 {
            family inet {
                address 1.1.1.1/30;
            }
        }
    }
    gr-0/0/0 {
        unit 1 {
            description GRE-Tunnel;
            tunnel {
                source 172.31.152.2;
                destination 172.31.152.1;
            }
            family inet;    
    vlan {
        unit 0 {
            family inet {
                address 192.168.1.1/24;
            }
        }
    st0 {
        unit 5 {
            description "Area - 192.168.152.0/24";
            family inet {
                mtu 1400;
            }
        }
routing-options {
    static {
        route 0.0.0.0/0 next-hop 1.1.1.2;
        route 192.168.152.0/24 next-hop gr-0/0/0.1;
        route 172.31.152.0/30 next-hop st0.5;
    }
    router-id 192.168.1.1;
}
security {
    ike {
        traceoptions {
            file vpn.log size 256k files 5;
            flag all;
        }
        policy ike-gretunnel {
            mode aggressive;
            description area-192.168.152.0;
            proposal-set standard;
            pre-shared-key ascii-text "mysecret"; ## SECRET-DATA
        }
        gateway gw-gretunnel {
            ike-policy ike-gretunnel;
            dynamic inet 172.31.152.1;
            external-interface ge-0/0/0.0;
            version v2-only;
        }
    ipsec {
        }
        policy vpn-policy0 {
            perfect-forward-secrecy {
                keys group2;
            }
            proposal-set standard;
        }
        vpn vpn-gretunnel {
            bind-interface st0.5;
            df-bit copy;
            vpn-monitor {
                optimized;
                source-interface st0.5;
                destination-ip 172.31.152.1;
            }
            ike {
                gateway gw-gretunnel;
                no-anti-replay;
                ipsec-policy vpn-policy0;
                install-interval 10;
            }
            establish-tunnels immediately;
        }
    }
    policies {  
        from-zone vpn to-zone vpn {
            policy st-vpn-vpn {
                match {
                    source-address any;
                    destination-address any;
                    application any;
                }
                then {
                    permit;
                    log {
                        session-init;   
                        session-close;
                    }
                    count;
                }
            }
        }
        from-zone trust to-zone vpn {
            policy st-trust-to-vpn {
                match {
                    source-address any;
                    destination-address any;
                    application any;
                }
                then {                  
                    permit;
                    log {
                        session-init;
                        session-close;
                    }
                    count;
                }
            }
        }
        from-zone vpn to-zone trust {
            policy st-vpn-to-trust {
                match {
                    source-address any;
                    destination-address any;
                    application any;
                }
                then {
                    permit;
                    log {
                        session-init;
                        session-close;
                    }
                    count;
                }
            }
        }
    zones {                             
        security-zone trust {
                vlan.0 {
                    host-inbound-traffic {
                        system-services {
                            all;
                        }
                        protocols {
                            all;
                        }
                    }
                }
        security-zone vpn {
            interfaces {
                st0.5 {
                    host-inbound-traffic {
                        protocols {
                            ospf;
                        }
                    }
                }
                gr-0/0/0.1 {
                    host-inbound-traffic {
                        system-services {
                            all;
                        }
                        protocols {
                            all;        
                        }
                    }
                }
        security-zone untrust {
            interfaces {
                ge-0/0/0.0 {
                    host-inbound-traffic {
                        system-services {
                            ping;
                            ssh;
                            ike;
                        }
                    }
                }
            }
        }
vlans {                                 
    vlan-local {
        vlan-id 5;
        l3-interface vlan.1;
    }


Конфигурация Mikrotik hEX S:

Версия ПО RouterOS [6.44.3]

Конфигурация Mikrotik
/ip address
add address=172.31.152.1/24 comment=GRE-Tunnel interface=gre-srx network=172.31.152.0
add address=192.168.152.1/24 comment=Local-Area interface=bridge network=192.168.152.0

/interface gre
add comment=GRE-Tunnel-SRX-HQ !keepalive local-address=172.31.152.1 name=gre-srx remote-address=172.31.152.2

/ip ipsec policy group
add name=srx-gre

/ip ipsec profile
add dh-group=modp1024 dpd-interval=10s name=profile1

/ip ipsec peer
add address=1.1.1.1/32 comment=GRE-SRX exchange-mode=aggressive local-address=172.31.152.1 name=peer2 profile=profile1

/ip ipsec proposal
set [ find default=yes ] enc-algorithms=aes-256-cbc,aes-128-cbc,3des
add enc-algorithms=aes-128-cbc,3des name=proposal1

/ip route
add distance=10 dst-address=192.168.0.0/16 gateway=gre-srx

/ip ipsec identity
add comment=IPSec-GRE my-id=address:172.31.152.1 peer=peer2 policy-template-group=srx-gre secret=mysecret

/ip ipsec policy
set 0 disabled=yes
add dst-address=0.0.0.0/0 proposal=proposal1 sa-dst-address=1.1.1.1 sa-src-address=172.31.152.1 src-address=172.31.152.0/30 tunnel=yes

/ip address
add address=172.31.152.1/24 comment=GRE-Tunnel interface=gre-srx network=172.31.152.0
add address=192.168.152.1/24 comment=Local-Area interface=bridge network=192.168.152.0

Результат:
Со стороны Juniper SRX

netscreen@srx240> ping 192.168.152.1  
PING 192.168.152.1 (192.168.152.1): 56 data bytes
64 bytes from 192.168.152.1: icmp_seq=0 ttl=64 time=29.290 ms
64 bytes from 192.168.152.1: icmp_seq=1 ttl=64 time=28.126 ms
64 bytes from 192.168.152.1: icmp_seq=2 ttl=64 time=26.775 ms
64 bytes from 192.168.152.1: icmp_seq=3 ttl=64 time=25.401 ms
^C
--- 192.168.152.1 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max/stddev = 25.401/27.398/29.290/1.457 ms

Со стороны Mikrotik

net[admin@GW-LTE-] > ping 192.168.1.1 
  SEQ HOST                                     SIZE TTL TIME  STATUS                                                                                                                                               
    0 192.168.1.1                                56  64 34ms 
    1 192.168.1.1                                56  64 40ms 
    2 192.168.1.1                                56  64 37ms 
    3 192.168.1.1                                56  64 40ms 
    4 192.168.1.1                                56  64 51ms 
    sent=5 received=5 packet-loss=0% min-rtt=34ms avg-rtt=40ms max-rtt=51ms 

Выводы


После проделанной работы му получили стабильный VPN Tunnel, из удаленной сети нам доступна все сеть которая находиться за juniper, и соответственно обратно.

Не рекомендую использовать в данной схеме IKE2, возникала ситуация что после перезагрузки того или иного устройства не поднимается IPSec.

Комментарии (23)


  1. nomadmoon
    09.06.2019 19:52

    ЯННП. На стороне Джуна у вас «белый» адрес 1.1.1.1, но при этом сорс и дестинейшен туннеля в 172.16.0.0/12… А на стороне микротика вообще белого адреса нет :\


    1. DaemonGloom
      09.06.2019 20:13

      Вы пропустили часть, в которой был поднят IPsec, внутри которого уже бегает gre. Тому вполне хватает одного белого адреса.


      1. blind_oracle
        10.06.2019 11:08

        Зачем тогда GRE? Если IPSEC в туннельном режиме уже есть и делает практически то же самое.


        1. INSTE
          10.06.2019 11:30

          Чтобы преподнести поддержку GRE как нечто крайне крутое и недостающее всем пользователям в мире наверное.


        1. BigDrive Автор
          10.06.2019 13:18

          IPsec на стороне Микротика шифрует весь трафик, соответственно либо надо сеть бить 192.168.0.0/17, либо если нужна вся доступная сеть 192.168.0.0/16, то Микротик будет не доступен из локальной сети, по этому шифруем трафик 172.31.xxx.xxx


      1. BigDrive Автор
        10.06.2019 13:01

        Вроде не пропустил, он есть.


    1. BigDrive Автор
      10.06.2019 12:46

      Белого адреса нет, через Cloud Микротика не работает. Поэтому только через серый.


  1. INSTE
    09.06.2019 21:32

    Keenetic 4G дешевле в два раза, умеет все то же самое, при этом еще и IKEv2 работает стабильно.


    1. AcidVenom
      09.06.2019 23:16
      +1

      PCQ умеет? 2 и более провайдеров умеете? Скрипты умеет? Несколько подсетей умеет?
      Это устройства разных классов, сравнивать их бессмысленно.


      1. INSTE
        10.06.2019 10:31

        Много провайдеров — конечно. Скрипты — да. Несколько подсетей — пожалуйста.


        1. AcidVenom
          10.06.2019 10:42

          Внимание! При подключении к двум и более провайдерам, в интернет-центре серии Keenetic возможно использовать только резервирование подключений. Одновременно использовать подключение к нескольким интернет-провайдерам и балансировать их нагрузку невозможно.

          Я, конечно, и дальше могу аргументировать, но это неравный бой.


          1. INSTE
            10.06.2019 11:28

            Сначала определитесь с определением термина «балансировка», потом уже «вступайте в бой».
            Выпускать конкретного клиента через конкретный WAN (любой) — это пара кликов в Web-интерфейсе. Есть экспериментальная опция для качающих торренты, которая включает ECMP-роутинг и позволяет грузить все каналы на полную, но она ломает работу с некоторыми ресурсами и не рекомендуется для обычных пользователей.
            Ну и документация могла немного устареть.


      1. INSTE
        10.06.2019 11:35

        Это устройства разных классов, сравнивать их бессмысленно.

        Да, разных, никто не спорит. Но все, что сделал автор (тут вроде обсуждение статьи идет, а не потенциальных ТТХ), можно было сделать на устройстве в 2 раза дешевле и с большим выхлопом.


        1. AcidVenom
          10.06.2019 11:48

          Так а чего в 2 раза-то? Можно и в 3 раза дешевле, можно и на коленке. Только это не приемлемо в производственной среде. Что-то я не замечал в Магните TP-Link'ов или Zyxel'ей.
          Лично у вас сколько сетевых устройств легло в продакшене?


          1. smilyfox
            10.06.2019 18:56

            Я замечал. И то и другое. Только я не стал бы называть Магнит производственной средой. На действительном производстве господствуют различные вариации cisco, moxa и иже с ними.


    1. Eagle_NN
      10.06.2019 17:33

      По моему опыту Keenetic через несколько лет использования начинает глючить все сильнее… С микротиком такого не наблюдал.


    1. Night_Snake
      11.06.2019 23:00

      Да, кинетик последнее время стал уметь многое, что раньше мог только Микротик/ZyWall/DFL, т.е. устройства, изначально заточенные не под SOHO, а под вполне себе средний бизнес с филиальной сетью и т.д. А ешё на него можно поставить какой-нибудь *WRT и получить ещё больше возможностей (включая установку доп. пакетов).

      Но при этом по функциональности микротик до сих пор сильно его опережает. Плюсом к этому, какой-нибудь hAP mini умеет ровно столько же (по функциям), сколько самый мощный CCR. И конфиг переносится элементарно, т.е. проблем с апгрейдом железки не возникает.

      При всём уважении к кинетику, как говорится.


  1. TimsTims
    10.06.2019 08:35

    Usb модемы имели свойство глючить через 1-2 дня работы. И пока руками не ребутнешь — не заработает интернет. Причем обычная перезагрузка роутера не помогает, нужно обязательно обесточить модем.


    1. AcidVenom
      10.06.2019 10:53

      Они и сейчас имеют, потому что не рассчитаны на такие режимы работы. Для работы 24/7 есть другие устройства.


    1. INSTE
      10.06.2019 11:31

      Keeentic умеет делать power-cycle на несколько секунд на usb-порту модема, если он перестал работать. Этот штатный функционал есть уже много лет.


      1. DaemonGloom
        10.06.2019 11:47

        Да, то же умеет и Микротик из статьи. На сколько секунд выключать питание — задаётся параметров в команде (ну или в веб-интерфейсе).


  1. Tufed
    10.06.2019 12:51

    Сам недавно занимался подобной настройкой: Juniper с NetGate-ом подружил по IP-sec. Была в наличии сетка из Juniper-ов с VPN-ками дефлотно настроенными, и в неё добавили еще одну удаленную точку с NetGate в качестве шлюза. Я не сетевик ни разу, обычный админ самоучка. И для меня было малость трудновато перейти от стандартного Juniper-овского подхода по созданию VPN к общему с указанием ключей, приветствий, шифрований 1 и 2 фазы, количеством байт проверки и т.д… Кхм, я даже подумывал статью запилить на эту тему, но выглядеть она будет как у автора этой статьи, то есть очень коротко, но может быть полезной как справочный материал.


  1. Night_Snake
    11.06.2019 22:51

    Навскидку, у меня несколько вопросов:
    1. зачем использовать aggressive вместо main?
    2. df-bit copy — не самая удачная идея на туннельных интерфейсах. Во избежание дропов я бы всё-таки скидывал бит dont-fragment
    3. Я так и не понял смысла натягивать gre поверх ipsec. Даже если принять во внимание, что микротик не умеет полноценный route-based ipsec, ваше объяснение выглядит немного непонятно.
    Если за Juniper сидит вся оставшаяся /16, и трафик к ней нужно добавить в ipsec policy — то на микротике это довольно легко обходится грамотным составлением policy и роутингом (т.е. у вас ipsec encapsulation просто не возникнет: wiki.mikrotik.com/wiki/Manual:Packet_Flow)

    4. Ещё есть вопросы, зачем использовать vlan.0 вместо routed-портов, зачем вы разрешаете ospf, если его не используете (или используете?) и почему у вас в конфиге Juniper режим v2-only, если IKEv2 вы использовать не рекомендуете. Но это уже придирки. Наверное :)