我正在使用 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
文件,不带HWADDR
和UUID
.这将配置静态 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