关于公有云:Linux策略路由详解

42次阅读

共计 3618 个字符,预计需要花费 10 分钟才能阅读完成。

概述

在 Linux 中,咱们通常应用 route 命令来做路由信息的治理。然而该命令仅仅只能用于根本路由信息的治理,面对性能更加弱小的基于策略的路由机制,route命令就显得顾此失彼。在传统路由算法中,只能基于目标地址进行路由抉择。然而如果对路由抉择有更简单的要求,比方针对不同源地址、传输层端口甚至是 payload 进行更粗疏的路由管制,传统的基于目标地址的路由表就无奈满足需要了,须要应用性能更加弱小的路由策略数据库 routeing database: RPDB 来解决。

命令装置

装置很简略,依照如下命令装置即可。

# 查看 iproute 是否装置

# 查看 iproute 版本

]# ip -V

ip utility, iproute2-ss170501



# 装置

yum install iproute -y

路由策略数据库(RPDB)

RPDB 是寄存策略的数据库,被策略匹配的数据包会执行相干的操作,能够通过 ip rule 来治理。

在系统启动时,内核会配置三条默认策略:

# 通过 ip rule show 能够查看以后 RPDB 中的规定
]# ip rule show
0: from all lookup local # 优先级为 0,匹配任意源地址,查问 local 路由表转发
32766: from all lookup main # 优先级为 32766,匹配任意源地址,查问 main 路由表转发
32767: from all lookup default # 优先级为 32767,匹配任意源地址,查问 default 路由表转发

1. local 路由表是一个非凡的路由表,蕴含本地地址和播送地址的高优先级管制路由, 例如拜访 127.0.0.1 就是参考的这条规定。2. main 路由表是一个通用路由表,失常通过 route - n 命令操作的就是这个路由表。3. default 路由表默认是一个空表,除非有特地的要求,否则放弃为空即可。

每条策略路由的规定由一个 选择器 和一个 动作 组成,RPDB 依照优先级程序进行规定匹配,优先级数字越小越优先。被 选择器 匹配的报文会执行对应的操作,操作如果胜利,则依据指定的路由转发数据,之后终止 RPDB 匹配,如果执行失败,则报错并且终止 RPDB 匹配。否则 RPDB 将继续执行下一条规定。

ip rule 命令阐明

# 执行 ip rule help 能够查看帮忙信息,如果须要更具体的帮忙信息,能够执行 man ip-rule
]# ip rule help
Usage: ip rule {add | del} SELECTOR ACTION
ip rule {flush | save | restore}
ip rule [list [ SELECTOR]]
SELECTOR := [not] [from PREFIX] [to PREFIX] [tos TOS] [fwmark FWMARK[/MASK] ]
[iif STRING] [oif STRING] [pref NUMBER] [l3mdev]
[uidrange NUMBER-NUMBER]
ACTION := [table TABLE_ID]
[nat ADDRESS]
[realms [SRCREALM/]DSTREALM ]
[goto NUMBER]
SUPPRESSOR
SUPPRESSOR := [suppress_prefixlength NUMBER]
[suppress_ifgroup DEVGROUP]
TABLE_ID := [local | main | default | NUMBER]

选择器(SELECTOR)

from PREFIX: 依据源地址前缀匹配
to PREFIX: 依据目标地址前缀匹配
tos TOS: 依据 ip 包头 TOS 字段的值进行匹配
fwmark FWMARK[/MASK]: 配合 iptables -t mangle 打标记,依据标记进行匹配
iif STRING: 抉择要匹配的数据包的输出接口。oif STRING: 抉择要匹配的出接口设施。只对来自本地套接字并与设施绑定的报文无效
pref NUMBER: 规定的优先级。这里的 pref 能够替换成 priority 或者 order,成果是一样的。

动作(ACTION)

table TABLE_ID: 在规定匹配的时候,指定应用的路由表,被匹配的数据包将依照指定的路由表进行路由。此处的 table 也能够替换为 lookup,成果是一样的。blackhole: 抛弃匹配的数据包。unreachable: 抛弃匹配的数据包,并生成 "Network is unreachable" 谬误。prohibit: 抛弃匹配的数据包,并生成 "Communication is administratively prohibited" 谬误。

查看策略

]# ip rule show
0: from all lookup local
32766: from all lookup main
32767: from all lookup default

增加策略

# 来自 192.168.22.3 的数据包,都参考 id 为 10 的路由表进行转发
ip rule add from 192.168.22.3 table 10

# 设置规定的优先级为 100,发往 192.168.23.0/24 的数据包,都参考 id 为 100 的路由表进行转发
ip rule add to 192.168.23.0/24 table 20 pref 100

# 给协定是 tcp,源地址是 192.168.24.0/24,目标端口是 80 的数据包,在路由前打上 1 的标记
iptables -t mangle -A PREROUTING -p tcp -m multiport --dports 80 -s 192.168.24.0/24 -j MARK --set-mark 1
# 将标记为 1 的数据包,参考 id 为 iptables_table 的路由表进行转发
ip rule add fwmark 1 table iptables_table

# 来自 192.168.25.0/24 的数据包都将抛弃
ip rule add from 192.168.25.0/24 blackhole
ip rule add from 192.168.26.0/24 unreachable
ip rule add from 192.168.27.0/24 prohibit

留神,增加动作是 table TABLE_ID 时,默认状况下,只能增加数字,如果增加的是字符的话,会有如下报错。

]# ip rule add from 192.168.22.3 table iptables_table
Error: argument "iptables_table" is wrong: invalid table ID

这就带来一个问题,如果工夫久了,就不晓得本人过后增加的这个路由表是啥意思了。所以须要有一个数字和字符的对应关系。这个对应关系,就保留在 /etc/iproute2/rt_tables 这个文件里。

# 编辑 /etc/iproute2/rt_tables,增加 iptables_table 表的 id 为 100
]# cat /etc/iproute2/rt_tables
#
# reserved values
#
255 local
254 main
253 default
0 unspec
# 自定义路由表
100 iptables_table
#
# local
#
#1 inr.ruhep

增加之后,就能够失常执行 ip rule add from 192.168.22.3 table iptables_table 了。并且执行 ip rule show 的时候,路由表也是依照定义的字符显示。

删除策略

# 查看 iproute 是否装置
# 查看 iproute 版本
]# ip -V
ip utility, iproute2-ss170501
# 装置
yum install iproute -y

 路由表治理

目前看,通过 ip rule 命令,能够依据不同的规定,抉择不同的路由表来转发数据。那么如何对不同的路由表做治理呢? 很简略,只有在失常执行的命令之后,加上 table TABLE_ID 即可。

查看路由表路由条目

# ip route show 等价于 ip route show table main,也就是查的是默认的 main 路由表
ip route show

# 查看指定指标的路由
ip route show 192.168.22.0/24

# 查看指定路由表 iptables_table 中的路由
ip route show table iptables_table
ip route show table 100

增加路由

# 向 iptables_table 中增加默认路由
ip route add default via 192.168.22.1 dev eth1 src 192.168.22.3 table iptables_table

]# ip route show table 100
default via 192.168.22.1 dev eth1 src 192.168.22.3

删除路由

# 删除 iptables_table 路由表中的路由

ip route del default via 192.168.22.1 dev eth1 src 192.168.22.3 table iptables_table

京东云官网最新流动:https://www.jdcloud.com/cn/pa…

正文完
 0