Архив метки: Mikrotik

Использование префикса /31 или маски 255.255.255.254 для соединения точка-точка

В связи с постоянно растущим давлением по сохранению пространства IP-адресов на Интернет, могут быть внедрены в практику для повышения эффективности нумерации. Смысл заключается в сокращении вдвое использование адресного диапазона, назначаемого для соединений точка-точка.

В большинстве кейсов пронумерованные подсети Интернета не используют больше, чем 30-битную маску подсетей (/30). Для которой требуется четыре адреса на стык – два адреса хоста, один адрес сети и один широковещательный. Это плохо для соединений точка-точка, поскольку имеют только два полезных адреса из четырех.

Но что мешает нам использовать префикс /31? Давайте попробуем в этом разобраться.

Рассмотрим использование префикса /30 и /31:

172.16.0.1/30



Адрес: 172.16.0.1

Bitmask: 30

Netmask: 255.255.255.252

Network: 172.16.0.0

Broadcast: 172.16.0.3

Hostmin: 172.16.0.1

Hostmax: 172.16.0.2

/30 Маска разрешает использовать 4 адреса. Первый будет адресом сети, последний бродкастом, оставшихся два полезные, используются для соединения.

172.16.0.1/31



Адрес: 172.16.0.1

Bitmask: 31

Netmask: 255.255.255.254

Network: 172.16.0.0

Broadcast: 172.16.0.1

Hostmin: 172.16.0.0

Hostmax: 172.16.0.1

/31 Маска разрешает использовать 2 адреса. Первый будет адресом сети, последний бродкастовым, ну а для соединения узлов используем все те же адреса.

Ограничения при использовании префикса /31:

1. Перестают работать протоколы использующие L3 brodcast.

На самом деле на текущий момент протоколов использующих в своей работе L3 brodcast практически не осталось. Основные актуальные на сегодняшний день протоколы такие как OSPF, IS-IS, EIGRP, BGP используют в работе multicast или unicast адреса.

Вообще это ограничение можно даже записать в плюс, потому что повышается устойчивость к DoS атакам основанных на рассылке бродкаст трафика.

2. Не все устройства поддерживают префиксы /31

На Juniper и Cisco вы можете смело использовать маску /31, хотя cisco при этом выдает предупреждение (% Warning: use /31 mask on non point-to-point interface cautiously).

А вот ZyXEL уже не дает выбрать маску /31.

Mikrotik официально так же не поддерживает /31, но на практике иногда получается использовать /31 с некоторыми ухищрениями.

В итоге накладываются дополнительные ограничения на эксплуатацию сети, использования оборудования разных производителей и даже на использование оборудования одного вендора но с разными версиями прошивок.

Если вас не пугают приведенные ограничения то смело экономьте адреса используя префикс /30

Использование префикса /31 детально описано в RFC 3021 Using 31-Bit Prefixes on IPv4 Point-to-Point Links.



2021-03-12T11:34:24
other

MikroTik – Firewall защита доступа

К каким результатам мы пришли:
У нас встает вопрос безопасности нашей локальной сети, ведь китайские боты не спят и постоянно сканируют доступное сетевое пространство на наличие дыр и уязвимостей.
Имея статический IP мы подвержены риску быть взломанными. Т.к. наш статический IP доступен в интернете, он может подвергаться различного рода «атакам из вне».
Поэтому нам нужно сделать так, чтобы только мы могли подключаться к нашим роутерам и другим сервисам в локальной сети.
В принципе жесткую защиту мы делать не будем. У нас ведь не корпоративная сеть, а домашняя. Данной статьей мы попробуем закрыть самые распространенные пробелы в защите нашего роутера и локальной сети в общем. Не будем допускать банальных ошибок.




Организацию удаленного подключения мы рассмотрим в Седьмой статье т.к. эта статья получилась достаточно большой по наполнению.
Ну что, поехали…




За все операции обработки трафика в сетевых устройствах отвечает так называемый “Межсетевой экран” (Eng – Firewall)
Именно он определяет куда отправлять тот или иной пакет, как обрабатывать соединения и многое, многое другое…
Чтобы охватить весь спектр работы Firewall-а не хватит не только одной статьи, но и 10 или 20 статей точно. Настолько велики его возможности и вариации применения.
Кстати это касается не только MikroTik RouterOS, а принципа фильтрации трафика в общем в операционных системах (даже на Windows)!




Официальные данные на MikroTik Wiki: IP/Firewall/Filter [ENG]




Давайте взглянем, где находится этот самый Межсетевой экран в наших устройствах(ведь RouterOS одинакова на всем оборудовании MikroTik):
Он находится по пути IP -> Firewall




Путь до межсетевого экрана




Окно для ввода правил фильтрации




Кратко пробежимся по основным вкладкам Firewall:
1 – Filter Rules – тут основные разрешающие и блокирующие правила.
2 – NAT – тут формируются перенаправления трафика.
3 – Mangle – тут происходит маркировка соединений и пакетов, отлов определенного вида трафика для дальнейшей его обработки.
Остальные вкладки пока рассматривать не будем, они нам не пригодятся.
4 – Raw – тут можно правилами отловить паразитный трафик и тем самым снизить нагрузку на CPU. Полезно для смягчения DOS атак.
5 – Service Ports – Для некоторых сетевых протоколов требуется прямое двустороннее соединение между конечными точками. Это не всегда возможно, поскольку трансляция сетевых адресов широко используется для подключения клиентов к сети. Это подменю позволяет настроить «помощники отслеживания соединений» для вышеупомянутых протоколов. Эти «помощники» используются для обеспечения правильного обхода NAT.
6 – Connections – тут отображаются все текущие соединения проходящие через маршрутизатор.
7 – Address List – тут списки адресов брандмауэра позволяют пользователю создавать списки IP-адресов, сгруппированных под общим именем. Затем фильтры брандмауэра, Mangle и NAT могут использовать эти списки адресов для сопоставления пакетов с ними.
8 – Layer7 Protocols – тут можно создавать шаблоны для поиска в потоках ICMP / TCP / UDP. L7 собирает первые 10 пакетов соединения или первые 2KB соединения и ищет шаблон в собранных данных.




Часть терминов может показаться непонятной, но в этом нет ничего страшного, мы будем работать только с первым пунктом Filter Rules. Хотя в нем тоже, очень много вариантов создания правил.
Сразу нужно оговориться, что полной безопасности Вам никто не обеспечит и это важно понимать! Но боятся не стоит, мы ведь не популярная корпорация за которой ведется промышленный шпионаж, нам достаточно превентивных мер ))))




Конфигурация по умолчанию:




На MikroTik Wiki представлена базовая конфигурация в таком виде: Basic universal firewall script [ENG]




Вы можете использовать её или нет )
Я делаю несколько по своему, возможно что-то тут не идеально, и Вы обладая большим опытом подскажите мне в комментариях, как сделать лучше ))




1. Перейдем к созданию правил в Firewall Filter Rules




Отступление: А ты засейвился? (Кнопка Safe Mode)




Все правила добавленные в таблицу применяются последовательно, сверху вниз. Будьте осторожны не добавляйте сразу правило, блокирующее все что только можно. Вы можете потерять доступ к роутеру и тогда придется его сбрасывать и перенастраивать заново.
Я рекомендую использовать магическую кнопку Safe Mode для таких целей. Если эта кнопка нажата и Вас отключит от роутера, настройки вернутся к моменту нажатия на эту кнопку. Очень полезная вещь, особенно если Вы работаете удаленно.










Правила добавляются по уже знакомой нам кнопке плюс…







1.1. Перво наперво нам нужно разрешить уже установленные(Established) и связанные(Related) соединения и сбросить некорректные(Invalid) соединения для проходящих (маршрутизируемых) пакетов в цепочке Forward и предназначенных локальной системе в цепочке Input.
Так мы снизим нагрузку на маршрутизатор обработав эти данные сразу.
Зачем повторно обрабатывать эти соединения если они уже и так установлены или неизвестны. Экономим ресурсы процессора. Т.е. эти правила будут в самом начале нашей таблицы.




Добавление правил 1.1. через WinBox (Изображения)




Правило 0




Правило 0




Правило 1




Правило 1




Правило 2




Правило 2




Правило 3




Правило 3







Консольно:




/ip firewall filter
add action=accept chain=forward comment="1.1. Forward and Input Established and Related connections" connection-state=established,related
add action=drop chain=forward connection-state=invalid
add action=accept chain=input connection-state=established,related
add action=drop chain=input connection-state=invalid




Дополнительно: Защита локальной сети от атак из публичного интернета
Очень часто люди используют настройки по умолчанию на своих маршрутизаторах. Это также означает, что можно угадать, какой локальный адрес используется за маршрутизатором. Обычно это 192.168.88.0/24 для устройств, работающих на RouterOS. Это означает, что в общедоступной сети злоумышленник может создать простой маршрут, который говорит, что 192.168.88.0/24 находится за вашим общедоступным IP-адресом.
Таким образом злоумышленник может атаковать ваши локальные сетевые устройства.
Чтобы защитить вашу локальную подсеть от этих атак, можно использовать очень простое правило фильтра брандмауэра. Это правило отбрасывает все пакеты, которые предназначены для локальной сети, но не являются NAT




/ip firewall filter
add action=drop chain=forward connection-nat-state=!dstnat connection-state=new in-interface-list=Internet




1.2. Далее необходимо обеспечить защиту. Продолжим мы с Лимита входящих соединений.




Это даст нам некоторую защиту от DDoS атак.
Далее, большинство правил будут включать в себя параметр Списков интерфейсов In Interface List. Это замена для параметра In Interface.
Позволяет группировать интерфейсы и применять правила Firewall обращаясь сразу к нескольким интерфейсам.
Более подробно про данные списки можно почитать в отдельной статье: MikroTik RouterOS – Списки интерфейсов “Interface List”
Чтобы дальнейшие правила отработали корректно Вы должны внести WAN интерфейс в список Internet, а все локальные интерфейсы в список Local.
Сами списки также нужно создать. Имена списков Вы можете задавать свои не обязательно, как у меня.
Вся информация по тому, как это делать по ссылке выше в статье MikroTik RouterOS – Списки интерфейсов “Interface List”




Добавление правил 1.2. через WinBox (Изображения)




Правило 4




Правило 4




Правило 4




Правило 5




Правило 5




Правило 5




Правило 5







Консольно:




/ip firewall filter
add action=add-src-to-address-list address-list=ddos-blacklist address-list-timeout=1d chain=input comment="1.2. DDoS Protect - Connection Limit" connection-limit=100,32 in-interface-list=Internet protocol=tcp
add action=tarpit chain=input connection-limit=3,32 protocol=tcp src-address-list=ddos-blacklist




1.3. Следом идет защита от SYN флуда.
Что это такое можно почитать тут: https://ru.wikipedia.org/wiki/SYN-флуд или в более профильных изданиях.
Защищать мы будем, как проходящий трафик, так и входящий трафик. Путем создания отдельной цепочки SYN-Protect




Добавление правил 1.3. через WinBox (Изображения)




Правило 6




Правило 6




Правило 6




Правило 7




Правило 7




Правило 7




Правило 8




Правило 8




Правило 8




Правило 8




Правило 9




Правило 9




Правило 9







Консольно:




/ip firewall filter
add action=jump chain=forward comment="1.3. DDoS Protect - SYN Flood" connection-state=new jump-target=SYN-Protect protocol=tcp tcp-flags=syn
add action=jump chain=input connection-state=new in-interface-list=Internet jump-target=SYN-Protect protocol=tcp tcp-flags=syn
add action=return chain=SYN-Protect connection-state=new limit=200,5:packet protocol=tcp tcp-flags=syn
add action=drop chain=SYN-Protect connection-state=new protocol=tcp tcp-flags=syn




1.4. Защита от сканеров портов (PSD – Port Scan Detection).
На счет данного правила есть разные мнения, кто-то считает, что оно не нужно, кто-то, что нужно.
Я же предпочитаю немного себя подстраховать. Тем более, что благодаря данному правилу Address Lists заполняется какими-то забугорными IP адресами )




Добавление правил 1.4. через WinBox (Изображения)




Правило 10




Правило 10




Правило 10




Правило 11




Правило 11




Правило 11







Консольно:




/ip firewall filter
add action=drop chain=input comment="1.4. Protected - Ports Scanners" src-address-list="Port Scanners"
add action=add-src-to-address-list address-list="Port Scanners" address-list-timeout=none-dynamic chain=input in-interface-list=Internet protocol=tcp psd=21,3s,3,1




1.5. Защита WinBox порта от перебора.
Логика обработки тут следующая.
1. Когда мы подключаемся к роутеру на порт 8291, то мы имеет состояние соединения new, правило добавляет наш IP в список уровня 1
2. Если мы не авторизовались и отключились, а после снова пытаемся подключиться, то мы опять будем иметь состояние соединения new. При этом наш IP адрес уже будет в Списке 1
Соответственно наш IP попадет в список уровня 2 и т.д до тех пор пока нас не заблокирует Правило 13, и уже после этого Правило 12 не будет нам давать возможность новых подключений к роутеру по порту 8291.
3. А если мы авторизовались, то наше соединение перейдет из состояния new в состояние established и обработка соединения уже будет вестись самым верхним правилом 2, которое нам все разрешает.
По сути у злоумышленника может быть всего четыре возможности Авторизоваться у нас на роутере через порт WinBox




Добавление правил 1.5. через WinBox (Изображения)




Правило 12




Правило 12




Правило 12




Правило 13




Правило 13




Правило 13




Правило 14




Правило 14




Правило 14




Правило 15




Правило 15




Правило 15




Правило 16




Правило 16




Правило 17




Правило 17







Консольно:




/ip firewall filter
add action=drop chain=input comment="1.5. Protected - WinBox Access" src-address-list="Black List Winbox"
add action=add-src-to-address-list address-list="Black List Winbox" address-list-timeout=none-dynamic chain=input connection-state=new dst-port=8291 in-interface-list=Internet log=yes log-prefix="BLACK WINBOX" protocol=tcp src-address-list="Winbox Stage 3"
add action=add-src-to-address-list address-list="Winbox Stage 3" address-list-timeout=1m chain=input connection-state=new dst-port=8291 in-interface-list=Internet protocol=tcp src-address-list="Winbox Stage 2"
add action=add-src-to-address-list address-list="Winbox Stage 2" address-list-timeout=1m chain=input connection-state=new dst-port=8291 in-interface-list=Internet protocol=tcp src-address-list="Winbox Stage 1"
add action=add-src-to-address-list address-list="Winbox Stage 1" address-list-timeout=1m chain=input connection-state=new dst-port=8291 in-interface-list=Internet protocol=tcp
add action=accept chain=input dst-port=8291 in-interface-list=Internet protocol=tcp




1.6. Защита OpenVPN порта от перебора.
Данная защита делается абсолютно аналогично пункту 1.5.
Единственным отличием будут названия OpenVPN вместо WinBox и входящий TCP порт 1194
Поэтому просто повторяем действия
Консольно:




/ip firewall filter
add action=drop chain=input comment="1.6. Protected - OpenVPN Connections" src-address-list="Black List OpenVPN"
add action=add-src-to-address-list address-list="Black List OpenVPN" address-list-timeout=none-dynamic chain=input connection-state=new dst-port=1194 in-interface-list=Internet log=yes log-prefix="BLACK OVPN" protocol=tcp src-address-list="OpenVPN Stage 3"
add action=add-src-to-address-list address-list="OpenVPN Stage 3" address-list-timeout=1m chain=input connection-state=new dst-port=1194 in-interface-list=Internet protocol=tcp src-address-list="OpenVPN Stage 2"
add action=add-src-to-address-list address-list="OpenVPN Stage 2" address-list-timeout=1m chain=input connection-state=new dst-port=1194 in-interface-list=Internet protocol=tcp src-address-list="OpenVPN Stage 1"
add action=add-src-to-address-list address-list="OpenVPN Stage 1" address-list-timeout=1m chain=input connection-state=new dst-port=1194 in-interface-list=Internet protocol=tcp
add action=accept chain=input dst-port=1194 in-interface-list=Internet protocol=tcp




1.7. Разрешающее правило для прохождения любого трафика по VPN туннелям.




Добавление правил 1.7. через WinBox (Изображения)




Правило 24




Правило 24







Консольно:




/ip firewall filter
add action=accept chain=input comment="1.7. Access OpenVPN Tunnel Data" in-interface-list=VPN




1.8. Разрешающее правило для прохождения только нормальных PING запросов.




Добавление правил 1.8. через WinBox (Изображения)




Правило 25




Правило 25




Правило 25







Консольно:




/ip firewall filter
add action=accept chain=input comment="1.8. Access Normal Ping" in-interface-list=Internet limit=50/5s,2:packet protocol=icmp




1.9. Запрещающее правило
Нормально закрытый Firewall должен обязательно обладать таким правилом. Иначе все бессмысленно.
Выше мы обрабатываем соединения и разрешаем только то, что нам необходимо. Все остальное блокируем.
Это намного правильней, чем Разрешить все и блокировать только нужное Вам. А всего, что нужно заблокировать Вы наверняка не знаете.







Консольно:




/ip firewall filter
add action=drop chain=input comment="1.9. Drop All Other" in-interface-list=Internet




 
 
2. Для ленивых
Если Вы дочитали до конца, значит у Вас пытливый ум и Вы хорошо представляете с чем столкнулись. Вы молодец.
Еще раз хотелось бы обозначить, что данная конфигурация не является идеальной. Я просто старался показать некоторые способы фильтрации трафика. Вам решать, использовать это у себя простым копипастом или подумать и сделать лучше! Но я уверен, что моё решение тоже не плохое =)




Все вышеизложенное в едином виде:







Консольно:




/ip firewall filter
add action=accept chain=forward comment="1.1. Forward and Input Established and Related connections" connection-state=established,related
add action=drop chain=forward connection-state=invalid
add action=drop chain=forward connection-nat-state=!dstnat connection-state=new in-interface-list=Internet
add action=accept chain=input connection-state=established,related
add action=drop chain=input connection-state=invalid
add action=add-src-to-address-list address-list=ddos-blacklist address-list-timeout=1d chain=input comment="1.2. DDoS Protect - Connection Limit" connection-limit=100,32 in-interface-list=Internet protocol=tcp
add action=tarpit chain=input connection-limit=3,32 protocol=tcp src-address-list=ddos-blacklist
add action=jump chain=forward comment="1.3. DDoS Protect - SYN Flood" connection-state=new jump-target=SYN-Protect protocol=tcp tcp-flags=syn
add action=jump chain=input connection-state=new in-interface-list=Internet jump-target=SYN-Protect protocol=tcp tcp-flags=syn
add action=return chain=SYN-Protect connection-state=new limit=200,5:packet protocol=tcp tcp-flags=syn
add action=drop chain=SYN-Protect connection-state=new protocol=tcp tcp-flags=syn
add action=drop chain=input comment="1.4. Protected - Ports Scanners" src-address-list="Port Scanners"
add action=add-src-to-address-list address-list="Port Scanners" address-list-timeout=none-dynamic chain=input in-interface-list=Internet protocol=tcp psd=21,3s,3,1
add action=drop chain=input comment="1.5. Protected - WinBox Access" src-address-list="Black List Winbox"
add action=add-src-to-address-list address-list="Black List Winbox" address-list-timeout=none-dynamic chain=input connection-state=new dst-port=8291 in-interface-list=Internet log=yes log-prefix="BLACK WINBOX" protocol=tcp src-address-list="Winbox Stage 3"
add action=add-src-to-address-list address-list="Winbox Stage 3" address-list-timeout=1m chain=input connection-state=new dst-port=8291 in-interface-list=Internet protocol=tcp src-address-list="Winbox Stage 2"
add action=add-src-to-address-list address-list="Winbox Stage 2" address-list-timeout=1m chain=input connection-state=new dst-port=8291 in-interface-list=Internet protocol=tcp src-address-list="Winbox Stage 1"
add action=add-src-to-address-list address-list="Winbox Stage 1" address-list-timeout=1m chain=input connection-state=new dst-port=8291 in-interface-list=Internet protocol=tcp
add action=accept chain=input dst-port=8291 in-interface-list=Internet protocol=tcp
add action=drop chain=input comment="1.6. Protected - OpenVPN Connections" src-address-list="Black List OpenVPN"
add action=add-src-to-address-list address-list="Black List OpenVPN" address-list-timeout=none-dynamic chain=input connection-state=new dst-port=1194 in-interface-list=Internet log=yes log-prefix="BLACK OVPN" protocol=tcp src-address-list="OpenVPN Stage 3"
add action=add-src-to-address-list address-list="OpenVPN Stage 3" address-list-timeout=1m chain=input connection-state=new dst-port=1194 in-interface-list=Internet protocol=tcp src-address-list="OpenVPN Stage 2"
add action=add-src-to-address-list address-list="OpenVPN Stage 2" address-list-timeout=1m chain=input connection-state=new dst-port=1194 in-interface-list=Internet protocol=tcp src-address-list="OpenVPN Stage 1"
add action=add-src-to-address-list address-list="OpenVPN Stage 1" address-list-timeout=1m chain=input connection-state=new dst-port=1194 in-interface-list=Internet protocol=tcp
add action=accept chain=input dst-port=1194 in-interface-list=Internet protocol=tcp
add action=accept chain=input comment="1.7. Access OpenVPN Tunnel Data" in-interface-list=VPN
add action=accept chain=input comment="1.8. Access Normal Ping" in-interface-list=Internet limit=50/5s,2:packet protocol=icmp
add action=drop chain=input comment="1.9. Drop All Other" in-interface-list=Internet




Бонус:
Работая с Firewall на родительском hEx роутере, обнаружил большой объем заблокированного трафика.
Решил посмотреть, в чем дело, включил логирование в правилах и обнаружил интересную ситуацию.
Оказалось, что местный провайдер не закрыл широковещательный трафик службы имен NetBIOS Name Service – UDP порт 137 (Остальные порты и информация: 
https://ru.wikipedia.org/wiki/NetBIOS)
И какой-то “Сосед” воткнул интернет кабель в простой ПК с Windows, тем самым создав тот самый паразитный трафик. Такие запросы с одного ПК могут занимать около 30 кбит/сек на вашем WAN порту.
Думаю можно себе представить если таких ПК в сети будет 100-150. Написали провайдеру, а пока он латает свои дыры, добавил правило блокировки. Только не в Firewall Filter, а в Firewall Raw.
Данная таблица полезна для уменьшения нагрузки на CPU и позволяет блокировать трафик на этапе Prerouting-а
Вот это правило:




/ip firewall raw
add action=drop chain=prerouting dst-port=137,138,139 in-interface-list=Internet protocol=udp




Бонус 2:




Правила для роутера за серым IP провайдера




Для роутера за серым IP провайдера я оставил только такие правила. Даже не смотря на то, что IP серый, доверять сети провайдера ни в коем случае не стоит.




/ip firewall filter
add action=fasttrack-connection chain=forward connection-state=established,related
add action=accept chain=forward comment="ALLOW - Established, Related and connections" connection-state=established,related
add action=accept chain=input connection-state=established,related
add action=drop chain=forward comment="DROP - Invalid connections" connection-state=invalid
add action=drop chain=input connection-state=invalid
add action=jump chain=input comment="DDoS - SYN flood protection" connection-state=new in-interface-list=Internet jump-target=SYN-Protect protocol=tcp tcp-flags=syn
add action=return chain=SYN-Protect limit=200,5:packet tcp-flags=""
add action=add-src-to-address-list address-list=ddos-blacklist address-list-timeout=1w3d chain=SYN-Protect log-prefix="DDoS: SYN-Protect" tcp-flags=""
add action=jump chain=input comment="DDoS - Main protection" connection-state=new in-interface-list=Internet jump-target=DDoS-Protect
add action=return chain=DDoS-Protect dst-limit=15,15,src-address/10s
add action=add-src-to-address-list address-list=ddos-blacklist address-list-timeout=1w3d chain=DDoS-Protect log-prefix="DDoS: MAIN-Protect"
add action=drop chain=input comment="DROP - Block all other input/forward connections on the WAN" in-interface-list=Internet
add action=drop chain=forward in-interface-list=Internet
/ip firewall raw
add action=drop chain=prerouting comment="DDoS - Drop blacklist IP" in-interface-list=Internet src-address-list=ddos-blacklist







Источник: https://gregory-gost.ru/sozdanie-domashney-seti-na-baze-ustroystv-mikrotik-chast-6-firewall-zashhita-dostupa/



2021-03-10T22:47:49
Network

MikroTik RouterOS – Списки интерфейсов “Interface List”

Данная статья будет небольшой и она будет посвящена Спискам интерфейсов в MikroTik RouterOS. В ней я постараюсь рассказать, что такое “Списки интерфейсов” и для чего они нужны.

Все действия производились на прошивке 6.42.9 (Long-Term)
Описание на MikroTik WIki: Manual:Interface/List [ENG]

Сами списки интерфейсов в RouterOS V6 (на 10.10.2018) присутствуют довольно давно, тогда они еще были очень простыми. Читать

Балансировка двух WAN на Mikrotik используя PCC

Начальные условия




  • 2 канала WAN от разных провайдеров, с разными скоростями
  • Провайдер1 WAN1 (192.168.1.1) — 10 Мбит
  • Провайдер2 WAN2 (192.168.2.1) — 20 Мбит




Необходимо реализовать




  • Основной канал WAN2 и он должен использоваться интенсивнее (2/3 всего объема трафика)
  • Балансировку нагрузки между каналами
  • Роутер должен отвечать на запросы (пришедшие с любого провайдера) именно с того интерфейса, откуда пришел запрос




/ip address
add address=192.168.0.1/24 network=192.168.0.0 broadcast=192.168.0.255 interface=Local
add address=192.168.1.2/24 network=192.168.1.0 broadcast=192.168.1.255 interface=WAN1
add address=192.168.2.2/24 network=192.168.2.0 broadcast=192.168.2.255 interface=WAN2
 
/ip firewall mangle
add chain=input in-interface=WAN1 action=mark-connection new-connection-mark=WAN1_conn
add chain=input in-interface=WAN2 action=mark-connection new-connection-mark=WAN2_conn
 
add chain=output connection-mark=WAN1_conn action=mark-routing new-routing-mark=to_WAN1
add chain=output connection-mark=WAN2_conn action=mark-routing new-routing-mark=to_WAN2
 
add chain=prerouting dst-address=192.168.1.0/24 action=accept in-interface=Local
add chain=prerouting dst-address=192.168.2.0/24 action=accept in-interface=Local
 
add chain=prerouting dst-address-type=!local in-interface=Local per-connection-classifier=both-addresses-and-ports:2/0 action=mark-connection new-connection-mark=WAN1_conn passthrough=yes
add chain=prerouting dst-address-type=!local in-interface=Local per-connection-classifier=both-addresses-and-ports:2/1 action=mark-connection new-connection-mark=WAN2_conn passthrough=yes
 
add chain=prerouting connection-mark=WAN1_conn in-interface=Local action=mark-routing new-routing-mark=to_WAN1
add chain=prerouting connection-mark=WAN2_conn in-interface=Local action=mark-routing new-routing-mark=to_WAN2
 
/ip route
add dst-address=0.0.0.0/0 gateway=192.168.1.1 routing-mark=to_WAN1 check-gateway=ping
add dst-address=0.0.0.0/0 gateway=192.168.2.1 routing-mark=to_WAN2 check-gateway=ping
 
add dst-address=0.0.0.0/0 gateway=192.168.1.1 distance=1 check-gateway=ping
add dst-address=0.0.0.0/0 gateway=192.168.2.1 distance=2 check-gateway=ping
 
/ip firewall nat
add chain=srcnat out-interface=WAN1 action=masquerade
add chain=srcnat out-interface=WAN2 action=masquerade




Если каналы неравны (как у меня), то нужно изменить




add chain=prerouting dst-address-type=!local in-interface=Local per-connection-classifier=both-addresses-and-ports:2/0 action=mark-connection new-connection-mark=WAN1_conn passthrough=yes

add chain=prerouting dst-address-type=!local in-interface=Local per-connection-classifier=both-addresses-and-ports:2/1 action=mark-connection new-connection-mark=WAN2_conn passthrough=yes




на




add chain=prerouting dst-address-type=!local in-interface=Local per-connection-classifier=both-addresses-and-ports:3/0 action=mark-connection new-connection-mark=WAN1_conn passthrough=yes

add chain=prerouting dst-address-type=!local in-interface=Local per-connection-classifier=both-addresses-and-ports:3/1 action=mark-connection new-connection-mark=WAN2_conn passthrough=yes

add chain=prerouting dst-address-type=!local in-interface=Local per-connection-classifier=both-addresses-and-ports:3/2 action=mark-connection new-connection-mark=WAN2_conn passthrough=yes




Определенный порт через определенного провайдера




Спасибо за подсказку maxim.naidenov:




;;; Winbox
chain=prerouting action=mark-routing new-routing-mark=to_WAN1 passthrough=no protocol=tcp dst-address-type=!local in-interface=bridge-local dst-port=8291 connection-mark=no-mark

;;; Wargaming, RU9
chain=prerouting action=mark-routing new-routing-mark=to_WAN2 passthrough=no dst-address=xxx.xxx.xxx.0/24 dst-address-type=!local in-interface=bridge-local connection-mark=no-mark




Балансировка каналов и IPSEC




При эксплуатации IPSEC и балансировке каналов выяснился интересный факт: при установке IPSEC не получается обменяться всеми ключами. IPSEC вроде бы как и поднимается, но работать не работает. Если посмотреть IP → IPsec → Installed SAs — можно увидеть что счетчик «Current Bytes» для одного из ключей равен 0, т.е. обмен ключами все-таки не прошел. Для правильной работы необходимо добавить еще два правила:




> /ip firewall mangle

> add chain=output action=mark-routing new-routing-mark=ISP1_conn passthrough=no connection-mark=ISP1_conn

> add chain=output action=mark-routing new-routing-mark=ISP2_conn passthrough=no connection-mark=ISP2_conn




При этом в таблице маршрутизации должны быть маршруты с соответствующими Routing Mark




Было (неверно):




> add chain=output action=mark-connection new-connection-mark=ISP1_conn passthrough=no out-interface=WAN1

> add chain=output action=mark-connection new-connection-mark=ISP2_conn passthrough=no out-interface=WAN2




Еще полезная статейка: https://habr.com/post/313342/




Взято отсюда: https://wiki.rtzra.ru/software/mikrotik/mikrotik-dual-wan-pcc



2021-03-07T18:12:26
Network

Настройка резервного канала в MikroTik с уведомлением в Telegram

К подключению резервного интернет канала дома каждый приходит по своим причинам, но некоторые устройства в умном доме требуют постоянного подключения к сети интернет, оперативность получения важных уведомлений напрямую зависит от стабильности подключения к тому же, как же мы узнаем, что интернет пропал, не имея резервного канала 🙂




Какой тип подключения выбрать в качестве резервного зависит только от желания, финансовой и технической возможности. Требования к скорости не большие и зависит от того, каким устройствам необходим постоянный доступ к сети. Если не использовать постоянный доступ для торрент обмена, то в качестве резервного канала можно использовать USB LTE модем с лимитированным трафиком.




Входные данные




Имеется MikroTik RB4011 с настройками:




  • Основной интернет канал 100МБит, внешний IP, интерфейс ether1
  • Резервный интернет канал 10МБит, интерфейс ether2
  • OpenVPN подключение к внешней VPS, интерфейс vpn-ovpn
  • Туннель 6to4 для IPv6 трафика, v6to4-tunnel




Необходимо при разрыве основного канала пустить весь трафик по резервному, переподключить VPN, погасить туннель 6to4 и прислать уведомление в телеграмм.




Настройка




Для удобства переименовываем названия портов ether1 и ether2 в ether1-wan-main и ether2-wan-reserv




/interface ethernet set ether1 name="ether1-wan-main"
/interface ethernet set ether2 name="ether2-wan-reserv"




Если IP адреса для основного и/или резервного канала прилетают по DHCP, то в настройках DHCP Сlient’а необходимо для каждого интерфейса выставить параметр Add Default Route — no.







Добавляем маршруты по умолчанию, маршрут основного канала будет иметь дистанцию (distance) 1, резервного 2:




/ip route add dst-address=0.0.0.0/0 gateway=100.99.88.1 distance=1 comment="MAIN_CHAN"

/ip route add dst-address=0.0.0.0/0 gateway=10.9.8.1 distance=2 comment="RESERV_CHAN"




где: gateway=100.99.88.1 — шлюз для основного канала, gateway=10.9.8.1 — шлюз для резервного канала. Неактивный маршрут резервного канала будет выделен синим цветом.







Для мониторинга состояния каналов будет задействована утилита Netwatch (Tools -> Netwatch), в качестве хостов наблюдения будут использованы DNS сервера Яндекс, адрес 77.88.8.8 будет использоваться для проверки работоспособности основного канала, 77.88.8.1 — для резервного.




Добавляем отдельные маршруты для проверяемых адресов, что бы проверка шла четко по определенному интернет каналу не зависимо от того через какой канал идет маршрут по умолчанию.




/ip route add dst-address=77.88.8.8 gateway=100.99.88.1 distance=1 comment="Yandex  DNS  -  Check  main  internet  channel"

/ip route add dst-address=77.88.8.1 gateway=10.9.8.1 distance=1 comment="Yandex  DNS  -  Check reserv internet channel"







В Firewall (IP -> Firewall) добавляем запрещающие правила на прохождение пакетов к проверяемым адресам не через свой канал, на случай, если канал отсохнет, то маршрут использующий этот канал станет не активным и будет задействован текущий маршрут по умолчанию. Эти правила необходимо расположить выше правил разрешающих доступ в интернет.




/ip firewall filter add chain=output dst-address=77.88.8.1 out-interface=ether1-wan-main action=reject

/ip firewall filter add chain=output dst-address=77.88.8.8 out-interface=ether2-wan-reserv action=reject







Мониторинг и переключение каналов




Как говорилось выше, в качестве мониторинга будет использоваться утилита Netwatch. Настройка этой утилиты крайне проста, задается хост наблюдения и интервал через какое время необходимо выполнять проверку, при переходе наблюдаемого хоста из состояния Down в состояние Up выполняются скрипты с вкладки UP, при переходе из состояния Up в состояние Down выполняются скрипты с вкладки DOWN.




Для отправки уведомлений в Telegram ботом будет задействована утилита fetch. Как известно боту может быть отправлено сообщение через URL вида https://api.telegram.org/bot[API_KEY]/sendMessage?chat_id=[CHAT_ID]&text=[TEXT]. Подробнее как настроить бота в Telegram описано здесь.




  • [API_KEY] — токен для доступа к HTTP API
  • [CHAT_ID] — ID вашего с ботом чата
  • [TEXT] — отправляемое сообщение




Для проверки основного канала в Netwatch добавляем (Tools -> Netwatch -> +).




Вкладка Host:




  • Host: 77.88.8.8
  • Interval: 00:01:00
  • Timeout: 1000




Вкладка UP:




/ip route enable [find comment="MAIN_CHAN"]
/interface enable v6to4-tunnel
/ip dns cache flush
/interface disable vpn-ovpn
:delay 3s
/interface enable vpn-ovpn
:delay 5s
/tool fetch url="https://api.telegram.org/bot123456789:ABCDEFGHIJKLMNOPQRabcdefghijklmnopq/sendMessage?chat_id=12345678&text=RB4011_Main_channel_is_UP!"
/file remove "sendMessage?chat_id=12345678&text=RB4011_Main_channel_is_UP!";




Вкладка DOWN:




/ip route disable [find comment="MAIN_CHAN"]
/interface disable v6to4-tunnel
/ip dns cache flush
/interface disable vpn-ovpn
:delay 3s
/interface enable vpn-ovpn
:delay 5s
/tool fetch url="https://api.telegram.org/bot123456789:ABCDEFGHIJKLMNOPQRabcdefghijklmnopq/sendMessage?chat_id=12345678&text=RB4011_Main_channel_is_DOWN!"
/file remove "sendMessage?chat_id=12345678&text=RB4011_Main_channel_is_DOWN!";




Каждую минуту происходит проверка хоста с IP адресом 77.88.8.8, как только происходит смена состояния из доступен в недоступен, то начинается обработка скрипта, описанного на вкладке DOWN. Комментарии:




  1. В таблице маршрутизации отключается маршрут с комментарием MAIN_CHAN, это наш основной маршрут с distance=1. Т.к. основной маршрут отключен, то активным становится маршрут с distance=2, у нас он отмечен комментарием RESERV_CHAN, весь трафик пойдет в резервный канал.
  2. Отключается туннель 6to4 т.к. он завязан на внешний IP адрес основного канала.
  3. Сбрасывается DNS cache, т.к. помимо IPv4 трафика используется IPv6 канал и на какие-то ресурсы в кэше будут записи на IPv6 адреса.
  4. Отключается и через 3 секунды включается OpenVPN соединение, перезагрузка сделана на случай более быстрого переключения и избежания подвисаний.
  5. Отправка сообщения в Telegram
  6. После отправки в папке Files создается файл, удаляем его




Аналогичная ситуация происходит на вкладке UP при переходе хоста с IP адресом 77.88.8.8 из состояния Down в состояние Up.




Для проверки резервного канала в Netwatch добавляем (Tools -> Netwatch -> +).




Вкладка Host:




  • Host: 77.88.8.1
  • Interval: 00:01:00
  • Timeout: 1000




Вкладка UP:




/ip route enable [find comment="RESERV_CHAN"]
/ip dns cache flush
/interface disable vpn-ovpn
:delay 3s
/interface enable vpn-ovpn
:delay 5s
/tool fetch url="https://api.telegram.org/bot123456789:ABCDEFGHIJKLMNOPQRabcdefghijklmnopq/sendMessage?chat_id=12345678&text=RB4011_Reserv_channel_is_UP!"
/file remove "sendMessage?chat_id=12345678&text=RB4011_Reserv_channel_is_UP!";




Вкладка DOWN:




/ip route disable [find comment="RESERV_CHAN"]
/ip dns cache flush
/interface disable vpn-ovpn
:delay 3s
/interface enable vpn-ovpn
:delay 5s
/tool fetch url="https://api.telegram.org/botbot123456789:ABCDEFGHIJKLMNOPQRabcdefghijklmnopq/sendMessage?chat_id=12345678&text=RB4011_Reserv_channel_is_DOWN!"
/file remove "sendMessage?chat_id=12345678&text=RB4011_Reserv_channel_is_DOWN!";




Действия в случае неполадок с резервным каналом аналогичные, как и для основного, не затрагивается только 6to4 туннель.




Источник: https://stupidhouse.info/node/18/



2021-03-07T12:46:36
Network

Использование VLAN между двумя марутизаторами MikroTik

В моей домашней сети все устройства, относящиеся к умному дому отселены в отдельную сеть, это не только шлюзы и лампы Xiaomi, а также телевизор, медиа проигрыватель, ресивер, различные Wi-Fi реле и розетки, и, конечно сервер Home Assistant. Это повышает безопасность, устройства локальной сети, кроме избранных, не будут иметь доступ к ресурсам умного дома и соответственно вероятность того, что кто-то случайно или специально выкрутит громкость ресивера на максимум со своего телефона не велика, а беря в руки пульт или прикасаясь к ручке громкости можно получить в лоб этим самым пультом.




Собственно, есть два устройства MikroTik, RB4011 и RB962, оба маршрутизаторы, первый работает как шлюз для доступа в интернет и switch, второй как switch и Wi-Fi точка доступа. В устройствах собрано по два бриджа, для домашней локальной сети и сети умного дома, Wi-Fi точка доступа домашней сети работает в диапазонах 2.4G и 5G, Wi-Fi точка для подключения устройств УД только в 2.4G. Устройства находятся в разных помещениях квартиры и соединены проводом. Что бы не тянуть второй провод и обеспечения передачи трафика обоих сетей между устройствами будут использоваться VLAN’ы, питание на второе устройство будет подаваться по этому же проводу посредствам PoE.







Наверно здесь должно быть описание что такое VLAN’ы, для чего они нужны и как это работает, но этого не будет, считаем, что читатель уже знает, что это такое. Единственное замечание, это то, что описанный ниже способ, является программной реализацией обработки VLAN и вся нагрузка ложится на ЦП.




Настройка первого роутера




Устройство RB4011 имеет десять ethernet портов плюс порт SFP-SFP+. Порт SFP мы рассматривать не будем, в итоге мы должны будем получить следующую конфигурацию:




  • Порт ether1 — интернет (WAN порт), считаем, что интернет на устройстве уже настроен
  • Bridge 18, IP адрес 192.168.18.1, ethernet порты 6 — 9, vlan18 untagged — сеть умного дома
  • Bridge 22, IP адрес 192.168.22.1, ethernet порты 2 — 5, vlan22 untagged — домашняя локальная сеть
  • Порт ether10 — trunk порт на второе устройство, vlan18 tagged, vlan22 tagged




Переименовываем порт ether10 в ether10-trunk, что бы было понятнее:




/interface ethernet set ether10 name="ether10-trunk"




Создаем vlan18 и vlan22 с соответствующими VLAN ID, оба вешаем на порт ether10-trunk, трафик на этом порту будет Tagged.




/interface vlan add name="vlan18" vlan-id=18 interface=ether10-trunk
/interface vlan add name="vlan22" vlan-id=22 interface=ether10-trunk




Создаем бриджи для двух сетей и назначаем им адреса, добавляем порты и VLAN’ы в соответствующие бриджи, трафик на портах бриджа будет Untagged.




/interface bridge add name="bridge18"
/interface bridge add name="bridge22"

/ip address add address=192.168.18.1 interface=bridge18
/ip address add address=192.168.22.1 interface=bridge22

/interface bridge port add bridge=bridge18 interface=ether6
/interface bridge port add bridge=bridge18 interface=ether7
/interface bridge port add bridge=bridge18 interface=ether8
/interface bridge port add bridge=bridge18 interface=ether9
/interface bridge port add bridge=bridge18 interface=vlan18

/interface bridge port add bridge=bridge22 interface=ether2
/interface bridge port add bridge=bridge22 interface=ether3
/interface bridge port add bridge=bridge22 interface=ether4
/interface bridge port add bridge=bridge22 interface=ether5
/interface bridge port add bridge=bridge22 interface=vlan22




Настройка второго роутера




Устройство RB962 имеет пять ethernet портов плюс порт SFP, два WLAN интерфейса, на wlan1 работает 2.4G, wlan2 на 5G, оба задействованы для локальной домашней сети, для сети УД создан дополнительный виртуальный WLAN интерфейс wlan-smarthome работающий на 2.4G. Порт SFP мы, как и ранее, рассматривать не будем, но по необходимости его можно задействовать в своих нуждах. В конечном итоге конфигурация должна быть следующей:




  • Порт ether1 — trunk порт на первое устройство, vlan18 tagged, vlan22 tagged
  • Bridge 18, IP адрес 192.168.18.2, ethernet порты 2 — 5, виртуальный интерфейс wlan 2.4G, vlan18 untagged — сеть умного дома
  • Bridge 22, IP адрес 192.168.22.2, основные wlan интерфейсы 2.4G и 5G, vlan22 untagged — домашняя локальная сеть




Переименовываем порт ether1 в ether1-trunk, что бы было понятнее:




/interface ethernet set ether1 name="ether1-trunk"




Создаем vlan18 и vlan22 с соответствующими VLAN ID, оба вешаем на порт ether1-trunk, трафик на этом порту будет Tagged.




/interface vlan add name="vlan18" vlan-id=18 interface=ether1-trunk
/interface vlan add name="vlan22" vlan-id=22 interface=ether1-trunk




Создаем бриджи для двух сетей и назначаем им адреса, добавляем порты и VLAN’ы в соответствующие бриджи, трафик на портах бриджа будет Untagged.




/interface bridge add name="bridge18"
/interface bridge add name="bridge22"

/ip address add address=192.168.18.2 interface=bridge18
/ip address add address=192.168.22.2 interface=bridge22

/interface bridge port add bridge=bridge18 interface=ether2
/interface bridge port add bridge=bridge18 interface=ether3
/interface bridge port add bridge=bridge18 interface=ether4
/interface bridge port add bridge=bridge18 interface=ether5
/interface bridge port add bridge=bridge18 interface=wlan-smarthome
/interface bridge port add bridge=bridge18 interface=vlan18

/interface bridge port add bridge=bridge22 interface=wlan1
/interface bridge port add bridge=bridge22 interface=wlan2
/interface bridge port add bridge=bridge22 interface=vlan22




Теперь весь трафик, исходящий с устройства подключенного к RB962 направленный на устройство, подключенное к RB4011 сначала попадает в бридж, далее в порт ether1-trunk, тегируется соответствующим VLAN ID, попадает в порт ether10-trunk на RB4011, снимается тег VLAN ID, попадает в соответствующий бридж и затем в устройство назначения.




Настройка Firewall описана не будет, т.к. это уже материал для отдельной статьи.




Источник: https://stupidhouse.info/node/15



2021-03-07T01:25:37
Network