linux路由表机制

场景:

linux是支持多路由表的我们可以通过创建不同的路由规则,在路由规则来挂载带有不同路由条目的路由表来定制化路由的匹配过程。并且路由规则的匹配条件可以由我们自由来决定,比如:可以实现以下目标

  • 源ip符合xxx/xx的走规则1去匹配路由表1
  • 源ip符合yyy/yy的走规则2去匹配路由表2
  • 其它的继续按照目的ip去匹配main路由表,也就是默认路由表

一起来看linux的路由表机制如何实现以上目标

1、路由的相关概念

路由: 跨越从源主机到目标主机的一个互联网络来转发数据包的过程
路由器:能够将数据包转发到正确的目的地,并在转发过程中选择最佳路径的设备
路由表:在路由器中维护的路由条目,路由器根据路由表做路径选择
直连路由:当在路由器上配置了接口的IP地址,并且接口状态为up的时候,路由表中就出现直连路由项
静态路由:是由管理员手工配置的,是单向的。
默认路由:当路由器在路由表中找不到目标网络的路由条目时,路由器把请求转发到默认路由接口

2、路由器转发数据包时的封装过程

源IP和目标IP不发生变化,在网络的每一段传输时,源和目标MAC发生变化,进行重新封装,分别是每一段的源和目标地址。

3、linux路由表内容解析

lulu:~ $ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    202    0        0 eth0
0.0.0.0         10.89.0.1       0.0.0.0         UG    303    0        0 wlan0
10.89.0.0       0.0.0.0         255.255.240.0   U     303    0        0 wlan0
192.168.1.0     0.0.0.0         255.255.255.0   U     202    0        0 eth0
输出项	    说明
Destination	目标网段或者主机
Gateway	    网关地址,*表示目标是本主机所属的网络,不需要路由
Genmask	    网络掩码
Flags	    标记
Metric	    路由距离,到达指定网络所需要的中转数
Ref	        路由项引用次数
Use	        此路由项被路由软件查找的次数
Iface	    此路由项对应的输出接口

标记	含义
U	路由是活动的
H	目标是个主机
G	路由指向网关
R	恢复动态路由产生的表项
D	由路由的后台程序动态的安装
M	由路由的后台程序修改
!	拒绝路由

4、三种路由类型说明

  • 1、主机路由:

    主机路由是路由选择表中指向单个IP地址或主机名的路由记录。主机路由的Flags字段为H。
    在下面示例中,本地主机通过IP地址192.168.1.1的路由器到达IP地址为10.89.0.10的主机。

    添加主机路由时,需要指定网络 ID 和主机 ID,此时需要设置 netmask 255.255.255.255。
    Destination Gateway Genmask Flags Metric Ref Use Iface
    10.89.0.10 192.168.1.1 255.255.255.255 UH 0 0 0 eth0

  • 2、网络路由:

    网络路由是代表主机可以到达的网络。网络路由的Flags字段为N。例如,在下面的示例中,本地主机将发送到网络192.19.12的数据包转发到IP地址为192.168.1.1的路由器。

    添加网络路由时,只需指定网络 ID,通过 netmask 设置掩码长度。

    Destination Gateway Genmask Flags Metric Ref Use Iface
    192.19.12 192.168.1.1 255.255.255.0 UN 0 0 0 eth0

  • 3、默认路由:

    当主机不能在路由表中查找到目标主机的IP地址或网络路由时,数据包就被发送到默认路由(默认网关)上。默认路由的Flags字段为G。

    例如,在下面的示例中,默认路由是IP地址为192.168.1.1的路由器。
    Destination Gateway Genmask Flags Metric Ref Use Iface
    0.0.0.0 192.168.1.1 0.0.0.0 UG 202 0 0 eth0

5、配置路由的不同方式

5-1、route

语法:

route [add|del] [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]

参数:

参数	    解释
add	    添加一条路由规则
del	    删除一条路由规则
-net	目的地址是一个网络
-host	目的地址是一个主机
target	目的网络或主机
netmask	目的地址的网络掩码
gw	    路由数据包通过的网关
dev	    为路由指定的网络接口

例如:

添加到主机的路由
# route add -host 192.168.1.2 dev eth0:0
# route add -host 10.20.30.148 gw 10.20.30.40
  
添加到网络的路由
# route add -net 10.20.30.40 netmask 255.255.255.248 eth0
# route add -net 10.20.30.48 netmask 255.255.255.248 gw 10.20.30.41
# 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 del default   删除所有的默认路由
 
添加一条默认路由
# route add default gw 10.0.0.1      //默认只在内存中生效
开机自启动可以追加到/etc/rc.local文件里
# echo "route add default gw 10.0.0.1" >>/etc/rc.local
 
添加一条静态路由
# route add -net 192.168.2.0/24 gw 192.168.2.254
要永久生效的话要这样做:
# echo "any net 192.168.2.0/24 gw 192.168.2.254" >>/etc/sysconfig/static-routes
 
添加到一台主机的静态路由
# route add -host 192.168.2.2 gw 192.168.2.254
要永久生效的话要这样做:
# echo "any  host 192.168.2.2 gw 192.168.2.254 " >>/etc/sysconfig/static-routes
注:Linux 默认没有这个文件 ,得手动创建一个
5-2、ip route

语法:

ip route [destination_network] [mask] [next-hop_address] administrative_distance]

参数:

参数	解释
destination_network	    需要发布到路由表中的网段
mask	                在这一网络上使用的子网掩码
next-hop_address	    下一跳路由器的地址
administrative_distance	默认时,静态路由有一个取值为1 的管理性距离。
                        在这个命令的尾部添加管理权来修改这个默认值。

例如:

ip route 172.16.1.0 255.255.255.0 172.16.2.1

6、路由表里路由的组成

Linux 系统下的路由表是由小网域排列到大网域

示例路由表:

[root@www ~]# route -n
Kernel IP routing table
Destination  Gateway        Genmask         Flags Metric Ref  Use Iface
192.168.1.0  0.0.0.0        255.255.255.0   U     0      0      0 eth0 <== 1
169.254.0.0  0.0.0.0        255.255.0.0     U     1002   0      0 eth0 <== 2
0.0.0.0      192.168.1.254  0.0.0.0         UG    0      0      0 eth0 <== 3

其实路由表主要有这几种情况来设计的:

  • 依据网络接口产生的 IP 而存在的路由
  • 手动或预设路由(default route)
  • 动态学习的路由

1、依据网络接口产生的 IP 而存在的路由:

例如 192.168.1.0/24 这个路由的存在是由于这部主机上面拥有 192.168.1.100 这个 IP 的关系! 也就是说,你主机上面有几个网络接口的存在时,该网络接口就会存在一个路由才对。 所以说,万一你的主机有两个网络接口时,例如 192.168.1.100, 192.168.2.100 时,那路由至少就会有:

[root@www ~]# ifconfig eth1 192.168.2.100
[root@www ~]# route -n
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.2.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
0.0.0.0         192.168.1.254   0.0.0.0         UG    0      0        0 eth0

2、手动或预设路由(default route):

你可以使用 route 这个指令手动的给予额外的路由设定,例如那个预设路由 (0.0.0.0/0) 就是额外的路由。 使用 route 这个指令时,最重要的一个概念是:『你所规划的路由必须要是你的装置 (如 eth0) 或 IP 可以直接沟通 (broadcast) 的情况』才行。

举例来说,以上述的环境来看, 我的环境里面仅有 192.168.1.100 及 192.168.2.100 ,那我如果想要连接到 192.168.5.254 这个路由器时, 下达:

[root@www ~]# route add -net 192.168.5.0  \
> netmask 255.255.255.0 gw 192.168.5.254
SIOCADDRT: No such process

系统就会响应没有办法连接到该网域,因为我们的网络接口与 192.168.5.0/24 根本就没有关系嘛! 那如果 192.168.5.254 真的是在我们的实体网络连接上,并且与我们的 eth0 连接在一起,那其实你应该是这样做:

[root@www ~]# route add -net 192.168.5.0  \
> netmask 255.255.255.0 dev eth0
[root@www ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.5.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.2.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
0.0.0.0         192.168.1.254   0.0.0.0         UG    0      0        0 eth0

这样你的主机就会直接用 eth0 这个装置去尝试连接 192.168.5.254 了! 另外,上面路由输出的重点其实是那个『Flags 的 G 』了!因为那个 G 代表使用外部的装置作为 Gateway 的意思!而那个 Gateway (192.168.1.254) 必须要在我们的已存在的路由环境中。 这可是很重要的概念喔!

3、动态学习的路由:

除了上面这两种可以直接使用指令的方法来增加路由规则之外,还有一种透过路由器与路由器之间的协商以达成动态路由的环境, 不过,那就需要额外的软件支持了,例如: zebra (http://www.zebra.org/) 或 CentOS 上面的 Quagga (http://www.quagga.net/) 这几个软件了!

7、Linux路由表的两个概念:路由规则(rule)和路由表(table)

在这里插入图片描述

  • 路由表用于决定数据包从哪个网口发出,其判断依据则主要是IP地址。

  • Linux可以配置很多很多策略,数据包将依次通过各个策略,一旦匹配某个策略则进一步应用策略对应的路由表,如果当前路由表无法匹配到路由则继续执行后续策略匹配。

  • 路由的基本流程为: 收到数据包之后,解析出目的IP,判断是否是本机IP。如果是本机IP,则交由上层传输层处理。如果不是本机IP,则通过查找路由表找到合适的网络接口将IP数据包转发出去。

Linux上通过路由规则和路由表配合来实现路由流程, 处理逻辑如下:

  • 按路由规则优先级, 根据规则匹配条件找到需要匹配的路由表
  • 根据路由表中条目进行匹配的结果进行转发
  • 若路由表中没有匹配到满足的路由条目,则处理下一路由规则

路由规则由三部分构成:

  • Priority: Linux上可以添加多条路由规则,根据优先级数字从小到大依次进行匹配,从0到32767
  • Selector: 对IP数据包进行匹配的条件,如”from all” 表示所有IP数据包
  • Action: 对IP数据包执行的动作,如”lookup local”表示需要查找路由表local进行处理

linux支持多个路由表,其中有三个默认生成的路由表:

  • local: 处理本地IP和广播地址路由,local路由表只由kernel维护,不能更改和删除
  • main: 处理所有非策略路由,不指定路由表名时默认使用的路由表
  • default: 所有其他路由表都没有匹配到的情况下,根据该表中的条目进行处理

我们来查看路由规则:

[root@compute1 ~]# ip rule list
0:        from all lookup local
32766:    from all lookup main
32767:    from all lookup default

可以看到默认情况下存在3条路由规则,分别对应上述的三张路由表。路由选路时,首先处理规则0,对所有的IP数据包查找路由表local。我们来看local路由表的内容:

[root@compute1 ~]# ip route show table local
broadcast 127.0.0.0 dev lo  proto kernel  scope link  src 127.0.0.1
local 127.0.0.0/8 dev lo  proto kernel  scope host  src 127.0.0.1
local 127.0.0.1 dev lo  proto kernel  scope host  src 127.0.0.1
broadcast 127.255.255.255 dev lo  proto kernel  scope link  src 127.0.0.1
broadcast 172.16.88.0 dev eno33554976  proto kernel  scope link  src 172.16.88.130
local 172.16.88.130 dev eno33554976  proto kernel  scope host  src 172.16.88.130
broadcast 172.16.88.255 dev eno33554976  proto kernel  scope link  src 172.16.88.130
broadcast 172.16.96.0 dev eno16777736  proto kernel  scope link  src 172.16.96.131
local 172.16.96.131 dev eno16777736  proto kernel  scope host  src 172.16.96.131
broadcast 172.16.96.255 dev eno16777736  proto kernel  scope link  src 172.16.96.131

local表示本机IP,broadcast表示广播地址。local表由kernel来维护,用户态程序不能更改内容也不能删除路由表。

若数据包目的IP不是本机IP,则在local中匹配不到相应条目,因而根据下一规则32766来查找路由表main。再来看路由表main的内容:

[root@compute1 ~]# ip route show
default via 172.16.88.2 dev eno33554976
169.254.0.0/16 dev eno16777736  scope link  metric 1002
169.254.0.0/16 dev eno33554976  scope link  metric 1003
172.16.88.0/24 dev eno33554976  proto kernel  scope link  src 172.16.88.130
172.16.96.0/24 dev eno16777736  proto kernel  scope link  src 172.16.96.131

在查找路由表时遵循最长匹配原则:

比如,表中有两个条目,目的IP网络地址分别为“172.16.96.0/24”和”172.16.0.0/16”,
目的IP为172.16.96.101的数据包两个条目都会匹配,会以匹配的更长的”172.16.96.0/24”条目为准。
根据表中内容可以看到,当数据包目标IP属于”172.16.88.0/24”网段时,则从接口”eno33554976”转发。
若目标IP属于”172.16.96.0/24”网段,则由接口”eno16777736”转发。
若所有目的地址条目都不能匹配,则使用default条目,由接口”eno33554976”转发。

系统内部使用数字来标识路由表。为了方便,有时需要使用符号标识路由表,可以将对应关系添加到文件/etc/iproute2/rt_tables:

[root@compute1 ~]# cat /etc/iproute2/rt_tables
#
# reserved values
#
255    local
254    main
253    default
0      unspec

8、策略路由

系统默认路由的匹配策略是根据目的地址进行匹配。很多情况下这满足不了需求,Linux提供了策略路由的支持,可以基于网络接口,源地址,防火墙标志等其他信息来选择下一跳地址。添加策略路由步骤如下:

  • 创建自定义的策略路由表或者直接使用数字标识路由表
  • 创建路由规则来查找策略路由表
  • 在策略路由表中添加路由条目

实践:

首先添加一个新的路由表对应关系,若直接使用数字标识路由表,则不需要添加:

echo “200 custom” >> /etc/iproute2/rt_tables

创建查找该路由表的路由规则,规则不是由目的ip来匹配,而是由源ip来匹配:

ip rule add from 192.168.30.200 lookup custom

若直接使用数字标识路由表, 如:

ip rule add from 192.168.30.200 lookup 200

查看现在的路由规则:

[root@compute1 ~]# ip rule
0:        from all lookup local
32765:    from 192.168.30.200 lookup custom
32766:    from all lookup main
32767:    from all lookup default

默认情况下,添加规则使用当前可用的最低优先级。因而后添加的规则优先级会更高。在添加规则时也可以直接指定优先级,如:

ip rule add iif eno33554976 lookup custom priority 10000

再来查看规则内容:

[root@compute1 ~]# ip rule
0:        from all lookup local
10000:    from all iif eno33554976 lookup custom
32765:    from 192.168.30.200 lookup custom
32766:    from all lookup main
32767:    from all lookup default

接下来,在路由表中添加路由条目, 如添加一条默认路由:

ip route add default via 192.168.30.1 dev eth1 table custom

通过规则优先级,对策略路由表没有匹配到相应条目时,更使用默认的main路由表进行处理。

9、自定义路由规则与路由表实践

利用如下命令查看系统自带的策略:

pi@raspberrypi:~ $ ip rule list
0:      from all lookup local 
32766:  from all lookup main 
32767:  from all lookup default

系统自带了3个策略,序号分别是0、32766、32767,策略匹配过程是从小到大执行的。

  • 以0号策略为例,它表示匹配任意来源IP的数据包,然后用名字叫做local的路由表进行路由匹配。
  • 如果local路由表里的规则能匹配成功,那么后续的rule就不会执行了,否则还会继续匹配后面的main,defaylt等路由规则

每1条策略最终都会关联到1张路由表,同1个路由表可以被N个策略关联,路由表总是随着路由策略的添加而生成的。

如果要了解如何管理路由策略,可以执行ip rule help:

pi@raspberrypi:~ $ 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 ]
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 ]

比如,我添加一个序号为1的策略(它紧跟在0之后),它匹配所有数据包,并且对应一个全新的路由表10:

pi@raspberrypi:~ $ sudo ip rule add from all to all pref 1 table 10
pi@raspberrypi:~ $ sudo ip rule list
0:      from all lookup local 
1:      from all lookup 10 
32766:  from all lookup main 
32767:  from all lookup default

该命令组成:

ip rule add:添加策略的意思,所有策略相关的命令都是ip rule开头的。
from all to all:分别匹配全部来源IP和全部目标IP,其实就是匹配规则,更多规则大家可以看上面的help
pref 1:pref表示策略序号,其实也是优先级的意思,越小的序号越先被匹配。
table 10:如果匹配该策略,那么去查10号路由表。

其实不仅路由策略是序号指定的,路由表也是序号指定的。
但是也可以看到系统自带的路由表都是有名字的,比如local、main、default。
这是因为linux支持给路由表起名字。

可以查看/etc/iproute2/rt_tables得知真实的table序号:

pi@raspberrypi:~ $ cat /etc/iproute2/rt_tables
255 local
254 main
253 default
0 unspec

删除刚刚添加的这条规则也很简单,可以利用匹配条件去匹配到它,或者直接利用pref 1指定策略序号删除:

pi@raspberrypi:~ $ sudo ip rule del pref 1
pi@raspberrypi:~ $ sudo ip rule list
0:      from all lookup local 
32766:  from all lookup main 
32767:  from all lookup default

我们通过table 10指定了一个新的路由表,它会被自动创建出来,而且是空的,因此当前这条策略什么也没做就会继续执行下一个策略了。

注意:路由策略可以配好几万条都是没有问题的,但是路由表的数量有限。

所有路由表相关的命令都是ip route开头的,没有办法利用ip route list命令列出所有的路由表。

我们只能通过ip rule list查看策略对应的路由表,然后利用ip route list table序号/名字来查看具体的1张路由表:

pi@raspberrypi:~ $ ip route list table main
default via 192.168.2.1 dev eth0 src 192.168.2.101 metric 202 
192.168.2.0/24 dev eth0 proto kernel scope link src 192.168.2.101 metric 202 
pi@raspberrypi:~ $ ip route list table 10

如果ip route list没有指定table,那么其效果相当于table main,而table main则是Linux默认的路由表,其内的规则来自于局域网DHCP广播下发。

添加规则:

接下来,我尝试利用ip route add命令,将我的table 10配置成和main表完全一样的样子,这样就可以用我自己配置的路由策略完成路由了。

因为网线直连了192.168.2.0/24网段,所以这个网段的可以直接通过eth0网卡通讯:

pi@raspberrypi:~ $ sudo ip route add 192.168.2.0/24 dev eth0 table 10
pi@raspberrypi:~ $ ip route list table 10
192.168.2.0/24 dev eth0 scope link

解析:

ip route add:添加路由规则
192.168.2.0/24:用于匹配目标IP,判断是否应用该路由规则。
dev eth0:一旦匹配网段,则直接基于eth0所在的LAN通讯即可,也就是经过ARP广播得到目标IP的MAC地址,然后直接基于二层链路通讯即可。
table 10:表示添加该路由规则到10号路由表。

pi@raspberrypi:~ $ sudo ip route add default via 192.168.2.1 dev eth0 table 10
pi@raspberrypi:~ $ sudo ip route list table 10
default via 192.168.2.1 dev eth0 
192.168.2.0/24 dev eth0 scope link 

对于不在eth0直连网段内的设备,则发给网关192.168.2.1,由它进一步路由向外转发:

default:可以匹配任意目标IP,因此也称为默认路由。
via 192.168.2.1:匹配了default,那么就将数据包从eth0网口直接发给192.168.2.1的MAC地址,让其进一步路由转发,这里192.168.2.1就是网关。
table 10:该规则属于序号10的路由表。

现在可以测试一下是不是真的应用了我的table 10:

pi@raspberrypi:~ $ ip route get 192.168.2.100
192.168.2.100 dev eth0 table 10 src 192.168.2.101 
    cache 

pi@raspberrypi:~ $ ip route get 8.8.8.8
8.8.8.8 via 192.168.2.1 dev eth0 table 10 src 192.168.2.101 
    cache
    
pi@raspberrypi:~ $ ip route get 192.168.2.100
192.168.2.100 dev eth0 table 10 src 192.168.2.101 
    cache 
 
pi@raspberrypi:~ $ ip route get 8.8.8.8
8.8.8.8 via 192.168.2.1 dev eth0 table 10 src 192.168.2.101 
    cache

分析:

可见请求192.168.2.100时,IP属于eth0直连LAN,所以走了table 10的对应网段规则。
而请求外网的8.8.8.8时,该IP只能走default匹配,先发往网关192.168.2.1的MAC地址(这一步直接在eth0网卡上ARP就能拿到),再由192.168.2.1做自己的路由判定并forward数据包到更远方

删除规则:

删除规则可以通过ip route del后面跟着规则内容即可,比如:
sudo ip route del default via 192.168.2.1 dev eth0 table 10。

10、路由规则测试与校验

查看访问某个目的ip会命中哪条路由:

ubuntu@10.200.60.4:~$ ip route get 192.168.2.25 
192.168.2.25 via 10.*.*.110 dev eth0 src 10.*.*.161 
    cache 

11、查看linux路由规则与路由表

所有路由规则:

ubuntu@10.200.60.4:~$ ip rule  list
0:    from all lookup local
32766:    from all lookup main
32767:    from all lookup default

查看每一个路由规则对应的路由表里的条目:

ubuntu@10.200.60.4:~$ ip route show table local
broadcast 10.200.60.0 dev eth0 proto kernel scope link src 10.200.60.4
local 10.200.60.4 dev eth0 proto kernel scope host src 10.200.60.4
broadcast 10.234.68.63 dev eth0 proto kernel scope link src 10.200.60.4
broadcast 127.0.0.0 dev lo proto kernel scope link src 127.0.0.1
local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1
local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1
broadcast 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1

ubuntu@10.200.60.4:~$ ip route show table main
default via 10.200.60.1 dev eth0 proto static
10.200.60.0/26 dev eth0 proto kernel scope link src 10.200.60.4

ubuntu@10.200.60.4:~$ ip route show table default
Error: ipv4: FIB table does not exist.
Dump terminated

12、其实ip route show本质就是ip route show table main,也是ip route,也是route -n

ubuntu@10.200.60.4:~$ ip route show
default via 10.200.60.1 dev eth0 proto static
10.200.60.0/26 dev eth0 proto kernel scope link src 10.200.60.4

ubuntu@10.200.60.4:~$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.200.60.1     0.0.0.0         UG    0      0        0 eth0
10.200.60.0     0.0.0.0         255.255.255.192 U     0      0        0 eth0

ubuntu@10.200.60.4:~$ ip route
default via 10.200.60.1 dev eth0 proto static
10.200.60.0/26 dev eth0 proto kernel scope link src 10.200.60.4

总结

我们可以通过创建不同的路由规则,在路由规则来挂载带有不同路由条目的路由表来定制化路由的匹配过程。并且路由规则的匹配条件可以由我们自由来决定,比如:可以实现以下目标

  • 源ip符合xxx/xx的走规则1去匹配路由表1
  • 源ip符合yyy/yy的走规则2去匹配路由表2
  • 其它的继续按照目的ip去匹配main路由表,也就是默认路由表
Logo

更多推荐