如何使网桥在启动时启动

如何使网桥在启动时启动

每当我启动计算机时,我都需要重新启动网络服务(使用服务网络重新启动)以启用我的桥接器(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这样的,并在重新启动后启动了br0eth0!

# 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/网络“并发现脚本仅加载以“开头的文件

相关内容