![Como forçar o nome do host a resolver o endereço local em vez do endereço público?](https://rvso.com/image/1585743/Como%20for%C3%A7ar%20o%20nome%20do%20host%20a%20resolver%20o%20endere%C3%A7o%20local%20em%20vez%20do%20endere%C3%A7o%20p%C3%BAblico%3F.png)
Eu tenho um servidor Linux na minha rede doméstica que usa DNS dinâmico fornecido pornoip.come um nome de host correspondente "xxxx.hopto.org". Fora da minha rede, digamos, em uma cafeteria, posso usar esse nome de host para executar ping ou SSH em meu servidor. No entanto, quando estou na minha rede local, não consigo fazer ping ou SSH no meu servidor usando o nome do host. A execução host
mostra que o nome do host do meu servidor é resolvido para seu IP público, que é igual ao IP público da minha máquina:
MacBook-Air:~ user$ host xxxx.hopto.org
xxxx.hopto.org has address 47.6.24.149
MacBook-Air:~ user$ curl ipinfo.io/ip
47.6.24.149
Minha formação realmente não inclui conceitos de rede, mas posso ver duas soluções potenciais para esse problema:
- Force o nome do host a resolver para o endereço IP local (estático) quando estou na mesma rede que o servidor.
- De alguma forma, forneça ao meu servidor seu próprio endereço IP público.
Como eu faria um (ou ambos) desses? Existe outra solução que seria mais fácil/melhor? Obrigado pela ajuda.
Responder1
Em primeiro lugar, como o AFH mencionou em um comentário, talvez você não precise fazer isso se quiser simplesmente acessar seus próprios serviços usando seu endereço IP público. O que você precisa é habilitar o NAT hairpin (também conhecido como loopback NAT) em seu roteador (ou obter um roteador que o suporte) para que seu próprio IP público possa ser alcançado de dentro de sua rede. Esta é a melhor solução, se a sua infraestrutura de rede puder manipulá-la/configurá-la (qualquer coisa que não seja de consumo deve poder fazê-lo facilmente).
Agora, se você ainda quiser seguir a abordagem DNS, o termo técnico éDNS de horizonte dividido, onde você deseja uma resposta DNS diferente com base no endereço de origem da solicitação. Infelizmente, a maioria dos servidores DNS dinâmicos não oferece isso e você não tem o nível de controle necessário. Então você acaba com duas possibilidades:
- Configure um servidor DNS autoritativo personalizado para o seu domínio em um servidor acessível publicamente (por exemplo, um VPS) ou
- Configure um encaminhador DNS exclusivamente em sua rede local (muito parecido com aquele integrado na maioria dos roteadores de consumo)
A segunda abordagem é provavelmente mais adequada para você, mas exige que você configure seu servidor DHCP (provavelmente em seu roteador) para definir o encaminhador DNS como o resolvedor.
Basicamente:
- Instalardnsmasq(o método depende do sistema operacional do seu servidor)
- Configure o DHCP para apontar para o servidor dnsmasq como seu resolvedor
- Configure o servidor em que o dnsmasq está instalado para resolver o endereço internamente, por exemplo
/etc/hosts
no servidor
Esta abordagem significa:
- Os clientes externos obtêm o IP público diretamente do provedor de DNS dinâmico
- Clientes internos atingiram dnsmasq
- Se eles estiverem solicitando um host público normal, eles serão encaminhados para um servidor upstream (por exemplo, servidor DNS do ISP) como de costume
- Se eles estiverem solicitando um dos hosts internos que você configurou, eles receberão uma resposta local - isso só acontece quando o cliente está na sua rede local
Alternativamente, você pode usar um servidor DNS com mais recursos (como bind9) que pode fazer split-horizon nativamente.
Responder2
Você pode adicioná-lo ao /etc/hosts
arquivo, mas eu sugeriria um apelido para não atrapalhar a resolução fora da sua rede. Então, algo como o seguinte em /etc/hosts
:
#internal IP of server #nickname
192.168.0.24 hopto.local
Agora hopto.local
resolveremos para o endereço local do servidor.
Para mais informações sobre /etc/hosts
confira istopágina de manual
Boa sorte!