Como tornar uma máquina acessível a partir da LAN usando seu nome de host

120

Aqui estão os detalhes da máquina que eu quero acessar usando o nome do host:

$ hostname
hostname
$ cat /etc/hosts
127.0.0.1   localhost
127.0.1.1   hostname.company.local  hostname

É uma instalação padrão do Debian 6 (Squeeze), então eu não brinquei com nada ainda.

Isto é o que eu recebo de uma máquina (executando o Debian Unstable) tentando acessar a máquina acima:

$ ping hostname
ping: unknown host hostname
$ ping hostname.company.local
ping: unknown host hostname.company.local
$ cat /etc/resolv.conf
nameserver 192.168.2.21
nameserver 192.168.2.51
search company.local
tshepang
fonte
Você precisa fazer algo no cliente (a máquina em que você executa ping) ou em uma máquina que o cliente consulta. O que é o sistema operacional no cliente? Qual é a sua configuração de DNS?
Gilles
O que é uma configuração de DNS? Veja também a publicação atualizada.
tshepang 18/07/11
1
Minha resposta é o tipo de coisa que você buscava? Se assim for, a questão precisa simplificar - que sabe sobre pinge /etc/hostsmas não sobre DNS de qualquer maneira?
Gilles
Muito obrigado. Vai dar uma olhada. Oh, e é mais um artigo que uma resposta :)
tshepang
3
A resposta é "instalar e configurar o dnsmasq". Feito. :)
Warren Young

Respostas:

145

Na Internet, incluindo redes locais, as máquinas se chamam por endereços IP . Para acessar a máquina B a partir da máquina A, usando o nome da máquina B, a máquina A precisa ter uma maneira de mapear o nome de B para seu endereço IP. Existem três maneiras de declarar nomes de máquinas em A:

  • um arquivo de hosts . Este é um arquivo de texto simples que mapeia nomes para endereços.
  • o sistema de nomes de domínio (DNS) . Este é o método usado na Internet global. Por exemplo, quando você carrega esta página em um navegador, a primeira coisa que seu computador faz é fazer uma solicitação de DNS para saber o endereço de unix.stackexchange.com.
  • outros bancos de dados de nomes, como NIS , LDAP ou Active Directory . Eles são usados ​​em algumas redes corporativas, mas não com muita frequência (muitas redes que usam NIS, LDAP ou AD para bancos de dados de usuários usam DNS para nomes de máquinas). Se sua rede usa um desses, você tem um administrador de rede profissional e deve perguntar a ele o que fazer.

Existem muitas maneiras pelas quais elas podem funcionar na prática; é impossível cobrir todos eles. Nesta resposta, descreverei algumas situações comuns.

Arquivo Hosts

O método do arquivo hosts tem a vantagem de não exigir nenhum método especial. Pode ser complicado se você tiver várias máquinas, porque é necessário atualizar todas as máquinas quando o nome de uma máquina mudar. Não é adequado se o endereço IP de B for atribuído dinamicamente (para que você obtenha um diferente sempre que se conectar à rede).

Um arquivo hosts é uma lista simples de linhas que mapeiam nomes para endereços IP. Se parece com isso:

127.0.0.1       localhost localhost.localdomain
198.51.100.42   darkstar darkstar.bands

Em sistemas unix, o arquivo hosts é /etc/hosts. No Windows, é c:\windows\system32\drivers\etc\hosts. Quase todos os sistemas operacionais que você pode conectar à Internet têm um arquivo semelhante; A Wikipedia tem uma lista .

Para adicionar uma entrada para B no arquivo de hosts de A:

  1. Determine o endereço IP de B. Em B, execute o comando ifconfig(se o comando não for encontrado, tente /sbin/ifconfig). A saída conterá linhas como esta:

    eth1      Link encap:Ethernet  HWaddr 01:23:45:67:89:ab
              inet addr:10.3.1.42  Bcast:10.3.1.255  Mask:255.255.255.0
    

    Neste exemplo, o endereço IP de B é 10.3.1.42. Se houver várias inet addr:linhas, escolha aquela que corresponda à sua placa de rede, nunca a loentrada ou um túnel ou entrada virtual.

  2. Edite o arquivo hosts em A. Se A estiver executando algum sistema unix, você precisará editar /etc/hostscomo superusuário; consulte Como executo um comando como administrador do sistema (raiz) .

DHCP + DNS em redes domésticas ou de pequenos escritórios

Este método é de longe o mais simples se você tiver o equipamento necessário. Você só precisa configurar um dispositivo e todos os seus computadores saberão os nomes um do outro. Esse método pressupõe que seus computadores obtenham seus endereços IP por DHCP , que é um método para os computadores recuperarem automaticamente um endereço IP quando se conectam à rede. Se você não sabe o que é o DHCP, eles provavelmente sabem.

Se sua rede possui um roteador doméstico , é o melhor lugar para configurar nomes para máquinas conectadas a esse roteador. Primeiro, você precisa descobrir o endereço MAC de B. Cada dispositivo de rede possui um endereço MAC exclusivo. Em B, execute o comando ifconfig -a(se o comando não for encontrado, tente /sbin/ifconfig -a). A saída conterá linhas como esta:

    eth1      Link encap:Ethernet  HWaddr 01:23:45:67:89:ab

Neste exemplo, o endereço MAC é 01:23:45:67:89:ab. Você deve escolher a linha HWaddr que corresponde à porta de rede conectada ao roteador através de um cabo (ou a placa wifi, se você estiver conectado via wifi). Se você possui várias entradas e não sabe qual é qual, conecte o cabo e veja qual dispositivo de rede recebe um endereço IP ( inet addrlinha logo abaixo).

Agora, na interface da web do seu roteador, procure uma configuração como “DHCP”. O nome e o local da configuração dependem completamente do modelo do roteador, mas a maioria possui um conjunto semelhante de configurações básicas. Aqui está o que parece em um firmware Tomato :

captura de tela de tomate

Digite o endereço MAC, um endereço IP e o nome desejado. Você pode escolher qualquer endereço IP no intervalo de endereços da sua rede local. A maioria dos roteadores domésticos é pré-configurada para um intervalo de endereços do formato 192.168. x . y ou 10. x . y . z . Por exemplo, no roteador Tomato mostrado acima, na guia "Rede", há uma configuração de "endereço IP do roteador" com o valor 10.3.0.1 e uma configuração de "máscara de sub-rede" com o valor 255.255.255.0, o que significa que os computadores em a rede local deve ter um endereço no formato 10.3.0. z . Há também um intervalo de endereços para endereços DHCP atribuídos automaticamente (10.3.0.129-10.3.0.254); para o seu endereço DHCP atribuído manualmente, escolha um que não esteja nesse intervalo.

Agora conecte B à rede, e ele deverá obter o endereço IP especificado e poderá ser acessado pelo nome especificado em qualquer máquina da rede.

Crie seu próprio servidor DNS com o Dnsmasq

Se você não tiver um roteador doméstico capaz, poderá configurar a mesma funcionalidade em qualquer máquina Linux. Vou explicar como usar o Dnsmasq para configurar o DNS . Existem muitos outros programas similares; Eu escolhi o Dnsmasq porque é fácil de configurar e leve (é o que o roteador Tomato ilustrado acima usa, por exemplo). O Dnsmasq está disponível na maioria das distribuições Linux e BSD para PCs, servidores e equipamentos de rede.

Escolha um computador que esteja sempre ligado, que tenha um endereço IP estático e que esteja executando algum tipo de Linux ou BSD; vamos chamá-lo de S (para servidor). Em S, instale o dnsmasqpacote (se ainda não estiver lá). Abaixo, assumirei que o arquivo de configuração é /etc/dnsmasq.conf; a localização pode variar em algumas distribuições. Agora você precisa fazer várias coisas.

  • Diga ao Dnsmasq para fornecer seus nomes de host, além dos que ele recebe na Internet. A maneira mais simples é inserir os nomes e endereços IP /etc/hosts(consulte a seção “Arquivo Hosts” acima) e verifique se /etc/dnsmasq.confa no-hostsdiretiva não tem comentários. (As linhas que começam com a #são comentadas.) Você pode colocar os nomes em um arquivo diferente; Se fizer isso, coloque uma linha addn-hosts=/path/to/hosts/fileem /etc/dnsmasq.conf.
  • Diga ao Dnsmasq como obter endereços IP para nomes de máquinas na Internet.

    • Se você estiver executando o Debian, Ubuntu ou um derivado, instale o resolvconfpacote. Nos casos mais comuns, tudo funcionará imediatamente.
    • Se o administrador da rede ou o provedor de serviços de Internet forneceu os endereços dos servidores DNS, insira-os /etc/dnsmasq.conf, por exemplo:

      server=8.8.8.8
      server=8.8.4.4
      
    • Se você não souber quais são suas configurações atuais de DNS, consulte o arquivo /etc/resolv.conf. Se você vê uma linha como nameserver 8.8.8.8, colocar uma linha server=8.8.8.8no /etc/dnsmasq.conf. Depois de alterar /etc/dnsmasq.conf, reinicie o Dnsmasq. O comando para fazer isso depende da distribuição; possibilidades típicas incluem restart dnsmasqou /etc/init.d/dnsmasq restart.

  • Diga a S para usar o serviço Dnsmasq para todas as solicitações de nome de host. Edite o arquivo /etc/resolv.conf(como root), remova todas as nameserverlinhas e coloque-as nameserver 127.0.0.1.
    • Se você estiver usando o resolvconf no Debian ou Ubuntu, /etc/resolv.confpode ser abaixo do ideal se você instalou o resolvconfpacote com a rede em funcionamento. Certifique-se de que os arquivos base, heade tailno /etc/resolvconf/resolv.conf.d/diretório não contêm quaisquer nameserverentradas, em seguida, executar resolvconf -u(como root).
  • Diga às outras máquinas para usar S como servidor DNS. Edite /etc/resolv.confe substitua todas as nameserverlinhas por uma única nameserver 10.3.0.2onde 10.3.0.2 seja o endereço IP de S (veja acima para saber como descobrir o endereço IP de S).

Você também pode usar o Dnsmasq como um servidor DHCP , para que as máquinas possam obter o endereço correspondente ao seu nome automaticamente. Isso está além do escopo desta resposta; consulte a documentação do Dnsmasq (não é difícil). Observe que só pode haver um único servidor DHCP em uma determinada rede local (a definição exata de rede local está além do escopo desta resposta).

Nomes na Internet global

Até agora, assumi uma rede local. E se você quiser dar um nome a uma máquina que está em um canto diferente do mundo? Você ainda pode usar qualquer uma das técnicas acima, exceto que as partes que envolvem o DHCP são aplicáveis ​​apenas em uma rede local. Como alternativa, se suas máquinas tiverem endereços IP públicos, você poderá registrar seu próprio nome público. (Você também pode atribuir um endereço IP privado a um nome público; é menos comum e menos útil, mas não há dificuldade técnica.)

Obtendo seu próprio nome de domínio

Você pode obter seu próprio nome de domínio e atribuir endereços IP a nomes de host dentro desse domínio. Você precisa registrar o nome de domínio com um provedor de nomes de domínio; isso normalmente custa de US $ 10 a US $ 15 / ano (para os domínios mais baratos). Use a interface da web do provedor de nomes de domínio para atribuir endereços a nomes de host.

DNS dinâmico

Se suas máquinas tiverem um endereço IP dinâmico, você poderá usar o protocolo DNS dinâmico para atualizar o endereço IP associado ao nome da máquina quando o endereço for alterado. Nem todos os provedores de nomes de domínio oferecem suporte ao DNS dinâmico; portanto, compre antes de comprar. Para uso pessoal, o No-IP fornece um serviço DNS dinâmico gratuito, se você usar seus próprios domínios (por exemplo example.ddns.net).

Gilles
fonte
Faça o seu próprio servidor DNS com dnsmasq: como eu posso dizer para outra máquina para usar S, quando a outra máquina tem o Windows instalado
Radu Rădeanu
@Radu Você pode alterar os servidores DNS associados a uma conexão através do painel de controle em algum lugar. Eu acho que você precisa acessar as propriedades de conexão da interface de rede.
Gilles
Eu aditei c: \ windows \ system32 \ drivers \ etc \ hosts e funciona. Obrigado!
Radu Rădeanu
Eu estava puxando meu cabelo procurando por isso e o encontrei no roteador como você sugeriu. Obrigado pela informação detalhada!
Jason Turan
Se for uma rede da empresa, preciso informar o departamento de infraestrutura. adicionar meu linux mac à lista de servidores DNS, certo?
WesternGun
24

Use DNS Multicast (mDNS). Este é um protocolo de configuração zero que funciona em sub-redes da LAN. Não é necessário servidor. Usa o .localTLD (que é o que você já usa).

Porque você está perguntando, tudo o resto parece exagero. Se não fosse, então você provavelmente não estaria perguntando.

tne
fonte
1
O mDNS não parece ser suportado no Windows sem instalar algo em todas as caixas do Windows.
`` Zitrax
1
@Zitrax Bom ponto (embora seja um site * nix). Informações relevantes para a instalação do Windows podem ser encontradas - relativamente simples.
tne
3
Aka Zeroconf ou Bonjour. Fornecido por avahipacote (s). Você pode consultar sua rede via, avahi-browse -alrpor exemplo.
21418 DanMan
4
vi /etc/dhcp3/dhclient.conf

send host-name "ubuntu-laptop";

e

/etc/init.d/networking restart
LanceBaynes
fonte
Devo executar isso no cliente ou host?
tshepang 18/07/11
O primeiro bit seria feito no servidor dhcp (e você desejaria executar service restart dhcpd). A segunda parte seria feita no cliente, e na maioria das distros agora deve ser executada como service networking restart.
Caleb
Como eu me lembro que eu só precisa executar este no lado do cliente ..
LanceBaynes
3

Os computadores não sabem magicamente quais nomes de host pertencem a quais endereços IP. Mesmo no host local, há algum tipo de pesquisa envolvida.

Você precisará configurar seus outros sistemas para usar algum tipo de serviço de pesquisa de nome. Isso pode estar /etc/hostsno servidor DNS, ldap, nsswitch ou DNS normal. Uso binde insiro todas as máquinas locais em um domínio local e, em seguida, ele serve o DNS para esse site.

Caleb
fonte