Немного о 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.

Немного о DNS и о полезной возможности layer 7 фильтра на роутерах Mikrotik DNS, IT, Mikrotik, Google DNS, Длиннопост

Как видите, неважно на какой сервер мы отправляем запрос, ответ всегда одинаковый - это 127.0.0.1.


Многим может показаться что в этом нет практической пользы, поэтому опишу свои сценарии использования:


1. У меня микротик в сети не является роутером, он выступает лишь в качестве моста, и соответсвенно не является днс-сервером для подключенных клиентов, но у меня есть несколько устройств в сети, к которым мне так или иначе бывает нужен доступ, включая сам роутер, запоминать их ip адреса - не самый удобный вариант.

Для этих устройств я в микротике добавил статические днс записи заканчивающиеся на .lan, и

при помощи вышеописанной процедуры перенаправляю запросы.


2. Как многие, наверное, знают, некоторые пиратские ресурсы или сервисы IPTV для Smart TV, Apple TV и т.п. платформ, по очевидным причинам, не имеют своих официальных приложений  в магазинах, и  часто предлагают вариант просмотра их контента из какого-то существующего в маркете приложения,  но с подменой ДНС.

Я думаю никто особо не горит желание доверять непонятному ДНС серверу свои данные, который еще по скорости ответа может оставлять желать лучшего, в редких случаях может также затруднить использование других приложений на устройстве. И тут может прийти на помощь layer 7 фильтр, только запросы мы уже не на роутер пересылать будем, а на указанный в инструкции ДНС сервер.  Единственный нюанс,  для  layer 7 фильтра нужно знать домен или хотя бы какую-то его часть, чтобы написать регулярное выражение, но найти его не проблема на форумах и в чатах по конкретному сервису он обычно фигурирует.



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

Меняя днс сервер вы не обманываете провайдера, вы скорее себя обманываете:

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


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


Защититься, кстати, от всего вышеописанного можно при помощи VPN, но чтобы не гонять через него весь трафик, можно через него только ДНС запросы пустить; либо при помощи DNS over TLS. В общем, каким-то образом зашифровать днс запросы.