环境

Debian Buster 10.9
ip utility, iproute2-ss190107
ens33 桥接 Windows 主机网络适配器
ens37 桥接 Windows 主机环回网络适配器
以下命令均在 root 下执行

原路来 原路回

接口IP网关说明
ens33192.168.2.234192.168.2.1isp1
ens37192.168.3.10192.168.3.1isp2

新增路由表

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

最后修改:2021 年 05 月 28 日 05 : 56 PM
如果觉得文章帮助了您,您可以随意赞赏。