В данной документации рассматривается пример рабочей конфигурации соединения роутера CISCO с роутером Mikrotik через GRE туннель с IPSec шифрованием в транспортном режиме. В построении IPsec будет использоваться IKEv2 и аутентификация по PSK. Внутри туннеля будет поднят протокол динамической маршрутизации OSPF для обмена маршрутами о сетях, которые находятся за пирами.

Оборудование и исходные данные:

  1. Mikrotik hEX, RouterOS - 7.1beta5

  2. Cisco ISR 4331 – IOS 16.9.6

Предполагаем, что уже между маршрутизаторами есть L3 связанность.

Схема сети

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

Несмотря на то, что у mikrotik есть свой собственный CLI, мы будем настраивать через GUI используя “Winbox”. В приложении к документации будет приложен CLI-конфиг mikrotik.

1.       Создание GRE туннеля

Открываем Winbox->interfaces -> GRE tunnel -> new

Обязательно указываем имя и tunnel destination (Remote Address) GRE туннеля. Поскольку предполагается, что IP адрес на внешний интерфейс Mikrotik будет получаться по DHCP, то в поле Local Address, мы либо ничего не указываем либо вводим “0.0.0.0”

2.       Назначение IP адреса на GRE туннель.

IP -> Address -> new

В данном меню вводим IP адрес GRE туннеля обязательно с маской не ниже 31 (это нужно для дальнейшей корректной работы OSPF) и выбираем GRE интерфейс по имени, которому хотим назначить IP address (имя задаётся в пункте №1)

3.       Переходим непосредственно к настройке самого IPsec. Первым делом, нужно создать IKEv2 профиль. Переходим IP -> IPsec -> Profiles -> new. Тут указываем имя профиля, алгоритмы хэширования и шифрования, DH Group, Lifitime IKEv2 SA, параметры работы DPD.

4.       Создаём новый IPsec Peer. Переходим IP -> IPsec -> Peer -> new. Даём имя пиру, указываем его IP address, в поле Local Address ничего не указываем или указываем «0.0.0.0», как в настройка GRE интерфейса, поскольку IP адрес нашему Mikrotik выдается по DHCP. Выбираем профиль, созданный в предыдущем пункте и версию IKE.

5.       Нужно настроить аутентификацию по сертификатам между пирами. Переходим IP -> IPsec -> Identities -> new. Тут мы выбираем peer, созданный в предыдущем пункте, выбираем Auth. Method – pre-shared key и вводим PSK в поле Secret. Все остальные настройке можно посмотреть на картинке ниже.

6.       Создаём IPsec Proposal, даём ему имя, указываем алгоритмы шифрования и хэширования, время жизни IPsec SA. PFS Group в нашем случае не используется.

7.       Теперь осталось в настройках IPsec создать политику шифрования, в которой первым делом указываем какой трафик шифровать, в нашем случае это GRE. Идём в IP -> IPsec -> Policies -> new -> General. Тут выбираем снова Peer, созданного в пункте №6, обращаем внимание на то, чтобы галочка рядом с Tunnel не стояла, так как нам надо использовать Transport mode. Если используются Transport mode, то Src и Dst Address указывать не надо, они подставятся автоматически при нажатии кнопки Apply. Если мы хотим внести изменения в Src и Dst адреса, то это надо делать в настройках Peer (пункт №6). Поскольку между пирами нам надо зашифровать GRE трафик, то в поле “Protocol” указываем 47 – это номер протокола GRE

 

 Далее переходим на вкладку Action. Тут проверяем, чтобы в поле “Action” стоял “encrypt”, в “IPsec Protocols” выбираем “esp” и поле “Proposal” выбираем Proposal, созданный в пункте №6.

Чтобы посмотреть статус туннеля на Mikrotik нужно перейти IP -> IPsec -> Active Peers. Если туннель успешно поднялся, то State туннеля должен быть “Established” и счётчики Tx/Rx packets должны расти.

Но счётчики начнут расти после того как внутри туннеля пойдёт трафик, а этого не будет, пока не будут подняты с обеих сторон протоколы динамической маршрутизации в нашем случаем OSPF. Настройки OSPF расписаны в следующих пунктах.

8.       Настройка OSPF начинается с создания нового OSPF-Instance. Routing -> OSPF -> Instances -> new. Вводим имя Instance, все остальное указываем как на картинке ниже.

9.       Создаём OSPF Area. Routing -> OSPF -> Areas -> new. Даём ей имя, связываем её с нашим OSPF Instance, созданном в пункте №10, в нашем случае мы используем backbone area, поэтому Area ID у неё – 0.0.0.0.

10.   Надо включить OSPF на интерфейсах, первым делом на GRE.  Routing -> OSPF -> Interface Templates -> new. Выбираем интерфейс, на котором включаем OSPF, Area, созданную в пункте № 9, выбираем сеть, которая настроена на GRE интерфейсе. В пункте№ 2 было описано, что сеть должна быть обязательно с маской не ниже 31, если будет указана маска 32, то OSPF соседство с cisco не поднимется. В “Network type” выбираем “ptp unnumbered”, так как на cisco туннель приземляется на virtual-template. Проверяем OSPF Hello Interval.

Если на противоположной стороне всё настроено, то должно подняться OSPF соседство, и счётчики Tx/Rx пакетов должны начти расти (пункт №9). Проверить ospf соседство можно в Routing -> OSPF -> Neighbors, State должен быть “Full”.

Маршруты, пришедшие по OSPF, можно посмотреть в IP -> Routes. Маршруты, пришедшие по OSPF, имеют флаг Dao. В колонке “Gateway” указан интерфейс, через который пойдёт трафик в сторону сети.

На этом конфигурация Mikrotik завершена, нужно еще проверить Firewall, чтобы не был заблокирован легитимный трафик.

В данном примере, разрешен весь трафик. Настраивается тут IP -> Firewall -> Filter rules.

И настроен dynamic Pat. Настраивается тут IP -> Firewall -> NAT.

Конфигурация CISCO

Маршрутизатор Cisco ISR 4331 мы будем настраивать через CLI.

1. Нам надо убедиться, что в конфиге нет строчки crypto ikev2 fragmentation mtu <>

Если данная строчка присутствует, ее надо обязательно убрать. Cisco в 4 пакете построения IKEv2 посылает данный параметр в качестве payload, но Mikrotik его не понимает и не поднимает туннель.

2. Создаём ikev2 proposal даём ему имя PROP-1, указываем алгоритмы шифрования и хеширования, и diffie hellman group.

crypto ikev2 proposal PROP-1 

 encryption aes-cbc-256 //алгоритм шифрования aes-cbc-256

 integrity sha256 //алгоритм хэширования sha256

 group 5 //diffie hellman group - 5

 Связываем Ikev2 proposal с ikev2 policy.

crypto ikev2 policy IKEV2_POLICY 

 proposal PROP-1

3.       Создаём KEYRING, в котором прописываем PSK, для удалённых пиров

crypto ikev2 keyring KEYRING

 peer ALL

  address 0.0.0.0 0.0.0.0 //данный Keyring подходит для всех пиров

  pre-shared-key local cisco123

  pre-shared-key remote cisco123

4.       Создаём ikev2 profile.

 crypto ikev2 profile VTI_PROFILE_MIKR

 authentication remote pre-share //используем аутентификацию по PSK для удалённого пира

 authentication local pre-share //используем аутентификацию по PSK для локального пира

 keyring local KEYRING// привязываем KEYRING, в котором находится PSK ключи.

 dpd 10 3 periodic // настраиваем DPD

 virtual-template 2 mode auto // Связываем profile с virtual-template

5.       Создаём ipsec transform-set. Даём ему имя (TSET), указываем алгоритмы шифрования, хэширования и задаём транспортный режим.

crypto ipsec transform-set TSET esp-aes 256 esp-sha512-hmac 

 mode transport

6.       Создаём ipsec profile, даём ему имя “IPSEC_PROFILE_MIKR” и связываем его с transform-set, созданного в пункте № 5, и с ikev2 profile, созданного в пункте № 4.

crypto ipsec profile IPSEC_PROFILE_MIKR

 set transform-set TSET

 set ikev2-profile VTI_PROFILE_MIKR

7.       Создаём loopback интерфейс и даём ему IP адрес, данный IP адрес будет назначаться на интерфейс virtual-template. IP адрес должен быть обязательно с 32 маской - это нужно для корректной работы ospf.

interface Loopback1

 ip address 172.16.10.1 255.255.255.255

8.       Создаём virtual-template, даём ему номер.

interface Virtual-Template2 type tunnel

 ip unnumbered Loopback1 // IP адрес будет браться с loopback1 интерфейса

 ip ospf dead-interval 40 // обозначаем ospf dead интервал.

 ip ospf mtu-ignore // ospf игнорирует значение mtu 

 tunnel source GigabitEthernet0/0 // указываем физический интерфейс, с которого будет строиться туннель.

 tunnel protection ipsec profile IPSEC_PROFILE_MIKR // указываем ipsec profile

9.       Поднимаем ospf

router ospf 1

network 172.16.10.1 0.0.0.0 area 0 // включаем ospf на интерфейсе Virtual-Template2.

10.   Проверка

Чтобы проверить поднялся туннель или нет нужно ввести команду:

show crypto ipsec sa peer <ip address remote peer>
interface: Virtual-Access1

    Crypto map tag: Virtual-Access1-head-0, local addr 10.0.174.253

 

   protected vrf: (none)

   local  ident (addr/mask/prot/port): (10.0.174.253/255.255.255.255/47/0)

   remote ident (addr/mask/prot/port): (10.0.200.54/255.255.255.255/47/0)

   current_peer 10.0.200.54 port 4500

     PERMIT, flags={origin_is_acl,}

    #pkts encaps: 68, #pkts encrypt: 68, #pkts digest: 68 // данный счётчики должны расти

    #pkts decaps: 66, #pkts decrypt: 66, #pkts verify: 66 // данный счётчики должны расти

    #pkts compressed: 0, #pkts decompressed: 0

    #pkts not compressed: 0, #pkts compr. failed: 0

    #pkts not decompressed: 0, #pkts decompress failed: 0

    #send errors 0, #recv errors 0

 

     local crypto endpt.: 10.0.174.253, remote crypto endpt.: 10.0.200.54

     plaintext mtu 1442, path mtu 1500, ip mtu 1500, ip mtu idb GigabitEthernet0/0/0

     current outbound spi: 0x3F86120(66609440)

     PFS (Y/N): N, DH group: none

 

     inbound esp sas:

      spi: 0xBD3CDFCA(3174883274)

        transform: esp-256-aes esp-sha512-hmac ,

        in use settings ={Transport, }

        conn id: 2499, flow_id: ESG:499, sibling_flags FFFFFFFF80000008, crypto map: Virtual-Access1-head-0

        sa timing: remaining key lifetime (k/sec): (4607991/2947)

        IV size: 16 bytes

        replay detection support: Y

        Status: ACTIVE(ACTIVE)

 

     inbound ah sas:

 

     inbound pcp sas:

 

     outbound esp sas:

      spi: 0x3F86120(66609440)

        transform: esp-256-aes esp-sha512-hmac ,

        in use settings ={Transport, }

        conn id: 2500, flow_id: ESG:500, sibling_flags FFFFFFFF80000008, crypto map: Virtual-Access1-head-0

        sa timing: remaining key lifetime (k/sec): (4607993/2947)

        IV size: 16 bytes

        replay detection support: Y

        Status: ACTIVE(ACTIVE)

 

     outbound ah sas:

 

     outbound pcp sas:

Проверить ospf соседство можно командой show ip ospf neighbor

Пример

show ip ospf neighbor
Neighbor ID     Pri   State           Dead Time   Address         Interface

172.16.10.4       0   FULL/  -        00:00:32    172.16.10.5     Virtual-Access1

State должен быть в “FULL”, и в поле “интерфейс” у нас значение - “Virtual-Access1”. Это значит, что соседство установлено через Virtual-Access1 интерфейс.

Данной командой смотрим маршруты, пришедшие по ospf.

show ip route ospf
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP

       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area

       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2

       E1 - OSPF external type 1, E2 - OSPF external type 2

       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2

       ia - IS-IS inter area, * - candidate default, U - per-user static route

       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP

       a - application route

       + - replicated route, % - next hop override, p - overrides from PfR

 

Gateway of last resort is 10.0.131.1 to network 0.0.0.0

 

      10.0.0.0/8 is variably subnetted, 10 subnets, 3 masks

O        10.0.145.0/24 [110/1001] via 172.16.10.5, 11:11:06, Virtual-Access1

 В примере выше трафик в сеть назначения 10.0.145.0/24 пойдёт через Virtual-Access1 интерфейс.

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


  1. Blck-1
    12.12.2021 04:14

    И где же аутентификация по сертификатам?


    1. al-vis Автор
      12.12.2021 11:12

      Хотел, сюда вписать, но получается переполненная статья. Про сертификаты, если интересно, могу выложить отдельный пост


  1. NikaLapka
    12.12.2021 08:20
    +1

    Просто добавлю.. раз есть IPsec значит наверное по Интернету, но например, в нашем городе, области домашний Ростелеком и МТС блокируют GRE.

    И на форуме микротика пишут, что routeros 7.1 наконец-то стала stable, правда там же в комментариях юзеры делятся впечатлениями, что "OSPF на интерфейсах" до сих пор не работает.


    1. BjLomax
      12.12.2021 08:25

      GRE идёт поверх IPSec -- провайдеры его не увидят.


      1. al-vis Автор
        12.12.2021 11:14

        Точнее так - GRE инкапсулирован в IPsec, поэтому провайдеры его не увидят никак.


    1. yarkovoy
      12.12.2021 10:37

      На каком основании они блокируют GRE?


      1. AcidVenom
        12.12.2021 15:01

        Говорят, что не блокируют. Но по факту блокировка.


        1. net_racoon
          13.12.2021 09:59
          +1

          Попробуйте в РКН пожаловаться, блокировка законного трафика- это грубое нарушение лицензии. Других операторов за это штрафуют. Хотя РТК, конечно, это не "другой" оператор, но может прокатит...


          1. AcidVenom
            13.12.2021 10:01

            Спасибо за совет, но совершенно не актуально.


      1. NikaLapka
        12.12.2021 18:16
        +1

        А им пофигу. Ещё они могут предоставляя услугу "статический ip адрес" и блокировать 80 и 443 порты, с целью заботы о пользователях.. *минутка занудства* видимо именно по этому звоня на 8-800-***-0890, мне радостно сообщают о номере моего договора, суммы,.. хотя вроде как я вообще не их клиент o.O.