在VirtualBox中,如何设置可以访问Internet的仅主机虚拟机?


98

在使用VirtualBox设置虚拟机时,我经常需要以下特征

  • vm有一个静态IP
  • 主机无需端口转发即可访问虚拟机
  • 虚拟机可以访问互联网
  • 我可以将笔记本电脑从一个网络移动到另一个网络(例如,从家庭到办公室再到咖啡店),而不必担心保护或重新配置虚拟机的麻烦。

VirtualBox网络连接方法没有一个能够单独满足这些要求。

  • NAT
    如果要从主机连接到vm,则需要端口转发。

  • 仅限主机
    除非主机是路由器,否则vm无法访问Internet。

  • 桥接将
    虚拟机公开到网络;不便携。

Answers:


110

我可以通过在vm上设置两个适配器来获得所需的设置。

VirtualBox 4.2.12
Ubuntu 12.04来宾

在“ VirtualBox”>“首选项”>“网络”中,设置仅主机的网络。

我的被​​称为vboxnet0,它是手动配置的:
ip 192.168.56.1
网络掩码255.255.255.0
没有dhcp

VirtualBox网络配置 VirtualBox网络配置

然后,在虚拟机的网络设置中,设置两个适配器:


仅适配器1 主机,vboxnet0

Adapter2
NAT

引导虚拟机并通过VirtualBox提供的控制台登录。

运行此命令以查看您的适配器:

ls /sys/class/net

在我的情况下,这些适配器分别命名为eth1和eth2(以及lo,即回送接口)。

然后,编辑您的网络配置。

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获取默认网关。


2018年3月更新

请参阅@ Hugo14453的此答案获取适用于Ubuntu 17.10及更高版本的更新版本。


1
更新:VirtualBox 4.3引入了NAT服务,看起来它可以消除对两个接口的需要。6.4。网络地址翻译服务
Christian Long

4
这对我很有帮助,我使用Virtualbox进行开发,当我在家里时,一切都可以正常进行,因为我已经按喜好设置了网络,当我迁移到另一个网络(家庭,公司... ),我必须更改网站URL,删除一些系统文件,重新启动,但我不知道有多少次,列表还在继续。该解决方案不关心您当前的网络,这就是为什么我喜欢它...只需将您的PC插入任何网络并专注于您的工作即可。
Nabil Kadimi 2014年

1
谢谢。没有为仅主机接口定义网关地址解决了我的问题。
Florian

2
完善。/ etc / network / interfaces配置是关键的感谢!!!!
拜伦·惠特洛克

1
“请注意,eth1没有指定默认网关。eth2将从dhcp获取默认网关。” <-此评论是关键。
Pere

16

我可以混合使用Christian Long解决方案来解决我的问题。我添加了2个适配器:

适配器1-NAT

适配器2-仅主机,vboxnet0

唯一的区别是在VM的interfaces文件中:

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重新启动后,一切正常。


这对我有用,但是我希望VM具有静态IP地址。我这样做的那一刻,Internet停止工作。如果我同时使用DHCP进行设置,则可以正常工作。如何使仅主机接口获得静态IP?
Umar Farooq Khawaja 2014年

只有一个有效。谢谢。+1
豪尔赫·坎波斯

14

还有另一种简单的方法,我们不需要创建新的NAT适配器

  1. 在主机上,请添加以下iptables规则。这将通过主机将数据包转发到Internet:

    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主机。
德里克·

我们需要运行“ dnsmasq”服务。在unix.stackexchange.com/a/384187/61742链接中,我们提供了有关@Danatela建议内容的完整信息。谢谢!
爱德华多·卢西奥

1
@EduardoLucio,请给Long Bui致谢。我刚刚编辑了这篇文章,使其更具可读性。
Danatela

@龙B谢谢您的贡献!起来!起来!起来!起来!起来!起来!= D
爱德华多·卢西奥

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
谢谢!我在我的旧答案中添加了更新部分,并链接到此新信息。
克里斯蒂安·朗

我已经按照您的解决方案进行操作,但是错过了对enp0s8的支持。我已经在netplan中为enp0s8手动添加了启用dhcp4,最后将enp0s3和enp0s8都设置了。希望这会帮助到别人。
Dzmitry Prakapenka '18


2

是的,我有这个问题,简直太痛苦了!但是,我只需在物理PC上安装Squid Cache Proxy服务器即可解决该问题,并且这种方式-我的仅主机虚拟机PC可以连接到Internet!

我在这里做了3分钟的快速指南-适用于任何想要它如何工作的人! http://b0zmeister.wordpress.com/allowing-host-only-virtualbox-guest-to-connect-to-the-internet/


感谢您的分享,对我来说效果很好。到目前为止,这是使所有功能正常工作的最简单方法。
laurent

劳伦特(Hi Laurent)-没问题-乐于助人!一定喜欢在不同的网络上运行virtualbox PC,但是-可以使用Internet连接:)
B0zmeister 2014年

现在链接已死。考虑在此处移动说明。
s3v3n
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.