ใน 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.