Когда dig
в URL-адресах, возникла беседа, в которой человек заявлял, что порядок выбора NS из resolv.conf
является случайным или просто недетерминированным.
Я был настроен скептически, поэтому провел симуляцию. Я раскручиваю 3 коробки BIND9 Ubuntu 17 и сопоставляю их в моем файле resolv.conf
в поле перехода:
# resolv.conf on jumpbox
nameserver 10.0.215.157 #dns1
nameserver 10.0.3.163 #dns2
nameserver 10.0.22.32 #dns3
Затем я копаю с моей перемычки:
dig www.amazon.com
и я получаю ответ, который ожидаю:
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5308
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 13, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;amazon.com. IN A
;; ANSWER SECTION:
amazon.com. 25 IN A 205.251.242.103
amazon.com. 25 IN A 176.32.98.166
amazon.com. 25 IN A 176.32.103.205
;; AUTHORITY SECTION:
. 86618 IN NS a.root-servers.net.
. 86618 IN NS e.root-servers.net.
. 86618 IN NS f.root-servers.net.
. 86618 IN NS c.root-servers.net.
. 86618 IN NS j.root-servers.net.
. 86618 IN NS i.root-servers.net.
. 86618 IN NS k.root-servers.net.
. 86618 IN NS h.root-servers.net.
. 86618 IN NS l.root-servers.net.
. 86618 IN NS g.root-servers.net.
. 86618 IN NS d.root-servers.net.
. 86618 IN NS m.root-servers.net.
. 86618 IN NS b.root-servers.net.
;; Query time: 0 msec
;; SERVER: 10.0.215.157#53(10.0.215.157)
;; WHEN: Mon Jul 02 21:44:07 EDT 2018
;; MSG SIZE rcvd: 298
Я копаю несколько раз и каждый раз перехожу на # dns1 . Я systemctl stop bind9
на # dns1 и, как и ожидалось, мой запрос обрабатывается # dns2 .
I systemctl start bind9
on # dns1 и мой расклад обрабатывается dns1 .
Итак, на каждом этапе я вижу, что порядок, в котором перечислены серверы имен в файле resolv.conf
, - это порядок, в котором они будут выбраны при выборе сервера имен.
, который, кажется, подкреплен этой записью из файла Manpage resolv.conf
:
nameserver Name server IP address
Internet address of a name server that the resolver should
query, either an IPv4 address (in dot notation), or an IPv6
address in colon (and possibly dot) notation as per RFC 2373.
Up to MAXNS (currently 3, see <resolv.h>) name servers may be
listed, one per keyword. If there are multiple servers, the
resolver library queries them in the order listed. If no
nameserver entries are present, the default is to use the name
server on the local machine. (The algorithm used is to try a
name server, and if the query times out, try the next, until out
of name servers, then repeat trying all the name servers until a
maximum number of retries are made.)
Есть что-то, что я пропускаю? Я не эксперт, когда дело доходит до DNS, но я пытаюсь понять, где моя логика может быть ошибочной.
Может ли то, что systemd пишет файл resolv.conf
, что делает его случайным?
В этой статье упоминается естественное перетасовывающее поведение рекурсоров: https://github.com/systemd/systemd/issues/5755
Является ли выбор рекурсоров фактически случайным поведением для Ubuntu> = 17