ฉันจะทำให้แขก VirtualBox แบ่งปันการเชื่อมต่อ VPN ของโฮสต์ได้อย่างไร


50

คำถาม

เมื่อฉันเริ่ม VPN บนคอมพิวเตอร์เดสก์ท็อปอูบุนตูซึ่งทำหน้าที่เป็นเราเตอร์ซับเน็ตที่เชื่อมต่อจะขาดการเชื่อมต่ออินเทอร์เน็ต แต่ยังสามารถเข้าถึงได้ (LAN) เป็นการดีที่ฉันต้องการทราบวิธีการเปิดใช้งานซับเน็ตที่เชื่อมต่อเพื่อรับการเข้าถึงอินเทอร์เน็ตอีกครั้งโดยการกำหนดเส้นทางผ่านอุโมงค์ VPN เมื่อ VPN เปิดใช้งาน

บริบท

ฉันมีเค้าโครงเครือข่ายต่อไปนี้:

subnet 172.16.0.0/20 บน eth0 สำหรับเครื่องเสมือน VirtualBox ของฉัน

subnet 192.168.0.0/24 บน eth0: 0 ซึ่งเชื่อมต่อกับเกตเวย์ 192.168.0.1 ซึ่งมีการเข้าถึงอินเทอร์เน็ต

สิ่งนี้ถูกแสดงในไฟล์ / 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

แพ็คเก็ตบน eth0 นั้นจะถูกส่งต่อผ่าน eth0: 0 ด้วยการปลอมตัวและการเชื่อมต่ออินเทอร์เน็ตปกตินั้นใช้ได้ อย่างไรก็ตามเมื่อฉันเริ่มอุโมงค์ VPN บนเราเตอร์นี้การเชื่อมต่ออินเทอร์เน็ตจะหายไปสำหรับ VMs บนเครือข่ายย่อย eth0 (ยังคงมีอยู่สำหรับเราเตอร์)

ด้านล่างเป็นผลลัพธ์ของ ifconfigเมื่ออุโมงค์เปิดใช้งาน:

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)

ผมสงสัยว่าการแก้ปัญหาจะมีสิ่งที่จะทำอย่างไรกับตารางเส้นทาง มันแสดงต่อไปนี้เมื่ออุโมงค์เปิดใช้งาน :

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

และต่อไปนี้เมื่ออุโมงค์ไม่ทำงาน :

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

การกำหนดค่า Virtualbox สำหรับ Vms:

ป้อนคำอธิบายรูปภาพที่นี่

หนึ่งใน/etc/network/interfacesไฟล์VMs :

# 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

เครือข่ายของ VM ของคุณมีการกำหนดค่าใน VirtualBox อย่างไร
zwets

เชื่อมโยงไปยัง eth0 - เพิ่มข้อมูลในคำถาม
โปรแกรม

ฉันรู้ว่ามันไม่ใช่คำตอบที่ตรงกับคำถามของคุณ แต่สำหรับฉันแล้วมันกลายเป็นเรื่องง่ายกว่าที่จะตั้งค่าการเชื่อมต่อ VPN 2 สายแทน: 1 จากเครื่องโฮสต์อีกเครื่องจากเครื่องแขก
Zhenya

คำตอบ:


28

สิ่งนี้จะไม่ทำงานในการตั้งค่าBridged Networking จากเอกสาร VirtualBox :

เครือข่ายเชื่อมโยง

นี่คือความต้องการเครือข่ายขั้นสูงเช่นการจำลองเครือข่ายและการใช้เซิร์ฟเวอร์ในแขก เมื่อเปิดใช้งาน VirtualBox จะเชื่อมต่อกับการ์ดเครือข่ายที่ติดตั้งของคุณและแลกเปลี่ยนแพ็คเก็ตเครือข่ายโดยตรงหลีกเลี่ยงสแต็กเครือข่ายของระบบปฏิบัติการโฮสต์ของคุณ

เนื่องจากเครื่องเสมือนของคุณกำลังใช้งานอยู่eth0โดยตรงพวกเขาจึงไม่ทราบถึงtun0อินเทอร์เฟซสำหรับอุโมงค์ที่ใช้งานอยู่ คุณจะต้องใช้การกำหนดค่าเครือข่ายเสมือนอื่น

คุณมีตัวเลือกเหล่านี้:

  • การแปลที่อยู่เครือข่าย (NAT)เป็นวิธีที่ง่ายที่สุด VirtualBox จะ NAT NATs ผ่านการเชื่อมต่ออินเทอร์เน็ตใด ๆ ก็ตามที่มีให้กับโฮสต์ นี่คือความโปร่งใสอย่างเต็มที่กับ VMs อย่างไรก็ตามสิ่งนี้จะแยกการเชื่อมต่อจากโฮสต์ไปยัง VM หรือการเชื่อมต่อระหว่าง VMs

  • ใช้ระบบเครือข่ายเฉพาะสำหรับโฮสต์เพื่อสร้างซับเน็ตที่เหมาะสมซึ่งมี VM และโฮสต์ นี้จะต้องไม่มีการเปลี่ยนแปลงในการกำหนดค่าอินเตอร์เฟซตอนนี้คุณมีใน VMs แต่คุณจะต้องตั้งค่าโฮสต์ที่จะเป็นประตูและเราเตอร์และทำให้มันชัยนาท VMs ไปข้างนอก (ไม่ว่าจะข้ามมันeth0หรือtun0)

  • รวมข้างต้น: ให้แต่ละ VM สอง interfaces หนึ่ง gatewaying กับโลกภายนอก (ตรงข้าม VirtualBox ของNAT ) และอื่น ๆ ที่ติดอยู่กับโฮสต์เท่านั้น LAN

  • ลองการตั้งค่า NAT Networkingของ VirtualBox อัปเดต 2019:คุณลักษณะนี้ครบกำหนดแล้ว: แนบกับ NAT ของโฮสต์และเลือกประเภทอะแดปเตอร์เครือข่าย Paravirtualized (virtio-net)


34

สำหรับ VirtualBox ที่มีโฮสต์ windows และแขกลินุกซ์ (มิ้นต์) ให้ไปที่แท็บ Network UI และตั้งค่าสำหรับ "Adapter" => "Attached to: NAT" และ "ประเภทอะแดปเตอร์: เครือข่าย Paravirtualized" หลังจากนั้นเริ่มต้น VM ของคุณและคุณควรจะสามารถใช้เครือข่าย VPN ได้


1
มันใช้งานได้ดีสำหรับฉันขอบคุณ! ใช้ Ubuntu 16.04LTS ในฐานะแขกของฉันและโฮสต์ Windows 10 พร้อม Virtual Box 5.0.24
womp

1
ยอดเยี่ยม! สิ่งนี้ใช้ได้กับโฮสต์ Windows 10 และ VirtualBox (5.0.26) ผู้เยี่ยมชม CentOS 7
ซากิ

1
น่าทึ่ง! ควรเป็นคำตอบที่ยอมรับได้ กำลังมองหาวิธีแก้ปัญหานี้สำหรับทุกวัย ขอบคุณมาก!
MrSpock

1
คำตอบที่ดีที่สุดที่นี่!
Mike

ทำไมถึงไม่ตอบคำถามนี้? ง่ายและถูกต้อง!
Michael Goldshteyn

6

หลังจากมองหาโซลูชันนี้ทุกที่ในที่สุดฉันก็พบโซลูชันที่ใช้งานได้ซึ่งไม่ต้องการการเปลี่ยนแปลงการกำหนดค่ามากมายและเรียบง่ายจริงๆ ใช้เครือข่าย NAT เริ่มต้นและพิมพ์สิ่งนี้ในเทอร์มินัล:

VBoxManage modifyvm "VM name" --natdnsproxy1 on

แหล่งที่มา: https://www.virtualbox.org/ticket/13993


4

มีปัญหาเดียวกัน นี่คือวิธีที่ฉันแก้ไขมัน:

  1. เปลี่ยนประเภทเครือข่ายของ Guest System เป็น "Host Only"
  2. ทำให้เกตเวย์เริ่มต้นของ Guest ชี้ไปที่ ip ของโฮสต์ifconfig vboxnet0เพื่อค้นหา

ขั้นตอนสุดท้ายคือการกำหนดเส้นทางแพ็กเก็ตที่มาจาก vboxnet0 ไปยัง VPN ของคุณ

หากคุณกำหนดเส้นทางการรับส่งข้อมูลทั้งหมดผ่าน 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

10.8.0.5เกตเวย์ของคุณอยู่ที่ไหนและ192.168.5.0/24อยู่ในช่วงเครือข่าย vboxnet0 ของคุณ

หากคุณกำหนดเส้นทางการรับส่งข้อมูลผ่าน 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

10.8.0.5เกตเวย์ของคุณอยู่ที่ไหนและเป็นเกตเวย์192.168.43.95ของคุณwlan0และ192.168.5.0/24อยู่ในช่วงเครือข่าย vboxnet0 ของคุณ

หมายเหตุ: วิธีนี้ช่วยให้ Guest OS นั้นได้รับการปฏิบัติเหมือนกับ Host OS เฉพาะ IP ที่กำหนดค่าให้ผ่าน VPN ใน Host OS เท่านั้นที่จะผ่านใน Guest


3

นี่คือข้อมูลที่เป็นประโยชน์สำหรับกล่องคนจรจัดที่ใช้โฮสต์ VPN โดยทั่วไปคุณต้องตั้งค่าตัวเลือก natdnshostresolver1 โปรดทราบว่าสิ่งนี้จะไม่ทำงานเมื่อใช้การตั้งค่า 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


1
ลิงค์แรกมีทางออกสำหรับฉัน มันแสดงวิธีการเปิดตัวเลือก natdnshostresolver1 สำหรับ VM
kol
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.