Linux可以配置很多很多策略,数据包将依次通过各个策略,一旦匹配某个策略则进一步应用策略对应的路由表,如果当前路由表无法匹配到路由则继续执行后续策略匹配。
路由策略
查看系统路由策略:
[root@localhost ~]# ip rule list
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
可以看到系统自带的路由表都是有名字的,比如local、main、default。
路由表
典型的路由条目包括了源IP,目的IP,网关IP,scope,dev和type六个要素。
我们只能通过ip rule list查看策略对应的路由表,然后利用ip route list table [路由表名] 来查看具体的1张路由表:
[root@localhost ~]# ip route list table main
default via 10.0.2.2 dev eth0 proto dhcp metric 100
10.0.2.0/24 dev eth0 proto kernel scope link src 10.0.2.15 metric 100
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
172.19.0.0/16 dev br-73ff5e04ff1a proto kernel scope link src 172.19.0.1
如果ip route list没有指定table,那么其效果相当于table main,而table main则是Linux默认的路由表,其内的规则来自于局域网DHCP广播下发。
网关IP
网关IP就是在配置路由的时候指定的via后面的地址,在路由表中叫Gateway。目的地址不是当前自己出口可以直接可达的,需要经过网关路由到下个网络才能投递。
查看main路由表
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.99.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
0.0.0.0 192.168.99.254 0.0.0.0 UG 0 0 0 eth0
$ip route show
192.168.99.0/24 dev eth0 scope link
127.0.0.0/8 dev lo scope link
default via 192.168.99.254 dev eth0
192.168.99.0/24这一条中,定义了scope是link,代表这个网络是合法的并且是可以通过eth0这个口联通的;
最后一条default是默认路由,如果找不到目标主机的IP,就通过eth0口发送到192.168.99.254地址;
这里Flags中带的G是gateway的缩写,代表必须使用外部设备作为网关;
这个gateway:192.168.99.254必须要在我们已经存在的路由环境中。
路由条目的意义 https://zhuanlan.zhihu.com/p/43279912
简述linux路由表 https://yuerblog.cc/2019/11/18/%E7%AE%80%E8%BF%B0linux%E8%B7%AF%E7%94%B1%E8%A1%A8/
Linux路由表 https://www.jianshu.com/p/8499b53eb0a5