Linux策略路由详解
概述
在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/pages/jinqiucaigou
Linux策略路由详解的更多相关文章
- Linux命令详解之—tail命令
tail命令也是一个非常常用的文件查看类的命令,今天就为大家介绍下Linux tail命令的用法. 更多Linux命令详情请看:Linux命令速查手册 Linux tail命令主要用来从指定点开始将文 ...
- Linux命令详解之—less命令
Linux下还有一个与more命令非常类似的命令--less命令,相比于more命令,less命令更加灵活强大一些,今天就给大家介绍下Linux下的less命令. 更多Linux命令详情请看:Linu ...
- Linux命令详解之—more命令
Linux more命令同cat命令一样,多用来查看文件内容,本文就为大家介绍下Linux more命令的用法. 更多Linux命令详情请看:Linux命令速查手册 Linux的more命令类似 ca ...
- 【转】linux命令详解:md5sum命令
[转]linux命令详解:md5sum命令 转自:http://blog.itpub.net/29320885/viewspace-1710218/ 前言 在网络传输.设备之间转存.复制大文件等时,可 ...
- Linux命令详解之—cat命令
cat命令的功能是连接文件或标准输入并打印,今天就为大家介绍下Linux中的cat命令. 更多Linux命令详情请看:Linux命令速查手册 Linux 的cat命令通常用来显示文件内容,也可以用来将 ...
- Linux命令详解之—pwd命令
Linux的pwd命令也是一个非常常用的命令,本文为大家介绍下Linux中pwd命令的用法. 更多Linux命令详情请看:Linux命令速查手册 Linux pwd命令用于显示工作目录. 执行pwd指 ...
- Linux命令详解之–cd命令
cd命令是linux实际使用当中另一个非常重要的命令,本文就为大家介绍下Linux中cd命令的用法. 更多Linux命令详情请看:Linux命令速查手册 Linux cd命令用于切换当前工作目录至 d ...
- Linux命令详解之–ls命令
今天开始为大家介绍下Linux中常用的命令,首先给大家介绍下Linux中使用频率最高的命令--ls命令. 更多Linux命令详情请看:Linux命令速查手册 linux ls命令用于显示指定工作目录下 ...
- Linux 系统结构详解
Linux 系统结构详解 Linux系统一般有4个主要部分: 内核.shell.文件系统和应用程序.内核.shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序.管理文件并使用系统 ...
- linux syslog详解
linux syslog详解 分三部分 一.syslog协议介绍 二.syslog函数 三.linux syslog配置 一.syslog协议介绍 1.介绍 在Unix类操作系统上,syslog广 ...
随机推荐
- 云图说|初识云数据库GaussDB(for Redis)
阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:云数据库Gauss ...
- vue3溢出文本tooltip或title展示解决方案—如何获取文本宽度
vue3溢出文本tooltip或title展示解决方案-如何获取文本宽度 Author:zhoulujun Date:2023-03-06 Hits:5 解决文本溢出,鼠标悬浮展示tooltips,要 ...
- 零售品牌如何挑选达人 KOL?火山引擎 VeDI 有妙招!
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 国内消费市场正在发生一些新变化. 近日,由中国人民大学国家发展与战略研究院.经济学院等联合主办的第 57 期宏观经 ...
- 干掉 LaTeX !用BookDown写本书
Bookdown是著名R包作者谢益辉开发的,支持采用Rmarkdown (R代码可以运行)或普通markdown编写文档,然后编译成HTML, WORD, PDF, Epub等格式. bookdown ...
- Asp .Net Core 系列:集成 Ocelot+Consul实现网关、服务注册、服务发现
什么是Ocelot? Ocelot是一个开源的ASP.NET Core微服务网关,它提供了API网关所需的所有功能,如路由.认证.限流.监控等. Ocelot是一个简单.灵活且功能强大的API网关,它 ...
- LayUI多文件上传,支持历史上传预览
记录一次项目开发中,LayUI多个图片进行优化,需要支持多个图片上传.可删除某一个图片.支持加载上次上次图片. 页面代码: <div class="layui-upload" ...
- 【辅助工具】Apifox
注意事项 需要刷新权限 请求方式需要对应
- JSP常见错误以及解决方案
原作者为 RioTian@cnblogs, 本作品采用 CC 4.0 BY 进行许可,转载请注明出处. 本节我们分析一下常见的 JSP 错误信息,并给出解决方案.这些错误在实际开发中会经常遇到,所以有 ...
- 【POJ 2279】Mr. Young’s Picture Permutations【线性DP】
题目: 有N个学生合影,站成左端对齐的k排,每排有 \(N-1,N_2,-N_k\)个人,第一排在最后面.学生的身高互不相同,分别为\(1-N\),并且合影时要求每一排从左往右身高递减,每一列从后往前 ...
- AtCoder Beginner Contest 176 (ABC水题,D题01BFS,E数组处理)
补题链接:Here A - Takoyaki 很容易看出 \(\frac{N + X - 1}{X} \times T\) B - Multiple of 9 给定一个很大的整数,问其是否是 \(9\ ...