Mikrotik и BeeLine

У моего старого домашнего провайдера начались проблемы. Причем эти проблемы приобрели регулярность. Решил попробовать домашний итернет от пчелайна.
Из-за особенностей организации сети пчелайна и фич микротика, подружить их между собой достаточно тяжело. Добрые люди написали толковый мануал, огромно спасибо им за это. Но, как обычно, в жизни не все так как в мануале 🙂 Учитывая, что старый провайдер пока от микротика не отключается, провод пчелайна был засунут в отключенный от общего свича интерфейс (ether5), появились маленькие тонкости.

1. Сначала подключитесь виндовым клиентом напрямую к сети  пчелок и запишите ip адреса DNS и VPN серверов пчелайна.

2. Почему то пчелайн DHCP сервер не отдает микротиковскому клиенту маршрут по умолчанию. Виндовому клиенту дает, микротику не дает. Поэтому приходится прописывать маршруты к сетям где находятся DNS и VPN серверам руками. Да и вообще, какой то странный их DHCP, выдал кучу всяких маршрутов, кроме вышеуказанных! Ну и по поводу его странности, см. следующий пункт.

3. Пчелайн редкосные бяки, их DHCP сервер выдает вот такой вот маршрут:
#      DST-ADDRESS  PREF-SRC  GATEWAY    DISTANCE
1 ADS  10.0.0.0/8             10.89.48.1 1
У моего старого провайдера внутренняя сеть тоже 10, но с маской /16. Т.е. старый провайдер честно дает маршрут на часть сети. Благо там pppoe подключение и можно не получать IP на интерфейс. Но пчелайн своим чудо маршрутом, просто заставил меня отказаться от использования внутренней сети старого провайдера. А там есть разные вкусности.

4. Вводить руками скрипт из мануала, занятие не для слабонервных. Поэтому, для тех кто пользуется winbox, привожу скрипты в нормальном виде.

corbina-l2tp_refresh
:local interface «BeeLine-l2tp»
:local vpnserver «tp.internet.beeline.ru»
:log debug message=»Hard resolv script run»
/ip dns cache flush
:local «current-ip» [:resolve $vpnserver]
:local «old-ip» [/interface l2tp-client get [/interface l2tp-client find name=»$interface»] connect-to]
:if ($»current-ip» != $»old-ip») do= {
:log info «VPN Server changed IP address from $»old-ip» to $»current-ip»»
/interface l2tp-client set [/interface l2tp-client find name=»$interface»] connect-to=$»current-ip»
}

corbina-l2tp_soft_refresh
:local interface «BeeLine-l2tp»
:local vpnserver «tp.internet.beeline.ru»
#:log debug message=»Soft resolv script run»
:if ([/interface l2tp-client get $interface running] = false) do={
:log info message=»VPN down. Refreshing»
/ip dns cache flush
:local «current-ip» [:resolve $vpnserver]
:local «old-ip» [/interface l2tp-client get [/interface l2tp-client find name=»$interface»] connect-to]
:if ($»current-ip» != $»old-ip») do= {
:log info «VPN Server changed IP address from $»old-ip» to $»current-ip»»
/interface l2tp-client set [/interface l2tp-client find name=»$interface»] connect-to=$»current-ip»
}
}

Разумеется вместо BeeLine-l2tp вы подставите свое имя l2tp интерфейса.

З.Ы. Очень понравились возможности микротика в части управления чипа свича! Для начала сформировал два интерфейса в отдельный свитч (смотрите параметр Master Port на интерфейсе). В один воткнул шнур от пчелок, в другой шнур идущий на кухню. Таким образом смог подключить ноут на прямую в сеть пчелок. Записал все необходимые параметры, вернул интерфейс в старый свич. Если бы этой возможности не было, пришлось бы на табуретке сидеть в коридоре 🙂

Ай да mikrotik, а да сукин сын.

Ну ребята, таки mikrotik меня удивил. Нда, я давно так не удивлялся. Такое ощущение, как будто съел кучу васаби и тебе сразу прочистило все дыхательные пути.

Итак: есть как бы роутер на микротик, у него два интерфейса:

  1. eth1 192.168.0.100
  2. eth2 192.168.1.100

Маршрут по умолчанию через eth1 на другой роутер.
И микротик и роутер двумя интерфейсами подключены к обеим сетям: 192.168.0.0/24 и 192.168.1.0/24
Причем у микротика eth2 — это было временное подключение, только на стадии первичной конфигурации, так как рабочая станция с которой он первоначально конфигурился была в сети 1.0.

А теперь вопрос: если на микротике из интерфейса eth2 вытащить шнурок, сможете ли вы с машины, находящейся в сети 192.168.1.0/24 попасть на 192.168.0.100?
Или немного другой вариант вопроса: можете ли вы, находясь на микротике попасть в сетку 192.168.1.0/24 согласно его маршрута по умолчанию?

Ответ простой — нет!

Как оказалось, у RouterOS есть забавная фишка. У нее маршруты к сетям, подключенным к интерфейсу, при отключении линка из таблицы маршрутизации автоматически не удаляются! О как! В Linux удаляются (кстати все маршруты проходящие через этот интерфейс), в Windows удаляются, а в RouterOS нет!

И вот, три дня я нем мог понять, почему с упорством маньяка RouterOS пытается отсылать пакеты в интерфейс, на котором нет линка?

Слава богу служба поддержки Микротика работает отлично и они меня просветлили (именно просветлили, прямо таки карму почистили).

Для того, что бы интерфейс начал работать в привычном, например для меня, режиме. Нужно добавить небольшой фильтр.

[admin@MikroTik] > /routing filter print
Flags: X — disabled
0   chain=connected-in prefix=192.168.1.0/24 scope=200 invert-match=no
action=reject set-bgp-prepend-path=»»

Принцип работы этого фильтра: если есть лик, значение scope=10, если линк down — то scope=200.

Немного поработав с mikrotik девайсами я догадываюсь почему у них так устроено 🙂 но все равно — это было очень неожиданно.

Небольшой апдейт. Достаточно удалить ip адрес из списка и маршрут будет удален. Но если его не удалить руками, то да — пишем фильтр.

Mikrotik 1100AHx2

Однако он меня напрягает. Отказывается нормально поднимать bonding 🙁 Хотя то же RouterOS на Х86 девайсе с bonding работает нормально.
Залили на него 6.0rc1, так в режиме бондинга вобще все сетевые интерфейсы отрубаются. Вернуть девайс в рабочий режим можно только путем разборки корпуса и и замыкания жесточайшего reset на плате 🙁
Оставили девайс в покое до среды. То ли мы че то не так, то ли они как то не очень.

Mikrotik + IPTV + IGMP + WiFi

Ух, ну и задачка была. Вроде ничего сложного, пропустить IPTV через mikrotik по wifi на комп. Перевернул кучу мануалов, не помогает. Но все равно добил вопрос до конца. Ладно, давайте по порядку.

Ставим пакет multicast.

По умолчанию он у меня не стоял.

Включаем igmp-proxy.

/routing igmp-proxy print
quick-leave: yes
query-interval: 1m
query-response-interval: 10s

/routing igmp-proxy interface print detail
Flags: X — disabled, I — inactive, D — dynamic, U — upstream
0 U interface=ether1-gateway threshold=1 alternative-subnets=0.0.0.0/0 upstream=yes
1 interface=bridge-local threshold=1 alternative-subnets=»» upstream=no

На что следует обратить внимание?

  1. На alternative-subnets=0.0.0.0/0. Эта фишка позволяет ловить трафик с сетей к которым у вас нет обратного роутинга.
  2. interface=ether1-gateway — это тот интерфейс на который к вам будет приходить мультикаст трафик. Например у моего провайдера (Искрателеком) он приходит на локальный ethernet интерфейс, а не на pppoe интерфейс.
  3. quick-leave=yes. Позволяет быстро переключаться между каналами.

Разрешаем в фаерволе igmp и udp

Это нужно делать на цепочке input того интерфейса, который подключен к провайдеру и являющемся upstream.

И самое главное

Во всех мануалах на этом заканчивается настройка и все вроде должно работать. Но! если у вас Wi-Fi то по нему приходит маленький пушной зверек. Мультикаст пакеты начинаю тупо валить ваш беспроводной интерфейс! Упс.
В Инете рекомендуют дропать мультикаст трафик на Wi-Fi (при этом никакого ТВ там не будет) или выкинуть микротик и купить супер дупер девайсы 🙂
На самом деле проблема решается просто, очень просто.

Тадаааамммм!!!! Фанфары!!!

Включаем multicast-helper=full
Этот маленький пунктик заставляет ваш микротик отправлять мультикаст пакеты по индивидуальным MAC-ам тех девайсов, которые зарегистрированы  на Wi-Fi.

Все, вы можете смотреть ТВ на девайсе, подключенном к микротику по Wi-Fi.

З.Ы. Проверено на Искрателеком.

Апдейт раз. Пункт multicast-helper доступен в окне настройки wifi интерфейса после нажатия кнопки advanced. Ну или явно в командной строке после set.

Апдейт два. Не рекомендуется быстро переключать каналы. Особенность igmp proxy заключается в том, что при переключении на новый канал, старый трафик некоторое время продолжает транслироваться. Переключив быстро 4-5 каналов, вы превысите пропускную способность wifi канала и начнутся дикие тормоза. Конечно через минуту трансляция ненужных каналов отвалится и все станет нормально. Но все же…

HP Printer & SNMP

Оказывается, если количество напечатанных страниц (9.1.1) превышает максимальное количество страниц картриджа (8.1.1), принтер возвращает oid 1.3.6.1.2.1.43.11.1.1.9.1.1 = 0. Странно. Пришлось переписывать правила в мониторинге.

DUDE контроль картриджей HP Printers

Начал щупать программку сетевого монитора Dude. Что сказать? Прикольно, удобно, управляет девайсами mikrotik на прямую, на шару, работает 🙂

Возникла задача контролировать картриджи в принтерах HP. Получилось.

1. Создал функцию:
Имя: HPCartrige
Описание: Выдает % использования картриджа
Код: oid(«1.3.6.1.2.1.43.11.1.1.9.1.1») * 100 / oid(«1.3.6.1.2.1.43.11.1.1.8.1.1»)

2. Создал пробу:
Имя: HP pages
Тип: Functions
Агент: по умолчанию
Доступно: if(oid(«1.3.6.1.2.1.43.11.1.1.8.1.1″)>2000,1,-1)
Ошибка: if(HPCartrige()<95,»»,»Картридж смени!»)
Значение: HPCartrige()
Единица измерения: %

3. Подключил пробу к принтерам HP.

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

Апдейт. Конечно приятно самому докопаться до проблемы,  но… таки надо читать мануалы и спец форумы. Оказывается — все уже придумано 🙂 тыц вот тут.

MUM в Москве.

 В пятницу посетил http://mum.mikrotik.com/2012/RU/info/RU. Забавная компания из Литвы делает недорогие, интересные решения. В том числе свою ОС, по сути свой дистрибутив с закрытой оболочкой над Linux (кстати, на вопрос, а где исходники ядра и прочего, они слегка стушевались и сказали, что ядро стандартное, берите с kernel.org, а софт наш и не под свободной лицензией). Вобщем забавная и удобная штука, мы даже начали использовать кое что из их решений.

Задумался как применить девайсы этого производителя дома. В плане центральный девайс  4 Ethernet + 4POE + Wi-Fi и по Ethernet 5-ти портовому коммутатору на комнату. В итоге всего один шнур питания, ляпота.

И вот тут нарвался на засаду, точнее на две. У них POE нестандартное 24 вольта 🙂 и девайс, который может раздавать питание только 100М Ethernet 🙂 Упс. Покупать отдельные блоки питания и модули для POE (они у них есть)? Так у меня станет больше проводов чем сейчас. Или возвращаться на 100Mb с 1Gb 🙂 Вобщем обидно. А всего то надо сделать вот этот девайс RB750UP с гигабитными интерфейсами. Так что, пока оставлю дома инфраструктуру на старом добром netgear.

Склероз.

Че то стал одолевать склероз. Поэтому оставлю заметку для себя.
Артур, запомни, если ставишь sendmail на пустой сервер, обязательно поставь пакет cyrus-sasl-plain. И все у тебя будет хорошо. И сохранишь себе пару месяцев здоровья.

Так вот откуда они взялись!

Урок о сокращениях.

Это примерный пересказ поста Роба Пайка в его Г+. Я плохой переводчик, поэтому никогда не называют такие тексты «переводом»
Давным давно, когда был разработан дизайн файловой системы Unix, были придуманы записи . и .., для облегчения навигации. Я не уверен, но кажется .. появился при переписывании Версии 2, когда в файловой системе появилась иерархия (до этого структура была совсем другой). Когда кто-то набирал ls эти записи показывались на экране, поэтому Кен или Деннис добавили простую проверку в программу. Тогда всё писалось на ассемблере, но код был примерно эквивалентен чему-то вроде этого:
if (name[0] == '.') continue
Этот код был слегка короче, чем должен, потому что правильно было написать
if (strcmp(name, ".") == 0 || strcmp(name, "..") == 0) continue
но блин, это же было проще.
Результатом были две вещи.
Во-первых, был создан неприятный прецедент. Толпы других ленивых программистов порождали баги, используя то же самое упрощение. Настоящие файлы начинающиеся со знака точки часто пропускались, даже в тех случаях, когда должны были быть учтены.
Во-вторых, и это намного хуже, появилась идея «скрытых» файлов или «файлов с точкой». Как следствие, толпы других ленивых программистов1 стали разбрасывать файлы в домашних каталогах. У меня не так много всего установлено на машине, в которую я сейчас набираю этот текст, но мой домашний каталог содержит около сотни файлов с точкой, и я даже не знаю, что в большинстве из них и нужны ли они вообще. И каждое дополнительное имя файла в домашней папке замедляет работу машины, пусть не намного, но это же накапливается.
Я совершенно уверен, что концепция скрытых файлов была непреднамеренной оплошностью. Это просто была ошибка.
К какому количеству багов, потраченных циклов CPU и случаев человеческого разочарования (не говоря уже о плохом дизайне) привело одно маленькое упущение, случившееся 40 лет назад.
Задумайтесь об этом в следующий раз, когда захотите «срезать угол» в вашем коде.
(Я не спорю с теми, кто говорит, что скрытые файлы служат определенной цели, но это цели служат файлы, а не соглашение об их наименовании. Их легко можно было складывать в $HOME/cfg или в $HOME/lib, как мы и сделали в Plan 9, где нет файлов с точкой. Выводы были сделаны)
Роб Пайк. 3 августа 2012.

Перевод взят тут.

Инструкция.

Сегодня меня метро порадовало. Вобщем все как обычно: еду, стою, сплю. Передо мной сидит тетечка, такая вся богомольная (худая, болезненно бледная, такая никакая), читает брошюрку. Глаз цепляется за название главы: Рай.
Интересно, фокусирую зрение (правда без очков трудно получается) 🙂 Глава начинается со слов: «Когда вы попали в рай, надо помнить о том, что….» Ухтышка какая. Я еще больше просыпаюсь 🙂
Фокусирую зрение вверху страницы, где обычно печатают название книги. Название меня окончательно проснуло: Инструкция для бессмертных!!!
Все, настроение поднялось, я готов к работе 🙂