16
2024
12
13:58:23

OpenWrt 下的策略路由

https://blog.kuretru.com/posts/fc5a70d/


 拥有两条宽带后最大的问题便是如何合理的利用好两条宽带,例如下载的时候通过两条宽带一起下载,游戏走稳定的线路等等。目前电信宽带给的是 300mbps/30mbps 的带宽,华数联通给的则是 100mbps/100mbps 的带宽,目前仅配置了 metric 权重,所有默认路由都是从电信走的,而有台机器正好有高速上传的需求,因此需要配置一个策略让这台指定的机器从华数联通的宽带走。

路由与规则

  作为前置知识,应该知道网络设备 (泛指能够进行网络的通信的设备,例如 PC,路由器,网关等等) 是通过查找路由表并进行最长匹配决定如何转发一个数据包的。一般情况下可以通过 ip route 命令查看本机的路由表。典型的一个结果如下,可以看到本机有两个不同权重的默认路由,另外还有一些针对内网特定网段的静态路由。而事实上,Linux 拥有多张路由表,默认操作与查看的均是 main 表 (其 ID 为 254),其他还有 prelocal (128),default (253),local (255),其中 local 表用于保存本机接口的直连路由。

1
2
3
4
5
6
7
8
9
10
11
12
13
# ip route
default via 125.120.136.1 dev pppoe-ctcc proto static
default via 218.108.255.54 dev pppoe-wan proto static metric 10
192.168.7.0/24 via 192.168.76.8 dev wireguard proto static
192.168.8.0/24 via 192.168.76.8 dev wireguard proto static
192.168.9.0/24 dev br-lan.1 proto kernel scope link src 192.168.9.254
192.168.10.0/24 via 192.168.76.8 dev wireguard proto static
192.168.15.0/24 via 192.168.76.8 dev wireguard proto static
192.168.16.0/24 via 192.168.76.8 dev wireguard proto static
192.168.28.0/24 dev zt7nnitens proto kernel scope link src 192.168.28.9
192.168.76.0/27 dev wireguard proto kernel scope link src 192.168.76.9
192.168.96.0/24 dev br-lan.96 proto kernel scope link src 192.168.96.254
192.168.98.0/24 dev br-lan.98 proto kernel scope link src 192.168.98.254

  那既然 Linux 拥有这么多路由表,那么究竟是哪一张表在起作用呢?这就要引出规则的概念,通过 ip rule 命令可以查看本机的路由表规则,默认的规则应该如下。这个结果应该非常容易看懂,最前面的数字代表规则的优先级,本机的所有数据包转发均依次匹配 local、main、default 三张路由表。

1
2
3
4
# ip rule
0: from all lookup local
32766: from all lookup main
32767: from all lookup default

实现

  现在在整理一下路由表和规则的概念:路由表负责匹配路由,而规则决定使用哪张路由表。我们很容易产生一个思路来实现我们的目标:新建一个路由表,这个路由表的默认路由从华数联通走,并新建一个规则,对于我们需要的指定主机让他使用这个路由表进行匹配。OpenWrt 22.03 的 LuCI 界面已经实现了这两个功能。

  现在在那台指定的主机上测试外网 IP 应该可以看到已经变为华数联通的 IP,这证明我们的策略路由配置成功了,但是也随之而来一个问题,这台主机无法访问 main 路由表中的那些内网静态路由条目,因为针对刚刚配置的路由规则,这台指定的主机使用的是我们刚刚新建的 ID 为 4837 的路由表,而这个路由表中没有那些针对内网的静态路由。最简单的实现办法便是在 4837 路由表中在添加一遍 main 路由表中的项目,但是这样也太不优雅了。有没有什么办法可以融合 main 路由表和 4837 路由表呢,例如让 4837 表继承 main 路由表的项目,或是匹配 4837 表的默认路由其他路由使用 main 表。

  这里需要使用一个 “前缀抑制” 功能,目标是使该规则不匹配指定路由表中的指定前缀。在刚刚新建的规则之前,再新建一个规则,让指定的主机先匹配 mian 路由表,然后设置前缀抑制为 0,那么其意思就是不匹配 main 表中默认路由,但是匹配其他路由条目,若这些路由条目都没有匹配中,那么则命中下一条规则,即匹配 4837 表。

  现在已经达成了目标,这台主机可以正常内网互通,且使用华数联通的出口。下一步可以考虑使用 mwan3 进一步利用多条宽带。




推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

本文链接:https://hqyman.cn/post/8709.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:
打赏





休息一下~~


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

请先 登录 再评论,若不是会员请先 注册

您的IP地址是: