编辑

编辑

我正在使用一台具有多个不同接口 (eth0-3) 的服务器,目前我只使用一个接口来处理主机流量,另一个接口来处理我的 LXC 桥接流量。由于我有几个闲置的端口,而且我的桥接器上有大量流量,所以我想使用其他端口进行一些老式的链路聚合。

这不是我以前真正遇到过的问题,这实际上不是一个问题,而是一个“这是我在 /etc/network/interfaces 中实现它的办法吗”...所以我们开始吧。

据我所知,我可以使用绑定东西来绑定eth1eth2说(甚至eth3!)到设备bond0,然后只需将bridge_port我的桥的更改br0bond0。现在这一切对我来说都有意义了,我非常困惑的是如果我不想给 bond0 一个 ip,我该怎么做...我目前将我的 br0 设置为没有 IP,这意味着主机不可联系,但主机上的所有 lxc 容器都有可路由的 IP,因此可以联系它们。

我该如何实现这一点?我可以不提供bond0IP 并假设它会以相同的方式运行吗?

这是我的笔记/etc/network/interface 文件说明我该如何做(请注意,我还没有实现这个,因为我不想关闭我的整个主机网络):

# host communications times
auto eth0 inet static 
iface eth0 inet static
    blahblahblah

# first slave device
auto eth1
iface eth1 inet manual
    bond-master bond0

# second slave device
auto eth2
iface eth2 inet manual
    bond-master bond0

# our bond master or aggregation device
auto bond0
iface bond0 inet manual
    # no IP?
    gateway 192.168.1.1
    netmask 255.255.255.0
    bond-mode 0

# our bridge device
auto br0
iface br0 inet manual
    # also no IP
    bridge_ports bond0
    bridge_fd 0
    bridge_maxwait 0

答案1

因此,我在 Ubuntu 14.04 上遇到了类似的问题,无法使绑定 + 桥接正常工作。我必须做三件关键的事情:

  1. 禁用 bios 开发人员名称,并更新 grub。
  2. 创建我自己的 udev 规则名称文件。
  3. 让桥接器采用 IP,而不是绑定。

好的,第 1 步。确保您对此框具有本地访问权限。键盘和显示器。我们将破坏您的网络。编辑此文件:/etc/default/grub并更改此行:

GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1 net.ifnames=1 biosdevname=0"

(我们不使用 IPV6,因此我们也禁用它)

接下来,运行sudo update-grub并重新启动。

好的,第 2 步。接下来,登录到您的盒子并运行以下命令:sudo dmesg | grep eth

如果运气好的话,你应该能找到你的设备,这样我们就可以编写 udev 规则了。通常人们会通过 MAC 地址重命名他们的网络设备,但是绑定往往会混淆 udev,因为在某些配置中绑定可能会占用你的 NIC 的 MAC 地址之一,所以不要走那条路。相反,你可以通过设备 ID 来做到这一点。我有英特尔 NIC,所以这是我的输出。你的里程会有所不同:

[ 17.888965] igb 0000:07:00.0: added PHC on eth0 [ 17.888969] igb 0000:07:00.0: eth0: (PCIe:2.5Gb/s:Width x1) d0:50:99:xx:xx:xx [ 17.889097] igb 0000:07:00.0: eth0: PBA No: 001300-000 [ 17.932484] igb 0000:08:00.0: added PHC on eth1 [ 17.932488] igb 0000:08:00.0: eth1: (PCIe:2.5Gb/s:Width x1) d0:50:99:xx:xx:xx [ 17.932615] igb 0000:08:00.0: eth1: PBA No: 001300-000

好的,我的设备 ID 是0000:07:00.00000:08:00.0。这些对于每个硬件设置都是唯一的。

编辑此文件并删除其中的所有现有行:/etc/udev/rules.d/70-persistent-net.rules

像这样添加您想要的设备名称(注意在哪里替换0000:07:00.00000:08:00.0):

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", KERNELS=="0000:07:00.0", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0" SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", KERNELS=="0000:08:00.0", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

哇喔。快完成了。

步骤 3。无论出于什么原因,如果绑定使用 IP 地址,我无法使网络正常工作,但它似乎可以正常工作,只需检查网桥是否正常工作。我使用这个/etc/network/interfaces(顺便说一下,我还使用 DHCP 而不是静态,只需保留这些节即可):

auto lo
     iface lo inet loopback

auto eth0 
iface eth0 inet manual
     bond-master bond0

auto eth1
iface eth1 inet manual
     bond-master bond0

auto bond0
iface bond0 inet manual 
     bond-slaves none
     bond-mode 802.3ad
     bond-miimon 100
     bond-downdelay 200
     bond-updelay 200

auto lan0
iface lan0 inet dhcp
  bridge_ports bond0
  bridge_fd 0
  bridge_maxwait 0

重启并祈祷好运。祝你好运!

编辑

Ubuntu 在此配置中存在一些排序错误。我插入了一些启动后延迟,因为我无法始终通过 DHCP 获取 IP 地址:

/etc/network/interfaces

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual
    bond-master bond0

auto eth1
iface eth1 inet manual
    bond-master bond0

auto bond0
iface bond0 inet manual
    bond-slaves eth0 eth1
    bond-mode 802.3ad
    bond-miimon 100
    bond-downdelay 200
    bond-updelay 200
    bond-xmit-hash-policy layer3+4
    up sleep 2

auto lan0
iface lan0 inet dhcp
    bridge_ports bond0
    bridge_waitport 10
    bridge_fd 0
    bridge_maxwait 0
    bridge_stp off
    pre-up sleep 2

相关内容