概念
路由信息用于指导数据包从源地址查找到目的地址传输路径的信息;
路由分类
根据路由信息的来源分为静态路由和动态路由
静态路由
由管理员手动配置的路由表项信息,根据路由形式的不同,静态路由又可细分为:
直连路由:基于设备直连子网形成的路由信息
基本路由:基于报文目的地址寻找下一跳路径的路由信息。
策略路由:可以基于报文的源地址、目的地址、源端口、目的端口等多种因素对报文转发路径进行更细致的控制。
动态路由
基于某种动态路由协议,由设备间自动协商产生的路由信息,根据动态路由协议的不同,动态路由可以分为:RIP、OSPF、BGP等;
本次主要学习了解静态路由,动态路由相关内容不在此展开。
路由配置
如上所述,静态路由通过手工配置,动态路由根据协议协商生成,因此这里主要介绍静态路由的配置。
基本路由
Linux 下配置路由有多种方式
route命令
route命令用于在Linux系统中查看或配置IP路由表,它允许用户查看当前系统的路由表,添加静态路由、删除路由等。
route命令使用说明:
route [-CFvnNee] [-A family |-4|-6] 显示路由信息
route [-v] [-A family |-4|-6] add [-net|-host] target [netmask Nm] [gw Gw] [metric N] [mss M] [window W] [irtt I] [reject] [mod] [dyn] [reinstate] [[dev] If] 添加路由表项信息
route [-v] [-A family |-4|-6] del [-net|-host] target [gw Gw] [netmask Nm] [metric M] [[dev] If] 删除路由表项信息。
参数选项说明:
-n, --numeric 以数字形式显示,不反向解析名字
-e, --extend 显示扩展信息,--ee显示路由表项的所有参数信息
-F, --fib 显示转发信息库中的路由信息
-C, --cache 显示路由缓存中的信息
target 目的网络或主机
-net 目标是网络
-host 目标是主机地址
gw 下一跳网关地址
dev 出接口,将路由信息和某个特定网络设备关联
使用示例:
1) 添加路由信息
route add -net 3.3.3.0/24 gw 1.1.1.1
route add -net 4.4.4.0 netmask 255.255.255.0 gw 1.1.1.1 dev eth0
route add -host 3.3.3.3 gw 192.168.68.152 dev ens33
2)删除某条路由信息
route del -net 3.3.3.0/24
route del -host 3.3.3.3 gw 192.168.68.152 dev ens33
ip route 命令
在新的Linux系统中,route命令逐渐被ip route 命令取代;ip route同样用于操作Linux内核的路由表信息
ip route 命令使用说明:
ip route { add | del | change | append | replace } ROUTE 添加/删除/修改等更新路由信息
ip route { show | flush } SELECTOR 显示/清空路由信息
选项参数说明:
路由类型 (TYPE)
type unicast | local | broadcast | multicast | throw | unreachable | prohibit | blackhole | nat ;
选择器(SELECTOR )
SELECTOR := [ root PREFIX ] [ match PREFIX ] [ exact PREFIX ] [ table TABLE_ID ] [ vrf NAME ] [ proto RTPROTO ] [ type TYPE ] [ scope SCOPE ]
root PREFIX: 根据源地址前缀匹配
match PREFIX: 根据目的地址前缀匹配
table 路由表名/ID,已知有 local| main | default | all | NUMBER
blackhole: 丢弃匹配的数据包。
unreachable: 丢弃匹配的数据包,并生成"Network is unreachable"错误。
prohibit: 丢弃匹配的数据包,并生成"Communication is administratively prohibited"错误。
使用示例:
1)添加路由信息
ip route add 3.3.3.3/24 via 1.1.1.1
ip route add 10.1.1.0/30 encap mpls 200/300 via 10.1.1.1 dev eth0
2) 删除路由信息
ip route del 3.3.3.3
ip route del 10.1.1.0/30 encap mpls 200/300 via 10.1.1.1 dev eth0
策略路由
在传统路由算法中,只能基于目的地址进行路由选择。但是如果对路由选择有更复杂的要求,比如针对不同源地址、传输层端口甚至是payload进行更细致的路由控制,传统的基于目的地址的路由表就无法满足需求了,需要使用功能更加强大的策略路由。
每条策略路由的规则由一个选择器
和一个动作
组成。按照优先级顺序进行规则匹配,优先级数字越小越优先。被选择器
匹配的报文会执行对应的操作,操作如果成功,则根据指定的路由转发数据,之后停止匹配,如果执行失败,则报错并且终止匹配,否则将继续执行下一条规则。
linux 系统下通过ip rule命令来管理配置策略路由,默认存在三条策略路由信息;
ip rule show
0: from all lookup local # 优先级为0,匹配任意源地址,查询local路由表转发
32766: from all lookup main # 优先级为32766,匹配任意源地址,查询main路由表转发
32767: from all lookup default # 优先级为32767,匹配任意源地址,查询default路由表转发
由此可见,Linux内核下,策略路由其实分两部分:
1)策略信息,指定了匹配报文的条件及要执行的动作
2)路由信息,基于策略指定的路由表匹配转发报文
路由表添加
在配置策略指定table TABLE_ID时,默认只能指定数字,这样容易模糊路由表的用途;
在Linux内核中,表ID 与表名的对应关系存放在 /etc/iproute2/rt_tables,因此若要配置时允许指定表名,可以在文件添加ID 与表名的对应关系,echo "100 test" | tee -a /etc/iproute2/rt_tables, 如下所示:
策略配置
ip rule命令用于操纵Linux 内核中策略路由规则来控制路由选择算法。
ip rule 使用说明:
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"错误。
使用示例:
添加策略
# 来自192.168.22.3的数据包,都参考id为10的路由表进行转发
ip rule add from 192.168.22.3 table 10
# 设置规则的优先级为100,发往192.168.23.0/24的数据包,都参考id为20的路由表进行转发
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
路由配置
由上述添加的策略路由可知,策略路由若要生效,需在指定的路由表中添加相应的路由信息,路由信息的添加参考上述基本路由配置介绍。
概述
在Linux中,我们通常使用route
命令来做路由信息的管理。但是该命令仅仅只能用于基本路由信息的管理,面对功能更加强大的基于策略的路由机制,route
命令就显得捉襟见肘。在传统路由算法中,只能基于目的地址进行路由选择。但是如果对路由选择有更复杂的要求,比如针对不同源地址、传输层端口甚至是payload进行更细致的路由控制,传统的基于目的地址的路由表就无法满足需求了,需要使用功能更加强大的路由策略数据库routeing database: RPDB
来处理。
命令安装
安装很简单,按照如下命令安装即可。
# 查看iproute是否安装# 查看iproute版本]# ip -Vip utility, iproute2-ss170501# 安装yum install iproute -yMIPSASM复制全屏
路由策略数据库(RPDB)
RPDB是存放策略的数据库,被策略匹配的数据包会执行相关的操作,可以通过ip rule
来管理。
在系统启动时,内核会配置三条默认策略:
# 通过ip rule show可以查看当前RPDB中的规则
]# ip rule show0: 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 helpUsage: ip rule { add | del } SELECTOR ACTIONip 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 show0: from all lookup local32766: from all lookup main32767: 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 local254 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 -Vip 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 100default 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://hqyman.cn/post/5935.html 非本站原创文章欢迎转载,原创文章需保留本站地址!
打赏微信支付宝扫一扫,打赏作者吧~
休息一下~~