2

У меня проблемы с настройкой dnsmasq. Все, что я хочу, это разрешить определенные имена хостов по определенным IP-адресам для любой машины в моей сети. Точнее говоря, я пытаюсь разрешить всем устройствам в моей сети доступ к некоторым машинам в моей сети, используя только указанное имя хоста. Я думаю, что, должно быть, мне не хватает чего-то важного, потому что, несмотря на то, что он заработал один раз, после перезагрузки моего DNS-сервера он перестал пересылать запросы на серверы вне локальной сети.

Вот мои настройки: (все IP-адреса имеют только последнюю цифру адреса IPv4)

  • Apple Airport Extreme настроен в режимах DHCP и NAT (на этом маршрутизаторе не может быть только NAT, поэтому для получения NAT я установил диапазон DHCP 253-254 и зарезервировал некоторые поддельные mac-адреса для этих IP-адресов). В моей сети это IP-адрес 1

  • Raspberry PI работает распбиан и dnsmasq. Это имеет IP-адрес 4 и имеет имя хоста "пи"

  • Машина под названием «башня» в 3

Dnsmasq настроен, чтобы быть сервером DNS и DHCP. Все машины, которые подключаются к сети, получают IP-адрес в правильном диапазоне, который я указал в dnsmasq, и Raspberry Pi (IP 4) автоматически назначается в качестве DNS-сервера. Dnsmasq также настроен на пересылку любых запросов, которые он не может найти, на другие общедоступные DNS-серверы. Вот полные мои DNS-серверы с полными отредактированными IP-адресами:

/etc/dnsmasq.conf:

# Dnsmasq.conf for raspberry pi    
# Full examples found here:  
# http://www.thekelleys.org.uk/dnsmasq/docs/dnsmasq.conf.example  

# Set up your local domain here    
domain=hyrule.home

# Example: The option local=/localnet/ ensures that any domain name query which ends in .localnet will be answered if possible from /etc/hosts or DHCP, but never sent to an upstream server
# don't forward requests (andrewoberstar.com/blog/2012/12/30/raspberry-pi-as-server-dns-and-dhcp)
local=/hyrule.home/

#resolv-file=/etc/resolv.dnsmasq  
resolv-file=/etc/resolv.conf  
#min-port=4096   

## DNS SERVERS
#openNic california
server=173.230.156.28

#openNic Washington
server=23.226.230.72

#google public DNS
server=8.8.8.8
server=8.8.4.4

# Max cache size dnsmasq can give us
cache-size=10000

# Use the hosts file on this machine
expand-hosts

# ethernet - ip address mappings from /etc/ethers file
read-ethers

# Below are settings for dhcp. 
dhcp-range=XXX.XXX.X.10,XXX.XXX.X.200,12h
dhcp-option=3,XXX.XXX.X.1
dhcp-authoritative
log-queries

/etc/resolv.conf:

domain hyrule.home 
#search hyrule.home
#nameserver 8.8.8.8

/ и т.д. / хосты

127.0.0.1   localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0     ip6-localnet
ff00::0     ip6-mcastprefix
ff02::1     ip6-allnodes
ff02::2     ip6-allrouters

127.0.1.1   raspberrypi
XXX.XXX.X.3 tower
XXX.XXX.X.4 pi

И файл /etc/ethers содержит mac-адреса интерфейсов ethernet соответствующих машин.

Я вижу, что dnsmasq регистрирует запросы, и все выглядит нормально, все запросы выглядят как

Nov  2 17:29:21 raspberrypi dnsmasq[2067]: query[AAAA] time.apple.com.hsd1.ca.comcast.net from 10.0.1.1
Nov  2 17:29:21 raspberrypi dnsmasq[2067]: forwarded time.apple.com.hsd1.ca.comcast.net to 173.230.156.28
Nov  2 17:29:21 raspberrypi dnsmasq[2067]: forwarded time.apple.com.hsd1.ca.comcast.net to 23.226.230.72
Nov  2 17:29:21 raspberrypi dnsmasq[2067]: forwarded time.apple.com.hsd1.ca.comcast.net to 8.8.8.8
Nov  2 17:29:21 raspberrypi dnsmasq[2067]: forwarded time.apple.com.hsd1.ca.comcast.net to 8.8.4.4
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: query[A] north-america.pool.ntp.org from 10.0.1.59
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: forwarded north-america.pool.ntp.org to 8.8.4.4
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: forwarded north-america.pool.ntp.org to 8.8.8.8
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: forwarded north-america.pool.ntp.org to 23.226.230.72
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: forwarded north-america.pool.ntp.org to 173.230.156.28
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: query[TXT] push.apple.com from 10.0.1.3
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: forwarded push.apple.com to 8.8.8.8
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: forwarded push.apple.com to 23.226.230.72
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: forwarded push.apple.com to 173.230.156.28
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: forwarded push.apple.com to 8.8.4.4
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: query[AAAA] time.apple.com.hyrule.home from 10.0.1.14
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: config time.apple.com.hyrule.home is NXDOMAIN-IPv6
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: query[A] time.apple.com.hyrule.home from 10.0.1.14
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: config time.apple.com.hyrule.home is NXDOMAIN-IPv4
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: query[AAAA] time.apple.com from 10.0.1.14
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: forwarded time.apple.com to 8.8.4.4
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: forwarded time.apple.com to 8.8.8.8
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: forwarded time.apple.com to 23.226.230.72
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: forwarded time.apple.com to 173.230.156.28

РЕДАКТИРОВАТЬ: Я решил просто сбросить пи в Rasbian по умолчанию, потому что я много экспериментировал на нем, поэтому я хотел удалить любые другие переменные. Я пошел вперед и загрузил минибьян и установил dnsmasq. Я отредактировал свой resolv.conf так, чтобы он выглядел так (спасибо @Chuck Kollars за указание, что этот файл действительно делал):

domain hyrule.home
search hyrule.home
nameserver XXX.XXX.X.4

и только установите мой dnsmasq.conf для запроса к этим серверам имен (по умолчанию читая мой файл hosts):

server=/localnet/192.168.0.1 <--- still have the feeling this isn't right
## DNS SERVERS
#openNic california
server=173.230.156.28

#openNic Washington
server=23.226.230.72

В моем файле hosts у меня также были псевдонимы, настроенные как предложенный @Chuck Kollars , с форматом

<ipv4>   <subdomain>  <fqdn>

В этот момент у меня все еще были проблемы, и я заметил, что всякий раз, когда я пинговал что-то вроде "башни", dnsmasq пытался разрешить «tower.hsdn.comcast.com» или что-то в этом роде, перенаправляя его на внешние серверы имен потому что это не решило внутренне. Часть comcast выглядела знакомой, поэтому в моей утилите аэропорта (5.6.1) на вкладке Интернет в разделе TCP/IP этот же адрес был заполнен в поле "Имя домена" (ghosted, как будто он был унаследован), поэтому я изменил его также быть hyrule.home, и все работало, как ожидалось!

Я все еще не понимаю, почему это имя домена должно быть в маршрутизаторе, и почему оно не учитывается в файле resolv.conf ...

1 ответ1

3

Хотя я не могу понять все детали, почему ваша система плохо себя ведет, у меня есть следующие предложения о том, на что вы могли бы с пользой смотреть:

1) Dnsmasq использует /etc/resolv.conf только для запросов, отправленных на тот же компьютер - запросы со всех других компьютеров отправляются непосредственно в Dnsmasq. Поэтому /etc/resolv.conf обычно содержит указатель на сервер имен 127.0.0.1, чтобы получать запросы, поступающие из приложений на этом компьютере, в Dnsmasq. На самом деле, /etc/resolv.conf может даже быть перезаписан при запуске Dnsmasq. Будьте очень осторожны с размещением рабочих инструкций в /etc/resolv.conf; в частности, я не думаю, что «домен hyrule.home» делает то, что вы думаете, он делает для некоторых из ваших хостов.

2) Другой способ обработки локальных коротких имен (способ, которым я это делаю), заключается в том, чтобы явно поместить как короткое, так и длинное имя каждой локальной машины в /etc /hosts (вместо того, чтобы полагаться на какой-либо программный механизм), что-то вроде этого:

XXX.XXX.X.1   router router.hynet.home
XXX.XXX.X.3   tower tower.hynet.home
XXX.XXX.X.4   pi pi.hynet.home

3) Я не слишком уверен, для чего предназначено определение, приравнивающее "raspberrypi" к "localhost". Я бы боялся такой эквивалентности, которая иногда приводила бы к неправильному ответу на неправильную систему в неподходящее время, что приводило к тому, что некоторые запросы выполнялись в файле раунда, а не там, где они должны были быть. Моя система работает без такого определения.

4) Для ясности в ваших различных журналах, вы можете также хотеть определить "localnet" (аналогично вашему определению «ip6-localnet»). Вы ожидаете, что это будет в /etc /networks ... и на самом деле это может работать. Но Dnsmasq сам смотрит только на /etc /hosts, поэтому вам, возможно, придется вместо этого поместить определение в /etc /hosts, даже если это для сети, что-то вроде этого:

XXX.XXX.X.0 localnet hynet.home

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .