Назад | Перейти на главную страницу

dig & nslookup не может разрешить локальные хосты, если я не укажу (локальный) DNS-сервер для использования

Я создаю небольшую частную сеть в своей университетской сети. У меня есть коробка Centos 6 (солнце) между моей частной сетью и университетской глобальной сетью. eth0 на солнце подключен к глобальной сети, а eth1 - к моей частной сети через интеллектуальный коммутатор netgear. солнце действует как маршрутизатор для частной сети, перенаправляет трафик с eth1 на eth0, используя NAT, настроенный с помощью iptables. Клиенты в частной сети (из которых сейчас есть Меркурий) назначаются IP, шлюз и т. д. и имя хоста через dnsmasq, запущенный на солнце. dnsmasq настроен на отправку определенного IP-адреса и имени хоста на MAC-адрес (а) клиента (ов).

Я жестко запрограммировал имя хоста / IP-адреса в /etc/hosts на солнце только:

# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.42.1    sun sun.beowulf.iecs
192.168.42.2    mercury mercury.beowulf.iecs

На данный момент IP-адрес eth0 (выход в WAN) назначается через DHCP (солнце eth0 все время назначается один и тот же IP-адрес; так поступает университет, но я в процессе внесения изменений, позволяющих мне назначать статический IP-адрес). Мой /etc/resolv.conf на солнце является:

; generated by /sbin/dhclient-script
search biol.uregina.ca
nameserver 142.3.102.202
nameserver 142.3.100.15

который, кажется, перезаписывается при перезагрузке, поэтому у меня есть следующие /etc/dnsmasq-resolv.conf

search beowulf.iecs biol.uregina.ca
nameserver 127.0.0.1
nameserver 8.8.8.8

и проинструктировали dnsmasq использовать его вместо /etc/resolv.conf

# Change this line if you want dns to get its upstream servers from
# somewhere other that /etc/resolv.conf
resolv-file=/etc/dnsmasq-resolv.conf

# By  default,  dnsmasq  will  send queries to any of the upstream
# servers it knows about and tries to favour servers to are  known
# to  be  up.  Uncommenting this forces dnsmasq to try each query
# with  each  server  strictly  in  the  order  they   appear   in
# /etc/resolv.conf
strict-order

В основном эта настройка работает. У меня есть проблема (и я не уверен, что она серьезная, но ...) в том, что nslookup и dig оба не могут разрешить имена для солнце и Меркурий если только Я сообщаю этим командам, какой DNS-сервер запрашивать:

# nslookup sun.beowulf.iecs sun.beowulf.iecs
Server:     sun.beowulf.iecs
Address:    192.168.42.1#53

Name:   sun.beowulf.iecs
Address: 192.168.42.1

# nslookup sun sun.beowulf.iecs
Server:     sun.beowulf.iecs
Address:    192.168.42.1#53

Name:   sun
Address: 192.168.42.1

# nslookup sun
Server:     142.3.102.202
Address:    142.3.102.202#53

** server can't find sun: NXDOMAIN

# nslookup sun.beowulf.iecs
Server:     142.3.102.202
Address:    142.3.102.202#53

** server can't find sun.beowulf.iecs: NXDOMAIN

Такой же вывод дан для Меркурий вместо ** солнце *. Представитель dig вывод:

# dig @192.168.42.1 mercury.beowulf.iecs

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.23.rc1.el6_5.1 <<>> @192.168.42.1 mercury.beowulf.iecs
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 65090
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;mercury.beowulf.iecs.      IN  A

;; ANSWER SECTION:
mercury.beowulf.iecs.   0   IN  A   192.168.42.2

;; Query time: 0 msec
;; SERVER: 192.168.42.1#53(192.168.42.1)
;; WHEN: Wed Jun 25 12:05:31 2014
;; MSG SIZE  rcvd: 54

и не работает, когда я не указываю используемый сервер имен:

# dig mercury.beowulf.iecs

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.23.rc1.el6_5.1 <<>> mercury.beowulf.iecs
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 29153
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;mercury.beowulf.iecs.      IN  A

;; AUTHORITY SECTION:
.           7988    IN  SOA a.root-servers.net. nstld.verisign-grs.com. 2014062500 1800 900 604800 86400

;; Query time: 0 msec
;; SERVER: 142.3.102.202#53(142.3.102.202)
;; WHEN: Wed Jun 25 12:05:37 2014
;; MSG SIZE  rcvd: 113

В последнем примере выше (dig) SERVER: 142.3.102.202#53(142.3.102.202) это первый DNS-сервер в /etc/resolv.conf так что по умолчанию солнце похоже, использует этот сервер имен вместо dnsmasq, который я ожидал использовать из-за настроек в /etc/dnsmasq.conf.

Итак, это проблема? Я могу пинговать солнце и Меркурий из солнцеи подключитесь к Меркурий из солнце используя SSH.

Если это проблема (или даже если это не так), есть ли способ настроить солнце и dnsmasq работает на нем для автоматического разрешения имен частных хостов?

dig (поиск информации о домене) и nslookup (интерактивный запрос серверов имен в Интернете) - это инструменты, которые запрашивают серверы имен. Если в качестве аргумента командной строки не указан конкретный сервер имен, они будут запрашивать сервер (ы) имен, найденный в /etc/resolv.conf. Они просто не смотрят на альтернативные источники информации о хостах, такие как /etc/hosts файл или другие источники, указанные в /etc/nsswitch.conf.

Если вы хотите заставить все запросы DNS через dnsmasq на вашем солнце хозяин, /etc/resolv.conf должен указывать на dnsmasq, т.е. он должен выглядеть так:

#/etc/resolv.conf on sun
nameserver 127.0.0.1

Чтобы предотвратить перезапись этого файла при перезапуске сетевого интерфейса, eth0 отредактируйте /etc/sysconfig/network-scripts/ifcfg-eth0 и добавить вариант PEERDNS=no

Второй в /etc/dnsmasq-resolv.conf вы пытаетесь настроить dnsmasq для использования себя в качестве восходящего сервера имен nameserver 127.0.0.1... Этот файл должен выглядеть так:

#/etc/dnsmasq-resolv.conf
search beowulf.iecs biol.uregina.ca
nameserver 8.8.8.8

если вы хотите использовать сервер имен Google. Было бы неплохо использовать вместо них университетские серверы имен 142.3.102.202 и 142.3.100.15, поскольку нередко определенные ресурсы видны только из сети кампуса.

Если ваш Меркурий хост настроен DHCP, он должен получить его конфигурацию от dnsmasq и /etc/resolv.conf там указывает на сервер имен dnsmasq на 192.168.42.1

142.3.102.202 и 142.3.100.15 ничего не знают о вашей локальной частной сети, поэтому они правильно возвращают NXDOMAIN. Это также серверы имен по умолчанию для системы, поэтому, если вы не укажете сервер имен, они будут использоваться.

Вам нужно будет перезаписать содержимое /etc/resolv.conf и настройте директивы сервера имен, чтобы они указывали на ваш локальный сервер имен dnsmasq, который, в свою очередь, должен быть настроен для пересылки запросов, на которые он не может ответить в восходящем направлении.