![CentOS7:多个接口,默认路由](https://linux22.com/image/740777/CentOS7%EF%BC%9A%E5%A4%9A%E4%B8%AA%E6%8E%A5%E5%8F%A3%EF%BC%8C%E9%BB%98%E8%AE%A4%E8%B7%AF%E7%94%B1.png)
[第一篇文章在此...]
大家好,
我有一个 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 网络指南。