接上文DN42全攻略-part1-注册gitea。(刚发现这篇文我咕咕咕了3年……)
另外,可以阅览gitea上的指引(英文)
需要注意的是,因为包含需要执行脚本的步骤,这篇文章里面的内容最好在Linux环境下实施。
创建fork
在gitea的网页上,点击右上角的“派生”(fork),你就可以创建一份属于你的分支。

然后,在终端里面操作,将整个库下载下来到本地。
git clone git@git.dn42.dev:<gitea用户名>/registry.git
克隆到本地之后,就可以进入registry文件夹进行修改文件了。

注册身份
可以阅读英文原文,我在这里简要的用中文进行简单介绍。必要的项目一共有3个
维护人
维护人项目位于data/mntner/,名称格式是<名称>-MNT,参考内容如下:
mntner: FOO-MNT
admin-c: FOO-DN42
tech-c: FOO-DN42
mnt-by: FOO-MNT
auth: pgp-fingerprint 0123456789ABCDEF0123456789ABCDEF01234567
source: DN42
这里需要特别注意的是auth,上一篇文章里面提到过需要创建一个pgp密钥对(什么?已经是3年前了?!咕咕咕),这是用来对以后进行任何变化操作,或者是向其他AS的管理员证明你是你用的。(比如说各种自动peer系统)
FOO-DN42是指某个联系人项目,下一步我们就要创建这个项目。
这个文件有更多的参数,具体可以看看其他人的文档,或者上网搜搜,这东西写法是完全照搬互联网上的。
联系人
联系人项目位于data/person/,名称格式是<名称>-DN42,参考内容如下:
person: John Doe
e-mail: john.doe@example.com
nic-hdl: FOO-DN42
mnt-by: FOO-MNT
source: DN42
nic-hdl的内容就是文件名,根据社区要求,必须以-DN42结尾。可以加其他的联系方式,用contact:字段标注就行。也可以独立地加签名的公钥。
组织(可选项)
如果你打算以个人身份玩的话,就不需要创建这个项目。项目位于data/organisation/,名称的格式是ORG-<名称>。参考内容如下:
organisation: ORG-FOO
org-name: Foo Organisation
admin-c: FOO-DN42
tech-c: FOO-DN42
mnt-by: FOO-MNT
source: DN42
大概看懂了吧?里面的字段可以索引到另外一个项目。一切就连起来了。
AS号
AS号项目位于data/aut-num/,名称格式是AS<AS号>,参考内容如下:
aut-num: AS4242423999
as-name: AS-FOO-DN42
admin-c: FOO-DN42
tech-c: FOO-DN42
mnt-by: FOO-MNT
source: DN42
aut-num的内容和项目名称一样,as-name可以随意写,不一定要以-DN42结尾。想要加其他内容的时候,可以看看其他人写的酷炫内容。
ipv4地址块
ipv4地址的申请被标注为legacy,不过从目前来看还是没法完全丢掉的,所以还是强烈建议申请一个。在刚才提到的简单的服务里面挑一个/27,然后创建指定对应的项目:
ipv4地址块项目位于data/inetnum/,名称格式是<子网地址>_<掩码长度>(就是cidr里面的斜杠换成下划线),参考内容如下:
inetnum: 172.20.150.0 - 172.20.150.31
cidr: 172.20.150.0/27
netname: FOO-NETWORK
descr: Network of FOO
country: XD
admin-c: FOO-DN42
tech-c: FOO-DN42
mnt-by: FOO-MNT
status: ASSIGNED
source: DN42
ipv4路由目标
在注册ipv4地址块的时候,我们需要同步创建路由目标。这个东西是用来生成ROA记录的,ROA记录可以让其他人通过rpki快速校验一条路由是不是由正确的AS发布。现在各大AS通常会拒绝rpki校验无效的路由,接受有效或者未知的路由,不过也有的只接受rpki校验有效,拒绝校验无效或者未知的路由(比如我)。
ipv4的路由目标项目位于data/route/,名称格式参考ipv4地址块,参考内容如下:
route: 172.20.150.0/27
origin: AS4242423999
max-length: 27
mnt-by: FOO-MNT
source: DN42
注意这里的示例申请了一个172.20.150.0/27的地址块,然后创建了172.20.150.0/27的路由目标,路由目标限定了只通告172.20.150.0/27的路由,如果是更长的长度,可以修改max-length。不过现在才刚开始,先按部就班地写和地址快一样的长度就好。
ipv6地址块
接下来就是ipv6地址快了,在刚才提到的简单的服务里面挑一个/48,然后创建指定对应的项目:
ipv4地址块项目位于data/inet6num/,名称格式是<子网地址>_<掩码长度>(就是cidr里面的斜杠换成下划线),参考内容如下:
inet6num: fd35:4992:6a6d:0000:0000:0000:0000:0000 - fd35:4992:6a6d:ffff:ffff:ffff:ffff:ffff
cidr: fd35:4992:6a6d::/48
netname: FOO-NETWORK
descr: Network of FOO
country: XD
admin-c: FOO-DN42
tech-c: FOO-DN42
mnt-by: FOO-MNT
status: ASSIGNED
source: DN42
ipv6路由目标
ipv6同样需要路由目标,项目位于data/route6/,名称格式参考ipv6地址块,参考内容如下:
route6: fd35:4992:6a6d::/48
origin: AS4242423999
max-length: 48
mnt-by: FOO-MNT
source: DN42
注意这里的示例申请了一个fd35:4992:6a6d::/48的地址块,然后创建了fd35:4992:6a6d::/48的路由目标,路由目标限定了只通告fd35:4992:6a6d::/48的路由。
域名
下一步是域名,这也是一个网络的基础设施之一,因为大家都不想记住一串没什么特点的字符串,特别是ipv6的长度已经来到32个字符,所以大家都想要个好记的域名。
域名项目位于data/dns/,必须以dn42结尾,名称需要符合域名规范,参考内容如下:
domain: foo.dn42
admin-c: FOO-DN42
tech-c: FOO-DN42
mnt-by: FOO-MNT
nserver: ns1.foo.dn42 172.20.150.1
nserver: ns1.foo.dn42 fd35:4992:6a6d:53::1
nserver: ns2.foo.dn42 172.20.150.2
nserver: ns2.foo.dn42 fd35:4992:6a6d:53::2
source: DN42
然后,你就留意到了,里面有一个参数是nserver,意味着你需要搭建一个dns授权服务器来处理其他dns递归服务器的查询请求,参考里面写了2个授权服务器,这通常是为了冗余设计。晚点我们就来做这个,现在先把茅坑占着。
RDNS
或许你知道,或许你没接触过,有了DNS服务器之后,我们就可以做反向地址解析(PTR),可以将ip地址解析成域名。于是……我们就来修改一下之前的inetnum和inet6num项目。
inetnum: 172.20.150.0 - 172.20.150.31
cidr: 172.20.150.0/27
netname: FOO-NETWORK
descr: Network of FOO
country: XD
admin-c: FOO-DN42
tech-c: FOO-DN42
mnt-by: FOO-MNT
nserver: ns1.foo.dn42 172.20.150.1
nserver: ns1.foo.dn42 fd35:4992:6a6d:53::1
nserver: ns2.foo.dn42 172.20.150.2
nserver: ns2.foo.dn42 fd35:4992:6a6d:53::2
status: ASSIGNED
source: DN42
inet6num: fd35:4992:6a6d:0000:0000:0000:0000:0000 - fd35:4992:6a6d:ffff:ffff:ffff:ffff:ffff
cidr: fd35:4992:6a6d::/48
netname: FOO-NETWORK
descr: Network of FOO
country: XD
admin-c: FOO-DN42
tech-c: FOO-DN42
mnt-by: FOO-MNT
nserver: ns1.foo.dn42 172.20.150.1
nserver: ns1.foo.dn42 fd35:4992:6a6d:53::1
nserver: ns2.foo.dn42 172.20.150.2
nserver: ns2.foo.dn42 fd35:4992:6a6d:53::2
status: ASSIGNED
source: DN42
加入了nserver的记录。
提交
在执行提交前,执行一下仓库里面的脚本:
fmt-my-stuff <FOO>-MNT: 检查和修复一些格式错误check-my-stuff <FOO>-MNT: 检查你的内容是否符合表单数据check-pol origin/master <FOO>-MNT: 检查是否违反了规范squash-my-commits: 将之前的所有commit合并成一份来提交,让仓库历史变得整洁sign-my-commit: 对你的commit进行签名(pgp或者ssh密钥)
全部都跑完了之后,执行git commit和git push。之后你就能在网页上操作向registry提交pr请求了。如果有些特殊情况,burble会询问你一些问题,照常回答就行,不要慌,只要你有正当的、合适的、充分的理由,一般都会批准的。
下一步
在等待审批的时候,我们先准备好加入DN42网络的节点,浏览一下wiki,准备找其他人进行peer。