Você pode tentar
search . domainname.ext
para ver se apenas adicionamos o '.' trabalho. Também
$ ping vanja.
daria algumas pistas.
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%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.