这篇文章可能会存在不精确、错误、过时等问题。遇到时请务必留言给喵喵修改!!

DN42简介

DN42(Decentralized Network 42)是一个虚拟的去中心化的网络。其中的节点用VPN相连。网络中使用了大量现代互联网采用的技术,如BGP、DNS等。
可以说,它模拟出了一个小型的全球互联网。

需要注意的是,DN42并不提供匿名化、规避审查的服务
它更像一个用来在加入现实互联网之前进行练手和测试的网络。(或者学习怎么破坏半个互联网不要

在DN42里,你要像现实中一样去在互联网分配机构(如ICANN)注册你的AS、IP地址池等,并搭建BGP服务然后和别人进行peer来加入网络。

唯一和现实的区别嘛…不用交一大笔钱!

整个DN42的地址池在172.20.0.0/14与fd00::/8上,均为内网地址,因而哪怕你把整个DN42的网络炸掉,也不会对现实网络产生影响(千万千万不要故意这么做!!!)

注册流程

在喵喵体验下来,整一个注册流程还是比较简单的,应该可以在几小时内完成。但是如果你的注册中有错误的话,由于时差的关系,每一天才能进行1RTT,这就非常耗时了。

官方的流程指导在这里,DN42的仓库在这里(需要注意,git是必须注册后才能看到的)

另外由于文件名中会出现 * : : / * 等Windows不允许的符号,请务必在Linux、Mac OS环境下运行(虚拟机/WSL就okk)
(BSD也不是不行,但…)

那么,让我们开始吧!

注:接下来的所有FOOWYCHLW请替换为你自己的用户名,其它的参数也记得替换成你自己的!!

克隆仓库

  • 首先你需要去在DN42的git上注册你的账号

  • 然后clone DN42的仓库
    git clone https://git.dn42.dev/dn42/registry.git

  • 新建一个branch,以<日期>-/<分支名>命名,例如

1
2
git checkout -b wychlw-20210303/register
git push --set-upstream origin wychlw-20210303/register

注册信息

然后你需要在这个新的branch里创建一系列的文件并填上自己的信息

注意!在接下来的文件里项目的名称和值之间有一长串空格,空格的长度不能自定!!要求是名称+冒号+空格的字符数为20

创建maintainer

maintainer,即维护者,代表了你的账户

需要注意!!这里需要你的PGP密钥来验证身份生成教程可以去看另外的文章

创建 data/mnter/FOO-MNT ,并向其中写入以下信息:

1
2
3
4
5
6
mntner:             FOO-MNT
admin-c: FOO-DN42
tech-c: FOO-DN42
mnt-by: FOO-MNT
auth: pgp-fingerprint 0123456789ABCDEF0123456789ABCDEF01234567
source: DN42
  • 其中的mnter就是你的账户
  • admin-c和tech-c代表了管理员和技术员,指向了接下来要创建的person。当然,你可以让这是两个人,自行更改即可。
  • auth这里填你GPG签名公钥的指纹。当然你也可以用SSH密钥,设置方法可以看官方文档。需要注意,SSH与GPG至少要有一种!
  • GPG可以看喵博客里的另一篇文章,(如果没有就是喵喵咕了())SSH…Google一下肯定有教程的

上传你的公钥到keyserver

建议将其上传到 hkp://pool.sks-keyservers.net ,喵之前用了另外一个keyserver,结果管理员那边说找不到
gpg --send-keys [密钥ID] --keyserver hkp://pool.sks-keyservers.net

创建person

person,就是个人信息。这里需要填的信息比起现实来说少了许多(只要一个邮箱),现实中还会需要个人/公司的真实身份等

创建 data/person/FOO-DN42 ,并向其中写入以下信息:

1
2
3
4
5
person:             <你的昵称,如Ling Wang>
e-mail: foo@example.com
nic-hdl: FOO-DN42
mnt-by: FOO-MNT
source: DN42
  • nic-hdl必须以 -DN42 结尾,而mnt-by指向你刚刚创建的mnter文件
  • 其中e-mail是必需的
  • 如果你想的话,也可以添加其它的信息,例如:
1
2
twitter:            example
qq: 12345678

等等。
需要注意!以上信息都会被公开!

orgination

喵喵在这里大胆的假设一下,应该没人会注册一个组织吧…当然还是把模板放在这里啦~

创建 data/organisation/ORG-<你的组织名>,然后:

1
2
3
4
5
6
organisation:       ORG-FOO
org-name: Foo Organisation
admin-c: FOO-DN42
tech-c: FOO-DN42
mnt-by: FOO-MNT
source: DN42

注册ASN号

国际互联网中预留了ASN,范围是4200000000-4294967294,而DN42使用了其中的4242420000-4242423999 **(只到3999,剩下的还未开放注册!!)

挑选一个喜欢且没有被别人占用的,例如AS4242423410(这个是喵喵的!)
创建文件 data/aut-num/AS4242423410 然后填入以下内容:

1
2
3
4
5
6
aut-num:            AS4242423410
as-name: AS for WYCHLW Network
admin-c: WYCHLW-DN42
tech-c: WYCHLW-DN42
mnt-by: WYCHLW-MNT
source: DN42

当然,假如你有自己的AS号的话,(是大佬!留个言教喵喵呜~!)你可以使用自己的AS号(当然需要在PR里说明一下)。
但是这么做会带来一些问题:DN42使用的VPN网络,一般默认使用ASN的后五位,所以你在和别人peer的时候,可能会需要多几轮RTT进行协商了

喵喵并没有自己真实的ASN号,于是…并不知道用真实ASN注册的流程。可能的话务必告诉喵喵,喵喵补充一下

选择你的IPv6地址

这都2021了,当然得来IPv6咯

DN42内的IPv6处于fd00::/8之内,一般来说,每个人的地址块大小为/48,大概你一辈子也用不完。

一般而言,选取IPv6遵循随机生成的原则。你可以使用这个工具来生成一个前缀,然后截取/48的部分

当然要是你执意要自己定(例如1919810之类的),也不是不可以。但是要注意,由于DN42的网络与其它的一些相似的网络(如Neo network)相互peer,你的IP可能会和其它人的重合,然后,BOOM。
(于是,非常不建议喵)
(毕竟可以取一个自己喜欢的域名解析上去就行了喵)

data/inet6num/<你IP前缀的最简形式>+_48 建立文件,如 data/inet6num/fdf6:774:73c3::_48 ,并填写以下内容(自行更换喵):

1
2
3
4
5
6
7
8
9
10
11
inet6num:           fdf6:0774:73c3:0000:0000:0000:0000:0000 - fdf6:0774:73c3:ffff:ffff:ffff:ffff:ffff
cidr: fdf6:774:73c3::/48
netname: WYCHLW-NETWORK
descr: Network of WYCHLW
admin-c: WYCHLW-DN42
tech-c: WYCHLW-DN42
mnt-by: WYCHLW-MNT
status: ASSIGNED
source: DN42
country: cn
nserver: ns1.wcysite.dn42
  • inet6num是你IP池的范围
  • cidr就是你的IP前缀,用cidr的形式填写
  • netname是显示在网络结构中的名字,一般名字加-NETWORK
  • descr是该地址池的简介,随便填可以
  • nserver指IP地址反向解析的ns服务器的地址,不知道或不使用可以直接删掉

IPv6 router

router是用来授权某个AS使用这个地址池的对象

在例如 data/route6/fdf6:774:73c3::_48 处创建文件,然后填写以下内容:

1
2
3
4
route6:             fdf6:774:73c3::/48
origin: AS4242423410
mnt-by: WYCHLW-MNT
source: DN42
  • origin填写的就是你上面注册的ASN号

你可能还会想要个IPv4?

写在前面:IPv4非常!非常!非常!珍贵,哪怕是在DN42里。所以不要申请过多的IPv4地址

一般来说,/29有6个可用地址,是完全够自行摸索DN42的了。要是不够的话,/28的14个是完全够用的了。尽管DN42默认分配给你/27,但为了这个网络的可持续发展(而且你以后还可以扩展自己的地址池的!),从少吧还是。

DN42默认能直接给你分配的最大地址是/26,这已经允许你拥有62个可用IP了…

要是你真的需要超过了上面的那个数字的话…你该不会是要把整个公司接入DN42吧?!

总之这个时候,你需要去DN42的IRC频道其中的public Internet里面 或者 这里面的邮件列表进行详细说明来让大家进行投票同意。

总之尽量少申请IPv4地址!
然后比如你现在想要申请一个/28的IP地址,而可用列表(地址在下面)里没有的话,不要申请一个/27,而是把/27分成两个/28,申请前面的部分!(from DN42官方)

总之,你可以在这里看到并选取剩余的IP地址

然后和上面IPv6的流程基本一样,依然举例:
(等等突然想到提醒一下,记得把东西换成自己的呀!)
data/inetnum/172.20.41.48_28 里面填写:

1
2
3
4
5
6
7
8
9
10
inetnum:            172.20.41.48 - 172.20.41.63
cidr: 172.20.41.48/28
netname: WYCHLW-NETWORK
admin-c: WYCHLW-DN42
tech-c: WYCHLW-DN42
mnt-by: WYCHLW-MNT
status: ASSIGNED
source: DN42
country: cn
nserver: ns1.wcysite.dn42

然后, data/route/172.20.41.48_28 里面:

1
2
3
4
route:              172.20.41.48/28
origin: AS4242423410
mnt-by: WYCHLW-MNT
source: DN42

域名以及DNS(非必须)

由于现在使用DN42的人还是很少,你应该能很简单找到自己中意的域名

当然这一步不是必需的,你可以选择以后再来做这一步

DN42内部的域名以*.dn42*结尾。

而关于DNS解析,你要自己建立自己的权威DNS解析服务器(如使用Power DNS,喵喵大概也会发篇这个的博客?)

创建 data/dns/wcysite.dn42 然后填写:

1
2
3
4
5
6
7
domain:             wcysite.dn42
admin-c: WYCHLW-DN42
tech-c: WYCHLW-DN42
mnt-by: WYCHLW-MNT
nserver: ns1.wcysite.dn42 172.20.41.49
nserver: ns1.wcysite.dn42 fdf6:0774:73c3:53::1
source: DN42
  • nserver就是你的权威域名解析服务器以及地址喵~

发起PR

首先,你应该用自带的脚本格式化并检查一下文件是否正确

1
2
3
fmt-my-stuff <FOO>-MNT
check-my-stuff <FOO>-MNT
check-pol origin/master <FOO>

接下来, git add . 添加文件,然后,使用PGP或SSH密钥签名commit
执行 git commit -S -m "内容"
(假如没有GPG密钥的话…用SSH签名了只有)

假如你commit了多次的话,运行根目录下的脚本
./squash-my-commits -S --push

由于可能在你操作的期间有别人的更新,可以执行以下命令

1
2
3
4
git fetch origin master
git checkout wychlw-20210303/register
# 保留第一行的 pick,将之后的 pick 全部改成 squash
git rebase -i -S origin/master

然后 git push -f 上去,最后检查一遍有没有错误之后,发起PR等待别人merge(记得用英文喵)

加入有错的话,管理者会在PR下面回复你,这个时候按照要求改好之后直接push,新的更改会被自动merge到PR里面了喵


未完待续…