Bagaimana cara mengarahkan lalu lintas dari VM VirtualBox hanya melalui VPN?

10

Saya punya VM VirtualBox (keduanya host & guest Ubuntu Maverick). Penyedia VPN saya menggunakan OpenVPN untuk mengatur TUN. Saya ingin mengatur semuanya sehingga lalu lintas dari VM hanya melewati VPN dan baru saja dibatalkan jika VPN turun (sudah terjadi). Saran? Iptables-fu saya agak lemah

Apa yang saya coba: menggunakan "host-only networking" VirtualBox yang memberi Anda antarmuka loopback vboxnet0 pada host ke tamu, tetapi tidak bisa mendapatkan iptables / rute dengan benar. Saya ingin menghindari NAT pada VM, karena saya sudah dua kali lipat NAT'd (ISP & router rumah) dan satu tingkat lagi akan membuat kepala saya melambung.

Kemungkinan lain: beralih ke TAP (bagaimana?) Dan menjembatani ke VM. Membuat VPN di dalam VM dan memfilter semua lalu lintas eth0 kecuali VPN terhubung dengan iptables (tetapi lihat di bawah)

Poin bonus: jika Anda dapat memberi tahu saya cara menggunakan titik keluar VPN yang berbeda pada host & tamu tanpa lalu lintas tunneling ganda dari tamu melalui VPN host.

pfein
sumber

Jawaban:

4

Akan ada solusi lain, tetapi inilah yang saya pikirkan:

  1. Atur VM dalam mode bridge. Ini akan memberi mesin virtual Anda alamat IP di jaringan yang sama dengan host Anda.
  2. Setup VPN di host, misalkan tun0.
  3. Aktifkan perutean pada host echo 1 > /proc/sys/net/ipv4/ip_forward
  4. Atur VM dengan alamat IP host sebagai gw default.

Pada titik ini, host memiliki koneksi VPN, dan VM akan merutekan semua lalu lintas ke host. Yang tersisa untuk dilakukan adalah membatasi host sehingga tidak memungkinkan tamu untuk merutekan lalu lintas yang tidak akan pergi melalui perangkat tun0. Anda bisa melakukannya dengan seperangkat aturan iptables seperti ini:

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

Itu seharusnya bekerja. Aturan pertama menetapkan kebijakan default untuk paket DROP dalam rantai FORWARD. Ini hanya memengaruhi paket yang akan dirutekan host Anda, bukan paket ke host (INPUT) atau dari host (OUTPUT). Aturan kedua memungkinkan lalu lintas apa pun yang merutekan tun0 - Anda bisa mengencangkannya dengan --sumber jika diinginkan. Dan aturan terakhir harus membiarkan balasan kembali dari tun0 untuk merutekan kembali ke VM.

Apakah VPN Anda mengharapkan semua paket pada antarmuka tun berasal dari satu IP? Jika demikian, Anda juga ingin menambahkan aturan NAT. Mungkin sesuatu seperti:

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