4.5. 在 ifcfg 文件中配置静态路由
如果系统关机或重启,使用 ip 命令设置的静态路由会在命令提示符下丢失。要将静态路由配置为在系统重启后永久保留,必须将其放置在
/etc/sysconfig/network-scripts/
目录中的每个接口配置文件中。文件名应当为 route-接口的格式
。配置文件中有两种命令类型:
使用 IP 命令参数格式的静态路由
如果每个接口配置文件中需要(例如
/etc/sysconfig/network-scripts/route-enp1s0)
,请在第一行中定义指向默认网关的路由。只有在没有通过 DHCP
设置网关且没有在 /etc/sysconfig/network
文件中全局设置时才需要此项:
default via 192.168.1.1 dev
interface
其中 192.168.1.1 是默认网关的
IP 地址
。接口是连接到或可以访问默认网关的接口。dev
选项可以省略,它是可选的。请注意,此设置优先于 /etc/sysconfig/network
文件中的设置。
如果需要路由到远程网络,可以按照如下所示指定静态路由:每行都解析为单个路由:
10.10.10.0/24 via 192.168.1.1 [dev
interface]
其中 10.10.10.0/24 是远程或目标网络的网络地址和前缀长度。地址 192.168.1.1 是导致远程网络的
IP 地址
。最好使用下一个跃点地址,但退出接口的地址可以正常工作。“下一跃点表示链路的远程末尾”,如网关或路由器。dev
选项可用于指定退出接口接口,但这不是必需的。根据需要添加任意数量的静态路由。
以下是使用 ip
命令参数格式的路由接口文件示例
。默认网关为 192.168.0.1
,接口 enp1s0 以及租用的行或 WAN 连接位于 192.168.0.10
。这两个静态路由到达 10.10.10.0/24
网络和 172.16.1.10/32
主机:
default via 192.168.0.1 dev enp1s0 10.10.10.0/24 via 192.168.0.10 dev enp1s0 172.16.1.10/32 via 192.168.0.10 dev enp1s0
在上面的示例中,进入本地
192.168.0.0/24 网络的数据包将被定向出连接到该网络的接口
。进入 10.10.10.0/24
网络和 172.16.1.10/32
主机的数据包将被定向到 192.168.0.10
。至未知的远程网络将使用默认网关,因此只有在默认路由不合适时,才应为远程网络或主机配置静态路由。此上下文中的 remote 表示没有直接连接到系统的任何网络或主机。
对于
IPv6
配置,ip route 格式的 route6-接口
文件示例 :
2001:db8:1::/48 via 2001:db8::1 metric 2048 2001:db8:2::/48
指定退出接口是可选的。如果要强制流量离开特定接口,它可以很有用。例如,对于 VPN,您可以强制到远程网络的流量通过某个网络。 tun0 接口,即使接口位于目标网络的不同子网中。
ip route
格式可用于指定源地址。例如:
10.10.10.0/24 via 192.168.0.10 src 192.168.0.2
要定义基于策略的现有路由配置,指定多个路由表,请参阅 第 4.5.1 节 “了解策略路由”。
重要
如果
DHCP
已分配了默认网关,并且配置文件中指定了具有相同指标的同一网关,启动过程中或启动接口时会出现错误。可能会显示以下错误消息:"RTNETLINK 答案:"文件存在"。此错误可能会被忽略。
使用网络/网络掩码指令格式的静态路由
您还可以对路由接口文件使用
network/netmask 指令格式。以下是网络/子网掩码格式的模板,之后提供说明:
ADDRESS0=10.10.10.0 NETMASK0=255.255.255.0 GATEWAY0=192.168.1.1
ADDRESS0=10.10.10.0
是要访问的远程网络或主机的网络地址。NETMASK0=255.255.255.0
是使用ADDRESS0=10.10.10.0
定义的网络地址的子网掩码。GATEWAY0=192.168.1.1
是默认网关,或者可用于访问的IP 地址
ADDRESS0=10.10.10.0
以下是使用 network/netmask
指令格式的路由接口文件示例
。默认网关为 192.168.0.1
,但可通过 192.168.0.10
获得租用的行或 WAN 连接。这两个静态路由到达 10.10.10.0/24
和 172.16.1.0/24
网络:
ADDRESS0=10.10.10.0 NETMASK0=255.255.255.0 GATEWAY0=192.168.0.10 ADDRESS1=172.16.1.10 NETMASK1=255.255.255.0 GATEWAY1=192.168.0.10
后续静态路由必须按顺序编号,且不得跳过任何值。例如:
ADDRESS0
、ADDRESS1
、ADDRESS2
等。
出于安全原因,默认禁用从一个接口将数据包转发到另一个接口,或从同一接口转发数据包。
这可以防止系统充当外部流量的路由器。如果您需要系统路由外部流量,比如在共享连接或配置 VPN 服务器时,您需要启用 IP 转发。详情请查看红帽企业 Linux 7 安全指南。
4.5.1. 了解策略路由
策略路由
也称为源路由,是一种更灵活的路由配置机制。路由决策通常根据软件包的目标 IP 地址做出。策略路由
可根据其他路由属性(如源 IP 地址、源端口和协议类型)提供更多灵活性来选择路由。路由表存储关于网络的路由表信息。它们通过数值或名称标识,可在 /etc/iproute2/rt_tables
文件中配置。默认表使用 254
来标识。使用 策略路由时
,您还需要规则。规则用于根据数据包的特定属性选择路由表。
对于 initscripts,路由表是路由的属性,可以通过 table 参数进行配置。
ip route
格式可以用来定义基于策略的现有路由配置,该配置指定了多个路由表:
10.10.10.0/24 via 192.168.0.10 table 1 10.10.10.0/24 via 192.168.0.10 table 2
要在 initscripts 中指定路由规则,请将它们编辑到 IPv4 的
/etc/sysconfig/network-scripts/rule-enp1s0
文件,或编辑到 IPv4
的 /etc/sysconfig/network-scripts/rule6-enp1s0
文件。
NetworkManager 支持 policy-routing,但尚不支持规则。规则必须由运行自定义脚本的用户进行配置。对于每个手动静态路由,可以选择路由表:
ipv4.route-table
forIPv4
和ipv6.route-table
(适用于IPv6
)
通过设置到特定表的路由,来自
DHCP
、autoconf6、DHCP6
的所有路由都
放置到该特定表中。此外,已配置地址的子网的所有路由都放置在相应的路由表中。例如,如果您配置 192.168.1.10/24 地址,则 192.168.1.0/24 子网包含在 ipv4.route-table 中。
有关
policy-routing 规则
的详情,请查看 ip-rule(8)man
page。有关路由表,请查看 ip-route(8)man
page。