Eu tenho uma máquina FreeBSD com duas NICs configuradas da seguinte forma:
em0 ---> IP set via DHCP (192.168.1.0/24). "home" domain
em1 ---> IP set statically (10.0.0.2). "lab" domain
Para todos os efeitos, meu domínio doméstico funciona bem. Posso acessar a Internet e fazer ping em qualquer host da rede. O roteamento também funciona, posso fazer ping em qualquer host de qualquer domínio da máquina FreeBSD via IP, mas só posso resolver nomes na rede doméstica.
Criei um /etc/resolvconf.conf
arquivo para anexar o domínio de pesquisa e o servidor de nomes ao resolv.conf
arquivo da seguinte maneira:
search_domains="lab"
name_servers="10.0.0.10"
Em seguida, atualizo o resolv.conf com o comando:
$ sudo resolvconf -u
Agora posso resolver nomes na lab
rede, mas não mais na home
rede. Editar manualmente o arquivo resolv.conf e inverter a ordem dos domínios e servidores de nomes resulta na resolução, home
mas não lab
- exatamente o oposto.
Como posso dizer resolv.conf
para usar um servidor DNS para um domínio específico (o IP definido estaticamente) e permitir que ele obtenha as informações de DNS para o outro IP via DHCP?
Somente para referência....
/etc/rc.conf:
hostname="beastie1"
ifconfig_em0="DHCP"
ifconfig_em1="inet 10.0.0.2 netmask 255.255.255.0"
defaultrouter="192.168.1.1"
/etc/resolv.conf
# Generated by resolvconf
search lab home.
nameserver 10.0.0.10
nameserver 192.168.1.1
O "servidor" DNS no lab
domínio 10.0.0.0 nada mais é do que um roteador Netgear de consumo barato que fornece concessões de DHCP. Eu só tenho isso definido estaticamente porque é um servidor TFTP para bootimages e eu propositalmente o defini como 10.0.0.2 para facilitar o uso ao tentar fazer flash de atualizações de firmware em alguns equipamentos Cisco.
Você está usando a ferramenta totalmente errada para o trabalho.
Esse trabalho não é feito na biblioteca do cliente DNS. As bibliotecas de cliente DNS não são complexas o suficiente para tomar decisões sobre o roteamento de consultas para diferentes conjuntos de servidor DNS de conteúdo com base no nome que está sendo pesquisado. As bibliotecas de clientes DNS delegam o trabalho pesado de resolução de consultas, incluindo esse tipo de coisa, para resolver servidores DNS proxy. São eles que implementam o serviço DNS split-horizon , que é o mecanismo que você deseja aqui.
No seu caso, se você estiver usando apenas o que vem com o FreeBSD (ou seus derivados, como DragonFly BSD e TrueOS) pronto para uso, esta será uma instância de
unbound
execução local.Você faz três coisas:
unbound
. Ative-o para iniciar automaticamentelocal_unbound_enable=YES
da/etc/rc.conf
maneira usual.unbound
para executar o serviço DNS split horizon. Você faz isso com zonas de stubunbound.conf
para seuslab.example.com.
e seushome.example.com.
domínios, denotando10.0.0.10
e192.168.1.1
como os servidores DNS de conteúdo para esses nomes de domínio e tudo abaixo deles.nameserver
linha em/etc/resolv.conf
(de umname_servers
par chave-valor em/etc/resolvconf.conf
) que direciona sua biblioteca de cliente DNS para falar comunbound
.Notas:
home.
elab.
. Estes são nomes de domínio de nível superior reais, que você não possui .home.
atualmente é objeto de 10 solicitações na ICANN. Use um nome de domínio que você possui , não aqueles que você não possui. Substitua isso porexample.com.
no acima. Não , você não possuilocal.
,localhost.
, ou muitos outros.dev.
corp.
Se, por exemplo, você possuísse
radiantnexus.com.
, você usariahome.allan.radiantnexus.com.
elab.allan.radiantnexus.com.
.search_domains="home.allan.radiantnexus.com lab.allan.radiantnexus.com"
para continuar o exemplo anterior.conteúdo bônus
Eu uso djbdns (conforme corrigido por... bem... eu) no FreeBSD.
[email protected]
serviço que executa um servidor DNS proxy de resolução local[email protected]
e um[email protected]
serviço que executa um servidor DNS de conteúdo raiz local com o qual[email protected]
se comunica.Eu habilito esses serviços com
enable
diretivas em/etc/system-control/presets/20-djbwares.preset
:.
dados públicos, extraídos da ICANN a cada ano ou mais usandoaxfr-get
, e dados para nomes internos abaixo dos nomes de domínio que possuo.O
root/private
arquivo é onde terei os dados privados como:root/servers/@
arquivo[email protected]
para os vários pontos de corte de horizonte dividido, de modo quednscache
saiba substituir qualquer informação de endereço do servidor DNS de conteúdo público para os pontos que podem ser enviados: (Na verdade, o conjunto de ferramentas nosh configura os endereços IP privados para mim, como padrão. Há um capítulo inteiro sobre o que é fornecido e as várias maneiras de usá-lo, no Guia nosh .)Esta é uma configuração raiz privada . É uma das outras maneiras (existem várias) de fornecer serviço DNS split-horizon com dois servidores DNS de conteúdo. (Na
unbound
configuração acima, você também tem um arranjo de servidor DNS de conteúdo múltiplo; seus servidores DNS de conteúdo local são os que estão em10.0.0.10
e192.168.1.1
em outras máquinas em sua LAN, em vez de um privado na127.53.0.1
própria máquina.)Uma raiz privada também me dá o benefício do tráfego de consulta DNS duff para coisas inexistentes, desde as sondagens do Google Chrome até coisas que estão tentando mapear de forma reversa endereços IPv6
fec0::/12
e endereços IPv4 em192.168.0.0/16
, não escapando para a Internet em geral.Você pode fazer uma raiz privada com
unbound
também. No entanto, é mais complexo do que as zonas de stub. Deixo isso como um exercício para o leitor, pois está além do escopo desta resposta.Leitura adicional
dnscache
,tinydns
eaxfrdns
serviços". guia nosh . Programas.