У меня такая же проблема была с RouterOS 4 и до самой последней версии RouterOS 5.21. Раньше это не было критично, потому что у меня был один большой IP-сегмент (я просто поставил DNS-сервер в этот сегмент, так что DNS-трафик не шел через Mikrotik). Но сейчас я разбиваю большой сегмент на несколько меньших, и не хочу ставить DNS-сервер в каждом из них.
Для воспроизведения проблемы я сделал выделенный DNS-сервер (Linux/bind IP 10.7.3.10/24), подключённый к RB-750 через интерфейс ether3-slave-local с IP 10.7.3.1/24. DNS-клиент (Linux/ssh IP 10.7.2.10/24) подключён к RB-750 через ether2-master-local с IP 10.7.2.1/24.
Примечание 1: Я не использую nscd и прочие кэширующие службы, чтобы воспроизвести проблему, отключите nscd на клиенте и сервере для чистоты эксперимента.
Примечание 2: Интерфейсы ether2-master-local и ether3-slave-local не в одном коммутаторе (master port = none), то есть у нас два IP-сегмента 10.7.3.0/24 и 10.7.2.0/24 с маршрутизацией между ними.
Некоторые DNS-запросы теряются, обычно AAAA. Они теряются только когда идут подряд в короткий промежуток времени. Если делать запросы вручную, по одному через nslookup — ничего не теряется. Но когда браузер или ssh-клиент пытаются разрешить домен, они посылают два запроса подряд, ответ на A приходит, а AAAA теряется.
Хороший сценарий (когда нет очередей). На DNS-клиенте, я делаю команду ssh mkpnet.ru, и в tshark (wireshark) на DNS-клиенте вижу:
shade:/home/alex # tshark -i eth0 -R"dns && ((ip.src==10.7.2.10 && ip.dst==10.7.3.10) || (ip.src==10.7.3.10 && ip.dst==10.7.2.10))"
OOPS: dissector table "sctp.ppi" doesn't exist
Protocol being registered is "Datagram Transport Layer Security"
Running as user "root" and group "root". This could be dangerous.
Capturing on eth0
13.039545 10.7.2.10 -> 10.7.3.10 DNS 69 Standard query 0xb767 A mkpnet.ru
13.039613 10.7.2.10 -> 10.7.3.10 DNS 69 Standard query 0x25e2 AAAA mkpnet.ru
13.040778 10.7.3.10 -> 10.7.2.10 DNS 255 Standard query response 0xb767 A 192.168.11.4
13.040970 10.7.3.10 -> 10.7.2.10 DNS 117 Standard query response 0x25e2
Один запрос на A, один на AAAA, один ответ на A, один ответ на AAAA.
На DNS-сервере:
home:~ # tshark -i eth0 -R"dns && ((ip.src==10.7.2.10 && ip.dst==10.7.3.10) || (ip.src==10.7.3.10 && ip.dst==10.7.2.10))"
Running as user "root" and group "root". This could be dangerous.
Capturing on eth0
4.150101 10.7.2.10 -> 10.7.3.10 DNS Standard query A mkpnet.ru
4.150148 10.7.2.10 -> 10.7.3.10 DNS Standard query AAAA mkpnet.ru
4.150941 10.7.3.10 -> 10.7.2.10 DNS Standard query response A 192.168.11.4
4.151190 10.7.3.10 -> 10.7.2.10 DNS Standard query response
Один запрос на A, один на AAAA, один ответ на A, один ответ на AAAA.
Плохой сценарий — есть простая очередь на интерфейсе ether2-master-local (например, limit-at/max-limit 10М) у DNS-клиента.
shade:/home/alex # tshark -i eth0 -R"dns && ((ip.src==10.7.2.10 && ip.dst==10.7.3.10) || (ip.src==10.7.3.10 && ip.dst==10.7.2.10))"
OOPS: dissector table "sctp.ppi" doesn't exist
Protocol being registered is "Datagram Transport Layer Security"
Running as user "root" and group "root". This could be dangerous.
Capturing on eth0
6.103472 10.7.2.10 -> 10.7.3.10 DNS 69 Standard query 0xa725 A mkpnet.ru
6.103491 10.7.2.10 -> 10.7.3.10 DNS 69 Standard query 0x5960 AAAA mkpnet.ru
6.104812 10.7.3.10 -> 10.7.2.10 DNS 255 Standard query response 0xa725 A 192.168.11.4
11.107952 10.7.2.10 -> 10.7.3.10 DNS 69 Standard query 0xa725 A mkpnet.ru
11.109166 10.7.3.10 -> 10.7.2.10 DNS 255 Standard query response 0xa725 A 192.168.11.4
11.109220 10.7.2.10 -> 10.7.3.10 DNS 69 Standard query 0x5960 AAAA mkpnet.ru
11.109795 10.7.3.10 -> 10.7.2.10 DNS 117 Standard query response 0x5960
Один запрос на A, один на AAAA, один ответ на A, ждём 5 секунд, снова запрос на A, ответ на A, ещё один запрос на AAAA, ответ на AAAA.
На DNS-сервере:
home:~ # tshark -i eth0 -R"dns && ((ip.src==10.7.2.10 && ip.dst==10.7.3.10) || (ip.src==10.7.3.10 && ip.dst==10.7.2.10))"
Running as user "root" and group "root". This could be dangerous.
Capturing on eth0
0.000000 10.7.2.10 -> 10.7.3.10 DNS Standard query A mkpnet.ru
0.000801 10.7.3.10 -> 10.7.2.10 DNS Standard query response A 192.168.11.4
5.005182 10.7.2.10 -> 10.7.3.10 DNS Standard query A mkpnet.ru
5.005980 10.7.3.10 -> 10.7.2.10 DNS Standard query response A 192.168.11.4
5.006369 10.7.2.10 -> 10.7.3.10 DNS Standard query AAAA mkpnet.ru
5.006647 10.7.3.10 -> 10.7.2.10 DNS Standard query response
Один запрос на A, один ответ на A, ждём 5 секунд, запрос на A, ответ на A, запрос на AAAA, ответ на AAA.
DNS-клиент посылает 2 запроса AAAA, DNS-сервер получает только 1 запрос AAAA.
Куда теряется второй запрос AAAA?
Я воспроизвёл эту проблему на RB-750 и x86 роутерах с RouterOS 5.21.
На RB-750 с RouterOS 6.0rc2, кажется, проблема исправлена.
На x86 с RouterOS 6.0rc2 я ещё не тестировал.