Добрый день. Есть dns сервер, который выполняет две функции:
1. форвардинг резольва доменных имен на внешний DNS
2. блокировка доступа к неразрешенным ресурсам с помощью fakeroot зоны.
Схема:
client1 request A? $DOMAIN--------->dns(192.168.7.4)||
||
||
\/
iptables
|| ||
\/ \/
Если не найдено совпадение по string $DOMAIN Если найдено совпадение по string $DOMAIN
|| ||
\/ \/
Запрос попадает на fakeroot на 53 порту Делаем редирект на порт 53535(dnsmasq)
|| ||
\/ \/
Пользователь получает ip заглушки для $DOMAIN dnsmasq в свою очередь делает запрос к внешнему DNS
||
\/
Пользователь получает реальный ip $DOMAIN
И все бы хорошо, схема которая представлена выше работает, НО если bind, он же fakeroot, получает большое колличество запросов, то раз в 200-500 запросов он, каким то образом отдает этот запрос на dnsmasq и клиент получает реальный ip того ресурса вместо ip заглушки.
По tcpdump'у на стороне dns это выглядит так:
CLIENT.48901 > DNS.53: [udp sum ok] 16699+ A? $DOMAIN. (23)
DNS.53 > CLIENT.48901: [bad udp cksum 0x907d -> 0x9fc4!] 16699* q: A? $DOMAIN. 1/1/1 $DOMAIN. [1d] A DUMMY_IP ns: . [1d] NS DUMMY_IP. ar: DUMMY_IP. [1d] A DUMMY_IP (79)
CLIENT.33950 > DNS.53: [udp sum ok] 63500+ A? $DOMAIN. (23)
DNS.53 > CLIENT.33950: [bad udp cksum 0x907d -> 0x235a!] 63500* q: A? $DOMAIN. 1/1/1 $DOMAIN. [1d] A DUMMY_IP ns: . [1d] NS DUMMY_IP. ar: DUMMY_IP. [1d] A DUMMY_IP (79)
CLIENT.57577 > DNS.53: [udp sum ok] 60095+ A? $DOMAIN. (23)
DNS.53 > CLIENT.57577: [bad udp cksum 0x907d -> 0xd45b!] 60095* q: A? $DOMAIN. 1/1/1 $DOMAIN. [1d] A DUMMY_IP ns: . [1d] NS DUMMY_IP. ar: DUMMY_IP. [1d] A DUMMY_IP (79)
CLIENT.51795 > DNS.53: [udp sum ok] 3168+ A? $DOMAIN. (23)
DNS.53 > CLIENT.51795: [bad udp cksum 0x907d -> 0xc951!] 3168* q: A? $DOMAIN. 1/1/1 $DOMAIN. [1d] A DUMMY_IP ns: . [1d] NS DUMMY_IP. ar: DUMMY_IP. [1d] A DUMMY_IP (79)
CLIENT.49608 > DNS.53: [udp sum ok] 17331+ A? $DOMAIN. (23)
DNS.53 > CLIENT.49608: [bad udp cksum 0x907d -> 0x9a89!] 17331* q: A? $DOMAIN. 1/1/1 $DOMAIN. [1d] A DUMMY_IP ns: . [1d] NS DUMMY_IP. ar: DUMMY_IP. [1d] A DUMMY_IP (79)
CLIENT.42635 > DNS.53: [udp sum ok] 32867+ A? $DOMAIN. (23)
DNS.53 > CLIENT.42635: [bad udp cksum 0x907d -> 0x7916!] 32867* q: A? $DOMAIN. 1/1/1 $DOMAIN. [1d] A DUMMY_IP ns: . [1d] NS DUMMY_IP. ar: DUMMY_IP. [1d] A DUMMY_IP (79)
CLIENT.51443 > DNS.53: [udp sum ok] 41557+ A? $DOMAIN. (23)
DNS.53 > CLIENT.51443: [bad udp cksum 0x907d -> 0x34bc!] 41557* q: A? $DOMAIN. 1/1/1 $DOMAIN. [1d] A DUMMY_IP ns: . [1d] NS DUMMY_IP. ar: DUMMY_IP. [1d] A DUMMY_IP (79)
CLIENT.32784 > DNS.53: [udp sum ok] 45525+ A? $DOMAIN. (23)
DNS.53 > CLIENT.32784: [bad udp cksum 0x907d -> 0x6e1f!] 45525* q: A? $DOMAIN. 1/1/1 $DOMAIN. [1d] A DUMMY_IP ns: . [1d] NS DUMMY_IP. ar: DUMMY_IP. [1d] A DUMMY_IP (79)
CLIENT.54748 > DNS.53: [udp sum ok] 62722+ A? $DOMAIN. (23)
DNS.53 > CLIENT.54748: [bad udp cksum 0x907d -> 0xd525!] 62722* q: A? $DOMAIN. 1/1/1 $DOMAIN. [1d] A DUMMY_IP ns: . [1d] NS DUMMY_IP. ar: DUMMY_IP. [1d] A DUMMY_IP (79)
CLIENT.52397 > DNS.53: [udp sum ok] 16436+ A? $DOMAIN. (23)
DNS.53 > CLIENT.52397: [bad udp cksum 0x907d -> 0x9323!] 16436* q: A? $DOMAIN. 1/1/1 $DOMAIN. [1d] A DUMMY_IP ns: . [1d] NS DUMMY_IP. ar: DUMMY_IP. [1d] A DUMMY_IP (79)
CLIENT.35031 > DNS.53: [udp sum ok] 63143+ A? $DOMAIN. (23)
DNS.53 > CLIENT.35031: [bad udp cksum 0x907d -> 0x2086!] 63143* q: A? $DOMAIN. 1/1/1 $DOMAIN. [1d] A DUMMY_IP ns: . [1d] NS DUMMY_IP. ar: DUMMY_IP. [1d] A DUMMY_IP (79)
CLIENT.40059 > DNS.53: [udp sum ok] 31360+ A? $DOMAIN. (23)
DNS.53 > CLIENT.40059: [bad udp cksum 0x907d -> 0x8909!] 31360* q: A? $DOMAIN. 1/1/1 $DOMAIN. [1d] A DUMMY_IP ns: . [1d] NS DUMMY_IP. ar: DUMMY_IP. [1d] A DUMMY_IP (79)
CLIENT.53161 > DNS.53: [udp sum ok] 10254+ A? $DOMAIN. (23)
DNS.53 > CLIENT.53161: [bad udp cksum 0x907d -> 0xa84d!] 10254* q: A? $DOMAIN. 1/1/1 $DOMAIN. [1d] A DUMMY_IP ns: . [1d] NS DUMMY_IP. ar: DUMMY_IP. [1d] A DUMMY_IP (79)
CLIENT.56387 > DNS.53: [udp sum ok] 36552+ A? $DOMAIN. (23)
DNS.53 > CLIENT.56387: [bad udp cksum 0x907d -> 0x34f9!] 36552* q: A? $DOMAIN. 1/1/1 $DOMAIN. [1d] A DUMMY_IP ns: . [1d] NS DUMMY_IP. ar: DUMMY_IP. [1d] A DUMMY_IP (79)
CLIENT.36575 > DNS.53: [udp sum ok] 54890+ A? $DOMAIN. (23)
DNS.53 > CLIENT.36575: [bad udp cksum 0x9055 -> 0xfc74!] 54890 q: A? $DOMAIN. 1/0/0 $DOMAIN. [3m] A REAL_IP (39)
На стороне клиента это выглядит также. При этом если вырубить dnsmasq, то раз в 200-500 запросов клиент получает сообщение о том, что DNS сервер не доступен, соответственно когда bind9 «захлебывается» он, каким то образом, передает запрос на dnsmasq. Это можно как то вылечить?