选自百度百科
DN42 全称 Decentralized Network 42(42 号去中心网络),是一个大型、去中心化的 VPN 网络。但是与其它传统 VPN 不同的是,DN42 本身不提供 VPN 出口服务,即不提供规避网络审查、流媒体解锁等类似服务。相反,DN42 的目的是模拟一个互联网。它使用了大量在目前互联网骨干上应用的技术(例如 BGP 和递归 DNS),可以很好地模拟一个真实的网络环境。
42我没猜错的话应该是出自《银河系漫游指南》里的宇宙终极答案
TIPS1:根据群友,42也可能来自于 4B ASN 的保留位置开头的42
以上便是DN42的主要信息。
今天我折腾一下,然后和几个朋友peer一下(他们搞了个/24!)
首先你需要有一台Linux服务器,我使用的是Rocky Linux 8.5
本文假设:你会用基本Linux命令,你会Git,你看得懂英文或用翻译可以正确理解含义
在这篇乱写的文章出错时会百度或者看别人的
首先去 https://git.dn42.dev 注册一个账户
然后找一风水宝地,新建文件夹,我命名为dn42,下文dn42皆指你创建的这个文件夹,所有操作都将在里面进行。
cd dn42
git clone https://git.dn42.dev/dn42/registry
cd registry
git checkout -b Username-Date/register
git push --set-upstream origin Username-Username/register
Username即你注册时用的用户名,Data即19260817这样的日期。
中途会要求你输入账户密码,同注册的账户密码。
现在开始成为ISP吧!
填写你的信息
输入ls后你会发现大量文件。
本质上就是创建六个文件,今天我自己走了一趟找到了一些坑。
注释2:所有内容严格匹配,前后都不能多/少空格
注释3:务必使用后文提到的查询器生成地址,否则容易撞
注释4:GPG签名需要先导入至git
注释5:remarks没什么好写的就可以把remarks一整行删掉
注释6:本文需要大量文本编辑操作,建议使用一个阳间的文本编辑器,否则你会像我一样反反复复出错
1.在 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
remarks: 备注,爱填不填
- 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 Key的获取与填写方式
gpg --full-generate-key
1指定要生成的密钥类型,或按 Enter 键接受默认值。
2指定想要的密钥大小,或按 Enter 键接受默认值。 密钥必须至少是 4096 位。
3输入密钥的有效时长。 按 Enter 键将指定默认选择,表示该密钥不会过期。
4验证选择是否正确。
5输入ID信息(同上文Username为佳)。
6输入安全密码。
gpg --list-keys
应当得到这样的输出:
]# gpg --list-keys
/root/.gnupg/pubring.kbx
------------------------
pub rsa4096 2022-01-20 [SC]
4E9FCXXXXXX8ECF291XXXXXX4B6FB32C3B03D1FD
uid [ 绝对 ] Longtianmu <longtianmu@outlook.com>
sub rsa4096 2022-01-20 [E]
7列出公钥后,pub下面那一长串就是公钥,准备上传
gpg --keyserver hkp://keyserver.ubuntu.com --send-key 公钥
上传完毕后,将公钥其替代上文的Key ID
pgp-fingerprint 4E9FCXXXXXX8ECF291XXXXXX4B6FB32C3B03D1FD
你可能会用到的网站:空闲AS号/IPv4/IPv6查询 IP CIDR转范围
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
。
3.接下来你要给自己选择一个 AS 编号,即 ASN。在国际互联网上,ASN 范围 4200000000 – 4294967294 是被保留作私下使用(private use)的,DN42 占用的就是其中的一块,4242420000 – 4242423999。(注意范围是 4000 个,不是 10000 个,剩下 6000 个暂未开放注册) 在这 4000 个号码中挑选一个你喜欢的,并且没有被占用的,然后进入 data/aut-num
文件夹,创建文件。假设我是 AS19260817, 文件就是 data/aut-num/AS19260817
:
aut-num: AS19260817
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 地址在
172.20.0.0/14
范围,即172.20.0.0 - 172.23.255.255
。 - 你可以申请/29 /28 /27 /26 /25 /24等范围,分别可以给6 14 30 62 126 254台设备使用,请按需选择。
- 为避免冲突,还是使用上文提到的查询器随机选择比较方便。
- /26及以下可以直接申请,对于只是随便玩玩的人,/29已经够了。
- 如果你真的需要/25及以上的话:
首先orz!%%%!
然后你在完成本文所有步骤后需要去以下任一地方请求大家同意你的申请:
DN42 的 IRC 频道(服务器地址在这个页面可以看到,其中的 public internet 项)
DN42 的邮件列表(地址在这个页面的 Mailing list 项) - 请按需拿取,DN42的IPv4和公网的IPv4一样珍贵。
在你完成选择后,在 data/inetnum
文件夹创建 IPv4 地址对应的文件。如果我的IP是172.20.0.0/24,那么创建一个名为data/inetnum/172.20.0.0_24
的文件:
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: AS19260817
mnt-by: Username-MNT
source: DN42
- route:你的这个地址块的范围。
- descr:简介,随意填写,不能删。
- origin:你授权哪个 AS 使用这个地址块,填写你的 AS 编号。
- mnt-by:
maintain by(由谁维护)
,由谁维护,指向你之前的 mntner 文件,[Username]-MNT
。 - source:固定为
DN42
。
鉴于已经2202年了,工信部都说要普及IPv6了,而且DN42内部IPv6普及率>=100%了,你也许该顺便注册下IPv6,和上文IPv4两步骤基本相似。
6.选择你IPv6的地址,不建议塞一些114514 1919810 19260817等不明意义内容进你的IPv6 ULA地址,不仅违反RFC 4192的3.2条,而且容易造成冲突和别的啥啥,通过看管理员心情好与坏,同样建议使用上文提到的查询器来生成你的IPv6地址。在 data/inet6num
中创建文件。假设我选到了 fd7a:f946:6722: :0/48,就创建 fd7a:f946:6722: :0/48
这一文件
inet6num: fd7a:f946:6722:0000:0000:0000:0000:0000 - fd7a:f946:6722:ffff:ffff:ffff:ffff:ffff
netname: Username-IPV6
descr: 随便写点啥
country: CN
admin-c: Username-DN42
tech-c: Username-DN42
mnt-by: Username-MNT
nserver: ns1.xxxxx.dn42
nserver: ns2.xxxxx.dn42
status: ASSIGNED
cidr: fd7a:f946:6722::0/48
source: DN42
基本和IPv4一样,这里提几点:
- 你可能拿到的是fd43:817:4646::0/48这样的地址,注意不足四位的那些会在前面有前导0补足
所以实际上是fd43:0817:4646::0/48,在写inet6num项时要补全前导0,并在后面补全五节。
IPv6就是0000-ffff罢了 - 但是cidr项不必补全。
7.为你的IPv6地址块添加路由,在 data/route6
创建一个与上面你选择的同名的文件即可。
route6: fd7a:f946:6722: :0/48
descr: 随便写点啥
origin: AS19260817
mnt-by: Username-MNT
source: DN42
描述和IPv4的基本一致。
现在站起来活动一下,眺望远处,因为接下来不剩多少了!
提交你的信息
可喜可贺 可喜可贺 你创建完了6个文件,该上传他们了,还记得git吗?
8.上传文件,等待命运的判决审核。
此过程中git弹出的文本编辑器是vi。
cd到根目录,即包含data .git啥啥啥文件的目录,执行一次git add .
,然后执行 git commit -S
,使用你先前创建的 GPG 密钥,创建一份带 GPG 签名的 commit。
如果你前面已经commit过几次了,你可以执行 git commit --amend -S
修改之前的 commit,将其签名。
由于你操作期间 Registry 可能有来自其他人的变更,你需要获取一下 Registry 的更新:
#合并多个commit
./squash-my-commits
# 获取更新
git fetch origin master
# 切换到你自己的分支
git checkout Username-Date/register
#Rebase 你的分支,实际上就是将你的修改在最新的 Registry 上重新应用一遍
#出现编辑器请按说明操作,需要文本就随便加几行,没提可以直接:wq退出vi
git rebase -i -S origin/master
执行 git push -f
将修改上传到 Git 服务器。
现在,回到 dn42/registry,发起 Pull Request,等待你的信息被合并。
PR通过后,你就正式拥有自己的地址啦!并且可以和别人peer!
什么?peer的blog呢?
摸了!
本文几乎可以理解为对这篇blog的删节和节选,我删去了一些可选项并添加了一些自己踩到的坑。
感谢那篇Blog的书写者!
评论