bind9 bind-9.17.2
был собран из исходников на дебиан-9.
./named -V
BIND 9.17.2 (Development Release) <id:6d46544>
running on Linux x86_64 4.9.0-6-amd64 #1 SMP Debian 4.9.88-1+deb9u1 (2018-05-07)
built by make with '--with-maxminddb' '--prefix=/usr' '--enable-fixed-rrset' '--sysconfdir=/etc/bind'
compiled by GCC 6.3.0 20170516
compiled with OpenSSL version: OpenSSL 1.1.0l 10 Sep 2019
linked to OpenSSL version: OpenSSL 1.1.0l 10 Sep 2019
compiled with zlib version: 1.2.8
linked to zlib version: 1.2.8
linked to maxminddb version: 1.2.0
threads support is enabled
default paths:
named configuration: /etc/bind/named.conf
rndc configuration: /etc/bind/rndc.conf
DNSSEC root key: /etc/bind/bind.keys
nsupdate session key: /usr/var/run/named/session.key
named PID file: /usr/var/run/named/named.pid
named lock file: /usr/var/run/named/named.lock
geoip-directory: /usr/share/GeoIP
Основная цель - использовать его GeoIP функция и ответы на запросы на основе местоположения IP-адреса преобразователя (ов) и конфигурации для named.conf.local
так просто:
...
...
include "/etc/bind/geoip/GeoIP.acl";
view "Iran" {
match-clients { IR; };
recursion no;
zone "ppod.ir" {
type master;
file "/etc/bind/db.ppod.ir.iran";
};
};
view "default" {
include "/etc/bind/named.conf.default-zones";
...
...
Зона для db.ppod.ir.iran
является:
; A, AAAA => host record
ppod.ir. 1 IN A 185.8.172.233
и для default view
является:
; A, AAAA => host record
ppod.ir. 1 IN A 5.63.13.22
ppod.ir. 1 IN A 95.216.12.6
Теперь, если я запрошу домен ppod.ir из Ирана DNS-сервер дает мне неправильные IP-адреса.
$ dig ppod.ir # the answer is wrong
; <<>> DiG 9.11.3-1ubuntu1.12-Ubuntu <<>> ppod.ir
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15519
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;ppod.ir. IN A
;; ANSWER SECTION:
ppod.ir. 1 IN A 5.63.13.22
ppod.ir. 1 IN A 95.216.12.6
;; Query time: 263 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Tue Jul 14 12:59:53 +0430 2020
;; MSG SIZE rcvd: 68
но в любом случае, если я спрашиваю DNS-сервер напрямую или отслеживаю запрос, он дает правильный IP.
$ dig ppod.ir @171.22.25.82 +short # the answer is right
185.8.172.233
и отслеживая его:
$ dig ppod.ir @1.1.1.1 +trace +short # the answer is right
NS a.root-servers.net. from server 1.1.1.1 in 257 ms.
NS b.root-servers.net. from server 1.1.1.1 in 257 ms.
NS c.root-servers.net. from server 1.1.1.1 in 257 ms.
NS d.root-servers.net. from server 1.1.1.1 in 257 ms.
NS e.root-servers.net. from server 1.1.1.1 in 257 ms.
NS f.root-servers.net. from server 1.1.1.1 in 257 ms.
NS g.root-servers.net. from server 1.1.1.1 in 257 ms.
NS h.root-servers.net. from server 1.1.1.1 in 257 ms.
NS i.root-servers.net. from server 1.1.1.1 in 257 ms.
NS j.root-servers.net. from server 1.1.1.1 in 257 ms.
NS k.root-servers.net. from server 1.1.1.1 in 257 ms.
NS l.root-servers.net. from server 1.1.1.1 in 257 ms.
NS m.root-servers.net. from server 1.1.1.1 in 257 ms.
RRSIG NS 8 0 ..... from server 1.1.1.1 in 257 ms.
couldn't get address for 'ns2.redcursor.ir': not found
A 185.8.172.233 from server 171.22.25.82 in 40 ms.
Кэш для TTL был установлен на 1, также была выполнена привязка с функцией GeoIP, и вопрос в почему DNS сервер не отвечает правильно? Я знаю о кешировании IP-адресов и рекурсивных запросах общедоступных DNS-серверов, но в зависимости от того, что я настроил, IP-адреса должны быть кэшированы
вот журнал этих двух запросов dig ppod.ir
и dig ppod.ir @171.22.25.82
из того же места и IP-адреса. первый неправильный, второй правильный.
14-Jul-2020 08:38:21.312 info: client @0x7fbb20000a30 162.158.82.125#56703 (ppod.ir): view default: query: ppod.ir IN A -E(0)D (171.22.25.82)
14-Jul-2020 08:38:21.312 debug 3: client @0x7fbb20000a30 162.158.82.125#56703 (ppod.ir): view default: query 'ppod.ir/A/IN' approved
14-Jul-2020 08:38:21.312 debug 3: client @0x7fbb20000a30 162.158.82.125#56703 (ppod.ir): view default: reset client
14-Jul-2020 08:38:43.308 debug 3: client @0x7fbb20000a30 5.117.5.210#55509: UDP request
14-Jul-2020 08:38:43.308 debug 5: client @0x7fbb20000a30 5.117.5.210#55509: view Iran: using view 'Iran'
14-Jul-2020 08:38:43.308 debug 3: client @0x7fbb20000a30 5.117.5.210#55509: view Iran: request is not signed
14-Jul-2020 08:38:43.308 debug 3: client @0x7fbb20000a30 5.117.5.210#55509: view Iran: recursion not available
14-Jul-2020 08:38:43.308 info: client @0x7fbb20000a30 5.117.5.210#55509 (ppod.ir): view Iran: query: ppod.ir IN A +E(0)K (171.22.25.82)
14-Jul-2020 08:38:43.308 debug 3: client @0x7fbb20000a30 5.117.5.210#55509 (ppod.ir): view Iran: query 'ppod.ir/A/IN' approved
14-Jul-2020 08:38:43.308 debug 3: client @0x7fbb20000a30 5.117.5.210#55509 (ppod.ir): view Iran: reset client
Благодаря @MichaelHampton, который указал на тот факт, что мой локальный преобразователь настроен на использование DNS-сервера на нашей стороне сети, которую я настроил для DNS-сервера bind9.
Итак, после того, как я не настроил мой локальный преобразователь, использующий systemd-resolver
и позволяя DHCP
моего модема, теперь запрос от dig
дает правильный ответ.
dig ppod.ir
; <<>> DiG 9.11.3-1ubuntu1.12-Ubuntu <<>> ppod.ir
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21503
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;ppod.ir. IN A
;; ANSWER SECTION:
ppod.ir. 1 IN A 185.8.172.233
;; Query time: 153 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Sun Jul 19 12:14:46 +0430 2020
;; MSG SIZE rcvd: 52