踩坑DN42 p1 注册
这篇文章可能会存在不精确、错误、过时等问题。遇到时请务必留言给喵喵修改!!
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也不是不行,但…)
那么,让我们开始吧!
注:接下来的所有FOO
或WYCHLW
请替换为你自己的用户名,其它的参数也记得替换成你自己的!!
克隆仓库
-
首先你需要去在DN42的git上注册你的账号
-
然后clone DN42的仓库
git clone https://git.dn42.dev/dn42/registry.git
-
新建一个branch,以<日期>-
/<分支名>命名,例如
1 | git checkout -b wychlw-20210303/register |
注册信息
然后你需要在这个新的branch里创建一系列的文件并填上自己的信息
注意!在接下来的文件里项目的名称和值之间有一长串空格,空格的长度不能自定!!要求是名称+冒号+空格的字符数为20
创建maintainer
maintainer,即维护者,代表了你的账户
需要注意!!这里需要你的PGP密钥来验证身份生成教程可以去看另外的文章
创建 data/mnter/FOO-MNT
,并向其中写入以下信息:
1 | mntner: FOO-MNT |
- 其中的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 | person: <你的昵称,如Ling Wang> |
- nic-hdl必须以
-DN42
结尾,而mnt-by指向你刚刚创建的mnter文件 - 其中e-mail是必需的
- 如果你想的话,也可以添加其它的信息,例如:
1 | twitter: example |
等等。
需要注意!以上信息都会被公开!
orgination
喵喵在这里大胆的假设一下,应该没人会注册一个组织吧…当然还是把模板放在这里啦~
创建 data/organisation/ORG-<你的组织名>
,然后:
1 | organisation: ORG-FOO |
注册ASN号
国际互联网中预留了ASN,范围是4200000000-4294967294,而DN42使用了其中的4242420000-4242423999 **(只到3999,剩下的还未开放注册!!)
挑选一个喜欢且没有被别人占用的,例如AS4242423410(这个是喵喵的!)
创建文件 data/aut-num/AS4242423410
然后填入以下内容:
1 | aut-num: AS4242423410 |
当然,假如你有自己的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 | inet6num: fdf6:0774:73c3:0000:0000:0000:0000:0000 - fdf6:0774:73c3:ffff:ffff:ffff:ffff:ffff |
- inet6num是你IP池的范围
- cidr就是你的IP前缀,用cidr的形式填写
- netname是显示在网络结构中的名字,一般名字加-NETWORK
- descr是该地址池的简介,随便填可以
- nserver指IP地址反向解析的ns服务器的地址,不知道或不使用可以直接删掉
IPv6 router
router是用来授权某个AS使用这个地址池的对象
在例如 data/route6/fdf6:774:73c3::_48
处创建文件,然后填写以下内容:
1 | route6: fdf6:774:73c3::/48 |
- 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 | inetnum: 172.20.41.48 - 172.20.41.63 |
然后, data/route/172.20.41.48_28
里面:
1 | route: 172.20.41.48/28 |
域名以及DNS(非必须)
由于现在使用DN42的人还是很少,你应该能很简单找到自己中意的域名
当然这一步不是必需的,你可以选择以后再来做这一步
DN42内部的域名以*.dn42*结尾。
而关于DNS解析,你要自己建立自己的权威DNS解析服务器(如使用Power DNS,喵喵大概也会发篇这个的博客?)
创建 data/dns/wcysite.dn42
然后填写:
1 | domain: wcysite.dn42 |
- nserver就是你的权威域名解析服务器以及地址喵~
发起PR
首先,你应该用自带的脚本格式化并检查一下文件是否正确
1 | fmt-my-stuff <FOO>-MNT |
接下来, 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里面了喵
未完待续…