Impostazione della VM proxy con problemi DNS di VirtualBox


1

Usando VirtualBox su Ubuntu, voglio connettere due VM Linux (debian 9) insieme, in modo che la prima funga da router per la seconda (VM2), il cui traffico viene completamente instradato attraverso la prima (VM1). VM1 (gateway) è connesso a un servizio VPN e quindi tutto il traffico proveniente da VM2 è connesso alla VPN.

Sono riuscito a fare in modo che il VM2 esegua correttamente il ping di IP esterni come 8.8.8.8. Ma tutte le altre reti falliscono. Penso che il problema sia la risoluzione DNS, che per qualche ragione a me sconosciuta non è stata risolta dal VM1.

Ecco cosa ho fatto finora:

Su VirtualBox, VM1 è collegato a un'interfaccia NAT e a una seconda interfaccia, che è una rete interna denominata "testvpn". VM2 è connesso solo a questa rete interna, non al NAT.

VM1 ha la seguente configurazione / 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

VM2 ha la seguente configurazione / 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

/Etc/resolv.conf di VM2 punta a VM1:

nameserver 10.152.152.10

Con questa semplice configurazione, VM2 può eseguire il ping di VM1, ma non ha accesso a Internet esterno. Per questo devo consentire l'inoltro ip e configurare iptables su 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

Nota che uso apposta tun0 per l'interfaccia di rete VPN, ma i risultati sono esattamente gli stessi con enp0s3 invece di tun0 senza il tunnel VPN attivato. Ora posso eseguire il ping degli indirizzi esterni su VM2, ma tutte le altre connessioni di rete falliscono:

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

Dopo alcune letture online, ho provato ad aggiungere regole iptables apparentemente correlate al DNS sulla prima macchina virtuale 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

Non funziona Si noti che la rete funziona perfettamente su VM1, con o senza VPN.

Non ho sperimentato molto con iptables e non so davvero cosa fare dopo. Ho provato a cercare online soluzioni online ma non sono riuscito a trovare una soluzione. Non vorrei usare le soluzioni dhcp / dnsmasq poiché sono abbastanza sicuro che iptables dovrebbe essere sufficiente.

T

Risposte:


1

EDIT: L'ho fatto funzionare modificando le regole di PREROUTING come segue:

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 essendo il nameserver DNS predefinito della VPN (AirVPN) come in /etc/resolv.conf.

Non sono sicuro che questo sia il modo corretto di farlo, ma funziona ...

Quindi ora tutte le mie regole di iptables appaiono come segue:

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.