路由匹配的基本流程

查看路由规则

ip rule list

以下为系统自带策略

0: from all lookup local
32766: from all lookup main
32767: from all lookup default

序号为优先级,从小到大执行,匹配成功就不再执行之后的策略

from all 表示匹配任意来源IP的数据包

to all 表示匹配任意目标IP的数据包

local main default 为系统路由表名称 可通过命令 ip route list table 路由表名称/ID 查看

pref 1 用于指定优先级序号 不可重复,默认从最大 32767递减

table 0 用于指定路由表ID 也可配置路由表名称 /etc/iproute2/rt_tables

添加路由规则

ip rule add from all to all pref 1 table 10

from all to all:分别匹配全部来源IP和全部目标IP

pref 1:pref表示策略序号,其实也是优先级的意思,越小的序号越先被匹配

table 10:如果匹配该策略,那么去查10号路由表

添加路由表记录

ip route add 192.168.2.0/24 dev eth0 table 10

ip route add default via 192.168.2.1 dev eth0 table 10

192.168.2.0/24:用于匹配目标IP,判断是否应用该路由记录

default 表示匹配任意目标IP

via 192.168.2.1 将数据包直接发给192.168.2.1(网关)的MAC地址

dev eth0:匹配成功之后基于设备 eth0 所在的LAN 通讯 (经过ARP广播得到目标IP的MAC地址,然后直接基于二层链路通讯)

table 10:表示添加该路由记录到10号路由表

查看路由表记录

table main是Linux默认的路由表

ip route list

此命令等价于

ip route list table main

ip route list table 10

default via 172.23.176.1 dev eth0 proto kernel
10.77.0.0/16 dev wg0 scope link
172.23.176.0/20 dev eth0 proto kernel scope link src 172.23.186.145
198.18.0.0/16 dev utun proto kernel scope link src 198.18.0.1

default:可以匹配任意目标IP,因此也称为默认路由。

proto kernel 表示系统内核自动生成

scope link 所有的数据请求走二层arp,而不是走三层路由。所以在配置了这条路由之后,再配置网关就可以了

src 默认源地址 外部数据包不会生效

测试目标IP路由

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 

删除路由规则

ip rule del pref 1

直接指定优先级即可

删除路由表记录

ip route del default via 192.168.2.1 dev eth0 table 10