我正在使用一台具有多个不同接口 (eth0-3) 的服务器,目前我只使用一个接口来处理主机流量,另一个接口来处理我的 LXC 桥接流量。由于我有几个闲置的端口,而且我的桥接器上有大量流量,所以我想使用其他端口进行一些老式的链路聚合。
这不是我以前真正遇到过的问题,这实际上不是一个问题,而是一个“这是我在 /etc/network/interfaces 中实现它的办法吗”...所以我们开始吧。
据我所知,我可以使用绑定东西来绑定eth1
并eth2
说(甚至eth3
!)到设备bond0
,然后只需将bridge_port
我的桥的更改br0
为bond0
。现在这一切对我来说都有意义了,我非常困惑的是如果我不想给 bond0 一个 ip,我该怎么做...我目前将我的 br0 设置为没有 IP,这意味着主机不可联系,但主机上的所有 lxc 容器都有可路由的 IP,因此可以联系它们。
我该如何实现这一点?我可以不提供bond0
IP 并假设它会以相同的方式运行吗?
这是我的笔记/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 上遇到了类似的问题,无法使绑定 + 桥接正常工作。我必须做三件关键的事情:
- 禁用 bios 开发人员名称,并更新 grub。
- 创建我自己的 udev 规则名称文件。
- 让桥接器采用 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.0
和0000:08:00.0
。这些对于每个硬件设置都是唯一的。
编辑此文件并删除其中的所有现有行:/etc/udev/rules.d/70-persistent-net.rules
像这样添加您想要的设备名称(注意在哪里替换0000:07:00.0
和0000: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