如何在VirtualBox中使用静态IP地址设置NAT和仅主机网络


22

我正在尝试在VirtualBox中设置一组来宾,以使他们每个人都可以访问Internet,并且彼此之间以及对主机可见。我也希望客人拥有静态IP地址。

到目前为止,这是我遵循的过程:

  1. 关闭此设置要使用的仅主机网络的DHCP服务器功能
  2. 将分配给主机的IP地址更改为192.168.56.254
  3. 创建具有2个网络接口卡(NIC)的来宾计算机
  4. 配置第一个NIC以使用NAT
  5. 配置第二个NIC以使用仅热网络
  6. 在每个操作系统上安装OS(Ubuntu Server 13.10)
  7. 更新操作系统
  8. 通过编辑/ etc / network / interfaces如下配置网络
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

auto eth1
iface eth1 inet static
address 192.168.56.1
netmask 255.255.255.0
network 192.168.56.0
broadcast 192.168.56.255
gateway 192.168.56.254
dns-search cloudspace.local
dns-nameservers 8.8.8.8 8.8.4.4
  1. 保存文件
  2. 重启

当访客再次启动时,仅主机网络运行正常。主机/访客和访客/访客对机器可以互相ping通,但是Internet不能正常工作apt-get

如果随后发出service networking restart命令,则网络将按预期开始工作。

我究竟做错了什么?

我尝试切换网卡在/etc/network/interfaces文件中的显示顺序。我还交换了两个NIC之间的NAT /仅主机网络。没事。

主机是Windows 8.1,而来宾是Ubuntu Server 13.10。我在Mac OS X上尝试了相同的结果。

我将不胜感激。

更新:

我已包含以下命令的输出,以帮助进行诊断:

  • cat / etc / network / interfaces
  • ifconfig -a
  • 路线-n
$ cat /etc/network/interfaces
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

auto eth1
iface eth1 inet static
address 192.168.56.1
netmask 255.255.255.0
network 192.168.56.0
broadcast 192.168.56.255
gateway 192.168.56.254

$ ifconfig -a
eth0      Link encap:Ethernet  HWaddr 08:00:27:75:47:64
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe75:4764/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1180 (1.1 KB)  TX bytes:1332 (1.3 KB)

eth1      Link encap:Ethernet  HWaddr 08:00:27:93:98:d8
          inet addr:192.168.56.1  Bcast:192.168.56.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe93:98d8/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:140 errors:0 dropped:0 overruns:0 frame:0
          TX packets:225 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:14418 (14.4 KB)  TX bytes:27378 (27.3 KB)

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:16 errors:0 dropped:0 overruns:0 frame:0
          TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1184 (1.1 KB)  TX bytes:1184 (1.1 KB)

$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.56.254  0.0.0.0         UG    0      0        0 eth1
10.0.2.0        0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.56.0    0.0.0.0         255.255.255.0   U     0      0        0 eth1

更新2:

执行后sudo service networking restart,来自的输出route -n变为:

$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.2.2        0.0.0.0         UG    0      0        0 eth0
10.0.2.0        0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.56.0    0.0.0.0         255.255.255.0   U     0      0        0 eth1

那么如何在启动时确保此配置?

Answers:


16

如果发布尝试ping外部地址(例如您正在使用的Google DNS服务器),当前网络设置和路由表时得到的结果,则更容易解决问题。

/sbin/ifconfig -a
/sbin/route -n

在不知不觉中,这是一个黑暗的快照,但是我的猜测是,或者a)您没有在eth0上获得DHCP地址,或者b)您eth1的网关设置与分配的默认路由DHCP混淆。

如果您没有获得eth0的DHCP地址,则可能是VirtualBox中的配置错误(例如将适配器向后退)。

无论哪种方式,您都不需要为eth1专门分配的网关或DNS设置,因为它将由eth0上的DHCP分配,因此我将从配置中删除网关,dns-search和dns-nameservers行。如果您的虚拟机位于同一网络上并且已正确设置VirtualBox,则它们仍可以在没有网关设置的情况下进行通信。

编辑:为确保重启后eth1上没有网关,请从eth1块中删除行,使其看起来像这样:

auto eth1
iface eth1 inet static
address 192.168.56.1
netmask 255.255.255.0

完成后,您的interfaces文件中将没有任何网关行。


我已经按照您的建议添加了诊断程序。我认为正确的答案是(b),即,其网关设置eth1与分配的默认路由DHCP混淆。这个问题有方法解决吗?
Umar Farooq Khawaja 2014年

1
我已经编辑了答案,以显示eth1块在interfaces文件中的显示方式。您不需要网络或广播线路,也不需要网关线路。删除这三个。
jkt123

3

我想出了这个解决方案,它与@ jkt123的答案和@Umar的问题相同,但更简短。非常感谢您提供反馈!

在virtualbox中,启用NAT和仅主机网络。(顺便说一句:它可以在我的win7主机上运行。我不知道如何在Linux主机上执行该操作)。

在主机上- 查找“仅主机”接口的ip

ipconfig /all     # for windows host
ifconfig -a       # for linux host

在来宾中,编辑/ etc / network / interfaces。诀窍是 eth1(仅限主机)的顺序反转到eth0(互联网/ dhcp)之前。我不知道为什么

auto lo                        # keep the original loopback settings
iface lo ...                   # yeah, i don't remember, just keep it.

# ----> Ok, this is my addition <-----
auto eth1                      
allow-hotplug eth1             # i think hotplug it helps. not sure.
iface eth1 inet static
address 192.168.56.100         # arbitrary IP address between 2 and 254

auto eth0                      # This is the original content
iface eth0 inet dhcp           #  of this file, now at the end.

重启。


0

首先,我同时使用DHCP启用了网络NAT和使用启用了仅主机网络static ip add 192.168.40.41

然后,我遵循以下命令:

nano cat /etc/network/interfaces

我得到了这个结果:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

auto eth1
iface eth1 inet static
address 192.168.41.4
netmask 255.255.255.0

在重启之前,我键入了以下命令:

sudo service networking restart

然后重新启动。

将虚拟机加载到VM VirtualBox之后,两个网络都可以正常工作。我可以连接到互联网,也可以192.168.40.41通过网络浏览器连接。

我希望这将有助于获得nano编辑器:

sudo apt-get update
sudo apt-get install nano

然后只需输入nano终端即可启动。


0

您具有分配给不同NIC的多个默认网关。通常,“默认”表示预选选项。在这种情况下,如果为两个NIC都定义了指定的默认网关,则它不是预选选项。另外,这还会导致通信问题,例如异步路由。我不确定两个接口的Metric如何设置为0,但这可能是由于两个NIC都带有网关。Microsoft的有关此内容的文章位于此处,“度量”功能具有许多因素,这些因素提供了如何确定设置优先级的方法。(链接:https : //support.microsoft.com/en-us/help/299540/an-explanation-of-the-automatic-metric-feature-for-ipv4-routes

为了在响应中与@ jkt123达成一致,应仅分配1个默认网关。

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.