Configurando a VM do proxy com problemas de DNS do VirtualBox

1

Usando o VirtualBox no Ubuntu, quero conectar duas VMs do Linux (debian 9) juntas, para que a primeira atue como um roteador para a segunda (VM2), cujo tráfego é completamente roteado através da primeira (VM1) . O VM1 (gateway) é conectado a um serviço VPN e, portanto, todo o tráfego da VM2 é conectado à VPN.

Eu consegui fazer com que a VM2 pingue com êxito IPs externos, como 8.8.8.8. Mas todas as outras redes falham. Eu acho que o problema é a resolução de DNS, que por algum motivo desconhecido para mim não é resolvido pela VM1.

Aqui está o que eu fiz até agora:

No VirtualBox, a VM1 está conectada a uma interface NAT e a uma segunda interface, que é uma rede interna denominada "testvpn". A VM2 está conectada somente a essa rede interna, não ao NAT.

O VM1 tem a seguinte configuração de / etc / network / interfaces:

auto lo
iface lo inet loopback

allow-hotplug enp0s3
iface enp0s3 inet dhcp

allow-hotplug enp0s8
iface enp0s8 inet static
      address 10.152.152.10
      netmask 255.255.192.0

A VM2 tem a seguinte consolidação / etc / network / interfaces:

auto lo
iface lo inet loopback

allow-hotplug enp0s3
iface enp0s3 inet static
    address 10.152.152.15
    gateway 10.152.152.10
    netmask 255.255.255.0
    dns-nameservers 10.152.152.10

O /etc/resolv.conf da VM2 aponta para a VM1:

nameserver 10.152.152.10

Com essa configuração simples, a VM2 pode executar ping na VM1, mas não tem acesso à Internet externa. Para isso, devo permitir o encaminhamento de ip e configurar o iptables na VM1:

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
iptables -A FORWARD -i tun0 -o enp0s8 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i enp0s8 -o tun0 -j ACCEPT

Note que eu uso propositadamente tun0 para a interface de rede VPN, mas os resultados são exatamente os mesmos com enp0s3 ao invés de tun0 sem o túnel VPN ativado. Agora posso fazer ping em endereços externos na VM2, mas todas as outras conexões de rede falham:

  $ curl google.com
    curl: (6) Could not resolve host: google.com

Após algumas leituras on-line, tentei adicionar regras iptables supostamente relacionadas ao DNS na primeira VM do gateway:

iptables -t nat -A PREROUTING -i enp0s8 -p udp --dport 53 -j REDIRECT
iptables -t nat -A PREROUTING -i enp0s8 -p tcp --dport 53 -j REDIRECT

Não funciona. Observe que a rede funciona bem na VM1, com ou sem VPN.

Eu não sou muito experiente com o iptables e realmente não sei o que fazer a seguir. Tentei pesquisar horas on-line em busca de soluções, mas não consegui encontrar uma solução. Eu não gostaria de usar as soluções dhcp / dnsmasq, pois tenho certeza que o iptables deve ser suficiente.

T

    
por manatinez 21.12.2017 / 21:09

1 resposta

1

EDIT: Eu trabalhei alterando as regras do PREROUTING da seguinte forma:

iptables -t nat -A PREROUTING -i enp0s8 -p udp --dport 53 -j DNAT --to-destination 10.4.0.1
iptables -t nat -A PREROUTING -i enp0s8 -p tcp --dport 53 -j DNAT --to-destination 10.4.0.1

10.4.0.1 sendo o servidor de nomes DNS padrão da VPN (AirVPN), como em /etc/resolv.conf.

Não tenho certeza se essa é a maneira correta de fazer isso, mas funciona ...

Então, agora todas as regras do iptables são as seguintes:

iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
iptables -A FORWARD -i tun0 -o enp0s8 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i enp0s8 -o tun0 -j ACCEPT
iptables -t nat -A PREROUTING -i enp0s8 -p udp --dport 53 -j DNAT --to-destination 10.4.0.1
iptables -t nat -A PREROUTING -i enp0s8 -p tcp --dport 53 -j DNAT --to-destination 10.4.0.1
    
por 21.12.2017 / 22:42