Ansible + Mikrotik = Приключения
Как и в любой сказке всё началось довольно невинно, захотелось мне сконфижить пачку микротов разом, через Ansible, и тут пошло всё не так)
Очень кратко, что это и как работает, можно прочитать ТУТ
Кратно о том что есть у меня в распоряжении для теста:
- Ansible AWX
- CCR1036-12G-4S
Глава первая - Печальная!
При попытке выполнить сценарий на свои продовых микротах, я получаю ошибку:
The error was: ansible.module_utils.connection.ConnectionError: timeout value 30 seconds reached while trying to send command: b'
* на самом деле дебаг больше и сочнее, но для понимания сути, будет достаточно этого)
1 - первое, что пришло мне в голову, это править таймауты в ansible.cfg - не помогло!
2 - identity пользователя от которого выполняется сценарий, у меня это был ansible-ops.
* классический admin, был упразднен сразу же, ввиду его не модности и не безопасности)
Забегая на перед, отчасти проблема была в имени пользователя, ansible с микротиком на пару, плохо понимают имена пользователей с дефисами. (Вернее не понимают совсем)
3 - проведён ресёрч на тему длинны имени(Identity) самого Mikrotik, в процессе поиска, на гите, была найдена ветка со схожей проблемой, решение было таково, что длина имени, не должна превышать 32 символа, у меня она составляла 30 символов, так что мимо кассы)
4 - были переустановлены несколько видов и версий прошивок, из ветки stable\long-term, не помогло
5 - на финал был скинут в ноль CCR1036-12G-4S для теста, и... барабанная дробь, работает!
Глава вторая - победа, побед)
Проблема была обнаружена в имени Mikrotik, у меня они содержали пробелы и | (пайп лайны).
Дальше я решил проверить, а какие ещё символы Ansible + mikrotik на дух не переносят?
Какие символы в Identity Mikrotik, может переварить Ansible :
"test core router" - OK
"test-core-router" - OK
"test.core.router" - OK
"test:core:router" - NO
"test=core=router" - NO
Довольно важный момент состоит в том, что в имени пользователя от которого сценарий будет запущен, не должно быть дефиса(а возможно и других спец символов):
* ansible-ops = timeout!
Эта очень короткая записка о проблеме на которую я потратил неделю жизни и нервов)
Спасибо всем кто прочел, удачи и добра!)
Как отследить подключено ли оборудование в порт коммутатора
Всех приветствую. Есть у меня такая схема интернет подключения гаража. Провайдер подаёт интернет в квартиру (не мою), в квартире коммутатор d-link 3028, далее от коммутатора кабель идёт в гараж, там стоит маршрутизатор MikroTik. Сделано так в основном, потому что протяженность кабеля большая и для удаленки на случай проблем с инетом. В квартире интернет отдельно. Но благодаря интернету в квартире (от другого провайдера) есть удаленный доступ до коммутатора ( он управляемый). Ещё один шнурок для управляемой розетки, чтобы можно было роутер перезагрузить физически. И ещё один шнурок, чтоб на роутер можно было попасть через резервный интернет, который в квартире. Вообщем максимальная удалёнка. Схема сложная, но по-другому никак, в гараже видеонаблюдение и сигнализация ( с мобильным интернетом туго).
Так вот, в гараже перестал работать интернет, не получает ip от провайдера. Созвонился с поддержкой провайдера, сказали всё перепроверят, перезвонят. Перезвонили, я не в гараже, но удаленка есть. Далее диалог:
П: перезагрузите роутер, какая модель у вас?
Я (отправляя роутер в ребут): Перезагрузил, MikroTik rb951.
П: Отключите кабель физически от роутера.
Я: (посылаю команду disable на порт коммутатора) отключил.
П: точно отключили?
Я: да, в чём проблема?
П: я вижу наличие оборудования
Я: странно...подключаю?
П: да, но можем в другой порт? Сможете перенастроить?
Я: без проблем ( делаю ресет мака на порту). Порт сменил (отправляю enable на коммутатор)
П: Секунду, проверьте, всё должно заработать.
Я: всё ок.
Так вот у меня вопрос, каким таким образом провайдер мог видеть наличие оборудования на порту (коммутатор) если порт отключён? Порт в сторону провайдера untag и при включённом порту там светится у провайдера только мак микротика.
В гугле подобного не нашёл. Может кто расскажет по сабжу что интересного. Мне бы такая технология пригодилась)
Ох уж эти мелочи
Из серии шутка-минутка.
Не особо опытный коллега настраивал Mikrotik на удаленном объекте, все вроде бы сделал, а интернета нет. Дело было под вечер, решил с утра уже на здоровую голову продолжить. После работы пошел навестить родителей, а те его конфетками угостили. После этого он сразу понял, в чем была проблема. Название конфеток очевидно
Немного о DNS и о полезной возможности layer 7 фильтра на роутерах Mikrotik
Начну с вопроса к любителям Google/Cloudflare и подобных публичных DNS серверов: Какую цель вы преследуете меняя ДНС сервер провайдера на вышеуказанные в настройках компьютера/роутера? Независимо от дальнейшего содержания поста, прошу, по возможности, ответить на этот вопрос в комментариях.
А теперь перейдем к одной из полезных возможностей layer 7 фильтра.
Предположим у нас есть некоторые домены, которые прописаны в ДНС сервере микротика,
IP -> DNS -> Static. Там по умолчанию, например, у всех должна быть запись router.lan со значением 192.168.88.1 по ней можно попасть на страницу роутера. До тех пор пока на клиентах стоит автоматически полученный DNS сервер от DHCP, в данном случае это адрес роутера - всё отлично, но если на клиенте поменять днс сервер, то те домены перестанут работать. Для решения этой проблемы можно воспользоваться layer 7 фильтром.
Работать это будет так: Все днс запросы перед маршрутизацией будут проверяться на определённое регулярное выражение и если будет найдено соответствие они будут помечаться и далее на этапе маршрутизации эти помеченные запросы будут перенаправляться на нужный нам днс сервер.
Итак, набор команд:
1. Для начала создаём шаблон для поиска
/ip firewall layer7-protocol add name="test" regexp="google.com"
2. Маркируем пакеты
/ip firewall mangle add chain=prerouting layer7-protocol=test action=mark-connection new-connection-mark=test-mark protocol=udp dst-port=53
Тут протокол udp и порт 53, так как DNS по-умолчанию работает на 53 порту и по протоколу udp.
В этом же правиле можно добавить src-adress=<локальный ip>, чтобы только для определенных устройств в сети работало это правило.
3. Теперь напишем правило для перенаправление этого подключения
/ip firewall nat add chain=dstnat action=dst-nat connection-mark=test-mark to-addresses=<адрес роутера>
Ну и для проверки добавим статическую запись google.com
/ip dns static add name=google.com address=127.0.0.1
Теперь на любом устройстве в сети, независимо от того какой указан днс сервер домен google.com будет отправлять на ip адрес 127.0.0.1, проверим это через nslookup.
Как видите, неважно на какой сервер мы отправляем запрос, ответ всегда одинаковый - это 127.0.0.1.
Многим может показаться что в этом нет практической пользы, поэтому опишу свои сценарии использования:
1. У меня микротик в сети не является роутером, он выступает лишь в качестве моста, и соответсвенно не является днс-сервером для подключенных клиентов, но у меня есть несколько устройств в сети, к которым мне так или иначе бывает нужен доступ, включая сам роутер, запоминать их ip адреса - не самый удобный вариант.
Для этих устройств я в микротике добавил статические днс записи заканчивающиеся на .lan, и
при помощи вышеописанной процедуры перенаправляю запросы.
2. Как многие, наверное, знают, некоторые пиратские ресурсы или сервисы IPTV для Smart TV, Apple TV и т.п. платформ, по очевидным причинам, не имеют своих официальных приложений в магазинах, и часто предлагают вариант просмотра их контента из какого-то существующего в маркете приложения, но с подменой ДНС.
Я думаю никто особо не горит желание доверять непонятному ДНС серверу свои данные, который еще по скорости ответа может оставлять желать лучшего, в редких случаях может также затруднить использование других приложений на устройстве. И тут может прийти на помощь layer 7 фильтр, только запросы мы уже не на роутер пересылать будем, а на указанный в инструкции ДНС сервер. Единственный нюанс, для layer 7 фильтра нужно знать домен или хотя бы какую-то его часть, чтобы написать регулярное выражение, но найти его не проблема на форумах и в чатах по конкретному сервису он обычно фигурирует.
А теперь вернёмся к началу поста, вопрос я задал не просто так, и, думаю, любой человек хоть краем глаза прочитавший инструкцию понял что модификация, анализ, подмена днс запросов - абсолютно элементарная вещь, и никакие якобы "защищенные" днс сервера ни от чего вас не защищают.
Меняя днс сервер вы не обманываете провайдера, вы скорее себя обманываете:
во-первых, по скорости отклика, в 99% случаях провайдерские сервера будут отвечать быстрее; во-вторых, провайдер в любом случае может анализировать ваши днс запросы, записывать, подменять их и т.д. и помимо провайдера это может сделать кто угодно на пути до указанного вами днс сервера, а оставляя провайдерские сервера вы хотя бы только с провайдером делитесь своими "конфиденциальными" днс запросами.
P.S. Я не говорю что все провайдеры этим занимаются, я лишь хочу сказать что это очень просто и для любого провайдера не составляет никакого труда, есть даже такие провайдера которые абсолютно все днс запросы подменяют и у таких провайдеров от ваших "циферок" в настройках днс сервера абсолютно ничего не зависит.
Защититься, кстати, от всего вышеописанного можно при помощи VPN, но чтобы не гонять через него весь трафик, можно через него только ДНС запросы пустить; либо при помощи DNS over TLS. В общем, каким-то образом зашифровать днс запросы.
Да что ты знаешь о безопасности в сети???
Обеспечили нашу организацию надежным фаерволом.
Готовы к Евро-2024? А ну-ка, проверим!
Для всех поклонников футбола Hisense подготовил крутой конкурс в соцсетях. Попытайте удачу, чтобы получить классный мерч и технику от глобального партнера чемпионата.
А если не любите полагаться на случай и сразу отправляетесь за техникой Hisense, не прячьте далеко чек. Загрузите на сайт и получите подписку на Wink на 3 месяца в подарок.
Реклама ООО «Горенье БТ», ИНН: 7704722037
Mikrotik, нужна помощь.
Обращаюсь к тем, кто возможно, сможет помочь. Есть mikrotik 951. По quick set-у скорость была 70-80 из 100. Настроил по ману. Упала до 15))) Понимаю, что где-то накосячил - не понимаю где. ) Если кто-то готов уделить некоторое время - буду благодарен.