Bagaimana saya bisa membuat tamu VirtualBox berbagi koneksi VPN host?

51

Pertanyaan

Ketika saya memulai VPN saya di komputer desktop ubuntu saya yang bertindak sebagai router, subnet yang tersambung kehilangan konektivitas internet, tetapi masih dapat diakses (LAN). Idealnya, saya ingin tahu cara mengaktifkan subnet yang terpasang untuk mendapatkan kembali akses internet dengan merutekan melalui terowongan VPN saat VPN aktif.

Konteks

Saya memiliki tata letak jaringan berikut:

subnet 172.16.0.0/20 tentang eth0 untuk mesin virtual VirtualBox saya.

subnet 192.168.0.0/24 pada eth0: 0 yang terhubung ke gateway 192.168.0.1 yang memiliki akses internet.

Ini ditampilkan di file / etc / network / interfaces:

auto lo
iface lo inet loopback

# This is the subnet dedicated to VB
auto eth0
iface eth0 inet static
    address 172.16.0.1
    netmask 255.255.0.0
    gateway 192.168.0.164
    dns-nameservers 8.8.8.8

# normal DHCP internet
auto eth0:0
iface eth0:0 inet static
    address 192.168.0.164
    netmask 255.255.255.0
    dns-nameservers 8.8.8.8
    gateway 192.168.0.1

Paket-paket pada eth0 diteruskan melalui eth0: 0 dengan menyamar dan konektivitas internet normal baik-baik saja. Namun ketika saya memulai terowongan VPN saya di router ini, konektivitas internet hilang untuk VM di subnet eth0 (masih tetap untuk router).

Di bawah ini adalah output ifconfig ketika terowongan aktif:

eth0      Link encap:Ethernet  HWaddr 00:1f:bc:01:c3:ab  
          inet addr:172.16.0.1  Bcast:172.16.255.255  Mask:255.255.0.0
          inet6 addr: fe80::21f:bcff:fe01:c3ab/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:165426 errors:0 dropped:0 overruns:0 frame:0
          TX packets:182601 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:208264321 (208.2 MB)  TX bytes:16660945 (16.6 MB)
          Interrupt:16 

eth0:0    Link encap:Ethernet  HWaddr 00:1f:bc:01:c3:ab  
          inet addr:192.168.0.164  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:16 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:381963 errors:0 dropped:0 overruns:0 frame:0
          TX packets:381963 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:22755054 (22.7 MB)  TX bytes:22755054 (22.7 MB)

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:10.8.0.10  P-t-P:10.8.0.9  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

Saya menduga bahwa solusinya akan ada hubungannya dengan tabel routing . Ini menunjukkan yang berikut ketika terowongan aktif :

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         10.8.0.9        128.0.0.0       UG    0      0        0 tun0
default         192.168.0.1     0.0.0.0         UG    100    0        0 eth0
10.8.0.0        10.8.0.9        255.255.255.0   UG    0      0        0 tun0
10.8.0.9        *               255.255.255.255 UH    0      0        0 tun0
37.139.23.49    192.168.0.1     255.255.255.255 UGH   0      0        0 eth0
128.0.0.0       10.8.0.9        128.0.0.0       UG    0      0        0 tun0
link-local      *               255.255.0.0     U     1000   0        0 eth0
172.16.0.0      *               255.255.0.0     U     0      0        0 eth0
192.168.0.0     *               255.255.255.0   U     0      0        0 eth0

dan berikut ini ketika terowongan tidak aktif :

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.0.1     0.0.0.0         UG    100    0        0 eth0
link-local      *               255.255.0.0     U     1000   0        0 eth0
172.16.0.0      *               255.255.0.0     U     0      0        0 eth0
192.168.0.0     *               255.255.255.0   U     0      0        0 eth0

Konfigurasi kotak virtual untuk Vms:

masukkan deskripsi gambar di sini

Salah satu /etc/network/interfacesfile VM :

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
        address 172.16.0.3
        netmask 255.255.0.0
        network 172.16.0.0
        broadcast 172.16.255.255
        gateway 172.16.0.1
        dns-nameservers 8.8.8.8
Programster
sumber
Bagaimana jaringan VM Anda dikonfigurasi di VirtualBox?
zwets
menjembatani ke eth0 - menambahkan info ke pertanyaan.
Programster
Saya tahu itu bukan jawaban untuk pertanyaan Anda, tetapi bagi saya ternyata lebih mudah untuk mengatur 2 koneksi VPN: 1 dari mesin host, yang lain dari mesin tamu
Zhenya

Jawaban:

28

Ini tidak akan berfungsi dalam pengaturan Bridged Networking . Dari dokumentasi VirtualBox :

Jaringan yang dijembatani

Ini untuk kebutuhan jaringan yang lebih maju seperti simulasi jaringan dan menjalankan server di tamu. Ketika diaktifkan, VirtualBox menyambungkan ke salah satu kartu jaringan Anda yang terinstal dan bertukar paket jaringan secara langsung, menghindari tumpukan jaringan sistem operasi host Anda.

Karena mesin virtual Anda menggunakan eth0secara langsung, mereka tidak mengetahui tun0antarmuka ke terowongan yang melewatinya. Anda perlu menggunakan konfigurasi jaringan virtual yang berbeda.

Anda memiliki (antara lain) opsi ini:

  • Network Address Translation (NAT) sejauh ini merupakan solusi paling sederhana. VirtualBox akan melakukan NAT pada VM melalui koneksi internet apa pun yang tersedia untuk host. Ini sepenuhnya transparan untuk VM. Namun ini menghalangi koneksi dari host ke VM atau koneksi antara VM.

  • Gunakan Host-only Networking untuk membuat subnet yang tepat yang berisi VM dan host. Ini tidak memerlukan perubahan dalam konfigurasi antarmuka yang sekarang Anda miliki di VM, tetapi Anda perlu mengatur host untuk menjadi gateway dan router, dan membuatnya NAT VMs ke luar (baik di seberang eth0atau tun0).

  • Gabungkan yang di atas: berikan masing-masing VM dua antarmuka, satu gateway ke dunia luar (di NAT VirtualBox ) dan lainnya terhubung ke Host-Only LAN .

  • Coba konfigurasi Jaringan NAT eksperimental VirtualBox . Pembaruan 2019: fitur ini telah jatuh tempo: lampirkan ke host NAT dan pilih jenis adaptor jaringan Paravirtualized (virtio-net) .

zwets
sumber
35

Untuk VirtualBox dengan host windows host dan linux (mint), buka tab Network UI dan atur untuk "Adapter" => "Terlampir ke: NAT" dan "Tipe adaptor: Jaringan paravirtualized". Setelah itu mulai VM Anda dan Anda harus dapat menggunakan jaringan VPN.

Aks
sumber
1
Ini bekerja dengan baik untuk saya, terima kasih! Menggunakan Ubuntu 16.04LTS sebagai guest dan host Windows 10 saya, dengan Virtual Box 5.0.24.
Menginjak
1
Cemerlang! Ini berfungsi untuk host Windows 10 saya & VirtualBox (5.0.26) tamu CentOS 7.
Zaki
1
Luar biasa! Seharusnya jawaban yang diterima. Sedang mencari solusi ini selama berabad-abad. Terima kasih banyak!
MrSpock
1
jawaban terbaik di sini!
Mike
Kenapa sih ini bukan jawaban yang diterima? Sangat mudah dan benar!
Michael Goldshteyn
6

Setelah mencari solusi ini di mana-mana, saya akhirnya menemukan solusi yang tidak memerlukan banyak perubahan konfigurasi dan sangat sederhana. Gunakan jaringan NAT default dan ketik ini di terminal:

VBoxManage modifyvm "VM name" --natdnsproxy1 on

sumber: https://www.virtualbox.org/ticket/13993

Arier
sumber
4

Punya masalah yang sama. Inilah cara saya menyelesaikannya:

  1. Ubah jenis jaringan Sistem Tamu menjadi "Hanya Host"
  2. Buat gateway default dari Guest point ke Host ip ifconfig vboxnet0untuk menemukannya.

Langkah terakhir adalah merutekan paket yang berasal dari vboxnet0 ke VPN Anda.

Jika Anda merutekan semua lalu lintas melalui VPN:

iptables -t nat -A POSTROUTING -s 192.168.5.0/24 ! -d 192.168.5.0/24 -o tun0 -j SNAT --to-source 10.8.0.5

Di mana 10.8.0.5tun0 gateway Anda dan 192.168.5.0/24jangkauan jaringan vboxnet0 Anda.

Jika Anda hanya merutekan lalu lintas tertentu melalui VPN:

iptables -t nat -A POSTROUTING -s 192.168.5.0/24 ! -d 192.168.5.0/24 -o tun0 -j SNAT --to-source 10.8.0.5
iptables -t nat -A POSTROUTING -s 192.168.5.0/24 ! -d 192.168.5.0/24 -o wlan0 -j SNAT --to-source 192.168.43.95

Di mana 10.8.0.5tun0 gateway Anda dan 192.168.43.95merupakan wlan0gateway Anda dan 192.168.5.0/24merupakan jangkauan jaringan vboxnet0 Anda.

Catatan: Solusi ini memungkinkan Guest OS diperlakukan dengan cara yang sama dengan Host OS. Hanya IP yang dikonfigurasi untuk melalui VPN di Host OS yang akan melewatinya di Tamu.

Ramast
sumber
3

Berikut adalah beberapa info berguna untuk kotak gelandangan menggunakan host vpn. Pada dasarnya Anda perlu mengatur opsi natdnshostresolver1 Perhatikan bahwa ini TIDAK akan bekerja ketika menggunakan pengaturan public_network Vagrant.

  config.vm.provider :virtualbox do |vb|
      # ---- other options....
      vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
  end

http://renier.morales-rodriguez.net/post/90674523562/sharing-host-vpn-with-virtualbox-guest http://blog.geekslikeshinythings.com/2016/05/sharing-host-vpn-with-vagrant -rob-allen.html

Artistan
sumber
1
Tautan pertama memiliki solusi untuk saya. Ini menunjukkan cara mengaktifkan opsi natdnshostresolver1 untuk VM.
kol