DD-WRT: dnsmasq maux de tête avec hôtes statiques

J'utilise dd-wrt (r23503, pour mémoire) sur mon nouveau routeur Asus RT-AC56U. Malheureusement, la configuration de dnsmasq ne me donne que des maux de tête. Voici ce que je veux :

  • Les requêtes DNS du LAN / WLAN pour les hôtes sur le LAN / WLAN doivent être répondues pour les noms courts et les FQDN.
  • Étant donné que certains des périphériques sont portables (comme mon téléphone), j'ai besoin d'host.mydyndomain.net pour résoudre un IP LAN lorsqu'il est connecté au réseau local et à l'IP externe lorsqu'on l'interroge de l'extérieur du réseau local.

Mais voici ce que j'ai actuellement:

  • Les requêtes pour les hôtes loués par DHCP sont correctement retournées (l'option "DNS local" de dd-wrt pour dnsmasq).
  • Les requêtes vers un hôte non existant aléatoire renvoient incorrectement l'adresse IP WAN externe. Ainsi, "nslookup foobarbaz" donne un résultat lorsqu'il doit renvoyer une erreur.

En ce qui concerne mes hôtes avec des IP statiques, je n'ai pas encore trouvé de solution adéquate. J'ai lu la page de manuel dnsmasq et, d'après ce que je peux dire, le choix correct est l'option "enregistrement d'hôte".

La configuration liée à dnsmasq dans dd-wrt (sous l'onglet Services) est:
Section "Serveur DHCP":
Domaine utilisé: WAN
Domaine LAN: [vide]
Options DHCPd supplémentaires: [vide]
Une location statique est définie.

Section "DNSMasq":
DNSMasq: activé
DNS local: activé
Pas de réinvestissement DNS: activé
Options supplémentaires de DNSMasq:
Host-record = myhost, myhost.mydyndomain.net, 192.168.1.1
[Plusieurs autres entrées d'enregistrement d'hôte pour les autres hôtes avec IP LAN statiques]

Malheureusement, mettre ces lignes d'enregistrement hôte dans la zone des options supplémentaires semble rompre complètement dnsmasq et rien ne peut se connecter au LAN / WLAN via DHCP. Une fois que je vide le contenu de la boîte, DHCP recommence à fonctionner.

Mon fichier dnsmasq.conf est le suivant:

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 

Le fichier /etc/resolv.conf est:

 search ph.cox.net nameserver 192.168.1.1 

Et le fichier /tmp/resolv.dnsmasq est:

 nameserver 208.67.222.222 nameserver 208.67.220.220 nameserver 68.105.28.13 

Un autre problème plus petit, mais non lié: sur la page "configuration de base" de dd-wrt dans la section de configuration DHCP, j'ai entré les IP pour les serveurs OpenDNS (comme vous pouvez le voir ci-dessus). Je préférerais simplement utiliser ces deux serveurs de noms, mais le serveur de noms est automatiquement identifié comme le troisième serveur de noms. Existe-t-il un moyen de dire à dd-wrt d'ignorer les informations DNS qu'il reçoit lors de l'acquisition d'une location DHCP à partir du modem / fournisseur de services Internet?

Alors … qu'est ce que je fais mal? De toute évidence, dnsmasq n'est pas satisfait des entrées de l'enregistrement de l'hôte, mais quelle est la bonne option à utiliser? Je place cette information dans cet emplacement plutôt que / etc / hosts puisque ce dernier est un fichier généré et n'est pas facilement modifié via l'interface Web. Bien sûr, je peux facilement l'éditer en me connectant via SSH, mais mes modifications ne seront pas persistantes.

J'ai un peu d'expérience avec dnsmasq sur dd-wrt et surtout près de la date de ce commentaire. Je peux partager avec vous ma solution de travail pour chacune des réponses à chaque exigence. Je résisterai à ajouter plus.

Chaque option dans votre /tmp/dnsmasq.conf actif posté ci-dessus vient directement des options de configuration que vous avez sélectionnées comme décrit

Sauf

Pour votre nom d'hôte = entrée que vous ne devez pas utiliser imo. Tu veux

Domaine utilisé: [WAN/LAN] Domaine non utilisé [WAN] .

Cela permettra aux périphériques câblés (LAN) et sans fil (WAN) de fonctionner sur votre réseau.

Choisissez également un court-métrage Lan: [dom ] ou tout mot court en plus de local . Certaines personnes utilisent un langage local . Ceci est requis pour vos besoins et fournira un domaine unique d'ancrage faux interne que seul vous et les internautes verrez / utilisez. La valeur que vous choisissez sera placée dans le résolveur de search dom de chaque client DHCP. Je vais utiliser dom pour le reste, mais vous pouvez le faire tout ce que vous voulez.

Je commencerai par les deux premières exigences.

  1. Les requêtes DNS du LAN / WLAN pour les hôtes sur le LAN / WLAN doivent être répondues pour les noms courts et les FQDN.

  2. Étant donné que certains des périphériques sont portables (comme mon téléphone), j'ai besoin d'host.mydyndomain.net pour résoudre un IP LAN lorsqu'il est connecté au réseau local et à l'IP externe lorsqu'on l'interroge de l'extérieur du réseau local.

Pour les hôtes possédant un IP interne différent mais un même nom des deux côtés de dd-wrt, vous devez avoir:

  • Ajoutez une ligne par hôte résoluble dans vos Static Leases juste en dessous de votre zone de texte Additional DHCP Options correctement vide. Notez le nom interne web.dom ou simplement le web est pour la commodité sur la langue.

Remarque:

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

Notes: Je pensais que cela était utilisé uniquement pour udhcpcd, mais cela est également utilisé par dnsmasq et écrira à la fois le dnsmasq.conf réel avec dnsmasq.conf dhcp-host= lines correct et met une entrée `ip host.dom pour chaque / tmp / hosts utilisé Par DNSMasq pour faire toute la résolution de nom local.

J'ai un script et un fichier texte pour créer ces entrées car l'interface Web est un peu lourde. Voici ce que le script fait en un mot.

 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" 
  • Ajoutez une address=/web.dynip.org/<ip> dans votre adresse de boîte de dialogue DNSMasq Options = / web.mydyndomain.net / 192.168.2.5 # ajoutez autant de ces que vous avez besoin

  • Enfin, vous devez mettre à jour votre configuration DDNS pour fournir le service DDNS cartographique que votre FAI externe a fourni une adresse IP dynamique pour résoudre en tant que web.mydyndomain.net . Je présume que vous avez configuré cette partie avec succès.

Avec cette configuration, vous pouvez faire un ping web ou ping web.dom ou ping. web.mydyndomain.net renverra 192.168.2.5 alors qu'il se trouve dans le pare-feu et l'accès depuis l'extérieur par le nom web.mydyndomain.org fonctionne toujours.

Les autres exigences sont remplies par votre autre configuration, mais vous pouvez ajouter ces lignes en toute sécurité, car j'ai testé beaucoup de fois (au point d'écrire un script pour exécuter une ligne dnsmasq à la fois et de me montrer la ligne offensante puisque TOUTE l'ouverture de DNS est laissée Pour l'espace dans ma dernière compilation dnsmasq et tout ce que vous pouvez compter est l'état de retour du dnsmasq: $?).

Pour les dernières requêtes, je vais vous montrer les lignes de ma config avec des commentaires (notez que vous pouvez mettre des commentaires dans la zone Options DNSMasq supplémentaires).

  1. Les requêtes pour les hôtes loués par DHCP sont correctement retournées (l'option "DNS local" de dd-wrt pour dnsmasq).
  2. Les requêtes vers un hôte non existant aléatoire renvoient incorrectement l'adresse IP WAN externe. Ainsi, "nslookup foobarbaz" donne un résultat lorsqu'il doit renvoyer une erreur.
  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 

Je vais jeter des cadeaux non liés de valeur douteuse (et pour la sauvegarde hors site).

  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 

Pour limiter le nombre de serveurs DNS que vous pouvez faire avec les options dhcp = 6 comme suit:

Dhcp-options = lan, 6,8.8.8.8 # cela n'émettra qu'une seule entrée de serveur de noms pour tous les hôtes