多网卡的情况下,手动配置了所有网卡的路由策略之后,公网访问没了, 看看 ip route show: 查看路由表:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
root@ip-172-31-43-121:~# ip r s default via 172.31.32.1 dev ens7 proto dhcp src 172.31.40.130 metric 100 default via 172.31.32.1 dev ens6 proto dhcp src 172.31.37.95 metric 100 default via 172.31.32.1 dev ens5 proto dhcp src 172.31.43.121 metric 100 172.31.32.0/20 dev ens7 proto kernel scope link src 172.31.40.130 172.31.32.0/20 dev ens6 proto kernel scope link src 172.31.37.95 172.31.32.0/20 dev ens5 proto kernel scope link src 172.31.43.121 172.31.32.1 dev ens7 proto dhcp scope link src 172.31.40.130 metric 100 172.31.32.1 dev ens6 proto dhcp scope link src 172.31.37.95 metric 100 172.31.32.1 dev ens5 proto dhcp scope link src 172.31.43.121 metric 100
ip route show 命令显示的是系统路由表,也就是记录了目的网络和下一跳地址的信息的路由表。它的每个字段的含义是:
default 表示这个路由项是一个默认路由,也就是当没有匹配目的地址的路由项时,就使用这个路由项来发送数据包。 via 表示这个路由项的下一跳地址,也就是数据包要经过的网关地址。 dev 表示这个路由项对应的网卡设备名称,例如 lo, eth0, ens5 等。 proto 表示这个路由项的协议来源,例如 kernel, static, dhcp 等。 src 表示这个路由项的源地址,也就是本机发送数据包时使用的IP地址。 metric 表示这个路由项的度量值,也就是到达目的网络所需的跳数或开销。
150 ip route del default via 172.31.32.1 dev ens5 proto dhcp src 172.31.43.121 metric 100 151 ip route add default via 172.31.32.1 dev ens5 proto dhcp src 172.31.43.121 metric 10
上面的命令可以将ens5 的默认路由metric 设置成 10 ,整体的路由表会变成这样:
1 2 3 4 5 6 7 8 9 10
root@ip-172-31-43-121:/etc/netplan# ip r s default via 172.31.32.1 dev ens5 proto dhcp src 172.31.43.121 metric 10 default via 172.31.32.1 dev ens7 proto dhcp src 172.31.40.130 metric 100 default via 172.31.32.1 dev ens6 proto dhcp src 172.31.37.95 metric 100 172.31.32.0/20 dev ens7 proto kernel scope link src 172.31.40.130 172.31.32.0/20 dev ens6 proto kernel scope link src 172.31.37.95 172.31.32.0/20 dev ens5 proto kernel scope link src 172.31.43.121 172.31.32.1 dev ens7 proto dhcp scope link src 172.31.40.130 metric 100 172.31.32.1 dev ens6 proto dhcp scope link src 172.31.37.95 metric 100 172.31.32.1 dev ens5 proto dhcp scope link src 172.31.43.121 metric 100
root@ip-172-31-43-121:/etc/netplan#cat/etc/netplan/50-cloud-init.yaml # This file is generated from information provided by the datasource. Changes # to it will not persist across an instance reboot. To disable cloud-init's # network configuration capabilities, write a file # /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following: # network: {config: disabled} network: version:2 ethernets: ens5: dhcp4:true dhcp6:false match: macaddress:02:4d:73:35:16:8a set-name:ens5 routes: -to:0.0.0.0/0# 主路由表默认路由条目权重 via:172.31.32.1 metric:10 -to:0.0.0.0/0# 策略路由 via:172.31.32.1 table:1000 -to:172.31.43.121# 策略路由 via:0.0.0.0 scope:link table:1000 routing-policy: -from:172.31.43.121 table:1000
执行 netplan try测试 执行 netplan apply 确认生效
这个时候再看路由表, 输出结果:
1 2 3 4 5 6 7 8 9 10 11
root@ip-172-31-43-121:/etc/netplan# ip r s default via 172.31.32.1 dev ens5 proto static metric 10 default via 172.31.32.1 dev ens7 proto dhcp src 172.31.40.130 metric 100 default via 172.31.32.1 dev ens6 proto dhcp src 172.31.37.95 metric 100 default via 172.31.32.1 dev ens5 proto dhcp src 172.31.43.121 metric 100 172.31.32.0/20 dev ens7 proto kernel scope link src 172.31.40.130 172.31.32.0/20 dev ens6 proto kernel scope link src 172.31.37.95 172.31.32.0/20 dev ens5 proto kernel scope link src 172.31.43.121 172.31.32.1 dev ens7 proto dhcp scope link src 172.31.40.130 metric 100 172.31.32.1 dev ens6 proto dhcp scope link src 172.31.37.95 metric 100 172.31.32.1 dev ens5 proto dhcp scope link src 172.31.43.121 metric 100
root@ip-172-31-43-121:/etc/iproute2# ip rule list 0: from all lookup local 0: from 172.31.40.130 lookup 1002 0: from 172.31.37.95 lookup 1001 0: from 172.31.43.121 lookup 1000 32766: from all lookup main 32767: from all lookup default
查看tcp数据包中的目的地址, 按照优先级顺序匹配条目,依次查。 local table 是内核维护本地网络, 无法更改, 并且所有的条目都先匹配local。 2. 查看 local table 中的条目。
root@ip-172-31-43-121:~# 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.31.32.0 dev ens7 proto kernel scope link src 172.31.40.130 broadcast 172.31.32.0 dev ens6 proto kernel scope link src 172.31.37.95 broadcast 172.31.32.0 dev ens5 proto kernel scope link src 172.31.43.121 local 172.31.37.95 dev ens6 proto kernel scope host src 172.31.37.95 local 172.31.40.130 dev ens7 proto kernel scope host src 172.31.40.130 local 172.31.43.121 dev ens5 proto kernel scope host src 172.31.43.121 broadcast 172.31.47.255 dev ens7 proto kernel scope link src 172.31.40.130 broadcast 172.31.47.255 dev ens6 proto kernel scope link src 172.31.37.95 broadcast 172.31.47.255 dev ens5 proto kernel scope link src 172.31.43.121
ip route show table local 命令显示的是本地路由表,也就是保存本地接口地址,广播地址,NAT地址等信息的路由表。它的每一个字段的含义是: broadcast 表示这个路由项是一个广播地址,也就是可以向同一网段内的所有主机发送数据包的地址。 local 表示这个路由项是一个本地地址,也就是本机自身的IP地址。 dev 表示这个路由项对应的网卡设备名称,例如 lo, eth0, ens5 等。 proto 表示这个路由项的协议来源,例如 kernel, static, dhcp 等。 scope 表示这个路由项的作用范围,例如 host, link, global 等。 src 表示这个路由项的源地址,也就是本机发送数据包时使用的IP地址。
local 172.31.37.95 dev ens6 proto kernel scope host src 172.31.37.95
root@ip-172-31-43-121:/etc/iproute2# ip route get 39.156.66.14 39.156.66.14 via 172.31.32.1 dev ens5 src 172.31.43.121 uid 0 cache root@ip-172-31-43-121:/etc/iproute2# ip route get 172.31.40.130 local 172.31.40.130 dev lo table local src 172.31.40.130 uid 0 cache <local>
3. 如果local没有匹配到, 例如 访问百度的地址, 会跳转到 策略路由表, 当然我配置的策略路由表其实也没有匹配到这些条目, 因此开始查 main
1 2 3 4 5 6 7 8 9 10 11
root@ip-172-31-43-121:/etc/iproute2# ip r s t main default via 172.31.32.1 dev ens5 proto static metric 10 default via 172.31.32.1 dev ens7 proto dhcp src 172.31.40.130 metric 100 default via 172.31.32.1 dev ens6 proto dhcp src 172.31.37.95 metric 100 default via 172.31.32.1 dev ens5 proto dhcp src 172.31.43.121 metric 100 172.31.32.0/20 dev ens7 proto kernel scope link src 172.31.40.130 172.31.32.0/20 dev ens6 proto kernel scope link src 172.31.37.95 172.31.32.0/20 dev ens5 proto kernel scope link src 172.31.43.121 172.31.32.1 dev ens7 proto dhcp scope link src 172.31.40.130 metric 100 172.31.32.1 dev ens6 proto dhcp scope link src 172.31.37.95 metric 100 172.31.32.1 dev ens5 proto dhcp scope link src 172.31.43.121 metric 100