#大坑# 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, Tinc, IPsec) and exchange routes thanks to the Border Gateway Protocol. Network addresses are assigned in the 172.20.0.0/14 range and private AS numbers are used (see registry) as well as IPv6 addresses from the ULA-Range (fd00::/8).
上面的是DN42官方(或者说社区)对DN42的描述。简单地说DN42就是一个大的虚拟内网,你可以自由的跟别人进行点对点的VPN连接(当然对方要同意,但与现实世界有区别的是DN42的互联一般不会有任何费用),建立类似于真实世界中的物理网络。这个网络主要是用于提供网络新手一个自由练习BGP、OSCP、WHOIS、DNS等网络技术的平台。在DN42中,你可以随便测试你路由器的配置而不用担心搞炸别的网络(但如果你是提供DN42网络中继点的话还是要注意一点),你可以照着书本一步步尝试你的配置。进入DN42的世界你只需要一个能接上互联网的电脑,甚至不需要一台Legit的物理路由器。
为了与公网区分开来,DN42内部使用172.20.0.0/14
(4个B段)、fd00::/8
和私有AS地址(比如我的AS4242420199
)作为地址域。当然部分VPS(比如阿里云)会使用这些地址作为VPC地址,这时候就需要配置你服务商的VPC尽可能绕开这些地址以避免路由上的冲突。
顺带一提,国际VPN(国外服务器与国内服务器进行P2P连接)这种东西在国内是违法的,因为大陆政府将VPN认定为非法国际信道。Use At Your Own Risk
,本博客只在技术层面对DN42进行讲解。
本教程使用OpenVPN
(使用静态密匙)作为点对点的对接方案,Quagga
作为BGP的程序。其余方案(比如Tinc
、Wireguard
、GRE
、IPSec w/ PK
、 Bird
)不在本博文讲解范围内,请自行参考Wiki(因为我很Noob自己也不懂所以没法写教程)。
特别警告:虽然同为去中心化网络,DN42并不是匿名的。如果你需要完全匿名化的网络,请使用Tor。
DN42入门资料参考
因为这篇文章可能会更新得非常非常非常慢,所以你有兴趣的话可以先自行读这些资料进行参考:
官方维基:https://wiki.dn42.us/Home
剩余自行谷歌。因为这个东西比较小众所以资料并不多。
第一步:注册DN42的各种对象
这里的对象指的是Object
别想歪了
Registry地址:https://io.nixnodes.net/
提醒:Registry使用了StarCom的证书,这个证书的根被部分浏览器(比如谷歌)给吊销了,所以可能会有安全警告,直接点击允许即可。
参考资料(英文):https://wiki.dn42.us/howto/Getting-started
- 注册局界面概览
- 右上角那个输入框(我输入了
IXNET-MNT
的地方)是搜索框,你在里面输入你的Maintainer对象名,就可以看到你自己所有的资源。 - 下面所有的对象你都可以参考我的配置。
- 所有对象如果保存成功右边的信息栏都会有类似于
saved object: 172.20.165.0_29 | inetnum
的提示。
- 右上角那个输入框(我输入了
- 注册一个Maintainer(维护者)对象
- 点击右上角的
Create Object
,选择mntner
- 左边mntner字段填写你喜欢的名字,比如
IXNET-MNT
。通常全大写,以-MNT
结尾 descr
填写这个维护者的描述,比如IX Network Studio DN42 Network Maintainer
sha512-pw
填写这个维护者的明文密码。这个密码非常重要,不建议使用常用密码,但是一定不能忘记,不然的话你所有的对象的配置你都将会无法访问admin-c
和tech-c
填上DUMMY-DN42
。这个以后会改,不用担心mnt-by
填上和mntner
同样的内容,比如IXNET-MNT
,表示自己管理自己- 点
Save
保存。这相当于创建了你在DN42世界中的网管帐号 - 在右边信息框上面那个输入框里面输入你刚才的密码,然后点
+
来登陆系统
- 点击右上角的
- 创建一个Person(个人)对象
- 步骤类似于上面
person
填写名字,比如Howard Liu
contact
里面填写你自己的电子邮箱地址。建议填写你PGP密匙里面的邮箱,大家在进行加密数据交流的时候可以验证来源nic-hdl
填写这个人的代号,比如HOWARD-DN42
。通常全大写,以-DN42
结尾mnt-by
填写你的维护者对象名,比如IXNET-MNT
- 保存
- 重新编辑你的维护者对象,把里面的
admin-c
和tech-c
改为你的Person对象的代号(比如HOWARD-DN42
),保存 - 从现在开始,接下来你所有创建的对象
admin-c
和tech-c
都是你Person对象的代号,mnt-by
都是你维护者对象名
- 注册一个AS号
- 要实现外部BGP互联与别人交换路由数据,一个AS号是必须的
- 可注册的AS号为
4242420000
到4242423999
,即424242XXXX
(XXXX
< 4000) - 到这里查询你喜欢的号码是否已经被注册
- 创建一个
aut-num
对象 aut-num
字段填写AS号,比如AS4242420199
,注意前面有个大写的AS
as-name
字段随意,比如IXNET-AS
- 剩下几个字段不需要解释了,填完保存
- 注册一(多)个IPv4前缀
- 注意:整个DN42只有4个B段,而且一部分地址还在保留中,请只注册你需要的前缀大小,一般新手/27足矣,永远不要注册超过/24(1个C段)
- 你可以在这里找到还没被别人注册的IPv4前缀
- 创建一个
inetnum
对象 inetnum
填写格式如:172.20.165.0-172.20.165.7
(开始地址-结束地址,这个是127.20.165.0/29的示例,我用与阿里云VPC避免路由干扰)status
填写ALLOCATED
(区分大小写,一个字都不能错)netname
字段随意,比如IXNET-INTERNAL
country
填写两位字母的国家代号,比如SG
- 剩余的都不需要解释了,填完保存
- 注册一(多)个IPv6前缀
- 因为DN42使用RF4193规定的ULA地址范围(
fd00::/8
)作为IPv6的地址域,所以你在这里面随便挑一个前缀就行(当然不能跟别人的重复) - 想查是否重复的话只需要在注册局搜索框输入你喜欢的前缀(比如
fdc9:9999:9999
),看看有没有人注册了就行。IPv6地址前缀这么多,一般跟别人重复的几率很小 - 如果没有人注册的话,你可以创建一个
inet6num
对象 inet6num
填写格式如:fdc9:9999:9999:0000:0000:0000:0000:0000 - fdc9:9999:9999:ffff:ffff:ffff:ffff:ffff
(这个是我的IP段,即fdc9:9999:9999::/48
)- 剩余的跟上面注册IPv4的一样
- 填完保存
- 因为DN42使用RF4193规定的ULA地址范围(
- 决定你想使用的IP段,并创建路由(
route
)对象
如果你决定把你上面注册的IP段全部用于同一个网络,请跳过这个引用框
如果你只想用你步骤5和6注册的IP段的一部分的话,请看这个:- 首先你需要创建一个子IPv4(6)前缀,步骤与上面5/6完全相同,除了
status
那里写ASSIGNED
- 比如我要在我的
172.21.88.128/25
中分出一个172.21.88.128/28
作为骨干路由地址,我创建了一个inetnum
字段为172.21.88.128 - 172.21.88.143
的对象,然后状态那填ASSIGNED
- 分IPv6块同理
- 某些互联的网络可能开了严格的IP前缀筛选,如果你不注册
route
对象或者route
对象与BGP宣告的前缀不相符的话(比如掩码不相符)你的Peer(或者他们的上/下游)可能会Reject掉你的前缀宣告 - 决定你要用的IP段(步骤5/6注册的一整个或者上面引用框内说明的子IP段)与AS号(上面第4步注册)
- 创建一个
route
对象(如果是IPv6就创建一个route6
对象,剩下步骤类似) route
字段填你的IP前缀,比如172.21.88.128/28
或者fdc9:9999:9999:9900::/64
(route6
对象)(注意一下,这里与上面的`inetnum/inet6num填写的不同,这里只需要写IP+掩码)origin
填写你的AS号,比如AS4242420199
(AS
开头,不仅仅是数字)mnt-by
不解释了,填完保存
- 首先你需要创建一个子IPv4(6)前缀,步骤与上面5/6完全相同,除了
剩余的会抽空更新,最后更新于2017年8月17日晚