Я создаю небольшую частную сеть в своей университетской сети. У меня есть коробка 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, который, в свою очередь, должен быть настроен для пересылки запросов, на которые он не может ответить в восходящем направлении.