Админская фамилия

Make Sysadmins Great Again

DHCP, Option 82

Встала задача: определять на каком порту какого свитча находится конкретный IP-адрес. На самом деле задача глобальнее, но сейчас имеет смысл именно это. В ходе гугления вышел на DHCP Option 82. Инфы много, но кроме теории важно это.
Суть в том, что коммутатор в запрос DHCP добавляет два поля: Agent Remote ID (идентификатор коммутатора) и Agent Circuit ID (идентификатор порта). Казалось бы, всё просто. Но я столкнулся с некоторыми трудностями.

Дело в том, что сеть поделена на сегменты для улучшения безопасности, выделения потоков трафика и уменьшения широковещательного трафика. Каждый сегмент имеет свою адресацию и, соответственно, свой DHCP-сервер.
Чтобы настроить работу Option 82, коммутатор необходимо настроить как DHCP-relay. Это значит, что при получении DHCP request’a коммутатор просто отправит этот запрос DHCP серверу, указанному в настройках релея. Таким образом можно уменьшить количество широковещательного трафика в пределах сегмента и иметь один DHCP сервер на несколько подсетей. Но, DHCP-relay может работать только с одним DHCP-сервером (указанным в настройках релея), соответственно, все наши сегменты получат адреса из одной подсети, что
нас совсем не устраивает.


Моя сертифицированный консультант Mikrotik

Теперь я сертифицированный консультант Mikrotik. Единственный на Урале, между прочим. Жду ваших вопросов.Страница с консультантами тут


Режимы бондинга в RouterOS. И не только в RouterOS

В вики микротика не совсем понятно описано. На хабре об этом сказали лучше:mode=0 (balance-rr)Последовательно кидает пакеты, с первого по последний интерфейс. mode=1 (active-backup)Один из интерфейсов активен. Если активный интерфейс выходит из строя (link down и т.д.), другой интерфейс заменяет активный. Не требует дополнительной настройки коммутатораmode=2 (balance-xor)Передачи распределяются между интерфейсами на основе формулы ((MAC-адрес источника) XOR (MAC-адрес получателя)) % число интерфейсов. Один и тот же интерфейс работает с определённым получателем. Режим даёт балансировку нагрузки и отказоустойчивость.mode=3 (broadcast)Все пакеты на все интерфейсыmode=4 (802.3ad)Link Agregation — IEEE 802.3ad, требует от коммутатора настройки. mode=5 (balance-tlb)Входящие пакеты принимаются только активным сетевым интерфейсом, исходящий распределяется в зависимости от текущей загрузки каждого интерфейса. Не требует настройки коммутатора.mode=6 (balance-alb)Тоже самое что 5, только входящий трафик тоже распределяется между интерфейсами. Не требует настройки коммутатора, но интерфейсы должны уметь изменять MAC.


Mikrotik RouterOS. Winbox грузит CPU на 100%

Обнаружил баг в RouterOS, установленной на x86 под QEMU. Процессор нагружается на 100%, винбоксом что-то делать нереально. Подключаюсь по ssh, открываю /tool profile и вижу, что проц грузится на 90-100% винбоксом. Смотрю в /user active print detail и вижу себя, подключенного по ssh и сессию винбокса с севера мониторинга The Dude. Хотя все винбоксы я уже закрыл. Видимо, дудка не всегда корректно закрывает винбоксы, запущенные в её интерфейсе и процесс остается крутиться на сервере. Захожу на сервер, перезапускаю службу The Dude и нагрузка падает.Но это всего лишь снятие нагрузки с проца, в следующий раз при запуске винбокса ситуация повторяется. В её корнях ещё предстоит разобраться.


RouterOS DNS failure

В RouterOS 6.27 добавили несколько фич в DNS резолвер. В некоторых ситуациях адреса просто не резолвятся (DNS failure). Выход простой - в IP-DNS вместо нулей в строках  Query Server Timeout и Query Total Timeout прописываем 2. И DNS снова в строю!


Объединение одинаковых подсетей в RouterOS

Имеем две сети с одинаковой адресацией и site-to-site VPN между ними. Необходимо обеспечить взаимодействие между сетями, не изменяя их внутренней адресации. Не спрашивайте почему нельзя сменить адресацию - просто нельзя. В обеих точках оборудование Mikrotik.Решение подсказала эта статья. Вся основная настройка будет проводиться только на роутере-клиенте. На втором роутере необходимо будет лишь прописать маршрут до фэйковой сети. Будем считать, что VPN уже функционирует. Я не буду расписывать детали прохождения пакетов, т.к. это описано в указанной статье. Просто код с хабра и как это делается в RouterOS.Итак, наша сеть - 192.168.0.0/16. Сеть, в которую нужно попасть - 192.168.15.0/24. Отличия моих адресов от хабра:1. там с обеих сторон 192.168.0.0/24. У меня 192.168.0.0/16 и 192.168.15.0/242. там фэйковые адреса 10.8.1.0/24, 10.8.2.0/24. У меня 10.9.0.0/16 и 172.25.25.0/24iptables -t mangle -A PREROUTING -i tun0 -d 10.8.1.0/24 -j MARK –set-mark 8chain=prerouting action=mark-connection new-connection-mark=in passthrough=yes dst-address=172.25.25.0/24 in-interface=vpnchain=output action=mark-routing new-routing-mark=in passthrough=yes connection-mark=in iptables -t nat -A PREROUTING -m mark –mark 8 -j NETMAP –to 192.168.0.0/24chain=dstnat action=netmap to-addresses=192.168.15.0/24 connection-mark=iniptables -t nat -A POSTROUTING -m mark –mark 8 -j NETMAP –to 10.8.2.0/24chain=srcnat action=netmap to-addresses=10.9.0.0/16 connection-mark=inip route add 192.168.0.0/24 dev eth1 table netmapdst-address=192.168.15.0/24 gateway=ether2-master-local routing-mark=inНу и приведу всю конфигурацию Mangle, NAT и Route./ip firewall mangle> printFlags: X - disabled, I - invalid, D - dynamic 0   chain=prerouting action=mark-connection new-connection-mark=in passthrough=yes     dst-address=172.25.25.0/24 in-interface=vpn 1   chain=output action=mark-routing new-routing-mark=in passthrough=yes     connection-mark=in 2   chain=prerouting action=mark-connection new-connection-mark=out passthrough=yes     dst-address=10.9.0.0/16 in-interface=ether2-master-local 3   chain=output action=mark-routing new-routing-mark=out passthrough=yes     connection-mark=out/ip firewall nat> print Flags: X - disabled, I - invalid, D - dynamic  0   ;;; default configuration     chain=srcnat action=masquerade out-interface=ether1-gateway  1   chain=dstnat action=netmap to-addresses=192.168.15.0/24 connection-mark=in  2   chain=srcnat action=netmap to-addresses=10.9.0.0/16 connection-mark=in  3   chain=dstnat action=netmap to-addresses=192.168.15.0/24 routing-mark=out  4   chain=srcnat action=netmap to-addresses=172.25.25.0/24 routing-mark=out  /ip> route print detail Flags: X - disabled, A - active, D - dynamic, C - connect, S - static, r - rip, b - bgp, o - ospf, m - mme, B - blackhole, U - unreachable, P - prohibit  0 A S  dst-address=192.168.15.0/24 gateway=ether2-master-local         gateway-status=ether2-master-local reachable distance=1 scope=30         target-scope=10 routing-mark=in  1 A S  dst-address=192.168.0.0/16 gateway=vpn         gateway-status=vpn reachable distance=1 scope=30 target-scope=10         routing-mark=out  4 A S  dst-address=192.168.0.0/16 gateway=%vpn_serv_IP%         gateway-status=192.168.242.1 reachable via  vpn distance=1 scope=30         target-scope=10


Самый полный мануал по резервированию интернета на Mikrotik RouterOS

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

/ip route  
add dst-address=**Host1** gateway=GW1 scope=**10**  
add dst-address=**Host2** gateway=GW2 scope=**10**
/ip route  
add distance=1 gateway=**Host1** routing-mark=ISP1 check-gateway=ping  
add distance=2 gateway=**Host2** routing-mark=ISP1 check-gateway=ping
/ip route  
add distance=1 gateway=**Host2** routing-mark=ISP2 check-gateway=ping  
add distance=2 gateway=**Host1** routing-mark=ISP2 check-gateway=ping

Я делаю немного по-другому: первые две строки точно такие же, а дальше:


RouterOS failover links

Фэйловер разных типов подключений


RouterOS firewall links

http://wiki.mikrotik.com/wiki/Dmitry_on_firewallinghttp://wiki.mikrotik.com/images/f/f2/Firewall.pdf


Скрипт для проверки наличия USB-модема на RouterOS

Понадобился скрипт, определяющий наличие USB-модема, подключенного к Mikrotik. Присылает на почту название модема и его серийник. Хорошо бы допилить скрипт до отправки уровня сигнала и количества денег на счете, но мои модемы не дают доступа к своему меню - надо шить.:log info “Starting Modem Info Script…”;:local sysname [/system identity get name];:local sysver [/system package get system version];:local mname [/system resource usb get 1 value-name=name];:local mnumber [/system resource usb get 1 value-name=serial-number];:local smtpserv [:resolve “smtp.mail.ru”];:local Eaccount “mail@mail.ru”;:local pass “your_password”;:log info “Collecting Information”;:delay 5;:log info “Sending Information via E-mail…”;/tool e-mail send from="<$Eaccount>" to=$Eaccount server=$smtpserv </span>port=587 user=$Eaccount password=$pass start-tls=yes </span>subject=("$sysname Modem Information (" . [/system clock get date] . “)”) </span>body=("$sysname Modem.\nTime and Date stamp: " . [/system clock get time] . " " . </span>[/system clock get date] . “\nModem $mname, SN: $mnumber”);:log info “Modem Info Complete!”;