CentOS7:多个接口,默认路由

CentOS7:多个接口,默认路由

[第一篇文章在此...]

大家好,

我有一个 CentOS 7 盒子,它应该成为 ganeti 集群的一个节点。它有 4 个接口:eno1、eno2 - 主板上的 ens23s0f0、ens23s0f1 - 双端口 10G Intel 适配器

我已通过在 /usr/lib/udev/rules.d/60-net.rules 中添加两行将 10G 接口重命名为 eth0/eth1,如下所示:

ACTION=="add", SUBSYSTEM=="net"m DRIVERS=="?*", ATTR{type}=="1", ATTR{ADDRESS}=="xx:xx:xx:xx:xx:xx", RESULT=="?*", NAME="eth0"    
ACTION=="add", SUBSYSTEM=="net"m DRIVERS=="?*", ATTR{type}=="1", ATTR{ADDRESS}=="xx:xx:xx:xx:xx:xy", RESULT=="?*", NAME="eth1"

3 个接口位于同一子网 172.16.66.0/24 - eno1、eth0、eth1。这可能不是最佳设置,但我们现在就接受它,好吗?eno2 是不需要的。

eno1 和 eth1 的跳线插入同一个交换机,默认 VLAN。eth0 插入另一个具有单独 VLAN 的交换机,用于集群数据复制。

我想要的是 10G 接口 eth1 始终成为该盒子的默认网关。但是,只要 eno1 处于启动状态,该盒子就会选择它作为默认网关。如果它处于关闭状态,它将选择 eth0。

/etc/sysconfig/network 或其他地方均无条目。此外,我也没有文件 /etc/sysconfig/network-scripts/route-devN。

ifcfg-xxxN 文件基本相同:

HWADDR=xx:xx:xx:xx:xx:xx
NM_CONTROLLED=no
DEVICE=devN
NAME=devN
TYPE=ETHERNET
BOOTPROTO=static
ONBOOT=yes
IPADDR=172.16.66.nn
PREFIX=24

在 ifcfg-eth1 中我添加了

GATEWAY=172.16.66.200
DNS1=172.16.66.200

因此这是唯一带有 GATEWAY 指令的文件,但它似乎被忽略了。

我可以使用以下方法临时设置默认路由

# ip route add default via 172.16.66.200 dev eth1

但正如预期的那样,重启后它无法继续存在。

最后我的路由表总是看起来像这样:

# ip r
default via 172.16.66.200 dev eno1
169.254.0.0/16 dev eno1 scope link metric 1002
169.254.0.0/16 dev eth0 scope link metric 1004
169.254.0.0/16 dev eth1 scope link metric 1005
172.16.66.0/24 dev eno1 proto kernel scope link src 172.16.66.n1
172.16.66.0/24 dev eth0 proto kernel scope link src 172.16.66.n2
172.16.66.0/24 dev eth1 proto kernel scope link src 172.16.66.n3

非常感谢有关如何将 eth1 设为默认网关的任何帮助。

提前致谢,安德烈亚斯


编辑:好的,所以我决定从头开始。这是我的日志和问题:

我安装了 CentOS 7.6.1810,内核 3.10.0-957。最初我打算安装 7.2.1511,因为这是其他集群节点的版本,但它对于服务器 CPU 来说太旧了。

我拔掉了所有跳线,只留下我想设为默认网关的 10G 接口。在图形安装程序中,我为该接口配置了一个静态 IP(172.16.66.11)。对话框中还有一个设置路由的按钮。我在那里为 172.16.66.0 设置了路由,网关 172.16.66.200 是互联网路由器,度量为 100。

基本安装完成后,互联网连接就可以正常工作了。我只安装了 MidnightCommander,没有重命名任何接口。我检查了路由表:

# ip r
default via 172.16.66.200 dev enp23S0f1 proto static metric 100
172.16.66.0/24 dev enp23s0f1 proto kernel scope link src 172.16.66.11 metric 100
172.16.66.0/24 via 172.16.66.200 dev enp23s0f1 proto static metric 100

这正是我所期望的。在我清除并编辑了一些内容后,ifcfg-enp23s0f1 看起来如下所示(引号由安装程序自动设置):

TYPE="Ethernet"
BOOTPROTO="static"
DEFROUTE="yes"
NAME="enp23s0f1"
DEVICE="enp23s0f1"
ONBOOT="yes"
HWADDR="XX:XX:XX:XX:XX:XX"
IPADDR="172.16.66.11"
PREFIX="24"
GATEWAY="172.16.66.200"
DNS1="172.16.66.200"

我注意到安装程序创建了一个文件 /etc/sysconfig/network-scripts/route-enp23s0f1。但是,其格式与 Jenny 建议的以及我在其他地方找到的格式不同:

ADDRESS0=172.16.66.0
NETMASK0=255.255.255.0
GATEWAY0=172.16.66.200
METRIC0=100

由于一切运行正常,我现在添加了第二个接口(eno1,主板,1Gb/s)。我像这样编辑了 ifcfg-eno1(安装程序未在此处设置引号,可能是因为我在安装时没有编辑该连接?):

TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=no
NAME=eno1
DEVICE=eno1
ONBOOT=yes
HWADDR=YY:YY:YY:YY:YY:YY
IPADDR=172.16.66.22
PREFIX=24

网络重启后,路由表如下所示:

# systemctl restart network
# ip r
default via 172.16.66.200 dev enp23S0f1 proto static metric 101
172.16.66.0/24 dev eno1 proto kernel scope link src 172.16.66.22 metric 100
172.16.66.0/24 via 172.16.66.200 dev enp23s0f1 proto static metric 100
172.16.66.0/24 dev enp23s0f1 proto kernel scope link src 172.16.66.11 metric 101

因此,尽管我在 route-enp23s0f1 文件中已将此值分配给 enp23s0f1,但系统仍自动将 eno1 的度量设置为 100。然后,enp23s0f1 的度量自动设置为 101。系统似乎坚持让主板接口优先于 PCIe 适配器。

上述情况发生在 NetworkManager 仍处于活动状态时。我停用了 NM,然后

# systemctl stop NetworkManager
# systemctl disable NetworkManager

并添加到 ifcfg-enp23s0f1 和 -eno1 作为第一行

NM_CONTROLLED=no

路由表现在如下所示:

# systemctl restart network
# ip r
default via 172.16.66.200 dev eno1
169.254.0.0/16 dev eno1 scope link metric 1002
169.254.0.0/16 dev enp23s0f1 scope link metric 1005
172.16.66.0/24 dev eno1 proto kernel scope link src 172.16.66.22
172.16.66.0/24 dev enp23s0f1 proto kernel scope link src 172.16.66.11

eno1 再次被设置为默认路由。文件 route-enp23s0f1 显然被忽略了,并且似乎只与启用 NetworkManager 有关。

我是否需要启用 NetworkManager?这可行吗?我认为不需要。

为什么即使启用了 NM 并且在路由文件中给出了明确的值,系统也会自动将度量标准更改为有利于主板?

谢谢,并致以最诚挚的问候 Andreas

答案1

您总是会遇到独立接口位于或具有相同子网详细信息的问题。我建议将不属于绑定的每个接口放入单独的子网中。

答案2

您可以为每个接口创建一个路由文件/etc/sysconfig/network-scripts/route-IFNAME

对于您来说,您需要创建/etc/sysconfig/network-scripts/route-eth1以下内容:

default via 172.16.66.200 dev eth1

如果你想通过其他接口路由任何其他网络,你可以创建类似的文件,例如

10.10.10.0/24 via 172.16.66.n1 dev eno1

有关 RedHat/CentOS 网络配置的更多信息,请访问RedHat 网络指南

相关内容