虚拟机的 IP 别名

虚拟机的 IP 别名

在此先感谢您提供的任何帮助。我搜索了又搜索,但还是没有找到问题的答案。我不确定这应该在虚拟化还是网络中 - 因为这主要是网络问题,所以我会在这里问。

我有一个租用的服务器,它有一个网卡和两个真实 IP 地址。第一个 IP,69.xxx.xxx.xxx,是服务器的实际 IP 地址。第二个 IP,209.xxx.xxx.xxx,是 IP 别名。接口定义如下:

# loopback interface

auto lo
iface lo inet loopback

# ethernet interface

auto eth0
iface eth0 inet static
  address 69.xxx.xxx.xxx
  network 69.xxx.xxx.0
  netmask 255.255.255.0
  broadcast 69.xxx.xxx.255
  gateway 69.xxx.xxx.1

# virtual interfaces

auto eth0:0
iface eth0:0 inet static
name Ethernet alias LAN card
address 209.xxx.xxx.xxx
netmask 255.255.255.255

69.xxx.xxx.xxx 地址上有一个 Web 服务器和许多正常运行的服务。209.xxx.xxx.xxx 地址是最近购买的地址。它按照上述定义进行“ping”。我以前没有使用过 IP 别名,但据我了解,该地址与网络完全无关。该地址没有关联的广播或网关。

我正在尝试安装一个在同一台服务器上托管的虚拟机中运行的产品。我希望虚拟机由 209.xxx.xxx.xxx 地址寻址。预构建的基于 VMWare 的虚拟机通过 DHCP 获取其 IP。主机和虚拟机都是 Ubuntu 10.04 服务器。我更愿意将 VM 更改为使用 209.xxx.xxx.xxx 静态 IP,但不知道如何设置,因为没有实际的网络/广播/网关。当我尝试在主机上设置 dhcp3 服务器时,它无法启动,并发出错误消息:“eth0:0 (0.0.0.0) 没有子网声明。** 忽略 eth0:0 上的请求。”好像 eth0:0 接口没有启动。但是,eth0:0 已启动。

主机:Ubuntu 10.04 LTS 服务器版本 VM:VMWare Server 2.02,Guest Ubuntu 10.04 LTS 服务器版本

有人知道如何设置上述场景吗?使用 IP 别名是否可行?

答案1

通常,您会将 eth0 设为桥接接口,在 VMWare 中定义虚拟接口以使用该桥接器,然后只需在客户机中正常配置 209.xyz 静态 IP(即,您甚至不需要在主机上为 209.xyz 创建别名条目)。

/etc/network/interfaces因此,主机上的内容将变为如下形式:

auto br0
iface br0 inet static
  address 69.xxx.xxx.xxx
  network 69.xxx.xxx.0
  netmask 255.255.255.0
  broadcast 69.xxx.xxx.255
  gateway 69.xxx.xxx.1
  bridge_ports eth0
  bridge_fd 2

我不确定如何配置 VMWare 以使用 br0(我自己使用带有 libvirt 的 KVM)但我确信这一定是可能的。

答案2

通过快速的互联网搜索,似乎 VMPlayer 在 Ubuntu 上配置虚拟设备时遇到了问题。KVM 似乎能够运行 VMWare 映像。无论如何,要解决的第一个问题是将您的客户机配置为使用固定地址。一旦您知道了 IP 地址,您就可以相当轻松地完成其余的工作。

一种解决方案是使用新的静态地址解决问题,然后使用 IP 表将流量 DNAT 到虚拟机。像 Shorewall(作为 Ubuntu 软件包提供)这样的工具可以简单地完成此操作。Shorewall 文档很好地介绍了 NAT。

或者,您可以根据需要将地址移动到虚拟机。将192.0.2.10以下内容替换为您的虚拟服务器的 IP 地址。我会将地址添加到其中一个私有地址块(10.0.0.0/8、172.16.0.0/12 或 192.168.0.0/16)。我希望您的虚拟服务器容器默认使用其中一个。如果它设置了 DHCP 服务器,您可以在该网络上的 DHCP 地址范围之外添加静态地址。

eth0:0定义移至虚拟服务器。(我认为您应该删除name可能导致问题的行。无论如何,这都是不必要的。)

使用以下命令将流量路由209.xxx.xxx.xxx到虚拟机:

ip route add 209.xxx.xxx.xxx via 192.0.2.10

此命令需要在创建虚拟机使用的网络设备后运行。如果您可以在文件中创建网络,/etc/network/interfaces则可以将其添加为post-up命令。

移动地址的第二种方法是将其配置为虚拟机上的点对点地址。您应该能够在下面使用eth0:0而不是。在虚拟客户端块上将如下所示:eth0/etc/network/interfaces

auto eth0
iface eth0 inet static
    address 209.xxx.xxx.xxx.xxx
    pointopoint 69.xxx.xxx.xxx
    netmask 255.255.255.255

如果您没有其他默认路由,点对点网络应该作为您的默认路由。我还没有验证这一点。但是,如果您有默认路由,它应该可以正确处理流量。

您将需要一个点到点路由。如果您的虚拟网络的网络设备是,则类似此路由的命令将起作用br0。为您的服务器使用正确的设备。

ip route 209.xxx.xxx.xxx dev br0

Will Daniels 关于使用桥接设备进行虚拟机网络的说法是正确的。您的eth0设备不需要成为桥接的一部分。就我而言,我无法将我的eth0设备连接到桥接器,因为我有多个桥接器。我记录了我的KVM 手动联网。如果您的eth0设备未加入网桥,则需要启用 IP 转发。(ShoreWall 为我做了这件事。)您应该能够安全地创建和删除未连接到网络接口的网桥设备。

由于您提到这是您的生产服务器,我建议您首先尝试在非生产服务器上设置所需的配置。您可以从私有网络区域中未使用的部分分配地址进行测试。然后在生产设置中使用正确的地址。

相关内容