![如何使网桥在启动时启动](https://linux22.com/image/1223862/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%BD%91%E6%A1%A5%E5%9C%A8%E5%90%AF%E5%8A%A8%E6%97%B6%E5%90%AF%E5%8A%A8.png)
每当我启动计算机时,我都需要重新启动网络服务(使用服务网络重新启动)以启用我的桥接器(br0)。如何让 Linux 在启动计算机时执行此操作,这样我就不必手动执行此操作了?
当我启动时,网络正在启动,另外 2 个以太网适配器处于活动状态。
答案1
这似乎是接口启动顺序的问题。查看/etc/init.d/network
初始化脚本,发现有一段构建所有接口的代码:
# find all the interfaces besides loopback.
# ignore aliases, alternative configurations, and editor backup files
interfaces=$(ls ifcfg* | \
LANG=C sed -e "$__sed_discard_ignored_files" \
-e '/\(ifcfg-lo\|:\|ifcfg-.*-range\)/d' \
-e '/ifcfg-[A-Za-z0-9\._-]\+$/ { s/^ifcfg-//g;s/[0-9]/ &/}' | \
LANG=C sort -k 1,1 -k 2n | \
LANG=C sed 's/ //')
此命令的输出产生以下列表:
br0
eth0
我还没有找到解决这个问题的方法,除了ifup br0
在/etc/rc.local
脚本中包含一个来手动强制br0
启动后设备eth0
已启动。
编辑
我刚刚创建了一个/etc/sysconfig/network-scripts/ifcfg-br0
这样的,并在重新启动后启动了br0后eth0!
# ifcfg-br0
DEVICE=br0
TYPE=Bridge
BOOTPROTO=static
ONBOOT=yes
DELAY=0
NM_CONTROLLED=no
STP=off
IPADDR=192.168.1.200
GATEWAY=192.168.1.1
NETMASK=255.255.255.0
例子/etc/sysconfig/network-scripts/ifcfg-eth0
# ifcfg-eth0
DEVICE=eth0
#BOOTPROTO=dhcp
HWADDR=BC:AE:C5:34:C9:E8
ONBOOT=yes
BRIDGE=br0
NM_CONTROLLED=no
通过这样的文件我现在可以看到网络设备如下图所示:
Bringing up interface eth0 [ OK ]
Bringing up interface br0 [ OK ]
答案2
我在运行 Centos 7.3 x86_64 的物理机上遇到了同样的问题,并通过首先将物理适配器移至主板上的另一个 PCI-X 插槽,然后执行以下所有操作来解决该问题:
删除桥接接口配置文件:
rm -f /etc/sysconfig/network-scripts/ifcfg-br0
删除从属接口配置文件:
rm -f /etc/sysconfig/network-scripts/ifcfg-enp6s0f0
其中 enp6s0f0 是原始从属接口名称,并且是分配给网桥 br0 的唯一从属接口
确保完全移除原始桥接器,确保其所有痕迹都消失(brctl show)不应列出 br0 桥接器接口。
关闭桥梁:
ifconfig br0 关闭
关闭从属:
ifdown enp6s0f0
ifconfig enp6s0f0 down
停止网络服务:
systemctl stop network.service
如果有必要,请手动移除桥: (就我而言,确实如此。)
在删除网桥之前,必须先删除所有从属接口。您可以使用网桥控制实用程序来删除它们
brctl delif br0 enp6s0f0
一旦所有从属接口都被移除,网桥本身也可以被移除。
brctl delbr br0
确认没有剩余的配置文件引用br0:
grep -i br0 /etc/sysconfig/network-scripts/ifcfg-*
不应返回任何结果
就我而言,基于将卡向上移动一个插槽的新接口名称现在是 enp5s0f0。
启动接口,然后使用 ethtool 或“ip link”进行确认,它应该报告检测到接口的链接。
[root@phaser ~]# ifconfig enp5s0f0 up
[root@phaser ~]# ethtool enp5s0f0
Settings for enp5s0f0:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supported pause frame use: No
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised pause frame use: No
Advertised auto-negotiation: Yes
Speed: 1000Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 1
Transceiver: internal
Auto-negotiation: on
MDI-X: on (auto)
Supports Wake-on: pumbg
Wake-on: d
Current message level: 0x00000007 (7)
drv probe link
Link detected: yes
使用 nmcli 创建新网桥。nmcli
将在 /etc/sysconfig/network-scripts/ 中写入必要的接口配置文件
创建桥接接口:
nmcli conn add type bridge ifname br0 ip4 10.0.0.16/24 gw4 10.0.0.1
将从属接口添加到网桥:
nmcli conn add type bridge-slave ifname enp5s0f0 master bridge-br0
如果网络已有生成树主节点,则禁用生成树协议:
nmcli con modify bridge-br0 bridge.stp no
确保桥接器配置为使用 nmcli 在启动时启动:
nmcli con mod br0 connection.autoconnect yes
此时,我可以成功启动和停止网络服务,并且重新启动后,桥接接口可以正常启动。
故障排除说明:
我怀疑省略了以下行:
TYPE=Bridge
来自我原始的 br0 配置文件可能导致了这个问题。我还怀疑不使用 nmcli 和手动创建桥接接口文件也导致了问题。这可能是因为 NetworkManager 仍在尝试管理接口。这可以通过以下方式确认:
nmcli dev status
此命令将显示一个表格,其中列出了所有网络接口及其状态。如果网络管理器未控制某个接口,则其状态将列为未管理。任何其他值都表示该接口受网络管理器控制。
如果您最终手动修改了 /etc/sysconfig/network-scripts 下的 ifcfg 文件,请确保通过重新加载通知网络管理员这些更改。
nmcli con reload
这将告诉网络管理员重新读取所有 ifcfg 文件并识别任何更改。
我发现了以下帖子: 如何阻止网络管理器控制接口?
对于那些不想在 RHEL / CENTOS 7.x 中使用 NetworkManager 的用户
我在测试期间注意到的另一件小事是,我手动创建的原始接口配置文件上的 selinux 上下文与自动生成的配置文件并不相同。
ls -lZ 显示自动生成的 ifcfg- 文件具有以下上下文:
system_u:object_r:net_conf_t:s0
而我创建的文件以 unconfined_u 作为用户。
我使用 chcon 将用户设置为 system_u
chcon system_u:object_r:net_conf_t:s0 ifcfg-<filename>
另一个观察结果是,当启动或关闭新的桥接接口时,systemd 现在能够正确报告接口已连接和断开连接。在进行这些更改之前,当我使用自己编写的配置文件时,systemd 似乎无法识别接口。它会显示接口已配置但未连接。尽管 ethtool 报告了链接检测。
答案3
检查以确保“网络”服务已启用。您可以使用 GUI 服务(system-config-services)或 chkconfig(如果您熟悉的话)。这为我自己解决了同样的问题。
答案4
我有同样的问题,但我发现自己写了桥接接口的名称 /etc/sysconfig/network-scripts/br0而不是 /etc/sysconfig/network-scripts/ifcfg-br0
当我打开“/etc/init.d/网络“并发现脚本仅加载以“开头的文件否“