В данной документации рассматривается пример рабочей конфигурации соединения роутера CISCO с роутером Mikrotik через GRE туннель с IPSec шифрованием в транспортном режиме. В построении IPsec будет использоваться IKEv2 и аутентификация по PSK. Внутри туннеля будет поднят протокол динамической маршрутизации OSPF для обмена маршрутами о сетях, которые находятся за пирами.
Оборудование и исходные данные:
Mikrotik hEX, RouterOS - 7.1beta5
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)
NikaLapka
12.12.2021 08:20+1Просто добавлю.. раз есть IPsec значит наверное по Интернету, но например, в нашем городе, области домашний Ростелеком и МТС блокируют GRE.
И на форуме микротика пишут, что routeros 7.1 наконец-то стала stable, правда там же в комментариях юзеры делятся впечатлениями, что "OSPF на интерфейсах" до сих пор не работает.
yarkovoy
12.12.2021 10:37На каком основании они блокируют GRE?
AcidVenom
12.12.2021 15:01Говорят, что не блокируют. Но по факту блокировка.
net_racoon
13.12.2021 09:59+1Попробуйте в РКН пожаловаться, блокировка законного трафика- это грубое нарушение лицензии. Других операторов за это штрафуют. Хотя РТК, конечно, это не "другой" оператор, но может прокатит...
NikaLapka
12.12.2021 18:16+1А им пофигу. Ещё они могут предоставляя услугу "статический ip адрес" и блокировать 80 и 443 порты, с целью заботы о пользователях.. *минутка занудства* видимо именно по этому звоня на 8-800-***-0890, мне радостно сообщают о номере моего договора, суммы,.. хотя вроде как я вообще не их клиент o.O.
Blck-1
И где же аутентификация по сертификатам?
al-vis Автор
Хотел, сюда вписать, но получается переполненная статья. Про сертификаты, если интересно, могу выложить отдельный пост