Como resolver um nome de host condicionalmente na rede conectada?

1

Eu tenho um pequeno servidor doméstico e gostaria que programas em meu laptop pudessem acessá-lo de LAN e WAN. Acho que a maneira mais limpa de conseguir isso é definir um nome de host personalizado e resolvê-lo de maneira diferente com base na rede à qual ele está conectado.

Em outras palavras, é possível resolver o nome do host X como endereço IP A se conectado à rede Foo , e como endereço IP < em> B caso contrário?

Estou usando o Arch Linux e netctl como meu gerenciador de rede. Eu presumo que o caminho para alcançar o que eu quero é configurar ganchos no perfil de rede para Foo para de alguma forma alterar o arquivo hosts, mas não tenho certeza sobre como fazer o último.

É claro que também gostaria de ouvir sobre soluções melhores.

    
por A.P. 14.09.2016 / 12:13

1 resposta

1

Eu resolvi esse problema com dnsmasq . Seguindo o exemplo da pergunta, eis o que fiz depois de configurar o dnsmasq para funcionar como um cache DNS no meu laptop:

  1. Crie um diretório /etc/hosts.d

  2. Coloque os seguintes scripts em /etc/netctl/X/ e torne-os executáveis

 #!/bin/sh
 # /etc/netctl/X/X_local.sh
 echo 'A X' > /etc/hosts.d/X
 chmod 744 /etc/hosts.d/X
 #!/bin/sh
 # /etc/netctl/X/X_remote.sh
 echo 'B X' > /etc/hosts.d/X
 chmod 744 /etc/hosts.d/X
  1. Adicione as seguintes linhas ao perfil de rede /etc/netctl/Foo
 ExecUpPost=/etc/netctl/X/X_local.sh
 ExecDownPre=/etc/netctl/X/X_remote.sh
  1. Anexar addn-hosts=/etc/hosts.d a /etc/dnsmasq.conf

Isso funciona porque a opção addn-hosts instrui dnsmasq a procurar no diretório /etc/hosts.d por associações adicionais de nome de host.

    
por 14.09.2016 / 14:56