如何在服务器重新启动时保留 ip 规则和路由?

如何在服务器重新启动时保留 ip 规则和路由?

我正在使用 Centos 7 服务器,我想在服务器重新启动时保存 ip 规则和路由。

ip rule add from x.x.x.x table 128
ip route add table 128 to y.y.y.y/y dev eth0
ip route add table 128 default via z.z.z.z

一旦我重新启动服务器,上述规则和路由就会丢失,这意味着每次服务器重新启动时我都需要运行这 3 个命令。

我需要在服务器重新启动时保留 ip 规则和路由。

答案1

看一眼/etc/rc.d/rc.local。该文件指出

请注意,您必须运行chmod +x /etc/rc.d/rc.local以确保该脚本将在引导期间执行。

所以:

chmod +x /etc/rc.d/rc.local

然后将命令放在最后一行上方

touch /var/lock/subsys/local

有更好的方法使用相关配置文件。可以使用相应的文件名来指定规则和路由。下面给出了所有相关的配置文件。 (设备名称可能不同。)

/etc/iproute2/rt_tables
/etc/sysconfig/network
/etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network-scripts/ifcfg-eth1
/etc/sysconfig/network-scripts/route-eth0
/etc/sysconfig/network-scripts/route-eth1
/etc/sysconfig/network-scripts/rule-eth0
/etc/sysconfig/network-scripts/rule-eth1

要创建命名路由表,请使用/etc/iproute2/rt_tables.我补充道128 mynet

#
# reserved values
#
255     local
254     main
253     default
0       unspec
#
# local
#
128     mynet

EL 7.x/etc/sysconfig/network文件。默认路由是GATEWAY.

NETWORKING=yes
HOSTNAME=hostname.sld.tld
GATEWAY=10.10.10.1

EL 7.x/etc/sysconfig/network-scripts/ifcfg-eth0文件,不带HWADDR“UUID”。这将配置静态 IP 地址,eth0而不使用网络管理器

DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTOCOL=none
IPADDR=10.10.10.140
NETMASK=255.255.255.0
NETWORK=10.10.10.0
BROADCAST=10.10.10.255

EL 7.x/etc/sysconfig/network-scripts/ifcfg-eth1文件,不带HWADDRUUID.这将配置静态 IP 地址,eth1而不使用网络管理器

DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTOCOL=none
IPADDR=192.168.100.140
NETMASK=255.255.255.0
NETWORK=192.168.100.0
BROADCAST=192.168.100.255

EL 7.x/etc/sysconfig/network-scripts/route-eth1文件。默认路由已在 中指定/etc/sysconfig/network

192.168.100.0/24 dev eth1 table mynet
default via 192.168.100.1 dev eth1 table mynet

EL 7.x/etc/sysconfig/network-scripts/rule-eth1文件:

from 192.168.100.0/24 lookup mynet

RHEL8 更新

上述方法适用于 RHEL 6 和 RHEL 7 及其衍生产品,但对于 RHEL 8 及其衍生产品,必须先安装network-scripts才能使用上述方法。

dnf install network-scripts

安装会产生一条警告,该警告network-scripts将在 RHEL 的下一个主要版本之一中删除,并且 NetworkManager 也会提供ifup/ifdown脚本。

答案2

如果你需要使用iproute2,那么

# ip rule save > /[somepath]/your-ruleset.bin

将保存您的规则。下次你应该

# ip rule restore < /[somepath]/your-ruleset.bin

答案3

我无法发表评论,但想补充已接受的答案。在 RHEL8 中安装网络脚本包并不是绝对必要的。

NetworkManager 仍会拾取以下文件:

/etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network-scripts/ifcfg-eth1
/etc/sysconfig/network-scripts/route-eth0
/etc/sysconfig/network-scripts/route-eth1

NetworkManager 不再拾取以下文件

/etc/sysconfig/network-scripts/rule-eth0
/etc/sysconfig/network-scripts/rule-eth1

但是,您可以在 ifcfg-eth0 脚本中定义规则,如下所示:

DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
ROUTING_RULE_1="from 192.168.100.0/24 table 5"
...

要将设置从文件加载到 NetworkManager,请执行:

$ sudo nmcli connection reload

如果运行以下命令,您将看到路由规则:

$ nmcli connection show eth0
$ nmcli connection show eth0 | grep rules

要将 NetworkManager 配置应用到设备并使其处于活动状态,请执行:

$ sudo nmcli device reapply eth0

现在您应该可以看到规则和路线:

$ ip route list all
$ ip rule list

相关内容