Доброго времени суток. Сегодня хотелось бы рассказать о том, что не давало нам жить, взрывало нам
Mikrotik сама по себе неплохая железка, с низкой стоимостью, кучей возможностью, но к сожалению, не без недостатков.
У нас следующая схема сети:
ROU1 — Cisco c3845
ROU2 — Cisco c3845
МТ1 — Mikrotik 1100Ahx2
МТ2 — Mikrotik 1100Ahx2
c3550 — Cisco c3550
GW68 — MikroTik RB751U-2HnD
GW69 — MikroTik RB751U-2HnD
На ROU1 и ROU2 у нас туннели до MT1 и до MT2 (IPSec пропущу), заведен процесс OSPF для backbone. Отдается подсеть 10.0.0.0/19:
interface Tunnel100641
description # XXX_IRK64_YYY #
ip address 172.20.64.1 255.255.255.252
ip access-group DMZ_IN in
ip access-group DMZ_OUT out
ip mtu 1450
ip ospf network point-to-point
ip ospf cost 10
ip ospf mtu-ignore
ip ospf 1 area 0.0.0.0
tunnel source 194.x.x.x
tunnel mode ipip
tunnel destination 195.x.x.x
router ospf 1
router-id 255.255.255.255
redistribute ospf 100 metric-type 1 subnets route-map OSPF_100_to_BB
network 172.20.64.0 0.0.0.3 area 0.0.0.0
#ROU2
interface Tunnel100642
description # XXX_IRK64_YYY#
ip address 172.20.64.5 255.255.255.252
ip access-group DMZ_IN in
ip access-group DMZ_OUT out
ip mtu 1450
ip ospf network point-to-point
ip ospf cost 40
ip ospf mtu-ignore
ip ospf 1 area 0.0.0.0
tunnel source 109.x.x.x
tunnel mode ipip
tunnel destination 85.x.x.x
router ospf 1
router-id 255.255.255.254
redistribute ospf 100 metric-type 1 subnets route-map OSPF_100_to_BB
network 172.20.64.4 0.0.0.3 area 0.0.0.0
На MT1 и MT2 адреса туннелей соответственно 172.20.64.2 и 172.20.64.6. Area backbone там уже есть по умолчанию.
#Создадим туннель
/interface ipip add comment=YYY_VL03_ROU1 disabled=no local-address=195.x.x.x mtu=1450 name=ipip_yyy_vl03_rou1 remote-address=194.x.x.x
#Повесим на него адрес
/ip address add address=172.20.64.2/30 comment=YYY_VL03_XXX interface=ipip_yyy_vl03_rou1
#Поправим instance, добавив фильтры и id
/routing ospf instance set [ find default=yes ] in-filter=ospf-default-in out-filter=ospf-default-out redistribute-other-ospf=as-type-1 router-id=30.0.64.1
#Добавим подсеть в area backbone
/routing ospf network add area=backbone comment=«Backbone Network VL» network=172.20.64.0/30
#Сделаем фильтры
/routing filter add action=accept chain=ospf-default-out prefix=10.0.64.0/19
/routing filter add action=accept chain=ospf-default-out prefix=172.20.64.0/19
/routing filter add action=discard chain=ospf-default-out
/routing filter add action=accept chain=ospf-default-in prefix=10.0.0.0/19
/routing filter add action=accept chain=ospf-default-in prefix=172.20.0.0/19
/routing filter add action=discard chain=ospf-default-in
#Создадим интефейс OSPF
/routing ospf interface add authentication-key=0 interface=ipip_yyy_vl03_rou1 network-type=point-to-point priority=255
#MT2
#Создадим туннель
/interface ipip add comment=YYY_VL03_ROU2 disabled=no local-address=85.x.x.x mtu=1450 name=ipip_yyy_vl03_rou2 remote-address=109.x.x.x
#Повесим на него адрес
/ip address add address=172.20.64.6/30 comment=YYY_VL03_ROU2 interface=ipip_yyy_vl03_rou2
#Поправим instance, добавив фильтры и id
/routing ospf instance set [ find default=yes ] in-filter=ospf-default-in out-filter=ospf-default-out redistribute-other-ospf=as-type-1 router-id=30.0.64.2
#Добавим подсеть в area backbone
/routing ospf network add area=backbone comment=«Backbone Network VL» network=172.20.64.4/30
#Сделаем фильтры
/routing filter add action=accept chain=ospf-default-out prefix=10.0.64.0/19
/routing filter add action=accept chain=ospf-default-out prefix=172.20.64.0/19
/routing filter add action=discard chain=ospf-default-out
/routing filter add action=accept chain=ospf-default-in prefix=10.0.0.0/19
/routing filter add action=accept chain=ospf-default-in prefix=172.20.0.0/19
/routing filter add action=discard chain=ospf-default-in
#Создадим интефейс OSPF
/routing ospf interface add authentication-key=0 cost=40 interface=ipip_yyy_vl03_rou2 network-type=point-to-point priority=200
Но у нас должна быть еще связь между МТ1 и МТ2 напрямую.
Для этого у нас используется новая area IRK. Cisco c3550 у нас не только свитч, он у нас корневое устройство, на нем заведены все вланы, через него проброшены провайдеры, на нем создан vrf и т.д. (если будет интересно, то потом опишу всю организацию сети)
Создадим на c3550 area IRK и два vlan для соединения с MT1 и MT2. Area IRK — это главная область РУ — регионального узла, в которой работают все подключенные к РУ роутеры.
description # MGM 1 VLAN #
ip address 172.20.64.98 255.255.255.252
ip policy route-map test
ip ospf cost 10
ip ospf hello-interval 5
ip ospf dead-interval 10
ip ospf priority 100
!
interface Vlan67
description # MGM 2 VLAN #
ip address 172.20.64.102 255.255.255.252
ip ospf cost 10
ip ospf hello-interval 5
ip ospf dead-interval 10
ip ospf priority 50
router ospf 100
router-id 10.0.64.0
log-adjacency-changes
redistribute connected metric-type 1 subnets
redistribute static metric-type 1 subnets
network 172.20.64.96 0.0.0.3 area 10.0.64.0
network 172.20.64.100 0.0.0.3 area 10.0.64.0
#Два нульроута
ip route 10.0.64.0 255.255.224.0 Null0 250
ip route 172.20.64.0 255.255.224.0 Null0 250
Теперь примем на МТ1 и МТ2 эти vlan, и заведем новый ospf instance и area, добавим линк между MT1 и МТ2 и навешаем адрес.
#Принимаем vlan
/interface vlan add interface=ether1 l2mtu=1594 name=vlan_66_mgm vlan-id=66
#Создаем area
/routing ospf area add area-id=10.0.64.0 instance=IRK name=IRK
#Создаем instance
/routing ospf instance add distribute-default=if-installed-as-type-1 name=IRK redistribute-other-ospf=as-type-1 redistribute-static=as-type-1 router-id=10.0.64.1
#Вешаем IP
/ip address add address=172.20.64.97/30 comment=MGM_Interface interface=vlan_66_mgm
/ip address add address=172.20.64.105/30 comment=MT-MT_Interface interface=ether2
#Добавляем подсети в area IRK
/routing ospf network add area=IRK network=172.20.64.96/30
/routing ospf network add area=IRK network=172.20.64.104/30
#Создаем ospf interface
/routing ospf interface add dead-interval=10s hello-interval=5s interface=vlan_66_mgm network-type=broadcast priority=255
#МТ2
#Принимаем vlan
/interface vlan add interface=ether1 l2mtu=1594 name=vlan_67_mgm vlan-id=67
#Создаем area
/routing ospf area add area-id=10.0.64.0 instance=IRK name=IRK
#Создаем instance
/routing ospf instance add distribute-default=if-installed-as-type-1 name=IRK redistribute-other-ospf=as-type-1 redistribute-static=as-type-1 router-id=10.0.64.2
#Вешаем IP
/ip address add address=172.20.64.101/30 comment=MGM_Interface interface=vlan_67_mgm
/ip address add address=172.20.64.106/30 comment=MT-MT_Interface interface=ether2
#Добавляем подсети в area IRK
/routing ospf network add area=IRK network=172.20.64.100/30
/routing ospf network add area=IRK network=172.20.64.104/30
#Создаем ospf interface
/routing ospf interface add dead-interval=10s hello-interval=5s interface=vlan_67_mgm network-type=broadcast priority=200
Вроде ничего не забыл, что мы получили:
1. У нас есть два туннеля до центральных роутеров, с каждого микротика по одному.
2. Cost 10 и 40 соответственно. То есть при живом основном роутере (провайдере) MT1, роут из backbone 10.0.0.0/19 мы получим через туннель до ROU1, при мертвом через туннель до ROU2
3. У нас есть прямой линк между MT1 и MT2, для того чтобы не гонять трафик всегда через c3550.
Настроили, поставили. Все работает:
#MT1
ADo dst-address=10.0.0.0/19 gateway=172.20.64.1 gateway-status=172.20.64.1 reachable via ipip_yyy_vl03_rou1 distance=110 scope=20 target-scope=10 ospf-metric=40 ospf-type=external-type-1
#MT2
ADo dst-address=10.0.0.0/19 gateway=172.20.64.105 gateway-status=172.20.64.105 reachable via ether2 distance=110 scope=20 target-scope=10 ospf-metric=50 ospf-type=external-type-1
На МТ2 роут до 10ки через ether2, как в принципе и должно быть.
Проблема №1:
Однажды, на МТ1 умирает провайдер. Подсеть 10.0.0.0/19 становится доступна через туннель до ROU2, все как должно быть:
#MT2
ADo dst-address=10.0.0.0/19 gateway=172.20.64.5 gateway-status=172.20.64.5 reachable via ipip_yyy_vl03_rou2 distance=110 scope=20 target-scope=10 ospf-metric=70 ospf-type=external-type-1
НО! Как только оживает провайдер на МТ1, мы видим следующее:
#MT1
ADo dst-address=10.0.0.0/19 gateway=172.20.64.1 gateway-status=172.20.64.1 reachable via ipip_yyy_vl03_rou1 distance=110 scope=20 target-scope=10 ospf-metric=40 ospf-type=external-type-1
#MT2
ADo dst-address=10.0.0.0/19 gateway=172.20.64.5 gateway-status=172.20.64.5 reachable via ipip_yyy_vl03_rou2 distance=110 scope=20 target-scope=10 ospf-metric=70 ospf-type=external-type-1
Видим, что каждый роутер глядит в свой туннель. Что нас совсем не устраивает. Перезагружаем МТ2. Он начинает получать роут через ether2 от МТ1. Непорядок.
В качестве временного решения, мы завели на ROU1 и ROU2 все area из региональных узлов. Все работало очень красиво, пока однажды наши циски не сказали: too many routing processes
И мы опять вернулись к проблеме с backbone. Долгие битвы с саппортом ни к чему не приводят, но в один прекрасный момент получаем ответ, что микротик при перераспределение роутов между эриями (в данном случае роут из backbone перераспределяется через IRK),
начинает некорректно инсталлировать роуты. И мы получаем картину, что каждый роутер смотрит в свой туннель.
Тогда решение приходит само:
Добавляем IP на ether2, вносим новую подсеть в backbone.
#MT1
/ip address add address=172.20.64.121/30 comment=«MT-MT BB» interface=ether2
/routing ospf network add area=backbone network=172.20.64.120/30
#Запрещаем перераспределять роут через IRK
/routing filter add action=discard chain=ospf-in prefix=10.0.0.0/19
#MT2
/ip address add address=172.20.64.122/30 comment=«MT-MT BB» interface=ether2
/routing ospf network add area=backbone network=172.20.64.120/30
#Запрещаем перераспределять роут через IRK
/routing filter add action=discard chain=ospf-in prefix=10.0.0.0/19
И получаем, что роут 10.0.0.0/19 не перераспределяется через чужую эрию, а принимается в пределах одной. Фуф, одну проблему победили.
Сейчас для рассмотрения второй проблемы, приведем конфиг GW, конфиг на МТ1 и МТ2 я опущу, там нет ничего сложного.
На рисунке у нас есть GW68 и GW69, я приведу настройки только для одного и в сокращении:
На Mikrotik 751:
ether2 — резервный провайдер
ether3 — основной провайдер
ether5 — LAN
Возникнет вопрос, почему не ether2 основной провайдер. Сделали сначала ether1 — основной провайдер, но оказалось, что порт какой-то полусофтовый и производительность IPSec была совсем никакая, просто перенесли на ether3, чтоб сильно не править конфиг.
/interface ipip add comment=X_GW64_X disabled=no local-address=195.x.x.x mtu=1440 name=ipip_x_gw64_x remote-address=195.x.x.x
/interface ipip add comment=Y_GW64_Y disabled=no local-address=87.x.x.x mtu=1440 name=ipip_y_gw64_y remote-address=85.x.x.x
#Создадим bridge, объединим wifi ap и ether5
/interface bridge add l2mtu=1594 name=bridge_private
/interface bridge port add bridge=bridge_private interface=ether5
/interface bridge port add bridge=bridge_private interface=wlan_private
#Создадим DHCP
/ip pool add name=10.0.68.0 ranges=10.0.68.64-10.0.68.160
/ip dhcp-server add address-pool=10.0.68.0 disabled=no interface=bridge_private name=10.0.68.0
/ip dhcp-server network add address=10.0.68.0/24 dns-server=10.0.64.14,10.0.3.6 domain=partner.ru gateway=10.0.68.1
#Повесим IP
/ip address add address=10.0.68.1/24 comment=LAN interface=bridge_private
/ip address add address=172.20.68.2/30 comment=X_GW64_X interface=ipip_x_gw64_x
/ip address add address=172.20.68.6/30 comment=Y_GW64_Y interface=ipip_y_gw64_y
/ip address add address=195.x.x.x/30 comment=X interface=ether3
/ip address add address=87.x.x.x/30 comment=Y interface=ether2
#Добавим роуты до адресов МТ1 и МТ2 через шлюзы провайдеров
/ip route add check-gateway=ping comment=Route_over_Y_to_Y distance=1 dst-address=85.x.x.x/32 gateway=1.1.1.1
/ip route add check-gateway=ping comment=Route_over_X_to_X distance=1 dst-address=195.x.x.x/32 gateway=2.2.2.2
#Добавим area и instance, network и ospf interface
/routing ospf instance set [ find default=yes ] disabled=yes
/routing ospf instance add name=IRK router-id=10.0.68.1
/routing ospf area add area-id=10.0.64.0 instance=IRK name=IRK
/routing ospf network add area=IRK network=172.20.68.0/30
/routing ospf network add area=IRK network=172.20.68.4/30
/routing ospf network add area=IRK network=10.0.68.0/24
/routing ospf interface add authentication=md5 authentication-key=0 interface=ipip_x_gw64_x network-type=point-to-point priority=0
/routing ospf interface add authentication=md5 authentication-key=0 cost=40 interface=ipip_y_gw64_y network-type=point-to-point priority=0
/routing ospf interface add authentication=md5 authentication-key=0 interface=bridge_private network-type=broadcast passive=yes
Как все работает:
GW68 устанавливает два туннеля до МТ1 и до МТ2, каждый через своего провайдера. На микротике нет дефолта, адреса МТ1 и МТ2 прописаны статиками.
На туннеле до MT1 стоит cost 10, на туннеле до МT2 cost 40. Как только туннель оживает, мы получаем дефолт и все роуты с МТ1 через OSPF. Весь трафик завернут на МТ1. Как только основной провайдер отваливается,
по истечению таймера OSPF, становятся активными роуты через туннель до МТ2.
Проблема 2:
При живом основном канале, мы видим в логе GW68
20:12:26 route,ospf,info Database Description packet has different master status flag
20:12:26 route,ospf,info new master flag=false
В этот момент у нас трафик сам по себе начинает бежать через туннель до MT2. Туннель до МТ1 живой, а трафик бежит через туннель до МТ2. А так как на магазинах обычно резерв помегабайтный,
то мы получаем высасывание денег без каких-либо на то причин.
Чтобы вернуть все в туннель до МТ1 необходимо было на МТ1 выключить и опять включить туннель до GW68. Причем эта проблема возникала только в некоторых городах, и не на всех роутерах.
На форуме микротика, в тех. поддержке никто нам не помог. Однажды мой коллега, пытаясь поднять туннель MT1-Juniper SRX-650, вооружился кучей алкоголя, сниффером и дебаггером:)
И отлаживая IPSec, наткнулся на ошибки авторизации OSPF микротика. Мы отключили авторизацию на интерфейсах OSPF и вуаля, проблема сама собой исчезла.
Как там проходит авторизация, где сбой, сейчас не помнит ни он, ни я. Но вопрос решен. Почему где-то работало отлично и с авторизацией, я не могу сказать.
С микротиком можно только гадать на кофейной гуще, так как каждый ответ саппорта — новый вопрос, каждая новая прошивка дарит новую проблему:)
Автор: xyyx