Vá direto ao assunto:
Uma questão específica minha é esta: um cliente na rede 10.0.3.X/24 não consegue alcançar subdomain.site.com
. Como posso tornar os clientes em 10.0.2.X/24 e 10.0.3.X/24 capazes de resolver 10.0.1.4 ao ligar subdomain.site.com
?
Eu gostaria que minha resolução DNS funcionasse para meu servidor web LAN usando o nome de domínio do lado WAN, por exemplo subdomain.site.com
, de forma que n clientes em qualquer uma das sub-redes LAN possam apenas digitar subdomain.site.com
ou site.com
e serem roteados apropriadamente (escalável, então /etc/hosts
está fora do pergunta).
Minha LAN tem várias sub-redes criadas com LEDE (rede .1) e OpenWRT (rede .2 e rede .3):
10.0.1.X/24 Main puppy with WAN interface facing internet and NAT, web server fixed at 10.0.1.4 with ports forwarded
10.0.2.X/24 Auxiliary router with WAN interface facing 10.0.1.X/24 (routed)
10.0.3.X/24 Auxiliary router with WAN interface facing 10.0.1.X/24 (routed)
Eu não quero nenhuma solução de NAT/loopback NAT. Eu preferiria uma solução usando DNS e aqui está o porquê:
- Uma chamada de saída de um cliente chama DNS autoritativo para encontrar o IP (para roteamento!), Em seguida, envia um pacote para esse destino,
- que ao chegar, é DNATado para o servidor.
- O IP de origem é o endereço local do cliente, portanto, o servidor chama o cliente diretamente (usando o IP de origem do pacote).
- O cliente rejeita este pacote porque espera que venha do gateway, indiretamente do ext do gateway. endereço fornecido pelo DNS acima.
- Um loopback NAT resolve o problema traduzindo o IP de origem de saída para o endereço do lado da LAN do gateway. tal que o
- O servidor então responde ao gateway, em vez de diretamente ao cliente. Feijão fresco.
O problema com esse fluxo de dados é que não é eficiente sair da LAN e entrar em contato com um servidor DNS global para obter um endereço IP. quando o servidor é um ponto local (no mesmo lado do NAT e, no meu caso, não necessariamente na mesma sub-rede local). Por que deixar a LAN quando o cliente e o servidor são pares locais? Uma boa explicação de um fluxo NAT de loopback pode ser encontrada aqui, https://unix.stackexchange.com/a/282094/33386 .
Eu sei que é possível conseguir o que eu quero usando split-horizons de DNS ou qualquer outro termo moderno que algumas pessoas estão chamando hoje em dia. Além disso, um servidor de nomenclatura local que tenha precedência sobre os servidores de nomenclatura globais em certas instâncias resolveria isso. Como posso implementar isso no OpenWRT ou LEDE ao usar várias sub-redes (vários servidores DHCP+DNS)? Alguém já deve ter feito isso.
Atualmente, os clientes em 10.0.1.X/24 podem acessar subdomain.site.com
com uma configuração dnsmasq correspondente, /etc/config/dhcp
mas não tenho ideia do porquê, porque pensei que isso não abrange subdomínios:
config domain
option name 'site.com'
option ip '10.0.1.4' # LAN address of web server
Você precisa de um split horizon ou um servidor de nomes local.
Aponte os clientes atrás de 10.0/16 para um servidor de nomes local que seja autoritativo para a
subdomain.example.com
zona e, caso contrário, recurse. Isso é possível com um servidor de nomes autônomo ou com horizonte dividido.Ambos os exemplos abaixo contêm o mínimo para executar suas tarefas. As questões de segurança e outros detalhes de configuração estão fora do escopo desta questão.
Eu recomendo fortemente a leitura do DNS HOWTO e DNS e BIND , nessa ordem.
Horizonte dividido
Servidor de nomes independente
Esta é uma instância BIND normal, mas configurada para ser autoritativa para a zona interna.
1º elemento ausente
Eu tive que adicionar duas coisas à minha configuração dnsmasq nos roteadores auxiliares no arquivo
/etc/config/dhcp
:O
list server
dnsmasq encaminha consultas de dns para o servidor em 10.0.1.1 (o servidor dnsmasq do roteador principal). Olist rebind_domain
permite a religação para sites específicos, de modo que a proteção de religação de DNS possa ser deixada ativada. Obrigado "jow" aqui . Outra opção é desativar completamente a proteção de religação de DNS. Como alternativa, pode ser possível usaroption rebind_localhost 1
, mas não testei isso. Sem esta etapa, eu não poderia fazer pingsubdomain.site.com
.2º elemento ausente
Adicione a seguinte entrada
/etc/dnsmasq.conf
no roteador principal .Observe o espaço reservado
.
para quaisquer subdomínios. Essa alteração também pode ser possível em/etc/config/dhcp
, mas não tenho certeza de como.2º elemento ausente original (limitado)
Esta foi a minha solução original, que desde então abandonei. Adicionei uma entrada (
10.0.1.4 subdomain.site.com
) no/etc/hosts
arquivo do roteador principal, que tem a limitação de não haver espaços reservados para subdomínios ou URLs estendidos, como ao usar o webdav.Teste isso adicionando
logqueries 1
a/etc/config/dhcp
para registrar todas as consultas de DNS. Algo como o seguinte será mostrado, o que indica que/etc/hosts
era a fonte:O que não funcionou
Surpreendeu-me que a seguinte
/etc/config/dhcp
configuração no roteador principal funcionasse apenas na10.0.1.X/24
sub-rede:Se alguém puder esclarecer isso, adoraria saber o porquê! Talvez um problema?
Parece que adicionar
option dns 10.0.1.1
roteadores/etc/config/network
auxiliares também não ajudou muito na minha situação.Adicionar esta opção faz com que uma entrada apareça no formato
cat /tmp/resolv.conf.auto
. No entanto,list server 10.0.1.1
conforme explicado acima, adicionanameserver 10.0.1.1
para a interface WAN.Adicionar
dhcp_option
s/etc/config/dhcp
em roteadores auxiliares não ajudou.