Come instradare il traffico da una VM VirtualBox solo tramite una VPN?


10

Ho una VirtualBox VM (sia host che guest Ubuntu Maverick). Il mio provider VPN utilizza OpenVPN per configurare i TUN. Vorrei impostare le cose in modo che il traffico dalla VM passi solo attraverso la VPN e venga semplicemente interrotto se la VPN diminuisce (è successo). Suggerimenti? Il mio iptables-fu è un po 'debole

Cosa ho provato: usare la "rete solo host" di VirtualBox che ti dà un'interfaccia loopback vboxnet0 sull'host per l'ospite, ma non è riuscito a ottenere correttamente iptables / route. Vorrei evitare NAT su VM, dato che sono già doppio NAT'd (ISP e router di casa) e un altro livello mi farà scoppiare la testa.

Altre possibilità: passare a TAP (come?) E passare a VM. Creazione di VPN in VM e filtro di tutto il traffico eth0 tranne VPN connect con iptables (ma vedi sotto)

Punti bonus: se puoi dirmi come utilizzare diversi punti di uscita VPN su host e guest senza doppio tunneling del traffico dall'ospite attraverso la VPN dell'host.

Risposte:


4

Ci saranno altre soluzioni, ma questo è quello che sto pensando:

  1. Imposta la VM in modalità bridge. Ciò fornirà alla tua macchina virtuale un indirizzo IP nella stessa rete del tuo host.
  2. Configura la VPN sull'host, diciamo che è tun0.
  3. Abilita il routing sull'host echo 1 > /proc/sys/net/ipv4/ip_forward
  4. Configurare la VM con l'indirizzo IP host come gw predefinito.

A questo punto, l'host ha la connessione VPN e la VM instraderà tutto il traffico verso l'host. Tutto ciò che resta da fare è limitare l'host in modo che non consenta al guest di instradare il traffico che non passerà attraverso il dispositivo tun0. Potresti farlo con un insieme di regole iptables qualcosa del genere:

iptables -P FORWARD DROP
iptables -A FORWARD -o tun0 -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

Questo dovrebbe funzionare. La prima regola imposta un criterio predefinito per i pacchetti DROP nella catena FORWARD. Questo ha effetto solo sui pacchetti che il tuo host instraderebbe, non sui pacchetti verso l'host (INPUT) o dall'host (OUTPUT). La seconda regola consente a tutto il traffico che sta eseguendo il routing di tun0 - puoi restringerlo con una --source se lo desideri. E l'ultima regola dovrebbe consentire alle risposte di tornare da tun0 per tornare alla VM.

La tua VPN si aspetterà che tutti i pacchetti sull'interfaccia tun provengano da un singolo IP? In tal caso, ti consigliamo di aggiungere anche una regola NAT. Probabilmente qualcosa del tipo:

iptables -t nat -A POSTROUTING -o tun0 -j SNAT --to-source {your host tun0 ip}
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.