Dividir DNS por meio do Recursor do PowerDNS
Depois de procurar por algum tempo no meu Fedora 20, pareço ter feito funcionar. Não encontrei um tutorial completo em nenhum lugar, portanto, um breve resumo para uma configuração mínima:
Queremosresolverwebserver.dyndns.org
paraacessarumserviçodaweb,tantodaInternetquantodaLAN.
DaInternet
AmáquinaanaInternetresolvewebserver.dyndns.org
paraoendereçoIPIPisp.OBehingIPispéumroteadorcomNAT,queencaminhaaporta80paraoIPdaLANIPx,disponibilizandoumserviçodaWebnaInternet.
IssoéfeitonaturalmenteregistrandooendereçoIPIPispnoservidordenomesautoritativoparaodomíniodyndns.org,que,nocasodeumserviçocomooDynDns,éfeitousandoddclientrodandonoroteadorouemalgumlugarnaLAN,eportantosemmaisinteresseaqui.
DaLAN
AmáquinabnaLANresolvewebserver.dyndns.org
paraoendereçoIPIPx,paraqueoserviçodaWebsetornedisponívelnaLANdiretamente.Alémdisso,assumindoquetodasasmáquinasnaLANsãonomeadasaolongodaslinhasdebar.localdomain,onomewebserver.localdomain
tambémdeveserresolvidoparaIPx.Nóstambémqueremosterumapesquisareversaparaumaboamedida,resolvendoIPxparawebserver.dyndns.org
dentrodaLAN(naInternet,IPxresolvenaturalmenteparanadaeIPispresolvealgumacadeiaarbitráriageradapeloISP.
Assumimosquepdns-recursorestásendoexecutadoemumamáquinaseparadacomIPIPdns,mastambémpodemostê-loemexecuçãonoservidordaWeb(nomesmoendereçoIPIPxouemumalias),outemapenasumaúnicamáquinanaLAN.
Amáquina"b" pode ser configurada estaticamente ou dinamicamente via DHCP; veja dhclient
e dnsmasq
e possivelmente avahi
. NetworkManager
também entra aqui porque pode reescrever /etc/resolv.conf
; por enquanto, assuma a configuração estática.
Além disso, assuma:
IPx = 192.168.1.1
IPdns = 192.168.1.2
IPbar = 192.168.1.3
Então:
/etc/resolv.conf
em qualquer máquina:
nameserver 192.168.1.2
domain localdomain
Configuração para pdns-recursor :
/etc/pdns-recursor/recursor.conf
basicamente reduz para:
setuid=pdns-recursor
setgid=pdns-recursor
allow-from=127.0.0.0/8, 192.168.1.0/8, ::1/128, fe80::/10
auth-zones=webserver.dyndns.org=/etc/pdns-recursor/[webserver.dyndns.org].zone, localdomain=/etc/pdns-recursor/[localdomain].zone, 168.192.in-addr.arpa=/etc/pdns-recursor/[168.192.in-addr.arpa].zone
local-address=192.168.1.2
As referências acima restringem muito os arquivos de zona (seus nomes reais não são importantes):
Em /etc/pdns-recursor/[168.192.in-addr.arpa].zone
(observe a falta de um ponto no final do nome do registro - é um nome relativo não absoluto: 1.1
significa 1.1.168.192.in-addr.arpa
). Isso funciona com ou sem o "IN".
1.1 IN PTR webserver.dyndns.org.
2.1 IN PTR dns.localdomain.
3.1 IN PTR b.localdomain.
Em /etc/pdns-recursor/[webserver.dyndns.org].zone
(anote o ponto no final do nome do registro - é um nome absoluto e não relativo)
webserver.dyndns.org. IN A 192.168.1.1
Em /etc/pdns-recursor/[localdomain].zone
webserver IN A 192.168.1.1
dns IN A 192.168.1.2
b IN A 192.168.1.3
Após a reinicialização de pdns-recursor
, on pode testar usando dig
executando estes comandos:
PDNS=192.168.1.2
# Test unknwon domain resolution and webserver resolution
dig @$PDNS www.cnn.com | grep -A1 ";; ANSWER SECTION:"
dig @$PDNS webserver.dyndns.org | grep -A1 ";; ANSWER SECTION:"
# Test responses for localdomain
dig @$PDNS unknown.localdomain | grep -A1 ";; ANSWER SECTION:"
dig @$PDNS webserver.localdomain | grep -A1 ";; ANSWER SECTION:"
dig @$PDNS b.localdomain | grep -A1 ";; ANSWER SECTION:"
dig @$PDNS dns.localdomain A | grep -A1 ";; ANSWER SECTION:"
# Test responses for localdomain if the domain is omitted
dig +search @$PDNS webserver | grep -A1 ";; ANSWER SECTION:"
# Test reverse resolution
dig @$PDNS -x 192.168.1.1 | grep -A1 ";; ANSWER SECTION:"
dig @$PDNS -x 192.168.1.2 | grep -A1 ";; ANSWER SECTION:"
dig @$PDNS -x 192.168.1.3 | grep -A1 ";; ANSWER SECTION:"
dig @$PDNS -x 192.168.1.4 | grep -A1 ";; ANSWER SECTION:"