Настройка условной пересылки DNS-запросов в Mikrotik RouterOS

Чтобы настроить пересылку dns-запросов для определенного домена на определенный dns-сервер (Conditional DNS forwarding), можно использовать возможность инспектирования пакетов на Уровне 7 (Layer7 Protocols) в Firewall RouterOS.

Пример:

Имеем роутер MikroTik, версия RouterOS 6.27, ip-адрес dns-сервера на Микротике 192.168.15.1, требуется перенаправлять запросы для domain.local на dns-сервер домена Active Directory 192.168.55.2.

Для решения указанной задачи нужно выполнить в консоли RouterOS следующие команды:

/ip firewall layer7-protocol add name=domain.local regexp=domain.local
/ip firewall mangle add chain=prerouting dst-address=192.168.15.1 layer7-protocol=domain.local action=mark-connection new-connection-mark=domain.local-fwd protocol=tcp dst-port=53
/ip firewall mangle add chain=prerouting dst-address=192.168.15.1 layer7-protocol=domain.local action=mark-connection new-connection-mark=domain.local-fwd protocol=udp dst-port=53
/ip firewall nat add action=dst-nat chain=dstnat connection-mark=domain.local-fwd to-addresses=192.168.55.2
/ip firewall nat add action=masquerade chain=srcnat connection-mark=domain.local-fwd
Последнюю строку можно не добавлять, если у вас у вас уже есть каким либо образом настроенная маршрутизация пакетов в подсеть целевого dns-сервера.
Если нужно добавить еще домены, нужно выполнить аналогичный набор команд для каждого домена, заменив имя домена и адрес dns-сервера на соответствующие.
24.07.2015 10:55:11
То, что вы хотите, возможно сделать, если у клиента два DNS указано. Если первый вернет ошибку, то он попробует второй (в теории), и на микротике можно соответственно перенаправить запрос: дополнительно смотреть по адресу назначения  - если на первый, то туда, если на второй, то сюда.
 Если по приведенному примеру, то: на микротик вешается второй IP - 192.168.15.2, например (он указывается на клиенте в качестве второго DNS). Проверяется, что по нему так же работает DNS. Добавляются аналогичные правила для адреса 192.168.15.2:
/ip firewall mangle add chain=prerouting dst-address=192.168.15.2 layer7-protocol=domain.local action=mark-connection new-connection-mark=domain.local-fwd-2 protocol=tcp dst-port=53
/ip firewall mangle add chain=prerouting dst-address=192.168.15.2 layer7-protocol=domain.local action=mark-connection new-connection-mark=domain.local-fwd-2 protocol=udp dst-port=53
/ip firewall nat add action=dst-nat chain=dstnat connection-mark=domain.local-fwd-2 to-addresses=192.168.55.3 
/ip firewall nat add action=masquerade chain=srcnat connection-mark=domain.local-fwd-2