Linux
使用具有多個 IP 地址的單個網卡啟用橋接連接
我有一台伺服器,裡面有一張網卡(
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
文件應該是這樣的。iface br0 inet static bridge-ports eth1 bridge_stp off bridge_fd 0 bridge_maxwait 0 address xxx.yyy.zzz.130 netmask 255.255.255.248 gateway xxx.yyy.zzz.129 iface br0:1 inet static address xxx.yyy.zzz.132 netmask 255.255.255.248 iface br0:2 inet static address xxx.yyy.zzz.133 netmask 255.255.255.248 iface br0:3 inet static address xxx.yyy.zzz.134 netmask 255.255.255.248
注意,
xxx.yyy.zzz.131
沒有在主機上分配。broadcast
和選項也network
沒有用,所以我省略了它們。在此之後,您可以在 VM 內使用公共 ip 而無需任何額外的技巧,因為 VM 將作為橋接埠連接。
其他方法是使用代理 arp 功能。為此,您不需要更改介面文件。您只需在 VM 內分配公共 ip(作為主要或次要),在主機上添加到此公共 ip 的路由,並在
eth1
介面上啟用代理 arp 功能。請注意,不應在主機本身上分配此公共 ip,而應僅在 VM 內分配。另外,不要忘記將這些更改永久化(您可以使用文件post-up
中的選項interfaces
)。ip route add <public-ip> dev <virt-bridge-iface> sysctl -w net.ipv4.conf.eth1.proxy_arp=1