resolv.conf Порядок ответов сервера имен - PullRequest
0 голосов
/ 03 июля 2018

Когда 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

...