OpenVPN, resolvconf e resolução de domínio DNS

8

Enquanto estiver no site1, preciso conectar-me ao site2 via OpenVPN. Uma vez conectado, o site OpenVPN2 envia um servidor de nomes DNS e opções de pesquisa de domínio. Isso faz com que todas as resoluções de nome do site1 falhem.

Exemplo:

  1. Fisicamente conectado no site1, o DHCP empurra as opções de DNS e o resolvconf as gerencia.
    /etc/resolv.conf

    # Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
    #     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
    nameserver 172.16.1.101
    nameserver 172.16.1.102
    search site1.internal.domain
    
  2. Abra o túnel OpenVPN para o site2, o OpenVPN empurra a opção dhcp DNS e DOMAIN para o site2 e /etc/openvpn/update-resolv-confempurra-os para o resolvconf.
    /etc/resolv.conf

    # Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
    #     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
    nameserver 192.168.1.5
    nameserver 172.16.1.101
    nameserver 172.16.1.102
    search site2.internal.domain site1.internal.domain
    
  3. A resolução DNS funciona para server.site2.internal.domain, mas falha no server.site1.internal.domain

Existe uma maneira de que qualquer solicitação de DNS com falha no site21 seja transmitida aos servidores DNS do site1? Ou configure o resolvconf que apenas consultas para site2.internal.domain devem ser passadas para o servidor de nomes site2?

Eu uso uma máquina Ubuntu 14.04 no site1 e o servidor OpenVPN no site2 é uma caixa do pfSense 2.2. Eu gerencio os dois sites, portanto, fazer alterações nos dois lados não é um problema. Ambos os domínios são apenas para uso não público e interno.

Tim Jones
fonte
Devo acrescentar que, embora o laptop seja o Ubuntu 14.04, não uso o NetworkManager.
Tim Jones
1
Estou interessado em ver se há uma maneira flexível para redirecionar quesries DNS para servidores diferentes, por exemplo, verificando o FQDN .. :)
nass

Respostas:

1

Você pode configurar um servidor de armazenamento em cache local que observará o seu /etc/resolv.conf, conforme ele é alterado pelos resolvconfscripts, e tente obter as respostas de todos os servidores de nomes listados lá.

Em muitos sistemas, será suficiente instalar o pacote dnsmasq , além do resolvconf.

Os padrões devem "apenas trabalho", desde que no-resolve no-polldirectivas estão ausentes /etc/dnsmasq.confe lointerface é no topo da /etc/resolvconf/interface-order. Se um servidor de nomes upstream retornar alguns IPs arbitrários para endereços não resolvíveis, strict-orderno dnsmasq.conf pode ajudar. Você /etc/resolv.confdeve apenas mostrar nameserver 127.0.0.1.

Se você preferir uma configuração fixa ou se conectar a várias redes não relacionadas e quiser evitar o vazamento de nomes de redes privadas também em todos os servidores de nomes, configure o dnsmasq para consultar servidores específicos com base no domínio:

# /etc/dnsmasq.conf

# site1 servers
nameserver=/site1.internal.domain/172.16.1.101
nameserver=/site1.internal.domain/172.16.1.102

# site2 servers
nameserver=/site2.internal.domain/192.168.1.5

# default OpenNIC (optional, unless 'no-resolv' is set). 
server=51.15.98.97
server=172.104.136.243

Para obter mais informações sobre as opções do dnsmasq, consulte aqui: http://oss.segetech.com/intra/srv/dnsmasq.conf

Koniu
fonte
0

O resolv.conf lista todos os servidores DNS disponíveis. Enquanto o primeiro da lista estiver em funcionamento, todas as consultas serão enviadas para ele. Nada para os outros, a menos que o primeiro esteja fora do ar. Portanto, se o primeiro servidor DNS da lista estiver ativo e souber a resposta, ele responderá "Eu sei!", Caso contrário, ele dirá "Receio não saber ...". E isso é tudo. Você deve informar 192.168.1.5 (o servidor DNS do site2) de todas as entradas do site1 e vice-versa, é claro. saudações

user4089
fonte
0

Não tentei isso no Ubuntu, mas consegui uma configuração semelhante trabalhando no Arch Linux usando openresolv e dnsmasq.

Todas as alterações estarão na máquina do cliente VPN. O servidor VPN não deve precisar de alterações porque já inclui o servidor de nomes DNS e as opções de pesquisa de domínio.

  1. Enquanto estiver conectado à VPN, use resolvconf -lpara ver todos os arquivos resolv.conf. Descubra o nome resolvconf da sua interface VPN (ou seja, o X em "resolv.conf from X"). No meu caso, foi tun0, o que vou usar na configuração restante.
  2. Instale o dnsmasq
  3. Edite /etc/resolvconf.confpara adicionar estas opções:

    private_interfaces=tun0
    name_servers="::1 127.0.0.1"
    dnsmasq_conf=/etc/dnsmasq-conf.conf
    dnsmasq_resolv=/etc/dnsmasq-resolv.conf
    
  4. Edite /etc/dnsmasq.confpara adicionar estas opções:

    conf-file=/etc/dnsmasq-conf.conf
    resolv-file=/etc/dnsmasq-resolv.conf
    
  5. Execute resolvconf -upara gerar os arquivos de configuração dnsmasq.

  6. Inicie o dnsmasqserviço e configure-o para iniciar na inicialização. No Arch, isso é feito executando:

    systemctl start dnsmasq.service
    systemctl enable dnsmasq.service
    

A name_serversopção diz ao resolvconf para listar apenas os servidores de nomes /etc/resolv.conf(isto é, aponta para a instância local do dnsmasq). As dnsmasq_opções informam ao resolvconf para gravar os servidores de nomes que teriam entrado nos /etc/resolv.confarquivos de configuração do dnsmasq.

A private_interfaceopção informa ao resolvconf que os servidores de nomes fornecidos por essa interface (sua VPN) devem ser usados ​​apenas ao resolver nomes de host que estejam em um dos domínios especificados na searchlinha. Ele irá gerar a configuração dnsmasq apropriada para fazer isso acontecer.

Com essa configuração, os pedidos de hosts no site2.internal.domain devem ir para 192.168.1.5 e todos os outros pedidos devem ir para 172.16.1.101 ou 172.16.1.102.

Se o seu sistema não usa IPv6, remova o :: 1 da name_serversopção.

cjm
fonte