6

Я использую dd-wrt (r23503, для записи) на моем новом маршрутизаторе Asus RT-AC56U. К сожалению, конфигурация dnsmasq не дает мне ничего, кроме головной боли. Вот что я хочу:

  • На запросы DNS от LAN/WLAN для хостов в LAN/WLAN следует отвечать как для коротких имен, так и для полных доменных имен.
  • Поскольку некоторые из устройств являются портативными (например, мой телефон), мне нужен host.mydyndomain.net для разрешения IP-адреса локальной сети при подключении к локальной сети и внешнего IP-адреса при запросе извне локальной сети.

Но вот что я сейчас получаю:

  • Запросы для арендованных узлов DHCP возвращаются правильно (опция dd-wrt "Local DNS" для dnsmasq).
  • Запросы к любому случайному несуществующему хосту неверно возвращают внешний IP-адрес в глобальной сети. Таким образом, "nslookup foobarbaz" дает результат, когда он должен вернуть ошибку.

Что касается моих хостов со статическими IP-адресами, я еще не нашел адекватного решения. Я прочитал справочную страницу dnsmasq, и из того, что я могу сказать, правильный выбор - опция "host-record".

Конфигурация, связанная с dnsmasq в dd-wrt (на вкладке Services):
Раздел «DHCP-сервер»:
Используемый домен: WAN
Домен LAN: [пусто]
Дополнительные параметры DHCPd: [пусто]
Определена одна статическая аренда.

Раздел "DNSMasq":
DNSMasq: включено
Локальный DNS: включен
Нет повторной привязки DNS: включено
Дополнительные параметры DNSMasq:
хост-запись = MyHost, myhost.mydyndomain.net, 192.168.1.1
[еще несколько записей записей узла для других узлов со статическими IP-адресами локальной сети]

К сожалению, помещение этих строк записи узла в поле дополнительных опций, кажется, полностью нарушает dnsmasq, и тогда ничто не может соединиться с LAN/WLAN через DHCP. Как только я очищаю содержимое коробки, DHCP снова начинает работать.

Мой файл dnsmasq.conf выглядит следующим образом:

interface=br0
resolv-file=/tmp/resolv.dnsmasq
all-servers
domain=mydyndomain.net
dhcp-leasefile=/tmp/dnsmasq.leases
dhcp-lease-max=51
dhcp-option=lan,3,192.168.1.1
dhcp-authoritative
dhcp-range=lan,192.168.1.100,192.168.1.149,255.255.255.0,1440m
dhcp-host=88:53:2E:9B:3E:80,Redtail,192.168.1.5,1440m
stop-dns-rebind

Файл /etc/resolv.conf:

search ph.cox.net
nameserver 192.168.1.1

И файл /tmp/resolv.dnsmasq:

nameserver 208.67.222.222
nameserver 208.67.220.220
nameserver 68.105.28.13

Еще одна небольшая, но не связанная с этим проблема: на странице "базовой настройки" dd-wrt в разделе конфигурации DHCP я ввел IP-адреса для серверов OpenDNS (как вы можете видеть выше). Я бы предпочел просто использовать эти два сервера имен, но сервер имен автоматически добавляется в качестве третьего сервера имен. Есть ли способ указать dd-wrt игнорировать информацию DNS, которую он получает при получении аренды DHCP от модема /ISP?

Итак ... что я делаю не так? Очевидно, что dnsmasq не в восторге от записей записей хоста, но какой правильный вариант использовать? Я помещаю эту информацию в это место, а не в /etc /hosts, поскольку последний является сгенерированным файлом, и его нелегко изменить через веб-интерфейс. Конечно, я могу легко отредактировать его, подключившись через SSH, но мои изменения не будут постоянными.

1 ответ1

8

У меня достаточно опыта работы с dnsmasq на dd-wrt и особенно близко к дате этого комментария. Я могу поделиться с вами своим рабочим решением для каждого из ответов на каждое требование. Я буду сопротивляться, добавляя больше.

Каждый параметр в вашем активном /tmp/dnsmasq.conf, опубликованном выше, напрямую зависит от параметров конфигурации, которые вы выбрали, как описано

Кроме

для вашего имени хоста = запись, которую вы не должны использовать IMO. Ты хочешь

Используемый домен: [WAN/LAN] не используется Домен [WAN].

Это позволит проводным (LAN) и беспроводным (WAN) устройствам работать в вашей сети.

Также выберите короткий домен Lan: [dom ] или любое короткое слово помимо местного. Некоторые используют LAN, некоторые используют localdomain. Это необходимо для ваших требований и предоставит якорный поддельный внутренний домен, который будут видеть / использовать только вы и внутренние пользователи. Значение, которое вы выберете, будет введено в каждый распознаватель домена search dom DHCP-клиента. Я буду использовать дом для остатка, но вы можете сделать это как угодно.

Я начну с первых двух требований.

  1. На запросы DNS от LAN/WLAN для хостов в LAN/WLAN следует отвечать как для коротких имен, так и для полных доменных имен.

  2. Поскольку некоторые из устройств являются портативными (например, мой телефон), мне нужен host.mydyndomain.net для разрешения IP-адреса локальной сети при подключении к локальной сети и внешнего IP-адреса при запросе извне локальной сети.

Для хостов, имеющих разные внутренние и внешние ip, но с одинаковыми именами на обеих сторонах dd-wrt, вам необходимо иметь:

  • Добавьте одну строку для каждого разрешимого хоста в вашей Static Leases чуть ниже вашей правильно пустой текстовой области Additional DHCP Options . Обратите внимание, что внутреннее имя web.dom или просто web предназначено для удобства в локальной сети .

Замечания:

 [Static Leases++++++++++++++++++++++++++++++++++++++++++++++++++++++++]    
  [MAC Address]       [Host Name   ][IP Address    ][Client Lease Time]
  [00:19:B9:5B:2B:A5] [web         ][192.168.2.5   ][             1440]

Примечания: я думал, что это использовалось только для udhcpcd, но он также используется dnsmasq и запишет как фактический dnsmasq.conf с правильными строками dhcp-host= и помещает запись `ip host.dom для каждого используемого в /tmp /hosts DNSMasq, чтобы сделать все локальные разрешения имен.

У меня есть сценарий и текстовый файл для создания этих записей, так как веб-интерфейс немного громоздок. Вот что скрипт делает в двух словах.

macToHostNames.txt:
# comment lines ignored unless embedded set:tag values like set:kids 
# note the ip is just the HOST portion of the subnet, eg: 192.168.1.32 -> 1.32
# host      id       mac address        cnames/aliases for same box
kidhost1    1.32     00:MA:CA:DD:E5     alias1 nabi2 # in-line comment set:kid 
web         1.5      00:AM:AC:AD:ES     www homeweb  # web server with aliases
EOF
generate_Files_Then_Send_Then_Activate_If_Tests_Are_Ok.sh < macToHostNames.txt
# this script file creates 3 files which are sent along with a test script:
dnsmasq_options.new # nvram set dnsmasq_options="$(cat dnsmasq_options.new)"
static_leases.new   # nvram set static_leases="$(cat static_leases.new)"
static_leasenum.new # nvram set static_leasenum="$(cat static_leasnum.new)"
testDnsMasqOpts.sh  # scp -p *.new test*.sh admin@gw:/tmp && ssh admin@gw "/tmp/test*.sh" 
  • добавьте address=/web.dynip.org/<ip> в поле параметров DNSMasq address =/web.mydyndomain.net/192.168.2.5 # добавьте столько, сколько вам нужно

  • наконец, вам нужно обновить конфигурацию DDNS чтобы обеспечить службу DDNS, сопоставляющую вашему внешнему провайдеру динамический IP-адрес для разрешения как web.mydyndomain.net . Я полагаю, вы успешно настроили эту часть.

С этой конфигурацией вы можете пропинговать ping web или ping web.dom или ping web.mydyndomain.net вернет 192.168.2.5 находясь внутри брандмауэра, и доступ извне под именем web.mydyndomain.org все еще работает.

Другие требования выполняются вашим другим конфигом, но вы можете смело добавлять эти строки, как я проверял МНОГИЕ раз (до момента написания скрипта для выполнения одной строки dnsmasq за раз и показа мне строки с ошибками, так как ВСЕ записи dns оставлены не хватает места в моей последней сборке dnsmasq, и все, на что вы можете положиться, это возвращаемый статус dnsmasq: $?).

Для последних требований я покажу вам строки моего конфига с комментариями (обратите внимание, что вы можете поместить комментарии в поле Дополнительные параметры DNSMasq).

  1. Запросы для арендованных узлов DHCP возвращаются правильно (опция dd-wrt "Local DNS" для dnsmasq).
  2. Запросы к любому случайному несуществующему хосту неверно возвращают внешний IP-адрес в глобальной сети. Таким образом, "nslookup foobarbaz" дает результат, когда он должен вернуть ошибку.
  domain-needed    # dont fwd to ext DNS names with no domain
  address=/web.mydnsdomain.org/192.168.2.5 # resolve to this internally!
  expand-hosts     # add .dom to host names without a domain 
  local=/dom/      # map all host.dom request to *this* dns
  bogus-priv       # reject local lookups not in hosts
  localise-queries # for local servers

Я добавлю некоторые несвязанные халявы сомнительной ценности (и для резервного копирования вне сайта).

 no-ping          # some swear by this one to get DNSMasq to work!
 filterwin2k      # junk from MSFT boxen (remove this if ldap SRV used)
 cache-size=3000  # fast local DNS lookups 
 clear-on-reload  # clear ifr.c changes and sig received 

Чтобы ограничить количество DNS-серверов, вы можете сделать это с помощью dhcp-options = 6 следующим образом:

dhcp-options = lan, 6,8.8.8.8 # это отправит только одну запись сервера имен для всех хостов

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