文档章节

Linux策略路由

China_OS
 China_OS
发布于 2013/08/24 17:57
字数 1358
阅读 1W
收藏 13

    在linux内核版本2.2的时候,加入了一项很令人兴奋的功能,那就是Advanced Routing,使linux的路由机制超过了很多商用路由器。在使用高级路由功能前,我们先了解一下普通的路由功能。

以192.168.72.72(双网卡)这台机器为例,linux下普通的路由表可以通过route -n查看


   路由表的作用是指导主机如何向外发送数据包,如上图所示,如果我们从本机向192.168.9.9发送数据包时,这个数据包的来源端会被标记为192.168.72.72,目的端会被标记为192.168.9.9。接着系统会以数据包内的目的端为依据,和上面的路由表进行匹配,先和第一条规则192.168.6.0/24进行匹配,发现192.168.9.9并不在该网段内,接着喝第二条规则192.168.71.0/24进行匹配,发现还是不在该网段内,这时候会一直向下匹配,直到匹配到192.168.9.0/24时,发现192.168.9.9在该网段内,这时系统会将这个数据包从eth1接口发送到192.168.72.254网关上面,然后由网关上的路由条目进行匹配,该数据包下一跳发往哪里。如果在本机路由表上都没匹配到192.168.9.9所在网段的路由,就会从最后一条路由条目(默认路由)指定的接口把该数据包发送出去。

    可以看到传统的路由是以目的地IP为准和主机上的路由表进行匹配的,如果你想让本机的HTTP协议经eth1出去、FTP协议经eth0出去呢?如果你还想根据目的地IP决定数据包从哪个接口出去呢?显然普通的路由功能提供不了这样的服务,这时候我们就要用到高级路由里面的策略路由功能了。

    Linux系统可以同时存在256(0-255)个路由表,而且每个路由表都各自独立,互不相关。数据包在传输时是根据RPDB(路由策略数据库)内的策略决定数据包应该用哪个路由表传输的。


   怎样把RPDB中的路由表显示出来呢?这次不用route -n了,得使用ip rule show来显示RPDB中的路由表


在分析上图内容前,先看看ip rule的简单用法:

ip rule  [ list | add | del | flush ] SELECTOR ACTION
   SELECTOR := [ from PREFIX ] [ to PREFIX ] [ tos TOS ] [ fwmark FWMARK[/MASK] ] [ iif STRING ] [ oif STRING ] [ pref NUMBER ]
   ACTION := [ table TABLE_ID ] [ nat ADDRESS ] [ prohibit | reject | unreachable ] [ realms [SRCREALM/]DSTREALM ]
   TABLE_ID := [ local | main | default | NUMBER ]

ip rule show显示的内容,大体上可以分为三段:

   第一段:冒号之前的数字,表示该路由表被匹配的优先顺序,数字越小,越早被匹配。这个优先级别范围是0~4亿多。默认0、32766、32767三个优先级别已被占用。如果在添加规则时没有定义优先级别,那么默认的优先级别会从32766开始递减,可以通过prio ID参数在设置路由表时添加优先级。

   第二段:from关键字,这里显示的是匹配规则,当前表示的是从哪里来的数据包,除了from关键字外,还有to、tos、fwmark、dev等等。

   第三段:loacl/main/default 这些都是路由表名称,表示数据包要从那个路由表送出去。local表包含本机路由及广播信息,main表就是我们route -n看到的内容,default表,默认为空。

在添加规则时,需要先定义好优先级、条件及路由表ID,然后才可以添加规则。如下例:

#根据源地址决定路由表
ip rule add from 192.168.10.0/24  table 100
ip rule add from 192.168.20.20    table 110

#根据目的地址决定路由表
ip rule add to   192.168.30.0/24  table 120
ip rule add to   192.168.40.0/24  table 130

#根据网卡设备决定路由表
ip rule add dev  eth0  table 140
ip rule add dev  eth1  table 150

#此外还可以根据其他条件进行设置,例如tos等等
   上面的路由表都是用100、110、120、130等数字表示的,时间一久难免自己也会忘记该路由表的作用,不过iproute提供了一个路由表和名称的对应表(/etc/iproute2/rt_tables),可以手动修改该表。


  可以看到添加路由表100后,显示确实是100,在修改rt_tables的映射关系后(100映射到wangtong),ip rule show的内容也变化了。

当然也可使用ip命令来删除路由表了。

#根据明细条目删除
ip rule del from 192.168.10.10

#根据优先级删除
ip rule del prio 32765

#根据表名称来删除
ip rule del table wangtong
 

    ip rule show查看的只是有哪些路由表,要查看路由表里面的具体路由,则可以使用ip route show/list table ID/name,默认的ip route show查看的是main表的路由条目。


    如果新加的路由在main表之外的路由表,则只有先添加规则后才能确定新的路由表的ID,有了新的路由表ID后,才能在该路由表中添加路由。

例如用以下命令验证:

1 ip rule show
2 ip rule add from 10.1.9.0/24 table 100
3 ip rule show
4 ip route show table 100
5 ip route add 192.168.1.0/24 dev em1 table 100
6 ip route show table 100
7 ip route add default via 10.1.6.254 table 100
8 ip route show table 100
 



© 著作权归作者所有

上一篇: saltstack初用
下一篇: mysqldump学习
China_OS
粉丝 428
博文 463
码字总数 520228
作品 0
静安
技术主管
私信 提问
加载中

评论(6)

elisayys
elisayys
@China_OS 你好,想跟你请教个问题:

[root@localhost network-scripts]# ip rule

0: from all lookup local

32765: from 101.89.76.84  lookup table2
==============

ip route ls table table2

default via 101.89.76.85 dev eth1

=================

ip route ls table  main    main 表的默认路由是走另外一个接口出去的

0.0.0.0/0 via 172.16.203.25 dev eth2

说明下  本地网卡 eth1 的ip  是101.89.76.84    那加了这条规则后 eth1 主动对外发包 是不是就会走 table2 的路由呢?   但是实际上 eth1 主动对外发包走的 main 表,通过 eth2 出去的,我对这个非常不理解啊! 困扰我几天了 望得到楼主回答!
China_OS
China_OS 博主

引用来自“la0wei”的评论

搜索ip rule 这条命令刚好进入博主博客。博主文末有这么一句“如果新加的路由在main表之外的路由表,则只有先添加规则后才能确定新的路由表的ID,有了新的路由表ID后,才能在该路由表中添加路由。”我的理解是先执行ip rule add from 172.31.196.1 table net_196,再执行ip route add default via 172.31.196.254 dev ens9f0 src 172.31.196.1 table net_196,这样对上一句进行细化。

然而在http://linux-ip.net/html/tools-ip-rule.html ,Example D.29. Creating a simple entry in the RPDB with ip rule add中,
ip route add default via 205.254.211.254 table 8
ip rule add tos 0x08 table 8
这两句看起来不是https://wsgzao.github.io/post/static-routes/中两句之间的关系,且执行顺序并不让人像前者那样感到困惑,博主方便解答下吗?
策略路由好久没看了43
l
la0wei
搜索ip rule 这条命令刚好进入博主博客。博主文末有这么一句“如果新加的路由在main表之外的路由表,则只有先添加规则后才能确定新的路由表的ID,有了新的路由表ID后,才能在该路由表中添加路由。”我的理解是先执行ip rule add from 172.31.196.1 table net_196,再执行ip route add default via 172.31.196.254 dev ens9f0 src 172.31.196.1 table net_196,这样对上一句进行细化。

然而在http://linux-ip.net/html/tools-ip-rule.html ,Example D.29. Creating a simple entry in the RPDB with ip rule add中,
ip route add default via 205.254.211.254 table 8
ip rule add tos 0x08 table 8
这两句看起来不是https://wsgzao.github.io/post/static-routes/中两句之间的关系,且执行顺序并不让人像前者那样感到困惑,博主方便解答下吗?
l
la0wei
请教博主个问题,今天在https://wsgzao.github.io/post/static-routes/看到策略路由的说明,该地址可能因为大家都懂得原因打不开,我摘抄下有疑问的这段。
#编辑rt_tables
echo "192 net_192 " >> /etc/iproute2/rt_tables
echo "196 net_196 " >> /etc/iproute2/rt_tables

#清空net_192路由表
ip route flush table net_192
# 添加一个路由规则到 net_192 表,这条规则是 net_192 这个路由表中数据包默认使用源 IP 172.31.192.201 通过 ens4f0 走网关 172.31.192.254
ip route add default via 172.31.192.254 dev ens4f0 src 172.31.192.201 table net_192
#来自 172.31.192.201 的数据包,使用 net_192 路由表的路由规则
ip rule add from 172.31.192.201 table net_192

#清空net_196路由表
ip route flush table net_196
#添加一个路由规则到 net_196 表,这条规则是 net_196 这个路由表中数据包默认使用源 IP 172.31.196.1 通过 ens9f0 走网关 172.31.196.254
ip route add default via 172.31.196.254 dev ens9f0 src 172.31.196.1 table net_196
#来自 172.31.196.1 的数据包,使用 net_196 路由表的路由规则
ip rule add from 172.31.196.1 table net_196


我的疑问就是,这两句看起来有些奇怪,看起来前一句是后一句的补充,即前一句是后一句的子集。
ip route add default via 172.31.196.254 dev ens9f0 src 172.31.196.1 table net_196
ip rule add from 172.31.196.1 table net_196
China_OS
China_OS 博主

引用来自“debugEvery”的评论

ip route show local里面的内容看不懂啊???为什么不讲一讲?54
local里面都是本地的广播、回环地址,哪里不懂
debugEvery
debugEvery
ip route show local里面的内容看不懂啊???为什么不讲一讲?54
Linux路由应用-使用策略路由实现访问控制

引: 一般而言,访问控制并不是路由模块完成的,而是防火墙的职责,如果你使用Linux的,这是iptables的职责。然而有时候,特别是在策略很多的情况下,使用iptables会极大降低网络性能,这是N...

晨曦之光
2012/04/10
2.9K
0
网络包排错指南-类linux 平台

网络包排错指南-类linux 平台 背景信息 最近一直在测试k8s,如果你了解或者解接触过docker,那你一定知道docker 相关的网络很大部分在桥接、路由、Iptables 上做文章。如果你凑巧接触过k8s,并且...

yoke88
2018/05/10
0
0
iptables和策略路由实现VPN感兴趣流的截获

感兴趣流是VPN的术语,说的是需要进行保护的流量,也就是说需要进入VPN隧道的流量,然则仔细推敲之后,发现基于IP层加密的VPN这么使用“流”的概念是有问题的,因为对于IP,根本不存在流的概...

晨曦之光
2012/04/10
469
0
iptables四表五链及规则组成

iptables组成:四张表 + 五条链(Hook point) + 规则 iptables和netfilter的关系: : Netfilter是linux操作系统核心层内部的一个数据包处理模块 :数据包在Netfilter中的挂载点( ) iptables...

wfs1994
03/31
0
0
Linux高级路由---策略路由/捆绑/网桥

1.策略路由 基于策略的路由比传统路由在功能上更强大,使用更灵活,它使网络管理员不仅能够根据目的地址而且能够根据报文大小、应用或IP源地址来选择转发路 径... #/etc/iproute2/rt_tables ...

企图穿越
2010/03/13
4.1K
0

没有更多内容

加载失败,请刷新页面

加载更多

大刘海终于收窄?iPhone 12系列设计细节曝光:三摄+雷达更占空间

苹果第一次给屏幕加上刘海,是在2017年的iPhone X。此后,尽管安卓阵营已经先后发展出了水滴屏、升降屏、打孔屏等形态各异的更高屏占比的设计方案,苹果一直将宽大的刘海保留在其后iPhone XS...

osc_p0v6j6lt
18分钟前
24
0
爆单也没能救它 瑞幸咖啡股价一度下跌20%再创新低

瑞幸咖啡(NASDAQ:LK)股价周一继续下挫,跌破上周四曝光营收造假的低点4.90美元,一度报4.27美元,下跌超20%,市值不足11亿美元。这一价格也创造了瑞幸上市后的历史最低。 据报道,高盛称,瑞...

osc_6kj0kt57
19分钟前
16
0
疫情蔓延放缓 早盘美股道指大涨逾千点

北京时间6日晚,美股周一早盘继续上扬,道指大涨逾千点。投资者对全球疫情蔓延局势的判断有所改善,风险情绪随之受到提振。美国总统特朗普称迹象显示美国疫情已开始趋于稳定,并表示他仍在考...

osc_jo2m8l1r
21分钟前
24
0
4.3万元!赛博朋克2077定制版NIVIDIA显卡成功卖出

虽然《赛博朋克2077》游戏跳票了,但是2月份NVIDIA依然推出了一款赛博朋克限量版显卡——GeForce RTX 2080 Ti“ Cyberpunk 2077 Edition”,全球限量200块,官方售价1100美元。 访问购买页面...

osc_9mctux05
22分钟前
26
0
高盛:瑞幸咖啡股东发生违约 7635万股ADS强制出售

据国外媒体报道,高盛今日发布报告称,在瑞幸咖啡股东Haode Investment公司(借款人)发生违约之后,根据一项5.18亿美元的保证金贷款安排,贷款人组成的银团已指示作为担保受托人的瑞士信贷新...

osc_t6qz550e
23分钟前
19
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部