首先我承认这标题我标题党了,其实 SD-WAN 和本文内容基本没啥大关系

主要还是因为,太多的广告都告诉大家「SD-WAN」可以用来做一些奇奇怪怪的事情,变成了新一代 VPN 的代名词。

起因

看到有人在卖接入了「前海IX」的香港 VPS 产品。卖点是:与国内各大云服务商内网连接。
因为对云服务商来说,买3大运营商的 IP Transit 成本远高于自建大内网,所以对于 IX 这种几乎不要钱的端口,自然是往大内网全网发表了。

因此心生一计:如果用「前海IX」加持的 VPS 和国内近期热门的轻量级 200M 带宽服务器结合,不就是超低成本人人都玩组网了吗?
同时由于云服务商的大内网,同时可以部署多个节点,例如上海、北京、成都,供用户就近接入以白嫖云服务商的内网获得更好的使用体验
同时,这样不就可以通过一路转发,来使用 ChatGPT 和其他 AI 工具了吗?

Prerequisite 先安排一波消费

  1. 购买了一台「前海IX」加持的 VPS,消费 ¥129.00
  2. 购买了两台轻量级,能跑 200M 的云服务器,消费 ¥80.00

架构

组网

掏出你喜爱的隧道工具,包括但不限于 GRE/IPIP/WG 或者其他,尽量是能跑 TAP,直接启动互联地址 + BGP 以宣告内网IP路由。

组网架构

首先把网络中的“路由器”分为3类:

  • 接入机:例如家里的 Ubuntu 路由器
  • 转发机:云服务商的轻量服务器、「前海IX」VPS
  • 网关/NAT机:新加坡的VPS

图中每个节点之间都安排不同的 ASN,通过 eBGP 方式传递路由(发路由简单明了)
同时在家里接入北京、上海两地接入点,如遇到单点故障,可以通过 BFD 来自动切换线路。
最后给每台“路由器”安排一个 /32 的 loopback 地址:

对于接入机,内网通过 NAT 到 loopback 地址并发送 loopback 地址的路由,
保证路由高可用(即上海/北京设置优先级后,高优先级连接断开,自动切换到低优先级线路,保证持续可用)

同时这个 loopback 地址又可以作为网络中所有路由器的管理地址,
最后网关、NAT主机只需要 NAT loopback地址和内网被标注为「内网业务地址」所在的地址段,
即可保证内网所有主机均可通过它访问特定的服务。

发布路由

例如:在新加坡 VPS 发布 chatgpt 的路由,全网学到后,全部通过新加坡出口访问。新加坡出口返回包学的路由有2种:

  1. loopback 地址 / 如图 100.99.88.10/32
  2. 某个边缘网络的内网地址段 / 如图 192.168.88.0/24

这些地址都通过特定的 community 在网络中传播。保证任何转发节点不能被一些无关路由污染而导致转发失败或断网。

接入

掏出你喜爱的隧道工具,比如 Wireguard,接入2台云服务器,为什么需要2台呢,虽然这是手搓网络,但是还是讲究高可用的。

问我「前海IX」怎么高可用?再找第二个 vendor 再买一台啦

配置 bird 来启动 BGP 路由,设置距离自己近的接入点为优先接入点。

转发

设计2个 community 来转发不同类型的地址前缀:

  • 内网地址 / Loopback 地址:需要让全网都有路由。图中 community 为 123:10
  • 指定出口吸收流量:例如走新加坡访问 chatgpt,此时需要把路由传播给需要的终端以实现路由调度。 图中 community 为 123:1

其他不携带指定 community 的路由均以丢弃处理,
我们无法控制云服务商、前海IX的 VPS 服务商是否会分配一些内网IP地址来影响路由转发或造成内网IP地址的重复,所以通过 community 来限制仅有选定的路由可以被转发以保证内网不漏路由也不被其他不需要的路由污染。

牵引路由选择

为了保证有较高的可靠性,在有多个类似的“新加坡VPS”的落地机时,可以通过发布不同的 community 如 123:1, 123:2 …来标记不同出口的牵引路由,在前海IX的主机设置相关优先级以自动选择主用和备用路由出口。