Linux

使用具有多個 IP 地址的單個網卡啟用橋接連接

  • August 4, 2019

我有一台伺服器,裡面有一張網卡(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

引用自:https://serverfault.com/questions/666310