DN42 从入坑到放弃 - Part1 加入DN42
警告:
本人只是一名高三学生,在此之前对于BGP等技术一无所知,因此,本文可能包含但不限于 笔误/错误/小白理解 请大佬勿喷,如果能指正出来那就更好啦
再次警告:
如果您能接受的话,可以继续看下去,如果不能接受,建议现在就关闭此文章
前言
为什么要入坑DN42?
出于对于未来职业可能的考虑,以及对于技术的好奇,我开始在网上搜索关于BGP/Anycast的相关知识,但是为了国际互联网的安全 其实是ASN/服务器太贵了 ,决定先入坑DN42练好技术再上真货 也可能不上了就
什么是DN42?
dn42是一个大型的动态VPN,它采用了互联网技术(BGP、whois数据库、DNS等)。参与者使用网络隧道(GRE、OpenVPN、WireGuard、Tinc、IPsec)相互连接,并通过边界网关协议(Border Gateway Protocol)交换路由。网络地址分配在 172.20.0.0/14 范围内,并使用私有AS号(参见registry),以及使用ULA范围(fd00::/8)的IPv6地址。
——引用自 DN42 Wiki
DN42的初衷是为互联网工作者提供一个用于模拟真实网络环境的沙盒,因此使用 DN42 的门槛比较高。就像在真实互联网中一样,你要扮演一个 ISP(互联网服务提供商),注册自己的个人信息,ASN 号码,IPv4 和 IPv6 的地址池,并且使用 BGP 在自己的服务器上广播它们。你还要和其它的用户联系,和他们做 Peering(对接),一步步进入完整的 DN42 网络。
你能在DN42里干什么?
Do whatever is fun and interesting for you
做任何对你来说有趣和有趣的事情—— burble
加入DN42!
加入DN42的前置要求
-
你至少有一个 24/7 全天候运行的路由器。任何 Linux 或 BSD 设备都可以变成路由器。如果你的家用路由器运行的是 OpenWRT,你可以考虑用它来连接 dn42。
-
您的路由器能够通过互联网建立网络隧道(Wireguard、GRE、OpenVPN、IPSec、Tinc 等)。请注意,您的网络运营商可能会过滤此类流量,例如在学校或大学。
-
您通常对网络和路由有一定了解(例如,您听说过 BGP、IGP、转发,并且愿意配置 BGP 路由器,例如 FRR 或 Bird)
如果您不具备上述能力,您可能在配置过程中出现问题,给DN42中的其他用户带来麻烦。
如何注册DN42的AS
DN42的注册过程比较繁琐,可能需要几天(但是没有注册真实的AS那么麻烦),提交信息(发PR),之后可能会被要求修改几次,耐心配合即可。
本文信息可能随DN42政策的改变而过时,请优先参考DN42的官方注册流程,此处仅为参考。
官方Wiki
注册流程大致如下:
-
在这里注册一个Git账户。这相当于 DN42 内的 GitHub,账户信息就存放在其中的一个仓库里。
-
Frok官方仓库
-
进入你账户里Frok的那个仓库,把它 Clone 下来。
-
去这个网站选择一个你喜欢的IPv4,IPv6以及ASN
你在 DN42 内能申请的最小地址块是 /29,即 8 个 IP,其中除去第一个 IP 标记地址块,最后一个 IP 作为地址块内广播(broadcast)不可用以外,可以分给 6 个服务器和设备。
对于 「只想简单玩玩」 的用户,/29 已经够了。
如果你满足下列一项,那么 /29 不够你用,需要申请更大的地址块:
- 服务器、设备多,超过了 6 个
- 你准备自己配置些 Anycast 之类的,需要占用更多的 IP
- 你使用的一些设备(例如 Mikrotik 路由器),在 Peering(对接)阶段建立隧道时,只能使用 /30 地址块。
- 在后续 Peering(对接)阶段,Linux 服务器可以配置单个 IP 到单个 IP 的隧道。同时,我这端的一个地址可以同时用在多个隧道中,这意味着我可以同时设置任意多的隧道,与任意多的人 Peer,而不需要额外的 IP。
- 但如果你的设备要求使用 /30 地址,意味着一个隧道就需要占用 4 个 IP 地址,并且你这端的地址无法重复使用,比较浪费。
- 此时你需要预留较多的地址,因为 DN42 内物理路由器较少见,与你对接的另一位一般也没有预留这么多地址,这个 /30 地址块需要由你出。
DN42 一般建议申请 /27,你能直接申请的最大地址块是 /26。
-
生成一个 GPG 公钥 或 SSH 公钥(群友推荐SSH)
你必须在 GPG 公钥和 SSH 公钥中添加至少一种。
如果你准备添加 GPG 公钥:- 首先你需要创建一个(如果你之前没有的话),例如参照 GitHub 的这份教程操作。后续提交过程也会用到这个公钥。
- 你还需要将你的 GPG 公钥上传到公共查询服务器,称为 Keyserver。
- 上传步骤请参考阮一峰的这份教程,并将 keyserver 参数替换成 hkp://keyserver.ubuntu.com,例如:
gpg --keyserver hkp://keyserver.ubuntu.com --send-key [密钥ID]
如果你准备添加 SSH 公钥:
- 首先你需要创建一个(如果你之前没有的话)。
- Mac 和 Linux 一般运行 ssh-keygen -t ed25519 即可,但如果你的 SSH 版本特别老不支持 ED25519 密钥,也可以使用 RSA,ssh-keygen -t rsa
- Windows 可以下载 PuTTY,使用其中的 puttygen 工具生成。
- 生成完成后,将公钥(Mac 和 Linux 一般在 ~/.ssh 目录下,名为 id_ed25519.pub 或者 id_rsa.pub;Windows 下 puttygen 会直接在窗口上显示公钥)
- 此外,DN42 上有些服务会以此处的 SSH 公钥来验证你的身份。
提示:
可以阅读 DN42 官方的身份认证 Wiki 页面获取更多信息。 -
想一个全英文昵称,可以是你名字的音译/拼音或其他,总之,必须是全英文且为被DN42中的其他人使用
-
将刚刚的所有信息整合,你有了:Nickname,ASN,IP,IPv6,Key(GPG or SSH),计算出你IPv4的起始与终止IP,你也可以用IP地址计算器算出StartIP,EndIP
-
使用一个你喜欢且能联系到你的邮箱记作 EMAIL,选择一个你喜欢的且能联系到你的联系方式记作 contact
-
假设你已经进入本地clone的目录中,将下面的内容复制到记事本中,使用Ctrl+F全字替换为你自己的信息,然后在Terminal中粘贴。如果不想,也可以将你的信息写入系统变量中,然后直接在Terminal中粘贴,并进行少量修改
1 | Nickname 昵称 |
- 现在,您建立完了所有需要的文件,首先在仓库根目录运行
./fmt-my-stuff 你的mntner名字
格式化您的所有文件 - 然后
git add .
和git commit -S
来签名commit您的更改 - 如果您已经commit了多次,注意DN42的PR只接受单个commit,所以需要运行
./squash-my-commits -S
来扁平化您的commit - 执行
git push -f
将更改推送至服务器,然后去网页上创建PR- 一次注册/信息修改只用发一个PR
- 如果被要求修改,改完并squash了之后直接
git push -f
就行,不用关闭并开新的PR - 发PR用英文
在您的PR被合并之后,您就拥有了自己的AS和地址块,接下来就可以去找人Peer了
参考文献
感谢以下文章对本小白踏入 DN42 提供了巨大的帮助!
DN42 实验网络介绍(2020 版)
BIRD 与 BGP 的新手开场
Multiple servers on dn42: iBGP and IGPs
萌新入坑 DN42 之 —— 多服务器互联