多线分流策略思路讨论及其详解(其一)

2021-06-16 22:31:09 +08:00
 nbsn
宽带症候群节点、路由器节点经常有见大家讨论多线分流的策略,现结合自己的实践经验,谈一下我的实现思路。
思路:应该是实现“目的”的方式,这里定义为企业级方案,和家用级方案。
目的:应该是从需要达到的“目的”去讲实现不同“思路”。目的不同,实现的思路也不一样。按照分流方向,可以分为出访和来访方向。

1. 这里,我尽可能按照大家讨论最多的模式,讨论下:家用方案里面的“出访”方向,需要进行:流量分流和 DNS 分流。

2. 前提:网络环境下,有两条,或者两条以上的宽带,不同运营商的。(相同运营商谈不上分流,仅仅是带宽叠加而已)

3. 技能要求:Linux 技能,中级网络知识,虚拟化操作技能。

4. 需求:分流的场景,按照访问目的地 ip 地址归属运营商,选择本地网络的出口。我采用的是动态导入运营商 IP 地址路由表的方式实现的。
5. 为什么不采用写静态路由的方式?——可扩展性,故障倒换

6. 硬件:多口软路由( x86+虚拟化平台)
7. 软件:OpenWRT (图形) + Bird 插件(命令行),也可以用 R2s,R4s 等硬件平台。

8. 在软路由运行多个 OpenWRT ( Bird bgp )虚拟机,每个虚拟机的上行链路分别连接不同的运营商。我们这里假定有两条宽带 CT,CU,则我只需要两个 OpenWRT ( Bird bgp )虚拟机就可以了。

9. 流量分流预期:
( 1 ). CT 宽带做主力,CU 宽带分流。
( 2 ). 国内访问:访问 CT ASN 内的 IP 地址,走 CT 宽带;访问 CU ASN 内的 IP 地址,走 CU 宽带,剩下的 IP 段(也可将这部分 IP 段再进行细分),默认走 CT 宽带。
( 3 ). 国外访问:OpenWRT 的特殊插件分流国外流量(如果可以,也可分流 nf,hbo 等)

10. 另外一个重要的分流就是 DNS 分流,推荐一个 DNS 分流工具:mosdns 。本站讨论贴: /t/734637
mosdns 开发者网站: https://github.com/IrineSistiana/mosdns

11. 参考我之前写的一篇帖子: /t/781573 请问下 bgp peering 可以收全球 internet 路由表( ipv4 全表)的资源(是一个 Vultr 的 VPS )

12. 通过折腾,我成功实现了接收 bgp 全表,并按照 ASN 的归属,进行分类。

13. 其中 ASN 的归属,从 https://whois.ipip.net/countries/CN 找到全国 ASN 列表,并按照三大运营商( CT,CU,CM ),OTT 运营商( AL,TX,BD,JD etc ),加上剩下的,进行 ASN 列表分类。

14. 分类完成后通过 bgp 策略,给对应 ASN 列表内的 ip 路由打上不同的 community 标记,打上 bgp community 后反射( bgp rr )给连接不同运营商链路 OpenWRT ( Bird bgp )虚拟机,这样,对应链路的虚拟机,就有分流的明细 IP 地址表了。

15. 有了 ipv4 全表的 vps 和两台连接 CT,CU 运营商链路 OpenWRT,就可以搞事情了。三者之间的连接,通过 Zerotier 完成。当三者连接起来后,vps 把打好 community 标记的表发出来,OpenWRT 虚拟机可以选择性的接收:CT-OpenWRT 只接受 CT 的路由表(如果 CT 是主力宽带,这一步也可省略); CU-OpenWRT 只接受 CU 的路由表。

16. 最后实现分流,CU-OpenWRT 需要通过 bgp 将 CU 的路由表,发送给做主力的 CT-OPENWRT 虚拟机(通过 bird 导入 kernal ),在 CT-OPENWRT 虚拟机上实现分流。注意,CT-OPENWRT 虚拟机和 CU-OPENWRT 虚拟机在 Bird bgp 进程上需要下一跳可达( bgp 协议限制)。

17. 在我家里的示例环境中,中间是有一个 L3 交换机的,172.16.11.0 则作为了过渡前置网段,用于调整路由策略等,方便实现试验环境的调试。






18. 用动态路由条目,我只分流 CU 流量,也只增加了 5K 多条路由条目。如果由于 bgp 邻居关系发生变化,路由消失后,也能及时走到 CT 的链路上实现备份。CT 有 6K 多条目,CM 有 14K 多(不知道为什么 CM 发了这么多前缀)



19. 综上所述,根据 ASN 确定 IP 地址的归属,进而去调度出口流量,用 BGP 加策略的方法,我认为是最灵活的。



20. 当然,在 CT-OpenWRT 内网接口上额外的 IP redirect 也会消耗额外流量,在家庭的环境下,也是不能克服的。我也尝试着把 CT 差不多 5K 多的路由注入给家里的 L3 交换机,立马就报 TCAM 满。企业级的解决方案中,核心交换机的 TCAM 足够大,可以通过收部分表的方式实现转发。

写得太多了,待续。。。
3976 次点击
所在节点    宽带症候群
13 条回复
lxll
2021-06-17 00:32:20 +08:00
用路由表分流原理都差不多,要么动态引入然后分类,要么手动导入路由列表。op 玩玩还可以,真要稳定还是上 hw h3c 等专业设备,轻轻松松承载 500k 路由表。PBR 也是个好东西。
lxll
2021-06-17 00:35:03 +08:00
@lxll 另外如果和 VPS 连接断开路由条目消失分流就失效了吧。
onion83
2021-06-17 01:03:07 +08:00
纯 Linux 解决方案:网络层 ipset + iptables + ip 命令 DNS:smartdms
nbsn
2021-06-17 13:13:57 +08:00
@lxll #2 是这样的呀,避免断开之后成为黑洞
Tengwait
2021-06-17 15:19:04 +08:00
其实可以把学来的路由用脚本记下来,然后当静态写入,降低 LP,当 BGP 死了的时候,还有静态路由在,重点是这个静态要定期更新一下,感觉这样会更好
tpsxiong
2021-06-17 16:00:57 +08:00
如果 dns 固定为电信的 国内域名解析到 cu 的 ip 基本少之又少 如果部分域名使用联通 dns 那目的是什么 感觉国内目标 ip 分流基本是伪需求 之前我也折腾分 3 线 wan: iptv cm ct 现在只有国外 ip 分下流了 国内就分 iptv 和普通流量
Laitinlok
2021-06-17 21:40:09 +08:00
@tpsxiong 用 Adguard Home 將电信 DNS 、聯通 DNS 、Google DNS 、Cloudflare DNS 放進去, 然後選擇最快的 IP, 然後再分流用那條寬帶
nbsn
2021-06-18 09:20:27 +08:00
@Laitinlok #7 Adguard Home 做不了的,还是要 mosdns 才行,可以带上 ecs 。
lzyliangzheyu
2021-06-18 11:36:44 +08:00
现在的知识水平还看不懂。。。战略性马克下
carrionlee
2021-06-19 11:30:08 +08:00
我也觉得国内外分流就够了,国内 ip 分流意义不大
bclerdx
2021-06-20 21:28:15 +08:00
@carrionlee 如果鹏博士宽带和三大运营商之间的国内分流,意义就大了。
mowenqing
262 天前
大佬,我想咨询一下现在可以通过 vultr 收 BGP 全表,但是 bird 里面要怎么写才能实现国内走 pppoe 直接出去,国外的走隧道啊。
nbsn
261 天前
@mowenqing 收了全表之后得交给路由器去做分流啊,我是按照 ASN 过滤,把明细发给路由器走本地,然后默认路由指向国外得隧道

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/783828

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX