环境
Debian Buster 10.9
ip utility, iproute2-ss190107
ens33 桥接 Windows 主机网络适配器
ens37 桥接 Windows 主机环回网络适配器
以下命令均在 root 下执行
原路来 原路回
接口 | IP | 网关 | 说明 |
---|---|---|---|
ens33 | 192.168.2.234 | 192.168.2.1 | isp1 |
ens37 | 192.168.3.10 | 192.168.3.1 | isp2 |
新增路由表
echo -e "252\tbisp1" >> /etc/iproute2/rt_tables
echo -e "251\tbisp2" >> /etc/iproute2/rt_tables
配置路由表及策略路由
为方便维护,不以命令单独配置路由,直接写入到各接口的配置文件中,其中除主接口外的接口配置文件建议分离。
此处将 ens37 配置文件合并写入 interfaces 中。
vim /etc/network/interfaces
配置后,如下:
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
allow-hotplug ens33
#auto ens33
iface ens33 inet static
address 192.168.2.234/24
gateway 192.168.2.1
# 配置路由表 isp1
# 此处配置时,部分命令可省略参数 dev ens37
post-up ip route add default via 192.168.2.1 table isp1
pre-down ip route del default via 192.168.2.1 table isp1
post-up ip route add 192.168.2.0/24 src 192.168.2.234 dev ens33 table isp1
pre-down ip route del 192.168.2.0/24 src 192.168.2.234 dev ens33 table isp1
post-up ip rule add from 192.168.2.234 table isp1
pre-down ip rule del from 192.168.234 table isp1
post-up ip rule add to 192.168.234 table isp1
pre-down ip rule del to 192.168.234 table isp1
allow-hotplug ens37
iface ens37 inet static
address 192.168.3.10/24
# 配置路由表 isp2
# 此处配置时,部分命令可省略参数 dev ens37
post-up ip route add default via 192.168.3.1 table isp2
pre-down ip route del default via 192.168.3.1 table isp2
post-up ip route add 192.168.3.0/24 src 192.168.3.10 dev ens37 table isp2
pre-down ip route del 192.168.3.0/24 src 192.168.3.10 dev ens37 table isp2
post-up ip rule add from 192.168.3.10 table isp2
pre-down ip rule del from 192.168.3.10 table isp2
post-up ip rule add to 192.168.3.10 table isp2
pre-down ip rule del to 192.168.3.10 table isp2
补充
当使用 ifup 或 ifdown 开启或关闭接口时,将会动态改变路由表。
post-up:在接口启动后,操作被执行。
pre-down:在接口关闭前,操作被执行。
检查路由表
isp1
ip route show table isp1
结果如下:
default via 192.168.2.1 dev ens33
192.168.2.0/24 dev ens33 scope link src 192.168.2.234
isp2
ip route show table isp2
结果如下:
default via 192.168.3.1 dev ens37
192.168.3.0/24 dev ens37 scope link src 192.168.3.10
检查策略路由
ip rule list
结果如下(值越低,优先级越高):
0: from all lookup local
32762: from all to 192.168.2.234 lookup isp1
32763: from 192.168.2.234 lookup isp1
32764: from all to 192.168.3.10 lookup isp2
32765: from 192.168.3.10 lookup isp2
32766: from all lookup main
32767: from all lookup default
测试连通性
ping -I ens33 223.5.5.5
ping -I ens37 223.5.5.5 # 由于 ens37 是桥接的 Windows 环回适配器,无法上网,此处实际不通。
其他
iproute2 相关,先记录。
scope global link host
# 路由设置 scope=host,那么可使用后端(网络接口)为 scope=host 的项
ip with scope=host can be as backend only for a route with scope=host
# 路由设置 scope=link,那么可使用后端(网络接口)为 scope=host 或 scope=link 的项
ip with scope=link can be as backend only for a route with scope=host or scope=link
# 路由设置 scope=global,那么可使用后端(网络接口)为 scope=任何的项(host,link,global)
ip with scope=global can be as backend only for a route with any scope
若,路由指定了 src,则 scope 参数会被忽略。
192.168.2.0/24 dev ens33 proto kernel scope link src 192.168.2.10
ip-rule
个人理解
iproute2 使用多路由表,而 rule 代表策略,使用一些列策略来判断,最终使用哪个路由表 table。
翻译
ip rule 构建的规则,在路由策略数据库(routing policy database, RPDB)中,控制着路由选择算法。
Internet 中使用的经典路由算法,仅根据数据包的目标地址(从理论上讲,但在实践中却没有,在 TOS 字段)做出路由决策。
在某些情况下,我们希望不仅根据目标地址,还可依据其他数据包字段,以不同的方式路由数据包。其他字段如:源地址(source address),IP 协议(IP protocol),传输协议端口(transport protocol ports),有效载荷包(packet payload)等。
为了解决这个问题,传统的基于目的地的路由表(根据最长匹配规则排序),将被“路由策略数据库(routing policy database, RPDB)”取代,通过执行一些规则来选择路由。
每个策略路由规则都包含一个选择器(selector)和一个动作(action)。 RPDB 按优先级递减的顺序进行扫描(数字越小,优先级越高)。
每个规则的选择器应用于{源地址,目标地址,传入接口,tos,fwmark},如果选择器与数据包匹配,则执行动作。动作可能会成功返回,它将给出路由(route)或失败指示(failure indication),并且 RPDB 查找终止。否则,RPDB 将继续匹配下一条规则。
通常,动作会选择下一跳和输出设备。
参考
payload: www.zhihu.com/question/26689845
payload: www.cnblogs.com/tjtest/p/7688616.html
TOS: en.wikipedia.org/wiki/Type_of_service
scope global link host: unix.stackexchange.com/questions/123084/what-is-the-interface-scope-global-vs-link-used-for
www.vultr.com/docs/configure-debian-with-multiple-ip-addresses
blog.csdn.net/qq_41565459/article/details/83003077?ivk_sa=1024320u
unix.stackexchange.com/questions/35713/adding-two-default-gateways-in-debian-interfaces-file
blog.csdn.net/weixin_42767604/article/details/106251844
www.policyrouting.org/iproute2.doc.html#ss9.2.1
blog.scottlowe.org/2013/05/29/a-quick-introduction-to-linux-policy-routing/
bbs.linuxtone.org/thread-19101-1-1.html
manpages.debian.org/buster/ifupdown/interfaces.5.en.html
unix.stackexchange.com/questions/22770/two-interfaces-two-addresses-two-gateways
Realms(还未理解 先记录): superuser.com/questions/193561/what-does-the-content-of-etc-iproute2-rt-realms-mean-ubuntu-10-4