¿Cómo enrutar el tráfico desde una VM VirtualBox solo a través de una VPN?

10

Tengo una VM VirtualBox (host e invitado Ubuntu Maverick). Mi proveedor de VPN usa OpenVPN para configurar TUN. Me gustaría configurar las cosas para que el tráfico de la VM solo pase por la VPN y simplemente se caiga si la VPN se cae (sucedió). Sugerencias? Mi iptables-fu es un poco débil

Lo que he intentado: usar la "red de solo host" de VirtualBox que le brinda una interfaz de bucle de retorno vboxnet0 en el host para el invitado, pero no pudo obtener las iptables / rutas correctas. Me gustaría evitar NAT en VM, ya que tengo doble NAT (ISP y enrutador doméstico) y un nivel más hará que mi cabeza explote.

Otras posibilidades: cambiar a TAP (¿cómo?) Y pasar a VM. Crear VPN dentro de VM y filtrar todo el tráfico eth0 excepto VPN conectarse con iptables (pero vea a continuación)

Puntos de bonificación: si puede decirme cómo usar diferentes puntos de salida de VPN en el host y el invitado sin hacer un doble túnel del tráfico del invitado a través de la VPN del host.

pfein
fuente

Respuestas:

4

Habrá otras soluciones, pero esto es lo que estoy pensando:

  1. Configure la VM en modo puente. Esto le dará a su máquina virtual una dirección IP en la misma red que su host.
  2. Configure la VPN en el host, digamos que es tun0.
  3. Habilitar el enrutamiento en el host echo 1 > /proc/sys/net/ipv4/ip_forward
  4. Configure la VM con la dirección IP del host como el gw predeterminado.

En este punto, el host tiene la conexión VPN, y la VM enrutará todo el tráfico al host. Todo lo que queda por hacer es restringir el host para que no permita que el invitado enrute el tráfico que no pasará por el dispositivo tun0. Podrías hacerlo con un conjunto de reglas de iptables como estas:

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

Eso debería funcionar. La primera regla establece una política predeterminada para los paquetes DROP en la cadena FORWARD. Esto solo afecta los paquetes que su host enrutaría, no los paquetes al host (INPUT) o desde el host (OUTPUT). La segunda regla permite cualquier tráfico que esté enrutando tun0; puede ajustarlo con una fuente si lo desea. Y la última regla debería permitir que las respuestas regresen de tun0 para volver a la VM.

¿Esperará su VPN que todos los paquetes en la interfaz tun sean de una sola IP? Si es así, también querrás agregar una regla NAT. Probablemente algo como:

iptables -t nat -A POSTROUTING -o tun0 -j SNAT --to-source {your host tun0 ip}
grep
fuente