ubuntu:
策略路由如下,策略路由根据优先级主要有3个表,0为优先级最大
$ ip rule
0:from all lookup local
32766:from all lookup main
32767:from all lookup default
所有的上网路由都在main表里:
通过ifconfig配置的ip地址,内核都会默认生成一条路由到main表里
$ ip route show table main
default via 10.245.1.254 dev eno1 proto dhcp metric 20100
10.245.1.0/24 dev eno1 proto kernel scope link src 10.245.1.166 metric 100
android:
1、默认只有eth0,车机上一般使用静态ip,由framework侧配置,手动无法更改eth0的ip地址
下面是ip rule的路由规则, 14000优先级的是eth0表,意思是所有走eth0接口的都匹配eth0表,表里有通过framework配置默认网关和 网段路由
hqcos:/ # ip rule
0:from all lookup local
10000:from all fwmark 0xc0000/0xd0000 lookup legacy_system
10500:from all iif lo oif dummy0 uidrange 0-0 lookup dummy0
10500:from all iif lo oif eth0 uidrange 0-0 lookup eth0
13000:from all fwmark 0x10063/0x1ffff iif lo lookup local_network
13000:from all fwmark 0x10064/0x1ffff iif lo lookup eth0
14000:from all iif lo oif dummy0 lookup dummy0
14000:from all iif lo oif eth0 lookup eth0
15000:from all fwmark 0x0/0x10000 lookup legacy_system
16000:from all fwmark 0x0/0x10000 lookup legacy_network
17000:from all fwmark 0x0/0x10000 lookup local_network
19000:from all fwmark 0x64/0x1ffff iif lo lookup eth0
22000:from all fwmark 0x0/0xffff iif lo lookup eth0
32000:from all unreachable
hqcos:/ #
hqcos:/ # ip route show table eth0 //列举eth0路由表下面的路由规则
default via 172.20.0.40 dev eth0 proto static
172.20.0.0/24 dev eth0 proto static scope link
-
加vlan,并且让vlan6上网
我们在这儿做的最大修改是将上网的接口由原先的eth0改成了eth0.6(也就是vlan6),所有14000优先级的规则变成了eth0.6的表(替换掉原先的eth0),这个eth0.6的表里设置默认路由和 6网段的路由
所有这时我们没有了eth0的网段路由在规则里匹配不到了,所以我们在前面单独加了一条9999优先级、路由表id为1000的路由表,1000的路由表里的路由写的是0网段的路由
hqcos:/ # ip rule
0:from all lookup local
9995:from all to 172.20.7.0/24 lookup 7
9996:from all to 172.20.6.0/24 lookup 6
9997:from all to 172.20.4.0/24 lookup 4
9998:from all to 172.20.3.0/24 lookup 3
9999:from all to 172.20.0.0/24 lookup 1000
10000:from all fwmark 0xc0000/0xd0000 lookup legacy_system
10500:from all iif lo oif dummy0 uidrange 0-0 lookup dummy0
10500:from all iif lo oif eth0.6 uidrange 0-0 lookup eth0.6
13000:from all fwmark 0x10063/0x1ffff iif lo lookup local_network
13000:from all fwmark 0x10064/0x1ffff iif lo lookup eth0.6
14000:from all iif lo oif dummy0 lookup dummy0
14000:from all iif lo oif eth0.6 lookup eth0.6
15000:from all fwmark 0x0/0x10000 lookup legacy_system
16000:from all fwmark 0x0/0x10000 lookup legacy_network
17000:from all fwmark 0x0/0x10000 lookup local_network
19000:from all fwmark 0x64/0x1ffff iif lo lookup eth0.6
22000:from all fwmark 0x0/0xffff iif lo lookup eth0.6
32000:from all unreachable
默认路由表由eth0替换为eth0.6
hqcos:/ # ip route show table eth0.6
default via 172.20.6.40 dev eth0.6 proto static
172.20.6.0/24 dev eth0.6 proto static scope link
hqcos:/ # ip route show table 7 172.20.7.0/24 dev eth0.7 proto static scope link
hqcos:/ # ip route show table 1000 172.20.0.0/24 dev eth0 proto static scope link
-
wlan开启:
vlan路由的更改为啥不影响wifi的路由:
理由:当wifi建立的时候,我们看到14000处的eth0.6的默认路由表,改成了wifi路由表wlan0,说明现在上网只使用wifi上网,而且wifi的ip地址能匹配到ip rule的14000的wlan0路由表,故能直接上网,不用手动添加路由
hqcos:/ # ip rule
0:from all lookup local
9995:from all to 172.20.7.0/24 lookup 7
9996:from all to 172.20.6.0/24 lookup 6
9997:from all to 172.20.4.0/24 lookup 4
9998:from all to 172.20.3.0/24 lookup 3
9999:from all to 172.20.0.0/24 lookup 1000
10000:from all fwmark 0xc0000/0xd0000 lookup legacy_system
10500:from all iif lo oif dummy0 uidrange 0-0 lookup dummy0
10500:from all iif lo oif wlan0 uidrange 0-0 lookup wlan0
13000:from all fwmark 0x10063/0x1ffff iif lo lookup local_network
13000:from all fwmark 0x10065/0x1ffff iif lo lookup wlan0
14000:from all iif lo oif dummy0 lookup dummy0
14000:from all iif lo oif wlan0 lookup wlan0
15000:from all fwmark 0x0/0x10000 lookup legacy_system
16000:from all fwmark 0x0/0x10000 lookup legacy_network
17000:from all fwmark 0x0/0x10000 lookup local_network
19000:from all fwmark 0x65/0x1ffff iif lo lookup wlan0
22000:from all fwmark 0x0/0xffff iif lo lookup wlan0
32000:from all unreachable
hqcos:/ #
hqcos:/ # ip route show table wlan0
default via 10.245.4.254 dev wlan0 proto static
10.245.4.0/24 dev wlan0 proto static scope link