您好!
欢迎来到京东云开发者社区
登录
首页
博文
课程
大赛
工具
用户中心
开源
首页
博文
课程
大赛
工具
开源
更多
用户中心
开发者社区
>
博文
>
Linux策略路由详解
分享
打开微信扫码分享
点击前往QQ分享
点击前往微博分享
点击复制链接
Linux策略路由详解
京东云技术交付部
2021-01-28
IP归属:未知
788880浏览
数据库
云主机
公有云
# Linux策略路由详解 ## 概述 在Linux中,我们通常使用`route` 命令来做路由信息的管理。但是该命令仅仅只能用于基本路由信息的管理,面对功能更加强大的基于策略的路由机制,`route` 命令就显得捉襟见肘。在传统路由算法中,只能基于目的地址进行路由选择。但是如果对路由选择有更复杂的要求,比如针对不同源地址、传输层端口甚至是payload进行更细致的路由控制,传统的基于目的地址的路由表就无法满足需求了,需要使用功能更加强大的路由策略数据库`routeing database: RPDB` 来处理。 ## 命令安装 安装很简单,按照如下命令安装即可。 ```bash # 查看iproute是否安装 # 查看iproute版本 ]# ip -V ip utility, iproute2-ss170501 # 安装 yum install iproute -y ``` ## 路由策略数据库(RPDB) RPDB是存放策略的数据库,被策略匹配的数据包会执行相关的操作,可以通过`ip rule` 来管理。 在系统启动时,内核会配置三条默认策略: ```bash # 通过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命令说明 ```bash # 执行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)** ```bash from PREFIX: 根据源地址前缀匹配 to PREFIX: 根据目的地址前缀匹配 tos TOS: 根据ip包头TOS字段的值进行匹配 fwmark FWMARK[/MASK]: 配合iptables -t mangle 打标记,根据标记进行匹配 iif STRING: 选择要匹配的数据包的输入接口。 oif STRING: 选择要匹配的出接口设备。只对来自本地套接字并与设备绑定的报文有效 pref NUMBER: 规则的优先级。这里的pref可以替换成priority或者order,效果是一样的。 ``` **动作(ACTION)** ```bash table TABLE_ID: 在规则匹配的时候,指定使用的路由表,被匹配的数据包将按照指定的路由表进行路由。此处的table也可以替换为lookup,效果是一样的。 blackhole: 丢弃匹配的数据包。 unreachable: 丢弃匹配的数据包,并生成"Network is unreachable"错误。 prohibit: 丢弃匹配的数据包,并生成"Communication is administratively prohibited"错误。 ``` ### 查看策略 ```bash ]# ip rule show 0: from all lookup local 32766: from all lookup main 32767: from all lookup default ``` ### 添加策略 ```bash # 来自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`时,默认情况下,只能添加数字,如果添加的是字符的话,会有如下报错。 ```bash ]# ip rule add from 192.168.22.3 table iptables_table Error: argument "iptables_table" is wrong: invalid table ID ``` 这就带来一个问题,如果时间久了,就不知道自己当时添加的这个路由表是啥意思了。所以需要有一个数字和字符的对应关系。这个对应关系,就保存在`/etc/iproute2/rt_tables` 这个文件里。 ```bash # 编辑/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`的时候,路由表也是按照定义的字符显示。 ### 删除策略 ```bash # 根据路由表删除 ip rule del table iptables_table # 根据来源地址删除 ip rule del from 192.168.22.0/24 # 根据优先级删除 ip rule del pref 100 # 根据标记删除 ip rule del fwmark 100 ``` ## 路由表管理 目前看,通过`ip rule`命令,可以根据不同的规则,选择不同的路由表来转发数据。那么如何对不同的路由表做管理呢? 很简单,只要在正常执行的命令之后,加上`table TABLE_ID` 即可。 ### 查看路由表路由条目 ```bash # 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 ``` ### 添加路由 ```bash # 向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 ``` ### 删除路由 ```bash # 删除iptables_table路由表中的路由 ip route del default via 192.168.22.1 dev eth1 src 192.168.22.3 table iptables_table ``` 感谢各位童鞋阅读,如果能够对大家有所帮助,欢迎点赞转发评论。 关注我们的公众号:云服务飞行团,更多内容持续放送!
原创文章,需联系作者,授权转载
上一篇:一文看懂持续部署按需发布!DevOps部署和发布方法大全
下一篇:UE Design | 产品设计升级,也不是换个颜色那么轻松【六】
相关文章
【技术干货】企业级扫描平台EOS关于JS扫描落地与实践!
突破容量极限:TiDB 的海量数据“无感扩容”秘籍
京东智联云MySQL数据库如何保障数据的可靠性?
京东云技术交付部
文章数
40
阅读量
203262
作者其他文章
01
Linux策略路由详解
在Linux中,我们通常使用route 命令来做路由信息的管理。但是该命令仅仅只能用于基本路由信息的管理,面对功能更加强大的基于策略的路由机制,route 命令就显得捉襟见肘。在传统路由算法中,只能基于目的地址进行路由选择。但是如果对路由选择有更复杂的要求,比如针对不同源地址、传输层端口甚至是payload进行更细致的路由控制,传统的基于目的地址的路由表就无法满足需求了,需要使用功能更加强大的路由策略数据库routeing database: RPDB 来处理。
01
业务数据迁移上云的一些技术思考
在支持京东集团内部及京东云外部客户的业务迁移到京东公有云及京东私有云、京东政务云的过程中,京东科技-京东云事业群-技术服务组积累了相关业务系统数据迁移的一些管理和技术经验,以案例的形式分享给大家,希望对大家的业务迁移工作有所帮助。
01
一次minerd肉鸡木马的排查思路
在日常使用Linux系统服务器时,如果系统安全维护方面做的不够规范和严谨,很容易导致主机被黑客植入恶意木马病毒被当做肉鸡。以后就是一次肉鸡木马病毒的排查过程,有助于运维服务器时遇到此情况时进行针对性的排查和修复。
01
通过linux-PAM实现禁止root用户登陆的方法
在linux系统中,root账户是有全部管理权限的,一旦root账户密码外泄,对于服务器而言将是致命的威胁;出于安全考虑,通常会限制root账户的登陆,改为配置普通用户登陆服务器后su切换到root账户使用,这种方式较为安全,限制root账户登陆的方式有多种,本文主要介绍如何通过linux-PAM限制账户登陆。
最新回复
丨
点赞排行
共0条评论
京东云技术交付部
文章数
40
阅读量
203262
作者其他文章
01
业务数据迁移上云的一些技术思考
01
一次minerd肉鸡木马的排查思路
01
通过linux-PAM实现禁止root用户登陆的方法
添加企业微信
获取1V1专业服务
扫码关注
京东云开发者公众号