我有一台服务器,里面有一张网卡(eth1
)。我的服务器分配了 5 个公共 IP 地址,目前配置如下 ( /etc/network/interfaces
):
# The primary network interface
allow-hotplug eth1
iface eth1 inet static
address xxx.yyy.zzz.130
netmask 255.255.255.248
network xxx.yyy.zzz.128
broadcast xxx.yyy.zzz.135
gateway xxx.yyy.zzz.129
iface eth1:0 inet static
address xxx.yyy.zzz.131
netmask 255.255.255.248
iface eth1:1 inet static
address xxx.yyy.zzz.132
netmask 255.255.255.248
iface eth1:2 inet static
address xxx.yyy.zzz.133
netmask 255.255.255.248
iface eth1:3 inet static
address xxx.yyy.zzz.134
netmask 255.255.255.248
这工作得很好,但是我想添加一个与公共 IP 桥接的 KVM 虚拟机xxx.yyy.zzz.131
。
如果我这样做:
auto br0
iface br0 inet static
bridge-ports eth1
bridge_stp off
bridge_fd 0
bridge_maxwait 0
address xxx.yyy.zzz.131
netmask 255.255.255.248
然后才 xxx.yyy.zzz.131
可以访问。其他IP都不是。
如果我将其更改为bridge-ports eth1:0
我收到错误:
SIOCSIFFLAGS: Cannot assign requested address
RTNETLINK answers: File exists
Failed to bring up br0.
如果我注释掉关于 的其他部分eth1:0
,除了上面的错误,我也得到Ignoring unknown interface eth1:0=eth10.
了开头。
如果我只有一个 NIC 和多个 IP,如何添加桥接设备?
您应该只有主机桥上主机的 IP地址。来宾的 IP 地址应仅在来宾中分配。
您可以使用多种方法在 VM 内使用公共 ip。
第一种方式是,你选择了什么。在这种情况下,您创建一个桥接接口
eth1
作为桥接端口。你的
interfaces
文件应该看起来像。注意,
xxx.yyy.zzz.131
没有在主机上分配。broadcast
和选项也network
没有用,所以我省略了它们。在此之后,您可以在 VM 内使用公共 ip 而无需任何额外的技巧,因为 VM 将作为桥接端口连接。
其他方法是使用代理 arp 功能。为此,您不需要更改接口文件。您只需在 VM 内分配公共 ip(作为主要或次要),在主机上添加到该公共 ip 的路由,并在接口上启用 proxy-arp 功能
eth1
。请注意,不应在主机本身上分配此公共 ip,而应仅在 VM 内分配。另外,不要忘记将这些更改永久化(您可以使用文件post-up
中的选项interfaces
)。无法为一个 IP 地址创建桥接网络。它需要对整个网络接口进行或根本不需要。如果您只有一个 NIC,您唯一的选择是分配主机上的所有 IP 地址,然后使用防火墙(例如
iptables
)对来宾操作系统进行 NAT。本文有一个脚本,它会在来宾操作系统启动/停止时自动为您执行此操作。