OpenVPN: Nem todas as entradas de DNS são enviadas aos clientes pelo servidor. (dnsmasq)

5

Eu tenho tentado encontrar uma solução para esse problema, mas não encontrei nenhuma resposta até agora, então espero que vocês possam me ajudar.

Eu tenho um servidor rodando o Ubuntu 10.04, que tem um endereço IP estático e uma URL apontando para ele, digamos server.foo.com

Neste servidor eu tenho um servidor OpenVPN rodando com a seguinte configuração:

port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "dhcp-option DNS 10.8.0.1"
;push "dhcp-option DOMAIN foo.com"
keepalive 10 120
tls-auth ta.key 0
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
log openvpn.log
verb 1
plugin /usr/lib/openvpn/openvpn-auth-pam.so vpnlogin

Os clientes são configurados da seguinte forma:

client
dev tun
proto udp
remote server.foo.com 1194
resolv-retry infinite
nobind
persist-key
persist-tun
auth-user-pass
ca ca.crt
cert server.crt
key server.key
ns-cert-type server
tls-auth ta.key 1
comp-lzo
verb 1
auth-nocache

Como você pode ver na configuração do servidor, também tenho um servidor DNS em execução. Este servidor é um servidor dnsmasq, com a seguinte configuração em /etc/dnsmasq.conf:

interface=tun0
listen-address=127.0.0.1
dhcp-authoritative
cache-size=0
no-negcache

Em /etc/dnsmasq.d/, há arquivos que encaminham URLs de volta a este servidor, que devem ser enviados para clientes VPN. O mais importante deles contém:

address=/server.foo.com/10.8.0.1

Tenha em atenção que este URL é exatamente igual ao meu URL público. Eu também criei outras entradas DNS para testar, por exemplo address = / server2.foo.com / 10.8.0.1

Agora, tenho um serviço HTTP em execução neste servidor e só quero permitir que os usuários de dentro da minha LAN, bem como os clientes do OpenVPN, o acessem. Eu bloqueei todo o tráfego de entrada no ufw, com as exceções sendo:

To         Action       From
1194       ALLOW        Anywhere
53         ALLOW        10.8.0.0/24
80/tcp     ALLOW        10.8.0.0/24
80/tcp     ALLOW        192.168.0.0/24

Agora, finalmente, chegar ao meu problema. Quando um cliente OpenVPN se conecta, as entradas DNS do dnsmasq devem ser enviadas para os clientes, o que elas fazem.

No entanto, a entrada server.foo.com aparentemente é ignorada, talvez em favor de um DNS público. Quando eu digito server.foo.com no Firefox ou Chrome enquanto estou fora da minha LAN, mas conectado à VPN, recebo um tempo limite. 10.8.0.1, e outras entradas como server2.foo.com todo o trabalho.

Um traceroute no Windows 7 de 32 bits mostra que, por exemplo, server2.foo.com é enviado em um salto para 10.8.0.1, mas server.foo.com passa por um servidor DNS público e tenta se conectar ao meu público estático IP, que é bloqueado, dando um tempo limite.

Até agora, experimentei várias coisas, mas ainda assim não funciona:

  1. Definindo o servidor DNS autoritativo (como visto no dnsmasq.conf acima: dhcp-authoritative).
  2. pressione "dhcp-option DOMAIN foo.com" no server.conf para OpenVPN.

Desculpe por um post tão longo para o que talvez seja uma pergunta bem curta. E espero que alguém possa me ajudar.

Atenciosamente, Mike.

    
por Michael 16.03.2012 / 15:53

2 respostas

1

Acho que sua configuração vai quebrar ou não funcionar:

Sua configuração do cliente OpenVPN usa o endereço público do server.foo.com para se conectar ao servidor OpenVPN. Este endereço será procurado antes de estabelecer o túnel VPN, obviamente.

Você está tentando enviar uma entrada DNS para server.foo.com com um IP OpenVPN depois que o túnel é estabelecido com a configuração dnsmasq. Ou o cliente OpenVPN o ignora (já que ele já sabe sobre server.foo.com, já que precisou procurá-lo para estabelecer o túnel) ou irá respeitá-lo, e então soltar o túnel porque a configuração do cliente OpenVPN apontará para um agora endereço IP inexistente. O último pode acontecer durante a sessão do OpenVPN, dependendo do TTL do servidor DNS para o IP público do server.foo.com.

TL; DR: você está basicamente tentando informar ao seu cliente informações conflitantes sobre server.foo.com. Não consigo pensar em uma boa maneira de fazer o que você tem em mente. Uma alternativa pode ser configurar uma segunda entrada DNS Um registro vpnserver.foo.com que aponta para o mesmo IP que server.foo.com e, em seguida, alterar sua configuração do OpenVPN para usar isso.

    
por 16.03.2012 / 18:43
0

Embora muito tarde, mas uma possível solução alternativa pode estar desviando todo o tráfego do cliente pelo túnel (se o cenário do cliente permitir). Você precisa adicionar a seguinte diretiva ao arquivo de configuração do seu servidor. por exemplo. empurre "redirecionamento-gateway def1" Para detalhes, consulte aqui Desta forma, o cliente não verificará o DNS público.

    
por 01.08.2015 / 20:47