У меня есть виртуальная машина VirtualBox (как хост, так и гостевой Ubuntu Maverick). Мой провайдер VPN использует OpenVPN для настройки TUN. Я бы хотел настроить так, чтобы трафик от виртуальной машины проходил только через VPN и просто отбрасывался, если VPN выходит из строя (это произошло). Предложения? Мой iptables-fu немного слабоват
Что я пробовал: использовать VirtualBox «сеть только для хоста», которая дает вам петлевой интерфейс vboxnet0 на хосте для гостя, но не может правильно получить iptables / routes. Я бы хотел избежать NAT на виртуальной машине, так как у меня уже есть двойной NAT (ISP и домашний маршрутизатор), и еще один уровень заставит меня взорваться.
Другие возможности: переход на TAP (как?) И мост на ВМ. Создание VPN внутри виртуальной машины и фильтрация всего трафика eth0, кроме VPN-подключения с помощью iptables (но см. Ниже)
Бонусные баллы: если вы можете сказать мне, как использовать разные точки выхода VPN на хосте и госте без двойного туннелирования трафика от гостя через VPN хоста.
Будут другие решения, но вот о чем я думаю:
echo 1 > /proc/sys/net/ipv4/ip_forward
На этом этапе у хоста есть VPN-соединение, и виртуальная машина будет направлять весь трафик на хост. Все, что остается сделать, - это ограничить хост, чтобы он не позволял гостю маршрутизировать любой трафик, который не будет проходить через устройство 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 - вы можете усилить это с помощью --source, если хотите. И последнее правило должно позволять ответам, возвращающимся от tun0, возвращаться к виртуальной машине.
Будет ли ваша VPN ожидать, что все пакеты на интерфейсе tun будут с одного IP? Если это так, вы также захотите добавить правило NAT. Наверное, что-то вроде:
iptables -t nat -A POSTROUTING -o tun0 -j SNAT --to-source {your host tun0 ip}