如果我在同一台主机(Windows 7)上创建多个 ubuntu 客户机,所有客户机的网络适配器均配置为“仅主机”,则主机中的所有客户机都可以互相 ping 通
在 Windows 7 主机上,ipconfig
我看到类似
以太网适配器本地连接:
Connection-specific DNS Suffix . : wr
Link-local IPv6 Address . . . . . : ......
IPv4 Address. . . . . . . . . . . : 10.15.38.101
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 10.16.2.254
以太网适配器 VirtualBox 仅主机网络:
Connection-specific DNS Suffix . :
Link-local IPv6 Address . . . . . : .........
IPv4 Address. . . . . . . . . . . : 192.168.56.1
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . :
事实上,所有访客的 IP 都显示位于 192.168.56.X 子网。
问题:是否可以轻松连接正在运行的访客不同的主机是否可以通过 LAN 访问此仅主机网络?
答案1
简短的回答是不行。您不能使用“仅主机网络”并在多个物理主机上连接来宾。如果您需要将来宾连接到 LAN,最好使用桥接网络。
如果您能提供有关您要完成的任务的更多详细信息,我们也许可以提出更好的建议。
答案2
更长且更好的答案是“是的”。
您可以进行仅主机网络并将客户机(和主机)连接到多台主机上的仅主机网络上的其他客户机,或连接到同一台主机上的多个仅主机网络上的其他客户机,但这并不容易。不是太难,但并不容易。
使之成为可能的是,只要主机能够进行必要的路由,主机也可以参与主机专用网络(主机直接参与的唯一虚拟网络方案)。它确实需要一些管理访问权限,因此出于这个原因,这样做可能也很难。
四个简单步骤
以下是您需要从内到外执行的四项操作:配置您的仅主机网络、为您的访客添加网关、将您的主机变为路由器以及在主机之间添加静态路由。
仅主机网络配置
确保您的仅主机网络是唯一的(至少参与该方案的任何网络都是唯一的)。也就是说,每个仅主机网络都需要不同,而不是全部都是相同的默认 192.168.56.0/24 网络。
您的示例将您的主机放在 10.15.38.0/24 网络中,该网络已经是私有范围(这并不重要),因此您可以选择使用其他 10.xy0/24 网络(您有大约 64K 个选择!)作为您的仅主机网络。(请注意,由于您的示例网关不在您的网络上,因此它表明您的网络实际上是 10.0.0.0/8,因此请警惕其他潜在冲突。)当然,您也可以继续使用 192.168.y.0/24 网络,但请确保每个仅主机网络使用不同的“y”值。
VirtualBox 文档位于https://www.virtualbox.org/manual/ch08.html#idp59149232概述了如何配置仅主机接口和相关的 DHCP 服务器来更改地址。如果命令行不是您的朋友,GUI 也提供了机制,但文档有助于使其易于理解(或者应该如此),并且并没有真正解决 GUI 的问题。
访客网关
配置您的客户机,使其通过主机的仅主机网络 IP 路由出仅主机网络。与 NAT 虚拟网络不同,仅主机 DHCP 服务器不向客户机提供路由信息,只提供地址。
这可以通过多种方式实现,例如替换 DHCP 服务器,但本质上您所要做的就是告诉每个客户操作系统如何脱离仅主机网络。对于大多数操作系统来说,这是相同的命令(需要管理权限):
route add default gw <<host-only-if>>
默认情况下,主机专用接口将被赋予网络的 .1 节点,因此在这些示例中为 10.xy1,因此命令变为路由添加默认 gw 10.xy1(当然,其中 x 和 y 是实值)。
使其永久化因客户操作系统而异,但使用 GUI 或根据需要编辑 /etc/ 文件,或运行路线添加每次启动虚拟机时都会执行这一行。
NIC 之间的主机路由
配置您的 VM 主机以在接口之间路由。这是棘手的地方,许多人放弃了。就您的主机操作系统而言,使用仅主机网络意味着它们是多 NIC 机器,并且可以配置它们以将流量从虚拟网络转移到真实网络。
由于您使用的是 Windows,http://windows.microsoft.com/en-us/windows/configuring-multiple-network-gateways概述了这一概念并给出了一些有关路由命令的详细信息。似乎只需打开 RIP 侦听器并添加/验证路由即可。
在 Linux 主机上,它就像简单的将 /proc/sys/net/ipv4/ip_forward 文件中的值设置为 1,并确保路由表包含虚拟网络和真实网络。这在我的 Ubuntu 主机上有效:
echo "1" | sudo tee /proc/sys/net/ipv4/ip_forward
更好的是,我的 Ubuntu 主机已经有了真实网络和虚拟网络的正确路由,所以我所要做的就是在该文件中更改该值。
谷歌搜索“我的操作系统作为路由器”或类似的东西,直到找到让你满意的东西。你可以使用任何让你满意的机制来启用路由并设置路由。
静态路由
配置主机以路由到其他主机的虚拟网络。这是变得混乱的地方,即使是能够完成第 3 步的人有时也会放弃。这很混乱,因为您需要在每个虚拟机主机上进行此配置,如果您有许多主机和仅主机网络,则跟踪起来会很棘手,完成起来也很忙。
您的一般默认网络配置将是“不在我的子网上的所有内容都位于我的默认网关的另一侧”。在您的示例中,如果它不在 10.15.38.0/24 网络上,则它位于 10.16.2.254 的另一侧(这再次表明您的网络实际上是 10.0.0.0/8,并且您的网络掩码是错误的,但没关系)。您需要做的是告诉您的主机设置到其他主机虚拟网络的静态路由。或者,您可以配置主机的默认路由器(您的路由器是 10.16.2.254)以了解这些路由...流量将离开主机,到达路由器,然后返回到其他主机...
类似的东西可以在大多数主机操作系统上运行。
route add -net <<guest-ip-range>> netmask <<correct-mask>> gw <<host-lan-IP>>
因此,就你的例子而言,你应该输入路由添加-net 10.xy0 网络掩码 255.255.255.0 gw 10.15.38.101在需要访问您主机的虚拟网络的每个其他主机上。
这也可以对主机网络上需要访问主机专用网络上的设备的其他系统执行,即使它没有托管自己的虚拟网络。
端到端示例
假设您的网络上有两台主机要应用此规则:10.15.38.101 和 10.15.38.201。为了便于记忆,请更改每个主机专用网络以使用其最后一个八位字节作为网络定义,因此 .101 主机上的网络定义是 10.101.0.0/24,而 .201 主机上的网络定义是 10.201.0.0/24。
在主机专用网络中的每个客户机上,添加一条通过主机专用主机接口的路由。因此在 10.101.0.0/24 机器上路由添加默认网关 10.101.0.1以及 10.201.0.0/24 机器路由添加默认网关 10.201.0.1就可以了。
在每台主机上,打开路由并确保路由表包含两个网络。在我的 Ubuntu 主机上,我这样做了回显“ 1” | sudo tee /proc/sys/net/ipv4/ip_forward进而路线-n将显示类似这样的内容(已编辑以匹配您的示例):
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.16.2.254 0.0.0.0 UG 0 0 0 eth0
10.15.38.0 0.0.0.0 255.255.255.0 U 1 0 0 eth0
10.101.0.0 0.0.0.0 255.255.255.0 U 0 0 0 vboxnet0
然后,您需要在每台主机上添加到另一台主机的仅主机网络的静态路由。因此,在 .101 主机上,您需要输入路由添加-net 10.201.0.0 网络掩码 255.255.255.0 gw 10.15.38.201在 .201 主机上输入路由添加-net 10.101.0.0 网络掩码 255.255.255.0 gw 10.15.38.101建立静态路由。
现在您应该能够使用网络从 10.101.0.101(主机网络上的第一个默认 DHCP 地址)连接到另一台主机上的 10.201.0.101 虚拟机。我不知道您的客户操作系统提供什么,但 SSH 或 Web 浏览器(通常为 ping)应该可以工作。
有了这些,即使在不同的主机网络上,您的主机和虚拟机也应该能够互相看到。
注意事项
剩下的就是配置其他服务,例如 DNS,以便更轻松地解析所有主机。这可能很简单,只需在 /etc/resolv.conf 或客户操作系统中的任何 GUI 机制中添加几行,或者使用其他主机地址编辑 /etc/hosts 文件即可。
可能不太清楚,但静态路由技巧需要用于仅主机网络客户机需要访问的任何系统。在分步示例中,只有两个主机配置了静态地址。这意味着 10.101.0.0/24 或 10.201.0.0/24 网络上的任何机器,或 10.15.38.101 或 10.15.38.201 主机都可以交互,但仅主机网络上的设备无法与 10.15.38.0/24 网络(或其他 10.0.0.0/8 网络)上未添加静态路由的其他主机交互。
可以通过进一步配置 VM 主机以使用更强大的转发规则、添加 NAT 或代理软件来改变这种情况。该软件不需要位于多台 VM 主机上,也不需要位于不同的系统上,只要该设备配置了到它需要服务的所有主机专用网络的静态路由即可。如果这是迫切需要,可以制定更大的路由解决方案。