Jak przekierowywać ruch z maszyny wirtualnej VirtualBox tylko przez VPN?

10

Mam maszynę wirtualną VirtualBox (zarówno Ubuntu Maverick hosta, jak i gościa). Mój dostawca VPN używa OpenVPN do konfigurowania TUN. Chciałbym tak skonfigurować rzeczy, aby ruch z maszyny wirtualnej przechodził tylko przez VPN i był po prostu spadany, jeśli VPN ulegnie awarii (to się zdarzyło). Propozycje? Moje iptables-fu jest trochę słabe

To, czego próbowałem: używając „sieci tylko hosta” VirtualBox, która daje interfejs pętli zwrotnej vboxnet0 na hoście dla gościa, ale nie mógł poprawnie ustawić iptables / tras. Chciałbym uniknąć NAT na VM, ponieważ mam już podwójną NAT (ISP i router domowy), a jeszcze jeden poziom sprawi, że moja głowa wyskoczy.

Inne możliwości: przejście na TAP (jak?) I mostowanie na VM. Tworzenie VPN wewnątrz VM i filtrowanie całego ruchu eth0 oprócz VPN łączy się z iptables (ale patrz poniżej)

Punkty bonusowe: jeśli możesz mi powiedzieć, jak korzystać z różnych punktów wyjścia VPN na hoście i gościu bez podwójnego tunelowania ruchu od gościa przez VPN hosta.

pfein
źródło

Odpowiedzi:

4

Będą inne rozwiązania, ale tak myślę:

  1. Skonfiguruj maszynę wirtualną w trybie mostu. Dzięki temu twoja maszyna wirtualna otrzyma adres IP w tej samej sieci co host.
  2. Skonfiguruj VPN na hoście, powiedzmy, że to tun0.
  3. Włącz routing na hoście echo 1 > /proc/sys/net/ipv4/ip_forward
  4. Skonfiguruj maszynę wirtualną z adresem IP hosta jako domyślnym gw.

W tym momencie host ma połączenie VPN, a maszyna wirtualna kieruje cały ruch do hosta. Pozostaje tylko ograniczyć hosta, aby nie pozwalał gościowi kierować ruchu, który nie będzie przechodził przez urządzenie tun0. Możesz to zrobić za pomocą zestawu reguł iptables:

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

To powinno działać. Pierwsza reguła ustawia domyślną politykę dla pakietów DROP w łańcuchu FORWARD. Ma to wpływ tylko na pakiety, które prowadziłby Twój host, a nie na pakiety do hosta (INPUT) lub z hosta (OUTPUT). Druga reguła zezwala na każdy ruch, który wyprowadza tun0 - możesz zacieśnić to za pomocą - źródła, jeśli chcesz. I ostatnia reguła powinna pozwalać na odpowiedzi wracające z tun0 do trasy z powrotem do maszyny wirtualnej.

Czy twoja sieć VPN oczekuje, że wszystkie pakiety interfejsu tun będą pochodzić z jednego adresu IP? Jeśli tak, to również chcesz dodać regułę NAT. Prawdopodobnie coś takiego:

iptables -t nat -A POSTROUTING -o tun0 -j SNAT --to-source {your host tun0 ip}
grep
źródło