Mac parece ignorar el resultado del DNS local para los hosts locales

0

Tengo un servidor (que ejecuta Ubuntu 16.04) en mi red local, que entre otras cosas, ejecuta DMSmasq. Mi dominio local es njj.chickenkiller.com.

Funcionando en mi Mac, si consulta el DNS, devuelve la dirección LAN de varias máquinas en mi red. Por ejemplo:

beethoven:~ nick$ dig serv2.njj.chickenkiller.com

; <<>> DiG 9.8.3-P1 <<>> serv2.njj.chickenkiller.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36867
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;serv2.njj.chickenkiller.com.   IN  A

;; ANSWER SECTION:
serv2.njj.chickenkiller.com. 0  IN  A   192.168.2.4

;; Query time: 82 msec
;; SERVER: 192.168.2.4#53(192.168.2.4)
;; WHEN: Fri Aug 11 14:22:39 2017
;; MSG SIZE  rcvd: 61

y en este ejemplo, mi Mac puede resolver correctamente, usando el DNS predeterminado, la dirección de serv2 en mi LAN.

Sin embargo, cuando uso otros comandos (por ejemplo, ping) a veces se resuelven correctamente:

beethoven:~ nick$ ping serv2.njj.chickenkiller.com
PING serv2.njj.chickenkiller.com (192.168.2.4): 56 data bytes
64 bytes from 192.168.2.4: icmp_seq=0 ttl=64 time=0.832 ms

otras veces, mi Mac parece ignorar el resultado del DNS local (que es el único servidor de nombres que está configurado para usar) y de alguna manera se las arregla para usar la dirección WAN (que obtendría si consultara otro DNS) :

beethoven:lib nick$ ping serv2
PING njj.chickenkiller.com (90.255.91.177): 56 data bytes
64 bytes from 90.255.91.177: icmp_seq=0 ttl=64 time=2.140 ms

Por lo que puedo decir, el servidor DNS local funciona correctamente: siempre devuelve la dirección LAN (192.168.2.4) y nunca devuelve la dirección WAN (90.255.91.177). También tengo una máquina con Windows 7 y Linux corriendo en la red cuando uso el comando ping (o cualquier otro comando), siempre usan la dirección LAN (192.168.2.4), por lo que asumo que esto es algo específico de macOS.

¿Por qué es esto importante para mí? El enrutador que tengo de mi ISP descarta los paquetes de la LAN que intenta acceder a las máquinas usando la dirección WAN. Esto significa que los comandos que acceden a otras máquinas en la red fallan. por ejemplo:

beethoven:lib nick$ ssh serv2
ssh: connect to host serv2 port 22: Connection refused

Estoy usando macOS 10.12.6

Cualquier sugerencia sobre cómo debo configurar mi Mac para que solo use el DNS configurado para resolver los hosts se recibirá con gratitud.

EDITAR: ¿Cuál es mi dominio de búsqueda ?: En la página de configuración de red, el servidor DNS se muestra como 192.168.2.4 y el dominio de búsqueda se muestra como njj.chickenkiller.com

EDIT 2: Salida de comandos:

beethoven:bin nick$ networksetup -listallnetworkservices
An asterisk (*) denotes that a network service is disabled.
Wi-Fi
*Bluetooth PAN
*Thunderbolt Bridge
beethoven:bin nick$ networksetup -getsearchdomains  Wi-Fi
There aren't any Search Domains set on Wi-Fi.

EDIT 3: dnsmasq.conf (de ubuntu 16.04 host, "serv2")

# Use google open DNS name servers (avoids the risk of a router attack)
server=/#/8.8.8.8
server=/#/8.8.4.4

# Do not use /etc/hosts, but serve hostnames from /etc/hosts.dnsmasq
no-hosts
addn-hosts=/etc/hosts.dnsmasq
local-ttl=105

# expand unqualified hostnames to suffix njj.chickenkiller.com
expand-hosts
domain=njj.chickenkiller.com

# turn on dhcp (limit leases to 12hours so updates dont need a restart)
dhcp-range=192.168.2.10,192.168.2.99,12h

# and redirect all gateway requests through router
dhcp-option=option:router,192.168.2.1

# and offer a time server
dhcp-option=option:ntp-server,192.168.2.4

# and we are the *only* dns server
dhcp-option=option:dns-server,192.168.2.4
    
pregunta Nick Sillito 12.08.2017 - 11:40

1 respuesta

0

Esto me ha estado volviendo loca por años, de todos modos, creo que me he topado con la solución.

La forma en que configuré mi DNS dinámico era que serv2.njj.chickenkiller.com era un alias para njj.chickenkiller.com (probablemente no sea la mejor forma de hacerlo, pero eso significaba que serv2 manejaba todas las solicitudes de njj.chickenkiller.com.

Entonces, cuando consulta el servidor:

beethoven:~ nick$ host serv2
serv2.njj.chickenkiller.com has address 192.168.2.4
serv2.njj.chickenkiller.com is an alias for njj.chickenkiller.com.

Entonces, lo que creo que está sucediendo es que mDNSresponder fue lo suficientemente inteligente como para almacenar en caché njj.chickenkiller.com como un alias (y supongo que esto no sucede en Windows y Linux), por lo que cuando se realizó una búsqueda de DNS posterior serv2, intentó ahorrar tiempo enviando una consulta para njj.chickenkiller.com (no serv2... ), que se ha almacenado en caché como el alias. Mi servidor DNS local no reconoció njj.chickenkiller.com como parte del dominio local y respondió proporcionando la dirección IP externa.

Para resolver esto, agregué njj.chickenkiller.com como un alias para serv2 en el archivo de hosts usado por dnsmasq:

# Fixed IP machines
192.168.2.1 gateway
192.168.2.2 wifi1
192.168.2.3 wifi2
192.168.2.4 serv2   njj.chickenkiller.com
    
respondido por el Nick Sillito 02.09.2017 - 18:49

Lea otras preguntas en las etiquetas