Daniel’s Blog

DN42 入坑记录(注册篇)

DN42 对我来说不是一个新词,之前在一些个人博客中看到过它,但并没有深究。手里有一些空闲的 VPS,上面基本空载,放在那里吃灰好浪费,于是就去问问万能的 Google:

「Hey, Google! What can we do with a VPS?」

「……」

在茫茫结果中,我再一次遇见了「DN42」。

什么是 DN42?

或许你对 Tor、I2P 的大名早有耳闻,其实 DN42 和他们一样,都是暗网,即搜索引擎搜不到的网络,只不过他们各自被创建的目的不同。让我们来看看 DN42 官网给出的定义:

「dn42 is a big dynamic VPN, which employs Internet technologies (BGP, whois database, DNS, etc). Participants connect to each other using network tunnels (GRE, OpenVPN, WireGuard, Tinc, IPsec) and exchange routes thanks to the Border Gateway Protocol.」1

Tor 和 I2P 注重匿名性,而 DN42 意不在此,它模拟出一个去中心化的互联网,可供接入者进行计算机网络技术实验而不必担心对真实互联网造成影响。

准备工作

DN42 GIT 上注册一个账户,注册完毕等待几分钟后,个人仓库列表中会出现 dn42/registry,此时在终端克隆仓库,并按要求输入用户名和密码。

$ git clone https://git.dn42.dev/dn42/registry.git

身份验证需要生成 GPG 密钥。2

$ gpg --full-generate-key
请选择您要使用的密钥类型:
   (1) RSA 和 RSA
   (2) DSA 和 Elgamal
   (3) DSA(仅用于签名)
   (4) RSA(仅用于签名)
   (9) ECC(签名和加密) *默认*
  (10) ECC(仅用于签名)
 (14)卡中现有密钥
您的选择是?
请选择您想要使用的椭圆曲线:
   (1) Curve 25519 *默认*
   (4) NIST P-384
   (6) Brainpool P-256
您的选择是?
请设定这个密钥的有效期限。
         0 = 密钥永不过期
      <n>  = 密钥在 n 天后过期
      <n>w = 密钥在 n 周后过期
      <n>m = 密钥在 n 月后过期
      <n>y = 密钥在 n 年后过期
密钥的有效期限是?(0)
密钥永远不会过期
这些内容正确吗? (y/N) y

GnuPG 需要构建用户标识以辨认您的密钥。

真实姓名: BioniCosmos
电子邮件地址: admin@moecm.com
注释:
您选定了此用户标识:
    “BioniCosmos <admin@moecm.com>”

更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)? O

真实姓名(用户名)和电子邮件地址使用 DN42 GIT 上的注册信息,其他保持默认。

填写后会要求设定 GPG 密钥的验证密码。

$ gpg --list-secret-keys --keyid-format=long
sec   ed25519/03E84B5D8BC9255E 2022-03-30 [SC]
      209A091A4428B203E77F212803E84B5D8BC9255E
uid                   [ 绝对 ] BioniCosmos <admin@moecm.com>
ssb   cv25519/A45FFAC1025F5497 2022-03-30 [E]

我们记第一行中的 03E84B5D8BC9255E 为 GPG 密钥 ID,第二行的字符串为 GPG 密钥指纹。

填写注册文件3

注意

接下来我们会陆续创建 3 + 5 = 8 个文件,他们分别是:

维护者

创建 data/mntner/<名称>-MNT(如 BIONICOSMOS-MNT)。

mntner:             BIONICOSMOS-MNT
admin-c:            BIONICOSMOS-DN42
tech-c:             BIONICOSMOS-DN42
mnt-by:             BIONICOSMOS-MNT
auth:               PGPKEY-8BC9255E
source:             DN42

admin-ctech-cmnt-bysource 四项在后面的配置中很常用,故不再多加赘述。

密钥

创建 data/key-cert/PGPKEY-<GPG 密钥指纹的后 8 位>(如 PGPKEY-8BC9255E)。

key-cert:           PGPKEY-8BC9255E
method:             PGP
fingerpr:           209A 091A 4428 B203 E77F 2128 03E8 4B5D 8BC9 255E
owner:              BioniCosmos <admin@moecm.com>
certif:             -----BEGIN PGP PUBLIC KEY BLOCK-----
certif:
certif:             mDMEYkQR8RYJKwYBBAHaRw8BAQdALLtiw4dKZyLyNYOILW16yq3kGYPkJZEf2bIB
certif:             wQWi7jS0HUJpb25pQ29zbW9zIDxhZG1pbkBtb2VjbS5jb20+iJQEExYKADwWIQQg
certif:             mgkaRCiyA+d/ISgD6Etdi8klXgUCYkQR8QIbAwULCQgHAgMiAgEGFQoJCAsCBBYC
certif:             AwECHgcCF4AACgkQA+hLXYvJJV7h8AEA6L9GFNu98mfC54BTv0tjkEVaaq7JGC9s
certif:             1bUUGdSND4UBAKEBa2hJogq1A3wVgCJ8Czo0IF8vSkm6/ouKHdR13VMIuDgEYkQR
certif:             8RIKKwYBBAGXVQEFAQEHQKFlNZZf+XWSLtzvZf1/olZaIkN2UCGLVpm4q6dKxP0F
certif:             AwEIB4h4BBgWCgAgFiEEIJoJGkQosgPnfyEoA+hLXYvJJV4FAmJEEfECGwwACgkQ
certif:             A+hLXYvJJV5IHAEA2WqiZombY7kIQ3hujT3lxIlJHQTOSNW771H0FsM/Wj4A/0U5
certif:             51dq5JA6v3qUpfYr1s6TNIRiXuVj/v1T2b+im/8D
certif:             =acSy
certif:             -----END PGP PUBLIC KEY BLOCK-----
admin-c:            BIONICOSMOS-DN42
tech-c:             BIONICOSMOS-DN42
mnt-by:             BIONICOSMOS-MNT
source:             DN42

你还可以将 GPG 公钥添加到 DN42 GIT 上。首先登录网站。

展开右上角头像菜单,进入设置页面。

添加 GPG 公钥。

注意:创建密钥验证文件和把密钥添加到 DN42 GIT 是相互独立的两件事,前者必做,否则你的 pull request 不会被合并;后者选做,添加后你的 commit 在网页上会被特殊标记。

将公钥添加到 DN42 GIT 后 commit 会被赋予安全标识。

个人

创建 data/person/<名称>-DN42(如 BIONICOSMOS-DN42)。

person:             Daniel
e-mail:             admin@moecm.com
nic-hdl:            BIONICOSMOS-DN42
mnt-by:             BIONICOSMOS-MNT
source:             DN42

资源

资源注册文件可按需填写。即使 DN42 并不是真实的互联网,其中的资源同样宝贵。

ASN

DN42 Free Explorer 上选择一个可用的自治系统编号,然后创建 data/aut-num/<自治系统编号>(如 AS4242423305)。

aut-num:            AS4242423305
as-name:            AS-BIONICOSMOS-DN42
admin-c:            BIONICOSMOS-DN42
tech-c:             BIONICOSMOS-DN42
mnt-by:             BIONICOSMOS-MNT
source:             DN42

IPv4 地址块

DN42 Free Explorer 上选择一块可用的 IPv4 地址,然后创建 data/inetnum/<IPv4 地址>_<前缀长度>(如 172.22.76.8_29)。

inetnum:            172.22.76.8 - 172.22.76.15
cidr:               172.22.76.8/29
netname:            WITCH-NETWORK
admin-c:            BIONICOSMOS-DN42
tech-c:             BIONICOSMOS-DN42
mnt-by:             BIONICOSMOS-MNT
status:             ASSIGNED
source:             DN42

IPv6 地址块

DN42 Free Explorer 上选择一块可用的 IPv6 地址,然后创建 data/inet6num/<IPv6 地址>_<前缀长度>(如 fddf:6b2:7a5c::_48)。

inet6num:           fddf:06b2:7a5c:0000:0000:0000:0000:0000 - fddf:06b2:7a5c:ffff:ffff:ffff:ffff:ffff
cidr:               fddf:6b2:7a5c::/48
netname:            WITCH-NETWORK
admin-c:            BIONICOSMOS-DN42
tech-c:             BIONICOSMOS-DN42
mnt-by:             BIONICOSMOS-MNT
status:             ASSIGNED
source:             DN42

IPv4 路由

创建 data/route/<IPv4 地址>_<前缀长度>(如 172.22.76.8_29)。

route:              172.22.76.8/29
origin:             AS4242423305
mnt-by:             BIONICOSMOS-MNT
source:             DN42

IPv6 路由

创建 data/route6/<IPv6 地址>_<前缀长度>(如 fddf:6b2:7a5c::_48)。

route6:             fddf:6b2:7a5c::/48
origin:             AS4242423305
max-length:         48
mnt-by:             BIONICOSMOS-MNT
source:             DN42

提交56

$ git config user.email <电子邮件地址>
$ git config user.name <用户名>
$ git config user.signingkey <GPG 密钥 ID>
$ git config commit.gpgsign true
$ [ -f ~/.bashrc ] && echo 'export GPG_TTY=$(tty)' >> ~/.bashrc && source ~/.bashrc
$ git checkout -b <用户名>-<YYYYMMDD>/<本次更改的概述> # 如 BioniCosmos-20220330/register,日期应为当前 UTC 时间。
$ ./fmt-my-stuff <名称>-MNT
$ ./check-my-stuff <名称>-MNT
$ ./check-pol origin/master <名称>-MNT

如出现错误,须按照提示进行修改。

$ git add -A
$ git commit -am "<提交消息>"
$ # 此时会提示输入 GPG 密钥的验证密码。
$ git push -u origin <用户名>-<YYYYMMDD>/<本次更改的概述>

最后在 DN42 GIT 上发起 pull request。首先会进行自动审核,如有错误请及时按提示进行修改。

注意:多个 commit 应使用 ./squash-my-commits 脚本或手动 rebase 合并为一个,合并后应使用 git push -f 强制推送到远程仓库。

之后耐心等待人工审核,在这期间好好睡上一觉,醒来后 PR 就会被合并啦。(或者被要求修改错误。)

Footnotes

  1. Home - DN42 Wiki
  2. 生成新 GPG 密钥 - GitHub Docs
  3. howto/Getting Started - DN42 Wiki
  4. howto/Registry Authentication - DN42 Wiki
  5. 将您的签名密钥告知 Git - GitHub Docs
  6. registry/README.md at master - registry - DN42 GIT