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 | # ip route |
那既然 Linux 拥有这么多路由表,那么究竟是哪一张表在起作用呢?这就要引出规则的概念,通过 ip rule
命令可以查看本机的路由表规则,默认的规则应该如下。这个结果应该非常容易看懂,最前面的数字代表规则的优先级,本机的所有数据包转发均依次匹配 local、main、default 三张路由表。
1 | # ip rule |
实现
现在在整理一下路由表和规则的概念:路由表负责匹配路由,而规则决定使用哪张路由表。我们很容易产生一个思路来实现我们的目标:新建一个路由表,这个路由表的默认路由从华数联通走,并新建一个规则,对于我们需要的指定主机让他使用这个路由表进行匹配。OpenWrt 22.03
的 LuCI 界面已经实现了这两个功能。
现在在那台指定的主机上测试外网 IP 应该可以看到已经变为华数联通的 IP,这证明我们的策略路由配置成功了,但是也随之而来一个问题,这台主机无法访问 main 路由表中的那些内网静态路由条目,因为针对刚刚配置的路由规则,这台指定的主机使用的是我们刚刚新建的 ID 为 4837 的路由表,而这个路由表中没有那些针对内网的静态路由。最简单的实现办法便是在 4837 路由表中在添加一遍 main 路由表中的项目,但是这样也太不优雅了。有没有什么办法可以融合 main 路由表和 4837 路由表呢,例如让 4837 表继承 main 路由表的项目,或是匹配 4837 表的默认路由其他路由使用 main 表。
这里需要使用一个 “前缀抑制” 功能,目标是使该规则不匹配指定路由表中的指定前缀。在刚刚新建的规则之前,再新建一个规则,让指定的主机先匹配 mian 路由表,然后设置前缀抑制为 0,那么其意思就是不匹配 main 表中默认路由,但是匹配其他路由条目,若这些路由条目都没有匹配中,那么则命中下一条规则,即匹配 4837 表。
现在已经达成了目标,这台主机可以正常内网互通,且使用华数联通的出口。下一步可以考虑使用 mwan3 进一步利用多条宽带。
推荐本站淘宝优惠价购买喜欢的宝贝:
本文链接:https://hqyman.cn/post/8709.html 非本站原创文章欢迎转载,原创文章需保留本站地址!
休息一下~~