LOADING

稍等一会会哦 加载过慢请开启缓存 浏览器默认开启

DN42系列教程1——介绍与注册

2023/8/1 DN42

DN42 全称 Decentralized Network 42(42 号去中心网络),是一个大型、去中心化的 VPN 网络。但是与其它传统 VPN 不同的是,DN42 本身不提供 VPN 出口服务,即不提供规避网络审查、流媒体解锁等类似服务。相反,DN42 的目的是模拟一个互联网。它使用了大量在目前互联网骨干上应用的技术(例如 BGP 和递归 DNS),可以很好地模拟一个真实的网络环境。

简而言之,DN42:

  • 不适合单纯想要保护隐私、规避网络审查的用户
  • 不适合在网内消耗大量流量,例如用于解锁流媒体服务的用户
  • 适合想要研究网络技术,练习服务器、路由器等网络设备配置,甚至后续在真实互联网建立 AS 的用户
  • 适合拥有真实 AS,但担心自己配置错误广播出错误路由、干掉半个互联网,希望有个地方测试的用户。

正因为此,使用 DN42 的门槛比较高。就像在真实互联网中一样,你要扮演一个 ISP(互联网服务提供商),注册自己的个人信息,ASN 号码,IPv4 和 IPv6 的地址池,并且使用 BGP 在自己的服务器上广播它们。你还要和其它的用户联系,和他们做 Peering(对接),一步步进入完整的 DN42 网络。

请注意:建立中国大陆到中国大陆以外的跨境 VPN 连接可能违反法律。请自行衡量其中的风险。

DN42 在 172.20.0.0/14 和 fd00::/8 上运行,而这两个 IP 段都是分配给内网使用的。换句话说,你在 DN42 上怎么折腾,都不会影响到服务器其它的互联网连接。

前提条件

  1. 你有一个 Linux 环境(双系统 / 虚拟机 / VPS 都可以)。
  2. 你知道如何使用常见的 Linux 命令(例如 cdls 等),知道在你的 Linux 上安装软件包(aptyum 等),以及会使用至少一个编辑器(图形化的 geditvscode,或者命令行的 vimnano 都可以)。如果你不会,建议先阅读这份教程
  3. 你知道 Git 版本管理工具的基本命令,例如 push/pull/commit。如果你不会,建议先阅读这份教程
  4. 你有一定程度的网络知识,知道 IP、MAC 地址是什么,知道交换机、路由器的工作原理,会在 Linux 下进行基本的网络调试(pingtraceroute 等),听说过 BGP/OSPF 等动态路由协议。如果你不会,建议先阅读这份大纲,并搜索大纲中提到的关键词学习相关知识。
  5. 你有基本的英语阅读能力(用翻译软件也可以)。

注意:请具有最基本的理解能力,否则你可能会给DN42网络中的其他人带去麻烦!!!

你可以通过加入 Telegram 群组 或者 IRC 频道 来寻求帮助。

请注意,DN42 是一个测试网络,所有人都在帮助所有人。即使你不小心搞砸了,也没有人会指责你。

注册流程

再次注意:DN42注册流程可能相对繁琐,这是为了尽可能真实的模拟现实互联网

由于本文无法做到随时更新,仅能保证在本文发布时的时效性,最新的注册流程请参考DN42的官方WIKI

在注册过程中会大量使用到一些 UNIX 工具(如 Git 、 GPG 等),所以最好使用 Linux 或者 macOS 系统完成整个流程,如果你正在使用 Windows 系统,那么可以使用 WSL

1.首先去 https://git.dn42.dev 注册一个账户,打开 dn42/registry 这个账户信息仓库,点右上角的 Fork,把仓库复制一份到你自己的账户

2.然后找到一个地方,新建文件夹,我命名为 dn42,下文 dn42 皆指你创建的这个文件夹,所有操作都将在里面进行

3.此时你应该已经进入了你自己账户里的那份复制,把它 Clone 下来。

4.在 Clone 下的仓库里创建一系列的文件,但是请先注意:

注释 1:Username 应该全大写!像 LONGTIANMU!
注释 2:所有内容严格匹配,前后都不能多 / 少空格
注释 3:务必使用后文提到的查询器生成地址,否则容易撞
注释 4:GPG 签名需要先导入至 git
注释 5:remarks 没什么好写的就可以把 remarks 一整行删掉
注释 6:本文需要大量文本编辑操作,建议使用一个阳间的文本编辑器,否则你会像我一样反反复复出错

5.在 data/mntner 文件夹下创建一个名为 [Username]-MNT 的文件,这个文件代表你的账户,用来认证你以后的操作。一份样例 mntner 文件如下:

mntner:             Username
admin-c:            Username-DN42
tech-c:             Username-DN42
mnt-by:             Username-MNT
source:             DN42
auth:               pgp-fingerprint Key ID
  • mntner:即 maintainer(维护者),说明这个账户的名称,与文件名相同。
  • admin-c:即 admin contact(管理员联系信息),需要指向后续创建的 person 文件,一般为 [昵称]-DN42
  • tech-c:即 tech contact(技术员联系信息),需要指向后续创建的 person 文件,一般也为 [昵称]-DN42
  • mnt-by:即 maintain by(由谁维护),指向这个账户本身,一般为 [昵称]-MNT
  • source:固定为 DN42
  • auth:你的个人认证信息。一般接受两种类型:GPG 公钥和 SSH 公钥。

获取GPG公钥请参考 Github 的教程阮一峰的教程

2.在 data/person 文件夹下创建一个 [昵称]-DN42 的文件,代表你的个人信息。这是一份样例文件:data/person/Username-DN42):

person:             Username
e-mail:             1145141919810@hotmail.com
contact:            QQ/Telegram/Phone
nic-hdl:            Username-DN42
mnt-by:             Username-MNT
source:             DN42
  • person:你的昵称。
  • e-mail:你的邮箱。
  • contact:可选,你的其它联系方式,例如 IRC、Telegram 等。
  • nic-hdl:NIC handle,指向文件本身,与文件名相同,[Username]-DN42
  • mnt-by:maintain by(由谁维护),由谁维护,指向你之前的 mntner 文件,[Username]-MNT
  • source:固定为 DN42

请点击这里,查看DN42网络中的空闲AS号和IPV4/IPV6地址

请点击查询IP CIDR转范围

3.接下来你要给自己选择一个 AS 编号,即 ASN。在国际互联网上,ASN 范围 4200000000 – 4294967294 是被保留作私下使用(private use)的,DN42 占用的就是其中的一块,4242420000 – 4242423999(注意范围是 4000 个,不是 10000 个,剩下 6000 个暂未开放注册) 在这 4000 个号码中挑选一个你喜欢的,并且没有被占用的,然后进入 data/aut-num 文件夹,创建文件。假设我是 AS4242422382, 文件就是 data/aut-num/AS4242422382

aut-num:            AS4242422382
as-name:            Username-AS
descr:              一段描述
admin-c:            Username-DN42
tech-c:             Username-DN42
mnt-by:             Username-MNT
source:             DN42
  • aut-num:AS 号。
  • as-num:AS 的名称,一般只在 DN42 的一些网络结构示意图中看到。可以设置为 [昵称]-AS
  • descr:AS 简介,一般只在结构图中看到,随意填写。
  • admin-c:admin contact(管理员联系信息),指向你的 person 文件,[Username]-DN42
  • tech-c:tech contact(技术员联系信息),指向你的 person 文件,[Username]-DN42
  • mnt-by:maintain by(由谁维护),由谁维护,指向你之前的 mntner 文件,[Username]-MNT
  • source:固定为 DN42

4.IP 选择环节了。进入 data/inetnum 文件夹,里面是所有已被注册的 IPv4 地址块信息。你需要在其中挑选一块空闲的地址块占为己用。以下是注意事项:

和在真实互联网上一样,DN42 的 IPv4 地址资源也是十分紧缺的,因此 IPv4 的申请原则是「够用就好」。如果节点数量足够少,只申请 /28/29 大小的地址块就够用了。

在仓库的 data/inetnum 目录下新建一个文件,命名为 IP 地址块的 CIDR 格式,并使用 _ 代替 /

inetnum:            172.20.0.0 - 172.20.0.255
netname:            Username-IPV4
remarks:            随便写点
descr:              随便写点
country:            CN
admin-c:            Username-DN42
tech-c:             Username-DN42
mnt-by:             Username-MNT
nserver:            ns1.看注释.dn42
nserver:            ns2.看注释.dn42
status:             ASSIGNED
cidr:               172.20.0.0/24
source:             DN42
  • inetnum:你的这个地址块的范围,如果你不会算,那么可以根据你的地址块前后的用户推出,或者直接用 IP 地址计算器
  • netname:你的这个地址块的名称,没什么用,随便取(但一般建议保持 [Username]-IPV4 格式)。
  • remarks:简介,随意填写,不晓得写啥记得去掉一整行。
  • descr:简介,随意填写。
  • country:你的国家代号,填 CN 代表中国大陆。
  • admin-c:admin contact(管理员联系信息),指向你的 person 文件,[Username]-DN42
  • tech-c:tech contact(技术员联系信息),指向你的 person 文件,[Username]-DN42
  • mnt-by:maintain by(由谁维护),由谁维护,指向你之前的 mntner 文件,[Username]-MNT
  • nserver:IP 地址反向解析的 DNS 服务器。如果你不知道这个是什么,或者不需要这个,可以去掉一整行。
  • status:固定为 ASSIGNED
  • cidr:你的地址块的范围,与 inetnum 相同,只是以 CIDR 方式表示。
  • source:固定为 DN42

5.添加你 IPv4 的路由,允许你的 AS 使用你申请的 v4 地址。在 data/route 文件夹创建对应文件,文中假设你的是 data/route/172.20.0.0_24,同前面 IPv4 地址的文件名,事实上 v6 也是如此,IP 与 route 文件名相同。

route:              172.20.0.0/24
descr:              随便写点啥
origin:             AS4242422382
mnt-by:             Username-MNT
source:             DN42
  • route:你的这个地址块的范围。
  • descr:简介,随意填写,不能删。
  • origin:你授权哪个 AS 使用这个地址块,填写你的 AS 编号。
  • mnt-by:maintain by(由谁维护),由谁维护,指向你之前的 mntner 文件,[Username]-MNT
  • source:固定为 DN42

鉴于已经 3202 年了,工信部都说要普及 IPv6 了,而且 DN42 内部 IPv6 普及率 >=100% 了,你也许该顺便注册下 IPv6,和上文 IPv4 两步骤基本相似。

6.注册IPV6地址

在国际互联网上, fc00::/7 是由 RFC4193 定义的 唯一本地地址,而 DN42 占用的就是其中的一块: fd00::/8 。目前 DN42 开放注册的地址块范围可以在 Address Space 页面上查看。

在仓库的 data/inet6num 目录下新建一个文件,命名为 IPv6 地址块的 CIDR 格式,并使用 _ 代替 /

inet6num:           <起始 IPv6 地址> - <结束 IPv6 地址>
cidr:               <IPv6 地址块的 CIDR 格式>
netname:            <IPv6 地址块名称>
descr:              <IPv6 地址块简介>
country:            <IPv6 地址块所属国家>
admin-c:            <NIC 句柄>
tech-c:             <NIC 句柄>
mnt-by:             <维护者>
status:             ASSIGNED
source:             DN42
  • inet6num :这个地址块的范围。
  • cidr :使用 CIDR 格式表示的这个地址块的范围,含义与 inet6num 相同。
  • netname :这个地址块的名称。可以设置为 <昵称>-IPV6
  • descr :(选填)这个地址块的简介。
  • nserver :(选填)IP 地址反向解析的 DNS 服务器。
  • country :你的 ISO 3166 国家代码,填 CN 代表中国大陆地区。
  • admin-c :管理员联系信息(Admin Contact),指向你在 注册联系人 一节中注册的 NIC 句柄。
  • tech-c :技术员联系信息(Tech Contact),指向你在 注册联系人 一节中注册的 NIC 句柄。
  • mnt-by :由谁维护(Maintain by),指向你在 注册维护者 一节中注册的的维护者信息。
  • status :固定为 ASSIGNED
  • source :固定为 DN42

7.为你的 IPv6 地址块添加路由,在 data/route6 创建一个与上面你选择的同名的文件即可。

route6:             fd7a:f946:6722: :0/48
descr:              <IPv6 地址块的 CIDR 格式>
origin:             AS4242422382
mnt-by:             Username-MNT
source:             DN42

8.起来喝口水休息一下,马上搞定了

Git上传你的文件

完成以上步骤之后,使用 git diff 查看文件变动,检查无误后,使用 git add . 暂存。

运行仓库根目录下的 ./check-my-stuff <维护者> 检查文件内容是否有误,确定无误后,提交。

在提交时,如果需要使用 GPG 签名,需要在添加 -S 参数,如 git commit -S ;如果使用 SSH 签名,请直接使用 git commit 进行提交,待提交后再进行签名工作。

签名失败怎么办
这很有可能是因为您没有导入 GPG 密钥到 git。
首先 git config --global user.signingkey 之前创建的Key ID
然后 export GPG_TTY=$(tty)
现在,您应该可以创建了

如果你前面已经 commit 过几次了,你可以执行 git commit *--amend -S* 修改之前的 commit,将其签名。

执行 git push -f 将修改上传到 Git 服务器。

现在,回到 dn42/registry,发起 Pull Request,等待你的信息被合并。

PR 通过后,你就正式拥有自己的地址啦!并且可以和别人 peer!

未完待续。。。