Як маршрутизувати трафік з VM VirtualBox тільки через VPN?


10

У мене є VirtualBox VM (і хост, і гість Ubuntu Maverick). Мій постачальник VPN використовує OpenVPN для налаштування TUN. Я хотів би налаштувати все так, щоб трафік з VM переходив лише через VPN і просто скидався, якщо VPN знижується (це трапилося). Пропозиції? Мій iptables-fu трохи слабкий

Що я спробував: використовуючи "мережеву мережу" лише для VirtualBox, яка дає вам гостьовий інтерфейс vboxnet0 на хості для гостя, але не зміг отримати iptables / маршрути правильно. Я хотів би уникнути NAT у VM, оскільки я вже подвійний NAT'd (ISP та домашній маршрутизатор), і ще один рівень зробить мою голову спливою.

Інші можливості: перехід на TAP (як?) Та з'єднання з VM. Створення VPN всередині VM та фільтрація всього трафіку eth0, крім VPN, підключення до iptables (але див. Нижче)

Бонусні бали: якщо ви можете сказати мені, як використовувати різні точки виходу VPN на хості та гості без подвійного тунелювання трафіку від гостя через VPN хоста.

Відповіді:


4

Будуть і інші рішення, але ось що я думаю:

  1. Встановіть VM в мостовому режимі. Це дасть вашій віртуальній машині IP-адресу в тій же мережі, що і ваш хост.
  2. Установіть VPN на хості, скажімо, це tun0.
  3. Увімкнути маршрутизацію на хості echo 1 > /proc/sys/net/ipv4/ip_forward
  4. Установіть VM з IP-адресою хоста як gw за замовчуванням.

У цей момент хост має VPN-з'єднання, і VM буде направляти весь трафік на хост. Залишилося лише обмежити хост, щоб він не дозволяв гостю прокладати трафік, який не збирається пройти через пристрій tun0. Ви можете зробити це за допомогою набору правил iptables приблизно так:

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

Це має спрацювати. Перше правило встановлює політику за замовчуванням для DROP-пакетів у ланцюзі FORWARD. Це впливає лише на пакети, які хост хотів би маршрутизувати, а не пакети на хост (INPUT) або з хоста (OUTPUT). Друге правило дозволяє будь-який трафік, який маршрутизує tun0 - ви можете затягнути його з - джерелом, якщо хочете. І останнє правило повинно дозволяти відповіді, що повертаються з tun0, щоб повернутися до VM.

Чи очікує, що ваш VPN очікує, що всі пакети в інтерфейсі tun будуть з одного IP-адреси? Якщо це так, ви також хочете додати правило NAT. Можливо, щось на кшталт:

iptables -t nat -A POSTROUTING -o tun0 -j SNAT --to-source {your host tun0 ip}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.