AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 414824
Accepted
Jonathan Komar
Jonathan Komar
Asked: 2018-01-05 10:51:35 +0800 CST2018-01-05 10:51:35 +0800 CST 2018-01-05 10:51:35 +0800 CST

Como posso obter a resolução de IP do DNS para um nome de domínio da Internet apontando para um servidor da Web hospedado localmente de uma LAN (em várias sub-redes)?

  • 772

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.comou site.come serem roteados apropriadamente (escalável, então /etc/hostsestá 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ê:

  1. 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,
  2. que ao chegar, é DNATado para o servidor.
  3. O IP de origem é o endereço local do cliente, portanto, o servidor chama o cliente diretamente (usando o IP de origem do pacote).
  4. O cliente rejeita este pacote porque espera que venha do gateway, indiretamente do ext do gateway. endereço fornecido pelo DNS acima.
  5. 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
  6. 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.comcom uma configuração dnsmasq correspondente, /etc/config/dhcpmas 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
dns openwrt
  • 2 2 respostas
  • 3571 Views

2 respostas

  • Voted
  1. Ben Stern
    2018-01-05T11:03:43+08:002018-01-05T11:03:43+08:00

    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.comzona 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

    view "internal" {
      match-clients { // Add any other "on-net" blocks here.
        localnets;
        127.0.0.1;
      };
      recursion yes;
    
      zone "example.com" in {
        type master;
        file "internal/example.com"; // Contains RFC1918 addresses for on-net hosts
      };
    
      zone "." in {
        type hint;
        file "root.cache";
      };
    };
    
    view "external" {
      recursion no;
      zone "example.com" in {
        type master;
        file "external/example.com"; // Contains public IPs for hosts
      };
    };
    

    Servidor de nomes independente

    Esta é uma instância BIND normal, mas configurada para ser autoritativa para a zona interna.

    options {
      recursion yes;
      // and any other options you want
    };
    
    zone "example.com" in {
      type master;
      file "example.com"; // Contains the RFC1918 addresses.
    };
    
    zone "." in {
      type hint;
      file "root.cache";
    };
    
    • 1
  2. Best Answer
    Jonathan Komar
    2018-01-06T05:05:25+08:002018-01-06T05:05:25+08:00

    1º elemento ausente

    Eu tive que adicionar duas coisas à minha configuração dnsmasq nos roteadores auxiliares no arquivo /etc/config/dhcp:

        list server '10.0.1.1'# Clients will still get 10.0.3.1 as dns server
        list rebind_domain 'subdomain.site.com' # Allow rebind to web server
    

    O list serverdnsmasq encaminha consultas de dns para o servidor em 10.0.1.1 (o servidor dnsmasq do roteador principal). O list rebind_domainpermite 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 usar option rebind_localhost 1, mas não testei isso. Sem esta etapa, eu não poderia fazer ping subdomain.site.com.

    2º elemento ausente

    Adicione a seguinte entrada /etc/dnsmasq.confno roteador principal .

    address=/.site.com/10.0.1.4
    

    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/hostsarquivo 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.

    127.0.0.1 localhost
    
    ::1     localhost ip6-localhost ip6-loopback
    ff02::1 ip6-allnodes
    ff02::2 ip6-allrouters
    10.0.1.4 subdomain.site.com
    

    Teste isso adicionando logqueries 1a /etc/config/dhcppara registrar todas as consultas de DNS. Algo como o seguinte será mostrado, o que indica que /etc/hostsera a fonte:

    Fri Jan  5 14:11:20 2018 daemon.info dnsmasq[7368]: 73 10.0.3.149/64299 /etc/hosts subdomain.site.com is 10.0.1.4
    

    O que não funcionou

    Surpreendeu-me que a seguinte /etc/config/dhcpconfiguração no roteador principal funcionasse apenas na 10.0.1.X/24sub-rede:

    config domain
            option name 'site.com'
            option ip '10.0.1.4'
    
    config domain
            option name 'subdomain.site.com'
            option ip '10.0.1.4'
    

    Se alguém puder esclarecer isso, adoraria saber o porquê! Talvez um problema?

    Parece que adicionar option dns 10.0.1.1roteadores /etc/config/networkauxiliares também não ajudou muito na minha situação.

    config interface 'lan'
            option ifname  'eth0.1'
            option force_link '1'
            option type    'bridge'
            option proto   'static'
            option ipaddr  '10.0.2.1'
            option netmask '255.255.255.0'
            option dns     '10.0.1.1'
    
    config interface 'wan'
            option ifname 'eth0.2' # Comment this out if connecting as sta using wlan
            option proto   'dhcp'
            option netmask '255.255.255.0'
            option gateway '10.0.1.1'
            option dns     '10.0.1.1'
    

    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.1conforme explicado acima, adiciona nameserver 10.0.1.1para a interface WAN.

    Adicionar dhcp_options /etc/config/dhcpem roteadores auxiliares não ajudou.

    config dhcp 'lan'
            option interface 'lan'
            option start '100'
            option limit '150'
            option leasetime '72h'
            option ra 'server'
            #list 'dhcp_option' '3,10.0.1.1' # SET DEFAULT GATEWAY, CAUTION CAN BREAK STUFF
            #list 'dhcp_option' '6,10.0.1.1' # SEND DNS SERVER ADDR TO CLIENTS, CAUTION CAN BREAK STUFF
    
    • 1

relate perguntas

  • Nginx - criando um subdomínio com link para outro site (local)

  • O que é domínio raiz? [fechado]

  • Como posso resolver o nome do host para ip usando diferentes servidores DNS?

  • problema de resolução reversa do bind9

  • Como faço para verificar se estou usando 9.9.9.9 para DNS?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    ssh Não é possível negociar: "nenhuma cifra correspondente encontrada", está rejeitando o cbc

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    Como descarregar o módulo do kernel 'nvidia-drm'?

    • 13 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add retorna com: "Erro ao conectar ao agente: nenhum arquivo ou diretório" 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve