Комментарии 61
Допустим, у вас есть домен, причем он имеет глобальное имя, к примеру в зоне .ru
И вот вам нужно, что-бы некоторые ресурсы были доступны как из интернета так и во внутренней сети за NAT. Реализуется это тем, что-бы внутри NAT отвечать на DNS запрос IP адресом из серой сети, а не публичны. Или надо выносить все подобные сервера в DMZ.
Заруливать DNS в туннель до головного офиса — совсем не лучшая затея.
А вообще, когда у вас есть внутренние ресурсы в филиале, но нет ни одного сервера — тут что-то не сходится, вспоминаю про трусы и крестик. Разве что камера какая-нибудь или принтер, но это на большинстве роутеров прикручивается через LAN DNS функцию, даже с динамическим внутренним IP.
На точке есть пара ПК и принтер, иногда камера. Mikrotik обеспечивает туннель до общей сети. И тут как раз split dns мне сильно помогает, если падает туннель, то пропадают внутренние ресурсы, но остаётся интернет. И если туда приезжает менеджер с ноутом, то ему не надо ничего специально настраивать, все работает как из головного офиса или дома.
Заруливать DNS в туннель до головного офиса — совсем не лучшая затея.
А вы считаете, что нагружать софтроутер разборами ДНС запросов затея получше? Кроме того, если у меня 500 таких филиалов, то каждый филиал- это отдельная точка для настройки?
chain=srcnat action=masquerade protocol=tcp src-address=192.168.0.0/24 dst-address=192.168.0.0/24 out-interface=<Your_LAN_bridge> dst-port=0-65535
Плюсы split-dns в том, что можно держать в глобальной доступности всего пару сервисов, а остальные в привате. И тут для пользователя самое удобное, он не встречает никаких различий между подключением к сервисам внутренним и внешним, для него это выглядит прозрачно и в голове он держит только один домен. В случае без split dns, очень часто имеется ситуация с существованием как глобального домена так и локального.
У некоторых провайдеров довольно паршиво настроенные сервера DNS, можно отправить все запросы на широко известные публичные сервера, а запросы на ресурсы провайдера — на его сервер/сервера.
Некоторые носят компактные модели MikroTik с собой и подключают в разных местах (заранее известных) можно учесть специфику сразу всех этих сетей, до этого в особо специфичных случаях приходилось что-нибудь перенастраивать
А расскажите подробней — для чего это надо?
Вот мой случай: два провайдера, у каждого есть внутренние сервисы (сайт, личный кабинет), не доступные из интернета. Один из провайдеров часто меняет IP этих сервисов. Таким образом, мне необходимы ДНС обоих провайдеров, причем имена сайтов должны резолвиться именно своим ДНС-сервером. Я вот до этой статьи и не обратил внимания на изменения, в основном потому что на long term сидел. Перешел на stable.
С текущей стабильной, хотя эту функцию можно было попробовать и в testing.Вы сознательно заставляете того, кто наткнётся на эту статью (а это именно статья, а не заметка в блоге, хотя и выглядит так) через какое-то время, выяснять, а какая же версия RouterOS была текущей стабильной в июне 2020-го?
Что-то у меня с настроенным DoH пересылка запросов не пошла. А то что вы привели в качестве пруфа, говорит о том, что DoH в принципе теперь поддерживается.
Могли бы и поподробнее расписать: суть изменения, примеры использования, сравнение с предыдущими версиями и т.д.
Маленький вопрос по переопределению определённых имён в рамках перенаправляемых доменов.
Допустим, у нас есть домен "*.test1.localdomain", который мы перенаправляем на forward-to=192.168.88.3. Но есть одно имя из этого домена exception.test1.localdomain, IP-адрес которого необходимо переопределить на 127.0.0.1, к примеру, используя static dns на MikroTik'е.
Вопрос 1. Какая очерёдность резолвинга? Перебьёт ли static этот forward-to? В случае с layer7 не перебивало, т.к. запрос на 53-й порт (подходящий под условия) форвардился на другой DNS и до DNS-сервера MikroTik'а запрос не долетал.
Вопрос 2. Кто хорошо умеет в регекспы, подскажите, как можно добавить исключение в regexp=".*\.test1\.localdomain", чтобы под этот regexp попадал весь домен включая поддомены, за исключением имени exception.test1.localdomain?
1. По моим ощущениям, сначала разрешаются правила с регулярками, а затем – чисто статические. Документация, кстати, говорит, что это так:
The server is capable of resolving DNS requests based on POSIX basic regular expressions so that multiple requests can be matched with the same entry. In case an entry does not conform with DNS naming standards, it is considered a regular expression and marked with an ‘R’ flag. The list is ordered and is checked from top to bottom. Regular expressions are checked first, then the plain records.
2. Я попытался вывести из-под правила домен
test.example.com
. В цитате выше упомянуто, что используются POSIX basic regular expressions, то есть никаких negative lookahead не получится, (?!test).*\.example.com
не сработал. Попытался запустить ([^t]+|t[^e]+|te[^s]+|tes[^t]+)\.example.com
по образу и подобию этого ответа со stackoverflow, но результат оказался прямо противоположный: только test.example.com
стал попадать под правило. Хотя на сайтах типа regexr.com поведение совпадает с ожидаемым мной. :/Опытным путём выяснилось, что статичная запись типа A имеет приоритет над записью типа FWD. При чём даже не влияет где эта запись находится выше FWD, или ниже.
Так что вопрос с исключающимися регулярками с повестки снят. Если нужно исключить какие-то хосты из форвардинга – добавляем их статиком и всё нормально работает.
Другой вопрос, какая должна быть регулярка, чтобы исключить два или более разных поддоменов. Но, здесь, наверное, надо уже настраивать зоны в bind9, как это сказали в самой первой ветке комментов.
UPD: Документация немного устарела, похоже. По крайней мере, работают не только POSIX BRE, но и ERE. Хотя я сначала так и думал. :D
И проблема с регекспами решилась достаточно просто: надо было добавить
^
в начало. Почему-то регулярка срабатывает, даже если часть домена попадает под неё. Мне сложно придумать подобную ситуацию без натягивания совы, но лучше иметь гибкость, чем не иметь её, когда она нужна. В абстрактном случае работает
^([^t]+|t[^e]+|te[^s]+|tes[^t]+|test.+)\.example\.com$
,а в вашем – что-то вроде
^([^e]+|e[^x]+|ex[^c]+|exc[^e]+|exce[^p]+|excep[^t]+|except[^i]+|excepti[^o]+|exceptio[^n]+|exception.+)\.test1\.localdomain$
, хотя это и нечитаемо.У меня все работало (условная пересылка DNS запросов).
Попробовал реализовать через DNS static — не получается
Домен: home.local
Прописываю следующее
/ip dns static
add forward-to=192.168.2.2 regexp=".*\\.home\\.local" type=FWD
но DNS сервер микротика не разрешает данный префикс FQDN серверов
Что я делаю не так, подскажите пожалуйста.
но возникает вопрос реализации, web-proxy в данном случае все равно нужен на микроте?
я пробовал реализовать по сценарию web-proxy (Mikrotik) — 3proxy (raspberry pi) — tor-socks5 (raspberry pi) — но выглядит это как большой костыль.
наводку брал тут
возможно можно как-то проще?
теперь можно прописать несколько серверов пересылки
Не работает фэйловер.
1. Прописать можно в gui хоть как (через пробел, запятую и т.д) но в терминале
ip dns static export
будет только первая запись. 2. В терминале можно прописать через запятую слитно
/ip dns static> add forward-to=10.110.10.100,10.110.0.118 regexp=".*\\win\\.some\\.ru" type=FWD
но оно не будет работать. И в кэше будет эта слитная запись с запятой3. Если дублировать правило FWD и указать для форвардинга резервный dns, то все равно не сработает при падении основного, т.к. тупо обрабатываются вхождения по списку.
Так что, пока фича сыровата для боевого применения. Буду дальше пользовать для dns форвардинга NAT с балансировкой через PCC, пока не допилят до ума
Я на этой же прошивке делал. Обрабатывается первая запись по списку. Никакой проверки жив ли хост и жив ли на нем днс.
Блокировал в фаерволе филиалов dns запросы с тестового роутера.
Но вот засада, на днях реально отключал я dns который был основным и failover работал как-то рандомно. Первые 5-10 запросов отрабатывал (с большой задержкой), а потом переставал. Что-то разрабы в Mikrotik сделали не то…
Кто-то интересно тикет уже им писал?
Идея простая. 1. Добавляем в днс статик FWD-записи 2.Регулярно проверяем, плохие отключаем, хорошие включаем.
Например, мы хотим все адреса домена win.mobi-ru.ru резолвить через 2 сервера: dc1.win.mobi-ru.ru и dc2.win.mobi-ru.ru, с адресами 10.110.10.100 и 10.110.0.118, соответственно.
1. Добавляем две FWD-записи с fqdn в комментах:
/ip dns static
add comment=dc1.win.mobi-ru.ru forward-to=10.110.10.100 regexp=".*\\.win\\.mobi-ru\\.ru\$" type=FWD
add comment=dc2.win.mobi-ru.ru forward-to=10.110.0.118 regexp=".*\\.win\\.mobi-ru\\.ru\$" type=FWD
2. Добавляем в расписание скрипт (дефолт раз в минуту)
:local nsfwd {"dc1.win.mobi-ru.ru"=10.110.10.100; "dc2.win.mobi-ru.ru"=10.110.0.118};
:local nscheck;
:foreach dc,ip in=$nsfwd do={
:do {:set nscheck [:resolve "$dc" server=$ip]} on-error={/ip dns static disable [find comment="$dc"]}
:if ($nscheck = $ip && [/ip dns static get [find comment="$dc"] disabled]) do={/ip dns static enable [find comment="$dc"]}
:set nscheck;
}
Т.е. обходим массив, и проверяем резолвит ли сервер себя через себя. Ошибка — отключаем. Все ок, но было отключено — включаем.
Корявенько, конечно. Надо просить к FWD-записям галку, типа как check-gateway.
add forward-to=192.168.88.3 regexp=".*\\.test1\\.localdomain" type=FWD
уточните, пожалуйста, как мне прописать свой домен, называется ea.lan, а контроллер dc2.
Mikrotik split-dns: они это сделали