前言
在经过了 自己在家开运营商 这一系列的本篇和 Ex 后, 我们迎来了 - PH!
在 RIPE ASN 突然涨价/提供 BGP Session 的 VPS 太少/我没实际需求的多重压力下, 我的公网 AS 倒闭了. 取而代之的是 DN42 网络!
1 | dn42 is a large, dynamic VPN that employs Internet technologies (BGP, whois database, DNS, etc.). Participants connect to each other using network tunnels (GRE, OpenVPN, WireGuard, Tinc, IPsec) and exchange routes using the Border Gateway Protocol. |
它大概就是一个微缩版互联网, 参与者也可以注册自己的 ASN 和 IP 段, 在这个 VPN 网络里用 BGP 宣告出去, 并在其中提供服务.
当然, 在我们已经玩过互联网 BGP 的情况下, 没什么必要在 DN42 原样再配一次; 所以我当然也会在 DN42 上整一些(离谱的)新花活!
加入 DN42
DN42 作为一个实验和学习性质的网络, 申请 ASN 与 IP 比互联网容易很多, 还有更详细的资料. 我觉得已经没必要再写了, 在此直接引用, 建议在继续之前先阅读:
整体的接入方式与之前的公网 BGP 类似, 不过有几个差异点:
- 公网 BGP 通常寻找上游或 peer, DN42 里大家几乎只会对等互联 (peer), 但 DN42 的 peer 一般也会发送”全网”路由
- DN42 里我们有很多台 VPS, 需要处理 AS 内的路由与互联
作为初入 DN42 的新人, 我推荐先和支持自动 Peer的某个 AS peer, 比较 i 人友好, 也可以确定自己的配置是对的. BGP 配置可以抄 DN42 网站的 Bird 配置.
以及在 BGP 的处理上, 我们处理的方式类似之前公网的 Anycast: 例如我有 172.20.42.224/27 这个 DN42 IP 段, 我们会在所有加入 DN42 的 VPS 里广播 172.20.42.224/27 整个段.
因为, 在真实的互联网里, 一个 PoP 可能就是一个有很多台机器的机房, 消耗掉一个 /24 的 IPv4 段并不困难. 但在 DN42 里, 我们最小可广播的 IPv4 前缀是 /29, 一台 VPS 自己用掉一个 /29 会造成很多的浪费; 所以, 取而代之的, 我们在所有机器上广播我们的整个 IPv4 段, 等流量进入我们的 AS 后再想办法路由到真正持有对应 IP 的那台机器.
这种配置要求我们的 VPS 符合以下条件 (引用 Lan Tian 博客):
1 | 1. 任何两台服务器都可以互相沟通,即可以 Ping 通。 |
我们暂时选用 2.1 的配置方法, 即 Full mesh. 在所有 AS 内的 VPS 两两间建立 P2P 的 Wireguard 和 BGP 会话.
可惜 DN42 的规模和基建远不如互联网, 没有一些公开好用的测试工具. 配置完成后, 可以尝试加入相关 TG 群, 群内会有一些 Ping bot, 可以用来测试自己的网络是否已经可达了.
没问题后就可以加入 IRC 或者各种群, 与群友 peer 以提供自己网络的 connectivity~ (我总觉得这挺像是某种赛博通联的)
NixOS!
之前, 我已经使用了 Ansible 来管理我的 HomeLab 和 VPS, 当时也考察过 Nix, 但由于 HomeLab 的 PVE 不适合 Nix 没有采用.
后面由于 VPS 变更频繁, Ansible 部署确实有点慢了, 正好借此契机, 我决定将我所有 VPS 都装上 NixOS (反正 VPS 没啥业务炸了也没事), HomeLab 保持不变.
我的配置方式是直接在原厂系统使用 reinstall 这个脚本把系统 dd 成 NixOS stable, 随后再用 colmena 部署真正的 Nix Flake 配置.
什么? 你问我 Nix 代码怎么写?
当然是… 让 AI 写. 没错, 由于我的 VPS 并不太重要, 我也不想再深入学 Nix 这个有点偏门的语言, 我偷了个大懒: 我直接 prompt copilot 让它帮我把原本的 Ansible playbook 改写成了 Nix. 效果整体来说还行, 改了几版就能跑, 除了 Vibe coding 产生了一些比较恶心的__山以外, 我还算快速的达成了目标: https://github.com/lyc8503/infra. 各位想知道我的配置也可以直接去看.
我也非常真诚和负责(存疑)的在 README 开头就加了 AI Content Warning. 未来我也会为我所有主体由 AI 生成的代码加上 CW.
有一说一, NixOS 其实还挺适合 AI 的, 毕竟就算搞砸了, 你可以很有信心的 git reset 然后重新部署就能恢复.
小结
暂时把我的 DN42 网络 AS4242420167 搭建起来了, 不过由于其规模较小, 感觉能玩的也不是很多. 但至少算是整合了我散落的 VPS 资源成了大内网, 现在我有了一个弥散在世界各地的数据中心了, 也在群里 Peer 了不少群友.
作为一个实验性网络, 我不会去优先考虑它的可用性, 而是看看怎么整点有趣的, 在别的地方没法整的活.
一些(可能的) TODO:
- [DONE] Self-host 各种服务, 尽量不依赖第三方 (例如 DNS/邮件)
- 公开的 Shell 访问
- Peer 信息页及自动化 Peer
- [WIP] 部署自己 C++ 手搓的 DNet 网络栈
- 优化一下目前的 Full mesh 连接
遇到有意思的应该会在后续的博客继续分享.
本文采用 CC BY-NC-SA 4.0 许可协议发布.
作者: lyc8503, 文章链接: https://blog.lyc8503.net/post/dn42-1-join/
如果本文给你带来了帮助或让你觉得有趣, 可以考虑赞助我¬_¬