ping não resolve o host - sempre anexa um domínio

4

O problema parece ser relativamente fácil, mas não consigo encontrar uma boa solução.

Configuração

Eu tenho o servidor DHCP e DNS local em execução no roteador ADSL. Ele atribui endereços IP a hosts locais e também mantém registros DNS para IPs atribuídos.

Este modem também se registra via serviços DynDNS.

Vamos supor que não tenho controle sobre esse modem, pois ele atende a vários grupos.

Problema

Quando olho o host via nslookup , tudo funciona bem:

$ nslookup vanja
Server:         192.168.1.1
Address:        192.168.1.1#53

Name:   vanja
Address: 192.168.1.12

mas com ping falha:

$ ping vanja
ping: unknown host vanja

Isso acontece porque ping acrescenta o domínio local ao host, mas o servidor DNS não conhece esse domínio (e não tenho como defini-lo), consulte Saída de strace:

$ strace ping vanja
open("/lib/i686/cmov/libnss_dns.so.2", O_RDONLY) = 4
stat64("/etc/resolv.conf", {st_mode=S_IFREG|0644, st_size=23, ...}) = 0
socket(PF_INET, SOCK_DGRAM|SOCK_NONBLOCK, IPPROTO_IP) = 4
connect(4, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.1.1")}, 28) = 0
send(4, "7N
$ hostname
centurion.dynalias.com
$ cat /etc/resolv.conf
nameserver 192.168.1.1
$ grep hosts /etc/nsswitch.conf
hosts:          files dns
$ nslookup vanja
Server:         192.168.1.1
Address:        192.168.1.1#53

Name:   vanja
Address: 192.168.1.12
$ ping vanja
ping: unknown host vanja
$ strace ping vanja
open("/lib/i686/cmov/libnss_dns.so.2", O_RDONLY) = 4
stat64("/etc/resolv.conf", {st_mode=S_IFREG|0644, st_size=23, ...}) = 0
socket(PF_INET, SOCK_DGRAM|SOCK_NONBLOCK, IPPROTO_IP) = 4
connect(4, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.1.1")}, 28) = 0
send(4, "7N
$ hostname
centurion.dynalias.com
$ cat /etc/resolv.conf
nameserver 192.168.1.1
$ grep hosts /etc/nsswitch.conf
hosts:          files dns
%pre%%pre%%pre%%pre%%pre%%pre%%pre%vanjadynaliascom%pre%"..., 36, MSG_NOSIGNAL) = 36 recvfrom(4, "7N13%pre%%pre%%pre%%pre%%pre%%pre%vanjadynaliascom%pre%"..., 1024, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.1.1")}, [16]) = 97
%pre%%pre%%pre%%pre%vanjadynaliascom%pre%"..., 36, MSG_NOSIGNAL) = 36 recvfrom(4, "7N13%pre%%pre%%pre%%pre%%pre%%pre%vanjadynaliascom%pre%"..., 1024, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.1.1")}, [16]) = 97

Observe também que nslookup vanja.dynalias.com também falhará pelo mesmo motivo: o DNS mapeia somente IPs dinamicamente atribuídos a nomes curtos de PC (que são passados de estações de trabalho MS Windows).

Quando eu configuro o nome do host para o nome sem domínio ( # hostname centurion ) o ping começa a funcionar magicamente, mas não consigo deixar o nome do host não no formulário FQDN, pois isso pode confundir o apache & postfix ou quebrar outras coisas.

Pergunta: Como posso fazer com que ping trabalhe em conjunto com o nome do host no formulário do FQDN?

Observação: minhas tentativas de jogar com as opções search e domain de /etc/resolv.conf não foram bem-sucedidas. Meu objetivo era forçar a biblioteca do NSS não a adicionar o nome do domínio ao argumento passado, ou melhor, fazer duas tentativas: sem e com o domínio anexado.

Configurações relativas

%pre%     
por dma_k 09.02.2010 / 13:05

2 respostas

3

Você pode tentar

search . domainname.ext

para ver se apenas adicionamos o '.' trabalho. Também

$ ping vanja.

daria algumas pistas.

    
por 09.02.2010 / 16:34
1

Seu caminho de pesquisa do resolvedor precisa ser definido.

Em /etc/resolv.conf, adicione a linha:

search domainname.ext

(Claro, substitua domainname.net acima pelo seu nome de domínio).

Isso garantirá que ping hostname também procure hostname.domainname.ext . Observe que você pode adicionar vários nomes de domínio ao caminho de pesquisa, se desejar.

    
por 09.02.2010 / 13:34

Tags