今天Telegram群里讨论了不少东西,而且数据面的方案也有了新的想法,记录一下。
SSID命名投票
之前一直纠结SSID到底叫什么,是FadianRoam(大写R)还是fadianroam(全小写)还是fadian_roam(下划线),所以直接在群里开了个投票。
结果出来了:
- FadianRoam — 60%(3票)
- fadianroam — 40%(2票)
- fadian_roam — 0%
- Other — 0%
所以就定了,SSID统一用 FadianRoam,大写R。

数据面方案:选了方案B
上一篇蓝图笔记说了两个方案还在纠结,今天想清楚了,倾向方案B(内部环回 + 归属路由)。
之前方案B的描述比较简单,现在完善一下设计:
核心思路
FadianNet所有站点强制BGP,没有BGP就不能成为FadianNet的骨干节点。大家用自己的ASN通过eBGP互联,组成一个虚拟的BGP骨干网。每个站点分配一个内部环回IP(类似OSPF的Loopback),/32路由在骨干网内通过Regional RR传播。
用户漫游之后,流量路由回自己的归属站点上网——就是你注册在哪个站点,流量就回到哪个站点出网。
FadianNet 骨干网(eBGP mesh)
│
├── 站点 A (AS204921) ← 自有互联网出口
│ ├── FadianRoam AP(自有用户 → 在 A 出网)
│ └── 非BGP站点 X(挂在 A 下面 → 也在 A 出网)
│
├── 站点 B (AS65001) ← 自有互联网出口
│ └── FadianRoam AP(自有用户 → 在 B 出网)
│
└── 站点 C (AS65002) ← 自有互联网出口
└── FadianRoam AP(自有用户 → 在 C 出网)
漫游场景
场景1:站点A的用户跑到站点C连WiFi → 认证通过 → 数据从站点C走FadianNet骨干网回到站点A出网
场景2:非BGP站点X(挂在站点A下面)的用户跑到站点B连WiFi → 认证通过 → 数据从站点B走FadianNet骨干网回到站点A(赞助者)出网
举个真实的例子
拿国内的场景来说(为什么都是境外出口?因为中国大陆没有IP Transit服务):
站点 A(北京,自有 AS)→ VPN到日本Transit出网
站点 B(上海,自有 AS)→ VPN到韩国Transit出网
站点 C(北京,无BGP)→ 由A赞助,VPN连到A的北京PoP出网
正常使用:A在北京上网走日本Transit,B在上海上网走韩国Transit,C在北京上网通过A走日本Transit。A和B之间通过FadianNet的eBGP交换路由,所以A可能某些路由会选择走B的韩国出口,反之亦然——这就是正常的BGP路径选择。
A跑到B家里了:A的手机在B家连上FadianRoam的WiFi,认证通过(B的RADIUS → Federation Relay → A的RADIUS验证),然后数据流量漫游回A的北京站点,从日本Transit出网。当然BGP路径选择可能会让部分流量走B的韩国出口——这种绕路在默认组网下是正常的,可以通过路由策略精细调整,但完全避免是做不到的,我觉得也是合理的。
C跑到B家里了:认证走C自己的MGMT VPN到Federation Relay(每个FadianRoam Site都有自己独立的MGMT VPN),但是数据流量漫游回A(C的赞助者),从A的日本Transit出网。注意这里认证和数据走的是不同的路径——认证到C,数据到A。
为什么选方案B?
方案A(共享/24 Anycast)虽然延迟低,但需要sponsor一段/24前缀,还要搞RPKI多AS ROA,依赖性太强。方案B每个站点用自己的资源,强制BGP确保骨干网质量,而且流量统计很清晰——谁的用户谁的出口,一目了然。
当然方案B的缺点也明确:漫游延迟高,跨区域流量成本大。但对于社区网络来说,这个代价可以接受。两个方案都还在Blueprint上保留,欢迎讨论。
非BGP站点怎么加入?
这个是今天新设计的,跟RIPE的LIR/Enduser模型很像(只是类比,不是实际命名):
没有BGP的站点不能直接加入FadianNet。要参与FadianRoam,你需要找到你所在地区最近的一个FadianNet + FadianRoam站点作为赞助者,然后:
- 赞助者同意提供FadianLink连接
- 赞助者代你提交申请PR到联盟投票
- 联盟投票(>50%,3天)——赞助者为你担保
- 通过后,你通过FadianLink连接到赞助者,部署FadianRoam AP
你的所有用户流量都会通过FadianNet骨干网漫游回赞助者的出口上网。就像你是赞助者下面的一个"Enduser"一样。
464XLAT:没有公网IPv4也能玩
weitcis(KO6BBG / AS200825)提了一个很有意思的想法:如果站点没有公网IPv4,可以用464XLAT来解决。
简单来说464XLAT就是在IPv6-only的网络上跑IPv4,客户端把IPv4包装进IPv6(CLAT),服务端再解开(PLAT)。这样就算你的站点只有IPv6,用户设备照样能访问IPv4的互联网。
Peering的热情
群里好几个人都在问peering的事,看起来大家对互联还挺积极的:
- 有人在CYVR、KSEA有节点
- RJTT也有人想peer
- 还有人在搞cloud init自动化部署公钥到服务器上
不过Yuuta(AS142281)问了个现实问题:在中国跑BGP是不是没法搞?这个确实是个问题,国内运营商环境比较特殊,不是随便就能起BGP的。

关于国内Peering
有人问FadianRoam的BGP出口都是国外的,那用FadianRoam上网就是走FadianNet的BGP Sites出去,像隧道一样?
是这样的。FadianRoam完全是一个国际化的项目,FadianNet的骨干网是各个BGP站点对外互联组成的虚拟网络。FadianRoam Site接入FadianNet就是使用FadianNet的BGP组网。流量通过骨干网漫游回你的归属站点出网,归属站点在哪里,你的出口就在哪里。

RADIUS Proxy
群里还提到了一个接下来要研究的事:怎么做RADIUS proxy。这是FadianRoam的核心功能——当你在别人的站点连WiFi,本地RADIUS要把你的认证请求代理到你的Home Site去验证。这个Federation Relay的配置还需要大家一起研究完善。
最后
社区越来越活跃了,有人说「越来越好玩了」,确实是。从一开始就我一个人在想,到现在群里有好几个AS holder在讨论架构和peering,这种感觉挺好的。
欢迎更多人加入讨论:https://t.me/+WLLU-KOXcQFiMTg1
本人患有注意力缺陷多动障碍(ADHD),在语言组织和长文写作方面存在困难,因此使用 AI 辅助总结和表述本文内容。如遇错误或有建议,欢迎在评论中提出。本文已经过发布者审核。
评论