ใน VirtualBox ฉันจะตั้งค่าเครื่องเสมือนเฉพาะโฮสต์ที่สามารถเข้าถึงอินเทอร์เน็ตได้อย่างไร


98

ในการตั้งค่าเครื่องเสมือนด้วย VirtualBox ฉันมักต้องการคุณสมบัติดังต่อไปนี้

  • vm มี IP แบบคงที่
  • โฮสต์สามารถเข้าถึง vm โดยไม่ต้องส่งต่อพอร์ต
  • VM สามารถเข้าถึงอินเทอร์เน็ต
  • ฉันสามารถย้ายแล็ปท็อปของฉันจากเครือข่ายไปยังเครือข่าย (เช่นจากที่บ้านไปยังสำนักงานไปยังคอฟฟี่ช็อป) โดยไม่ต้องกังวลเกี่ยวกับการรักษาความปลอดภัยหรือกำหนดค่า vm ใหม่

ไม่มีวิธีการเชื่อมต่อเครือข่าย VirtualBox ใดตรงกับข้อกำหนดเหล่านี้ด้วยตนเอง

  • NAT
    ต้องการการส่งต่อพอร์ตหากคุณต้องการเชื่อมต่อกับ vm จากโฮสต์

  • โฮสต์เท่านั้น
    vm ไม่สามารถเข้าถึงอินเทอร์เน็ตเว้นแต่โฮสต์เป็นเราเตอร์

  • Bridged
    แสดง vm ไปยังเครือข่าย ไม่พกพา

คำตอบ:


110

ฉันสามารถรับการตั้งค่าที่ฉันต้องการโดยการตั้งค่าอะแดปเตอร์สองตัวบน vm

VirtualBox 4.2.12 สำหรับ
แขก Ubuntu 12.04

ใน VirtualBox> การตั้งค่า> เครือข่ายตั้งค่าเครือข่ายเฉพาะโฮสต์

ของฉันถูกเรียกว่า vboxnet0 มันถูกกำหนดค่าด้วยตนเอง:
ip 192.168.56.1
netmask 255.255.255.0
no dhcp

การกำหนดค่าเครือข่าย VirtualBox การกำหนดค่าเครือข่าย VirtualBox

จากนั้นในการตั้งค่าเครือข่ายสำหรับเครื่องเสมือนให้ตั้งค่าอะแดปเตอร์สองตัว:

อแด็ปเตอร์ 1
โฮสต์เท่านั้น vboxnet0

Adapter2
NAT

บูตเครื่องเสมือนและเข้าสู่ระบบผ่านทางคอนโซล VirtualBox ที่มีให้

เรียกใช้สิ่งนี้เพื่อดูอะแดปเตอร์ของคุณ:

ls /sys/class/net

ในกรณีของฉันอะแดปเตอร์ชื่อ eth1 และ eth2 (และแท้จริงอินเทอร์เฟซแบบย้อนกลับ)

จากนั้นแก้ไขการกำหนดค่าเครือข่ายของคุณ

sudoedit /etc/network/interfaces


# The loopback network interface
auto lo
iface lo inet loopback

# Host-only interface
auto eth1
iface eth1 inet static
        address         192.168.56.20
        netmask         255.255.255.0
        network         192.168.56.0
        broadcast       192.168.56.255

# NAT interface
auto eth2
iface eth2 inet dhcp

โปรดทราบว่าeth1ไม่มีการระบุเกตเวย์เริ่มต้น eth2จะได้รับเกตเวย์เริ่มต้นจาก dhcp


อัปเดตมีนาคม 2561

ดูคำตอบนี้จาก@ Hugo14453สำหรับรุ่นที่อัปเดตซึ่งทำงานกับ Ubuntu 17.10 และใหม่กว่า


1
อัปเดต: VirtualBox 4.3 แนะนำบริการ NAT ที่ดูเหมือนว่ามันอาจไม่จำเป็นต้องใช้สองอินเตอร์เฟส 6.4 เครือข่ายบริการการแปลที่อยู่
— คริสเตียนยาว

4
สิ่งนี้ช่วยฉันได้มากฉันใช้ Virtualbox เพื่อการพัฒนาและเมื่อฉันอยู่ในบ้านทุกอย่างทำงานได้อย่างถูกต้องตั้งแต่ฉันมีการตั้งค่าเครือข่ายตามความชอบฝันร้ายเริ่มต้นเมื่อฉันย้ายไปที่เครือข่ายอื่น (ครอบครัว บริษัท ... ) ฉันต้องเปลี่ยน URL เว็บไซต์ลบไฟล์ระบบรีบูตฉันไม่ทราบว่ามีกี่ครั้งและรายการดำเนินต่อไป โซลูชันนี้ไม่สนใจเครือข่ายปัจจุบันของคุณซึ่งเป็นสาเหตุที่ฉันชอบ ... เพียงเสียบพีซีของคุณเข้ากับเครือข่ายใด ๆ และมุ่งเน้นไปที่งานของคุณ
— นาบิลคาดิ

1
ขอบคุณ การไม่กำหนดที่อยู่เกตเวย์สำหรับอินเทอร์เฟซสำหรับโฮสต์เท่านั้นแก้ไขปัญหาของฉันได้
— Florian

2
สมบูรณ์ / etc / network / interfaces config เป็นกุญแจสำคัญขอบคุณ !!!!
— Byron Whitlock

1
"โปรดสังเกตว่า eth1 ไม่มีเกตเวย์เริ่มต้นที่ระบุไว้ eth2 จะได้รับเกตเวย์เริ่มต้นจาก dhcp" <- ความคิดเห็นนี้เป็นกุญแจสำคัญ
— Pere Pages

16

ฉันสามารถแก้ปัญหาของฉันได้ด้วยการผสมผสานของ Christian Long solution ฉันเพิ่มอะแดปเตอร์ 2 ตัวแล้ว:

อะแดปเตอร์ 1 - NAT

อะแด็ปเตอร์ 2 - โฮสต์เท่านั้น, vboxnet0

ความแตกต่างเพียงอย่างเดียวคือในไฟล์อินเตอร์เฟสของ VM:

sudoedit /etc/network/interfaces

# The loopback network interface
auto lo
iface lo inet loopback
# NAT
auto eth0
iface eth0 inet dhcp
# Host only
auto eth1
iface eth1 inet dhcp

ในการกำหนดค่าเครือข่าย VirtualBox ฉันออกจากการตรวจสอบ DHCP แล้ว

หลังจาก VM รีบูตทุกอย่างทำงานได้ดี


สิ่งนี้ใช้ได้สำหรับฉัน แต่ฉันต้องการให้ VMs มีที่อยู่ IP แบบคงที่ นาทีที่ฉันทำสิ่งนั้นอินเทอร์เน็ตหยุดทำงาน หากฉันตั้งค่าทั้งคู่ด้วย DHCP จะทำงานได้ดี ฉันจะทำให้ส่วนต่อประสานของโฮสต์เท่านั้นรับ IP แบบคงที่ได้อย่างไร
— Umar Farooq Khawaja

เพียงคนเดียวที่ทำงาน ขอบคุณ +1
— Jorge Campos

14

มีวิธีง่ายๆอีกวิธีหนึ่งที่เราไม่จำเป็นต้องสร้างอะแดปเตอร์ NAT ใหม่

  1. บนเครื่องโฮสต์โปรดเพิ่มกฎ iptables ต่อไปนี้ สิ่งนี้จะส่งต่อแพ็กเก็ตผ่านโฮสต์และไปยังอินเทอร์เน็ต:

    sudo iptables -A FORWARD -o eth0 -i vboxnet0 -s 192.168.56.0/24 -m conntrack --ctstate NEW -j ACCEPT 
    
    sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
    
    sudo iptables -A POSTROUTING -t nat -j MASQUERADE
    
  2. คุณจะต้องเปิดใช้งานการส่งต่อ IP บนโฮสต์โดยออกคำสั่งต่อไปนี้:

    sudo sysctl -w net.ipv4.ip_forward=1
    

สิ่งนี้ใช้ได้กับโฮสต์ Linux เท่านั้น
— Derek Mahar

เราต้องการบริการ "dnsmasq" ที่ทำงานอยู่ ในลิงค์unix.stackexchange.com/a/384187/61742เรามีข้อมูลที่ครบถ้วนเกี่ยวกับสิ่งที่ @Danatela แนะนำ ขอบคุณ!
— Eduardo Lucio

1
@EduardoLucio โปรดมอบเครดิตแก่ Long Bui ฉันเพิ่งแก้ไขโพสต์นี้เพื่อให้อ่านง่ายขึ้น
— Danatela

@ Long Bui ขอบคุณสำหรับการสนับสนุนของคุณ! Up! Up! Up! Up! Up! Up! = D
— Eduardo Lucio

12

การกำหนดค่าเครือข่ายมีการเปลี่ยนแปลงใน Ubuntu 17.10.1 ตอนนี้คุณใช้การกำหนดค่า netplan

ฉันทำตามคำแนะนำนี้ที่นี่

ในการย้ายถิ่นของคำตอบของคริสเตียนให้ทำดังนี้

สร้างไฟล์ปรับแต่งใหม่ภายใน / etc / netplan เพื่อเก็บค่าคอนฟิกอะแดปเตอร์สำหรับโฮสต์เท่านั้น

เช่น sudo nano /etc/netplan/02-netcfg.yaml

ป้อนข้อมูลต่อไปนี้เพื่อกำหนดค่า IP แบบคงที่ 192.168.56.12 โดยที่enp0s3ชื่ออะแดปเตอร์สำหรับโฮสต์ของคุณเท่านั้น

network:
    version: 2
    renderer: networkd
    ethernets:
        enp0s3:
            addresses:
                - 192.168.56.12/24
            dhcp4: no

จากนั้นรันคำสั่งสองคำสั่งต่อไปนี้:

sudo netplan generate
sudo netplan apply

NAT ควรทำงานโดยไม่มีการกำหนดค่าให้เรียกใช้ifconfigเพื่อดูผลลัพธ์:

enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.56.12  netmask 255.255.255.0  broadcast 192.168.56.255
        inet6 fe80::a00:27ff:fe06:6cdd  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:06:6c:dd  txqueuelen 1000  (Ethernet)
        RX packets 252  bytes 23076 (23.0 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 208  bytes 30015 (30.0 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.3.15  netmask 255.255.255.0  broadcast 10.0.3.255
        inet6 fe80::a00:27ff:fe4d:a6b8  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:4d:a6:b8  txqueuelen 1000  (Ethernet)
        RX packets 95  bytes 94894 (94.8 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 85  bytes 7436 (7.4 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

1
ขอบคุณ! ฉันเพิ่มส่วนการอัปเดตให้กับคำตอบเก่าและเชื่อมโยงกับข้อมูลใหม่นี้
— Christian Long

ฉันได้ติดตามคุณโซลูชันแล้ว แต่พลาดการสนับสนุน nat สำหรับ enp0s8 ฉันได้เพิ่มด้วยตนเองเปิดใช้งาน dhcp4 สำหรับ enp0s8 ใน netplan และในที่สุดก็เพิ่มทั้ง enp0s3 และ enp0s8 หวังว่านี่จะช่วยใครซักคน
— Dzmitry Prakapenka

3

ฉันเพิ่งเพิ่มอะแดปเตอร์ 2 ตัว:

อแด็ปเตอร์ 1 โฮสต์เท่านั้น vboxnet0

Adapter2 NAT

และมันทำงานได้สมบูรณ์แบบฉันสามารถเข้าถึงเครื่องเสมือนจากโฮสต์และฉันมีอินเทอร์เน็ตบน VM


2

ใช่ฉันมีปัญหานี้มันเป็นความเจ็บปวดโดยรวม! แต่ฉันแก้ไขมันได้โดยเพียงแค่ติดตั้งเซิร์ฟเวอร์ Squid Cache Proxy บนพีซีทางกายภาพของฉันและวิธีนั้น - พีซีเสมือนจริงสำหรับโฮสต์ของฉันเท่านั้นที่สามารถเชื่อมต่ออินเทอร์เน็ตได้!

ฉันทำคู่มือ 3 นาทีอย่างรวดเร็วที่นี่ - สำหรับทุกคนที่ต้องการวิธีการทำงาน! http://b0zmeister.wordpress.com/allowing-host-only-virtualbox-guest-to-connect-to-the-internet/


มันใช้งานได้ดีสำหรับฉันขอบคุณสำหรับการแบ่งปัน มันเป็นวิธีที่ง่ายที่สุดในการทำให้ทุกอย่างทำงาน
— เรน

สวัสดี Laurent - ไม่มีปัญหา - ดีใจที่ได้ช่วย! ต้องรักการใช้งาน virtualbox PC นอกเครือข่ายอื่น - แต่ - ด้วยการเชื่อมต่ออินเทอร์เน็ตที่ใช้งานได้ :)
— B0zmeister

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