Linux路由选择与策略路由
OSI七层参考模型
二层交换、三层路由:
交换位于OSI七层模型的第二层数据链路层, 数据帧被封装了以太网头部,其中记录了目标网路的mac地址。
路由位于OSI七层模型的第三层网络层,数据包被封装了IP头部,其中记录了源IP地址和目的IP地址。
路由引入
二层交换、三层路由:
交换位于OSI七层模型的第二层数据链路层, 数据帧被封装了以太网头部,其中记录了目标网路的mac地址。
路由位于OSI七层模型的第三层网络层,数据包被封装了IP头部,其中记录了源IP地址和目的IP地址。
问题一:若192.168.10.1/24的PC0要和在相同网段的192.168.10.2/24的PC进行通信,如何实现?
相同网段,通过ARP广播来获取到目的地址主机的MAC地址,从而将数据封装成数据帧后通过物理线路通信。
问题二:假设192.168.10.1/24的PC0要跟172.16.1.1/24的PC1通信,如何实现?
PC0发出的数据包的目的地址是跨网段的,需要路由器负责转发数据包,每一个路由器都会维护一个路由表。路由表中记录了许多的条目,每一个条目被称作为route,每一个route包含了对应的目的网络、出接口和下一跳(网关)。
当我们的路由器(或者说其他的具有路由功能的设备)收到一个IP的数据包时,会根据数据包中的目的IP地址在路由表中进行查找,如果找到了一个最匹配的表项,就会按照表项中出接口和下一跳进行转发。如果找不到匹配的表项,数据包就会被丢弃,路由器就会向数据包的起源发送一个ICMP报错消息,告知数据包不可达。
路由器
路由器的工作内容:路由器支持各种路由协议(RIP、OSPF),根据路由协议填充路由表,依据路由表的条目转发数据包。
路由器知道目的地址
发现到达目标地址的可能的路由
选择最佳路径(路由表)
维护路由信息
转发IP数据
路由表
IP网路由表
IP路由表是路由器能够工作的关键,相当于数据包转发的地图。在计算机网络中,路由表( routing table )又被称作路由信息数据库( Routing Information Base ),简称RIP。
具备路由功能的华为数通产品(例如路由器,三层交换机等等)使用display ip routing-table
命令查看路由表
关键项 | 说明 | 举例 |
---|---|---|
目标网络/掩码 | 目标网络加掩码长度,区别2.2.2.0/24和2.2.2.0/30 | 192.168.1.0/24 |
协议 | 表示该路由是通过什么协议获取到的 | direct、static、动态路由协议(OSPF、RIP) |
优先级 | 基于协议判断,当发现有多条不同协议的可达路由时,比较优先级,优先级越小就越优 | 例如华为路由器:Direct-0;OSPF-10;Static-69;IGRP-80;RIP-110;OSPFASE-150;BGP-170 |
开销 | 路由代价,cost值或metric值是同种路由协议用于选择最优路由的参数,一般值越小越优 | |
标志 | 路由表标识 | U:该条路由当前是可用的 |
G:该路由是到一个网关(路由器)的 | ||
H:该路由是到一个主机的 | ||
D:该路由已被下载到底层的转发信息表中 | ||
M:该路由已被重定向报文修改 | ||
R:使用动态路由重新初始化的路由 | ||
下一跳 | 报文的下一跳IP地址 | 192.168.10.254 |
出接口 | 去往目的地的转发接口,也叫外出接口、转发接口 | GE0/0/0 |
路由条目的来源
直连路由
直连路由 – 直连接口所在网段的路由
初始化情况下,路由器所知的网段,只有其直连接口所在网段。路由器自动将接口所在网段的路由写入路由表,这些路由被称为直连路由(Direct route),它们在路由表中的Protocol为Direct。
直连路由出现在路由表中的前提,是该接口的物理状态及协议状态都为UP 。
直连路由举例:当给路由器的某一个接口配置上IP地址为192.168.1.1/24时(该地址的网络号为192.168.1.0/24),且接口的物理/协议状态都为up,这个直连接口的网络号就会被自动写入到路由表中,形成一个直连的路由表表项。
静态路由
静态路由 – 由网络管理员手工配置的路由条目
ip route-static 网络号 掩码 下一跳IP地址
ip route-static 网络号 掩码 出接口
ip route-static 网络号 掩码 出接口 下一跳IP地址
静态路由举例:R1可以创建两条分别去往192.168.100.0/24和192.168.20.0/24网段的路由。静态路由便捷可控,但是若目标网络较多,就需要配置多个静态路由,面多规模较大的网络就显得力不从心,并且静态路由也无法相应拓扑动态的变化,若192.168.100.0/24这个网络发生故障,R1感知不到仍会将数据包转发给R2,R2则会把数据包丢弃。
默认路由举例:R1若要和192.168.100.0/24、192.168.101.0/24、192.168.102.0/24…的网段通信,一种方法是为每一个目标网络配置一条静态路由,如下面第一张如所示,另一种方法是配置一条默认路由(缺省路由),如下图二所示,默认路由可以匹配任意目的网络,路由表中没有其他表项可以匹配时则会去匹配默认路由,相当于一个最后的手段。
默认路由(Default route)也被称为缺省路由,即0.0.0.0 0.0.0.0或者0.0.0.0/0路由,也就是网络地址及掩码都为0的路由。
这是一条特殊的路由,可匹配任何目的IP地址。默认路由的下一跳可视为该设备的“最后求助对象”,或者缺省网关。
当网络设备转发一个报文时,如果路由表中存在匹配该报文目的IP地址的路由表项(非默认路由表项),则使用该表项转发这个报文;如果没有任何具体的路由表项匹配,则使用默认路由转发这个报文;如果既无匹配的具体路由,也无默认路由存在,则该报文将被丢弃。
动态路由
动态路由 – 路由器通过动态路由协议学习到的路由
当路由器激活某个动态协议的能力,路由器之间就会去动态完成路由学习的过程
查看及排错
Ping – 测试网络连通性
Tracert – 追踪去往目标节点的沿途每一跳IP地址
display ip routing-table – 查看路由表
display ip interface brief – 接口摘要信息
Linux路由表
Linux中使用下面的route -n
命令可以查看Linux内核路由表 。
# route -nKernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface0.0.0.0(default) 192.168.1.1 0.0.0.0 UG 0 0 0 eth0192.168.1.0 0.0.0.0(*) 255.255.255.0 U 0 0 0 eth0211.140.188.188 192.168.1.1 255.255.255.255 UGH 0 0 0 eth0
输出项 | 说明 |
---|---|
Destination | 目标网段或者主机,默认路由中Destination为0.0.0.0,也用default表示 |
Gateway | 网关地址,在路由器中也叫做下一跳,0.0.0.0表示目标是本主机所属的网络,不需要路由,也用"*"表示,直连路由的Gateway为0.0.0.0 |
Genmask | 网络掩码,默认路由的Genmask为0.0.0.0 |
Flags | 标记。 |
U — 路由是活动的 | |
G — 路由指向网关 | |
R — 恢复动态路由产生的表项 | |
D — 由路由的后台程序动态地安装 | |
M — 由路由的后台程序修改 | |
! — 拒绝路由 | |
Metric | 路由距离,到达指定网络所需的中转数(linux 内核中没有使用) |
Ref | 路由项引用次数(linux 内核中没有使用) |
Use | 此路由项被路由软件查找的次数 |
Iface | 该路由表项对应的输出接口 |
路由类型
主机路由
主机路由是路由选择表中指向单个IP地址或主机名的路由记录, 主机路由的Flags字段为H。 例如,在下面的示例中,本地主机通过IP地址192.168.1.1的路由器到达IP地址为10.0.0.10的主机。
Destination Gateway Genmask Flags Metric Ref Use Iface10.0.0.10 192.168.1.1 255.255.255.255 UH 0 0 0 eth0
网络路由
网络路由是代表主机可以到达的网络。网络路由的Flags字段为N。例如,在下面的示例中,本地主机将发送到网络192.19.12.0的数据包转发到IP地址为192.168.1.1的路由器。
Destination Gateway Genmask Flags Metric Ref Use Iface192.19.12.0 192.168.1.1 255.255.255.0 UN 0 0 0 eth0
默认路由
当主机不能在路由表中查找到目标主机的IP地址或网络路由时,数据包就被发送到默认路由(默认网关)上。默认路由的Flags字段为G。例如,在下面的示例中,默认路由是IP地址为192.168.1.1的路由器。
Destination Gateway Genmask Flags Metric Ref Use Iface default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
route命令使用
添加到主机的路由
route add -host 192.168.1.2 dev eth0 route add -host 10.20.30.148 gw 10.20.30.40 #添加到10.20.30.148的网关
添加到网络的路由
route add -net 10.20.30.40 netmask 255.255.255.248 eth0 #添加10.20.30.40的网络route add -net 10.20.30.48 netmask 255.255.255.248 gw 10.20.30.41 #添加10.20.30.48的网络route add -net 192.168.1.0/24 eth1
添加默认路由
route add default gw 192.168.1.1
删除路由
route del -host 192.168.1.2 dev eth0:0 route del -host 10.20.30.148 gw 10.20.30.40 route del -net 10.20.30.40 netmask 255.255.255.248 eth0 route del -net 10.20.30.48 netmask 255.255.255.248 gw 10.20.30.41 route del -net 192.168.1.0/24 eth1 route del default gw 192.168.1.1
屏蔽一条路由
route add -net 224.0.0.0 netmask 240.0.0.0 reject
Linux系统打开路由转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward
路由汇总
路由汇总一般指路由汇聚,路由汇聚的“含义”是把一组路由汇聚为一个单个的路由广播。路由汇聚的最终结果和最明显的好处是缩小网络上的路由表的尺寸,上述的默认路由也属于路由汇总。
路由汇总,又被称为路由聚合(Route Aggregation,或route summary),即是将一组有规律的路由汇聚成一条路由,从而达到减小路由表规模以及优化设备资源利用率的目的。
路由汇总是一个非常重要的网络设计思想,一个可汇总的网络设计方案将使得我们的网络更加优化、路由条目更加精简、网络管理更加简单。在网络设计及部署中应时刻保有路由汇总的意识。
不仅仅静态路由能够部署路由汇总,动态路由协议也都支持路由汇总功能。
R1的192.168.12.1想要ping通R3的192.168.23.2
# 1. R1添加一条静态路由,指定目的ip为192.168.23.0/24的下一跳为192.168.12.2[R1] ip route-static 192.168.23.0 24 192.168.12.2 route add -net 192.168.23.0/24 eth1 gw 192.168.12.2# 2. 数据包到达R2,R2发现目的ip为192.168.23.2匹配到路由表中的直连路由,数据包通过GE0/0/1口到达R3,此时能否ping通R3?不能!!! 注意: 通信是双向的,因此要留意往返流量(的路由)。 路由的行为是逐跳的,因此需保证沿途的每一台路由器都有路由。# 3. R3返送回程数据,此时数据包的目的地址为192.168.12.1,R3并不知道192.168.12.0/24网段的路由,所以要在R3中添加以下路由。[R3] ip route-static 192.168.12.0 24 192.168.23.1 route add -net 192.168.12.0/24 eth1 gw 192.168.23.1
例子二
完成三台路由器的配置,使得1.1.1.1能够访问2.2.2.2。( Loopback接口,也叫回环口,是一个逻辑的、虚拟的接口,可模拟路由器的直连网段,可用于测试)
# 1.1.1.1 -> 2.2.2.2[R1] ip route-static 2.2.2.0 24 192.168.12.2 route add -net 2.2.2.0/24 eth1 gw 192.168.12.2[R2] ip route-static 2.2.2.0 24 192.168.23.3 route add -net 2.2.2.0/24 eth1 gw 192.168.23.3# 2.2.2.2 -> 1.1.1.1[R3] ip route-static 1.1.1.0 24 192.168.23.2 route add -net 1.1.1.0/24 eth1 gw 192.168.12.2[R2] ip route-static 1.1.1.0 24 192.168.12.1 route add -net 1.1.1.0/24 eth1 gw 192.168.12.1
扩展知识
静态路由三种写法的区别
以太网中静态路由的写法一般有以下几种:
下一跳: ip route 2.2.2.0 255.255.255.0 1.1.12.2
R1去往2.2.2.0/24的路由,下一跳是1.1.12.2 ,因此需要知道1.1.12.2的mac地址,以便后续数据包封装。因此首先是arp广播请求下一跳的mac地址,再收到对端arp单播回复的过程,之后R1不管是ping 2.2.2.1或2.2.2.2等,都只是ICMP数据包正常交互过程了,不再需要arp广播。出接口: ip route 2.2.2.0 255.255.255.0 e0/0
R1去往2.2.2.0/24的路由,从e0/0接口出去,意味着R1认为此路由是属于直连网段。也就是说R1与2.2.2.1通讯 ,需要从e0/0口出去先得到2.2.2.1的mac地址,以便后续数据包封装。因此首先是arp广播请求2.2.2.1的mac地址,再收到对端arp单播回复的过程。之后R1 ping 2.2.2.1,就是ICMP数据包正常交互过程了。那么同理,R1与2.2.2.2通讯,同样需要从e0/0口出去先得到2.2.2.2的mac地址,以便后续数据包封装。因此又是一次arp广播请求2.2.2.2的mac地址,再收到对端arp单播回复的过程。之后R1 ping 2.2.2.2,也是ICMP数据包正常交互过程了。以此类推R1与2.2.2.3、2.2.2.4通讯。。。下一跳+出接口: ip route 2.2.2.0 255.255.255.0 e0/0 1.1.12.2
正常通讯过程其实和1一样。
区别:
静态路由下一跳:一次(arp请求/回复)+ N次(数据通信)
静态路由出接口:N次(arp请求/回复+数据通信)
静态路由下一跳+出接口:一次(arp请求/回复)+ N次(数据通信)
优缺点:
静态路由下一跳:ARP一次消耗小,但下一跳挂了,就是不通了。
静态路由出接口:ARP多次消耗大,但相对有多个可能的下一跳,有冗余。
静态路由下一跳+出接口:相对来说结合了两种优点。
Linux策略路由
前面讲的路由规则都是基于目标IP地址为匹配依据设置的路由规则, 策略路由则更加灵活。 Linux可以配置很多很多策略,数据包将依次通过各个策略,一旦匹配某个策略则进一步应用策略对应的路由表,如果当前路由表无法匹配到路由则继续执行后续策略匹配。
从网上找了一张很形象的图片:
策略路由样貌
使用ip rule show
查看策略数据库的内容,即当前系统使用的路由规则
[root@localhost /]# ip rule show 0: from all lookup local32765: from 135.105.115.149 lookup 23132766: from all lookup main 32767: from all lookup default
策略路由由三部分组成:
part1:优先级,也就是上图中的0, 32766, 32767,数字越小优先级越高。
part2:条件,比如from all, from 135.105.115.149
part3:操作,比如lookup main 、 lookup 231
综上:32765: from 135.105.115.149 lookup 231
代表的含义是, 源地址是135.105.115.149的IP包,根据231号路由表进行路由。
路由策略工作原理
rule和table是如何协作的?会根据优先级依次遍历,直到决策出下一跳
例如: 一个IP报文源地址是135.105.115.180, 目的地址是155.18.49.20
判断路由策略0, 符合条件from all, 去查找local 路由表,local表中根据目的地址,最长匹配规则找不到路由
进而判断路由策略路由32765, 该策略源地址是135.105.115.149的, 去查找231号表。 不满足。
进而判断32766, 该路由策略的条件是from all满足。 去查找路由表main, 其中可以找到下一跳, 进而转发IP包。
iproute工具使用
早期在管理Linux系统的网络时,常使用ifconfig及route之类的命令,而这类工具并无法用于功能强大的基于策略的路由机制,取而代之的工具是iproute,该工具在我们的Linux系统中时默认安装的,可以通过ip -V
命令检查工具是否安装
[root@localhost /]# ip -Vip utility, iproute2-ss181023
路由表管理
之前介绍到的route命令仅能操作一个特定的路由表,但在基于策略的路由中,会同时存在多个路由表,所以route命令将不再适用,转而使用ip命令管理路由表
1. 查看路由表内容
使用
ip rule show
或cat /etc/iproute2/rt_tables
命令来查看目前使用了哪些路由表使用
ip route show [table id | name]
命令来查看路由表的内容
[root@localhost /]# ip rule show 0: from all lookup local 32766: from all lookup main 32767: from all lookup default[root@localhost /]# cat /etc/iproute2/rt_tables## reserved values#255 local254 main253 default0 unspec## local##1 inr.ruhep[root@localhost /]# ip route show table main 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.1 192.168.2.0/24 dev eth1 proto kernel scope link src 192.168.2.1 default via 192.168.1.254 dev eth0
在默认情况下,Linux系统创建了4张路由表,这四个路由表的功能如下 :
系统保留表:table id 0
local:table id 255,本地路由表存有本地接口地址,广播地址,以及NAT地址 。由系统自动维护,管理员不能操作此表 。
main:table id 254,主路由表,使用传统命令
route -n
所看到的路由表就是main的内容。Linux系统在默认情况下使用这份路由表的内容来传输数据包。正常情况下,只要配置好网卡的网络设置,便会自动生成main路由表的内容。如上图所示,
因为我们的设备上有eth0及eth1两块网卡,且为其设置的IP分别是192.168.1.1/24和192.168.2.1/24,因此路由表内的第1行告诉系统,如果有数据包要送到92.168.1.0/24这个网段,就直接将数据包由eth0接口送出即可,而本机临近这个网段的IP是192.168.1.1,第2行同理;以上这两行是只要将计算机网卡上的IP设置好,并在网络服务重启之后,默认就会生成的路由,无需特别的设置,类似与路由器中的直连路由。
最后一行是默认路由,表示如果数据包不是送往192.168.1.0/24及192.168.2.0/24的网段时,那么数据包将统一转发给192.168.1.254的主机(一般是路由器)去处理,而192.168.1.254就是我们在网络配置中所设置的默认网关。
default:table id 253, 默认路由表,这个路由表在默认情况下内容为空 ,一般可将默认路由添加在该表中。
2. 添加路由
使用ip route add
命令添加路由到所需的路由表中,route命令默认添加路由到main表,ip命令不指定路由表也默认添加到main表中。
[root@localhost /]# ip route show table main 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.1 192.168.2.0/24 dev eth1 proto kernel scope link src 192.168.2.1 [root@localhost /]# ip route add default via 192.168.1.254 table 254[root@localhost /]# ip route add 192.168.3.0/24 via 192.168.1.1 table main [root@localhost /]# [root@localhost /]# ip route show table main default via 192.168.1.254 dev eth0192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.1 192.168.2.0/24 dev eth1 proto kernel scope link src 192.168.2.1192.168.3.0/24 via 192.168.1.1 dev eth0
3. 删除路由
使用ip route del
命令删除路由,若不指定路由表,则会默认删除路由表main的中路由条目。
[root@localhost ~]# ip route show table 10 192.168.1.0/24 dev virbr0 scope link default via 192.168.1.254 dev eth1 [root@localhost ~]# [root@localhost ~]# ip route del default table 10 [root@localhost ~]# [root@localhost ~]# ip route show table 10 192.168.1.0/24 dev virbr0 scope link [root@localhost ~]# [root@localhost ~]# ip route del 192.168.1.0/24 table 10 [root@localhost ~]# [root@localhost ~]# ip route show table 10 [root@localhost ~]#
规则管理
1. 查看规则
使用ip rule show
查看策略数据库的内容,即当前系统使用的路由规则
[root@localhost /]# ip rule show 0: from all lookup local32766: from all lookup main 32767: from all lookup default
2. 添加规则
在添加规则时,必须先确定好条件、优先级别及路由表ID,此后才可以执行添加规则的操作。
条件: 条件是用来决定哪类数据包可以符合这项规则,而可用来匹配的字段为Source IP、Destination IP、Type of Service、fwmark及dev等,这些字段的使用方式如下
[root@localhost /]# ip rule add from 192.168.1.10 table 20[root@localhost /]# ip rule add from 192.168.2.0/24 table 10[root@localhost /]# ip rule show[root@localhost /]# ip route show table 10[root@localhost /]# #此时并看不到路由表10,因为没有添加路由到表10中[root@localhost /]# ip route add 192.168.1.0/24 dev eth1 table 10[root@localhost ~]# ip route add default via 192.168.1.254 table 10[root@localhost ~]# ip route show table 10 192.168.1.0/24 dev eth1 scope link default via 192.168.1.254 dev eth1
以下两个示例分别指出,如果数据包的目的端IP是168.95.1.1,就参考路由表10;如果目的端IP是168.95.0.0/24网段的IP,就参考路由表20
[root@localhost /]# ip rule add to 168.95.1.1 table 10 [root@localhost /]# ip rule add to 168.96.0.0/24 table 20
我们希望凡是由eth2接口送入的数据包都由eth0接口转发出去,由eth3接口送入的数据包都由eth1接口转发出去。以下命令组合将能满足我们的要求
[root@localhost /]# ip rule add dev eth2 table 1 [root@localhost /]# ip rule add dev eth3 table 3
dev: 使用数据包输入的接口来作为判断依据。
Destination IP: 根据目的端IP来决定数据包参考哪个路由表发送出去。
Source IP:根据来源端IP来决定数据包参考哪个路由表发送出去。
以下两个示例分别指出,如果数据包的来源端IP是192.168.1.10,就参考路由表10;如果来源端IP为192.168.2.0/24网段的IP,就参考路由表20优先级别
前面介绍了规则中条件的使用方式,接下来要讨论的是优先级别。优先级别用数字来表示,其范围由0~4亿多个。 添加规则时,如果没有特别设置优先级别,那么,优先级别默认会从32766开始递减,如32765、32764……,如果我们需要特别设置优先级别,可以在ip rule add命令的最后加上prio XXX参数。
[root@localhost ~]# ip rule show 0: from all lookup local 32766: from all lookup main 32767: from all lookup default [root@localhost ~]# [root@localhost ~]# ip rule add from 192.168.1.0/24 table 1 prio 10 [root@localhost ~]# ip rule add from 192.168.2.0/24 table 2 prio 20 [root@localhost ~]# [root@localhost ~]# ip rule show 0: from all lookup local 10: from 192.168.1.0/24 lookup 1 20: from 192.168.2.0/24 lookup 2 32766: from all lookup main 32767: from all lookup default
路由表id:在Linux的基于策略的路由中,路由表用ID来表示。
注:创建完路由规则若需立即生效须执行以下命令,用以刷新路由缓冲
[root@localhost ~]# ip route flush cache
3. 删除规则
ip命令提供的删除规则的方式十分灵活,例如,要删除下列第2条规则,可以分别使用“优先级别”、“条件”及“路由表”当中任何一个唯一的值来设置所需删除的规则,如下:
[root@localhost ~]# ip rule show 0: from all lookup local 10: from 192.168.1.0/24 lookup 1 20: from 192.168.2.0/24 lookup 2 32766: from all lookup main 32767: from all lookup default[root@localhost ~]# ip rule del prio 10[root@localhost ~]# ip rule del from 192.168.1.0/24 [root@localhost ~]# ip rule del table 1 [root@localhost ~]# ip rule del from 192.168.1.0/24 table 1 prio 10
实例分析
我们的设备通过网线直连了10.6.124.0/24网段, 设备ip为10.6.124.206,要求使用自己配置的路由策略完成路由
查看一下当前设备的ip,rule和table
[root@localhost /]# ifconfigeth0 Link encap:Ethernet HWaddr 6E:1E:DC:7D:B2:28 inet addr:10.6.124.203 Bcast:10.6.124.255 Mask:255.255.255.0 inet6 addr: fe80::6c1e:dcff:fe7d:b228/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:105989 errors:0 dropped:14985 overruns:0 frame:0 TX packets:43 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:70277805 (67.0 MiB) TX bytes:3330 (3.2 KiB) Interrupt:199 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)[root@localhost /]# ip rule show0: from all lookup local32766: from all lookup main32767: from all lookup default[root@localhost /]# ip route show table main10.6.124.0/24 dev eth0 scope link src 10.6.124.203
在当前已有的规则下,若要和网段10.6.124.0/24下的设备网路通信,走的是优先级为32766的rule,查询的是main表;
对于不在eth0直连网段内的设备,在当前的规则下找不到任何匹配的如有条目,网络不可达。
[root@localhost /]# ping 8.8.8.8PING 8.8.8.8 (8.8.8.8): 56 data bytes ping: sendto: Network is unreachable[root@localhost /]# ip route get 8.8.8.8ip: RTNETLINK answers: Network is unreachable
添加规则,条件设置为源IP地址为all,优先级设置8,查询的路由表id为10
[root@localhost /]# ip rule add from all table 10 prio 8
添加路由,
由于网线在eth0上直连了10.6.124.0/24网段,所以这个网段的可以直接通过eth0网卡通信
对于不在eth0直连网段内的设备, 则发给网关10.6.124.254,由它进一步路由向外转发
[root@localhost /]# ip route add 10.6.124.0/24 dev eth0 table 10[root@localhost /]# ip route add default via 10.6.124.254 dev eth0 table 10[root@localhost /]# ip route show table 10default via 10.6.124.254 dev eth0 10.6.124.0/24 dev eth0 scope link[root@localhost /]# ip rule show0: from all lookup local8: from all lookup 1032766: from all lookup main32767: from all lookup default
测试
测试网络是否能正常通信,ping一下我的服务器10.6.124.15
测试是否使用了table 10,此时已匹配到目的地址为8.8.8.8的路由条目,说明使用了table 10
[root@localhost /]# ip route flush cache[root@localhost /]# ip route get 10.6.124.1510.6.124.15 dev eth0 src 10.6.124.203[root@localhost /]# ip route get 8.8.8.88.8.8.8 via 10.6.124.254 dev eth0 src 10.6.124.203
推荐本站淘宝优惠价购买喜欢的宝贝:
本文链接:https://hqyman.cn/post/4611.html 非本站原创文章欢迎转载,原创文章需保留本站地址!
休息一下~~