NaiveTomcat's blog NaiveTomcat's blog
首页
分类
标签
DN42 Peer
关于
友链
归档

NaiveTomcat

知行合一,格物致知
首页
分类
标签
DN42 Peer
关于
友链
归档
  • 加入DN42网络的简明教程

    • DN42是什么
      • 加入DN42网络的前置要求
        • 如何注册DN42的AS
          • 如何与别人Peer
            • 寻找Peer的节点
            • 重要的系统配置
            • 选择隧道软件
            • 选择BGP软件
            • 内网配置
            • 进行Peer
          • 接入完成


          购买云服务器,选Vultr!

          通过此链接注册即可获$100试用金

          NaiveTomcat
          2021-05-17
          开发
          目录

          加入DN42网络的简明教程

          # DN42是什么

          DN42 全称 Decentralized Network 42(42 号去中心网络),是一个大型、去中心化的 VPN 网络。但是与其它传统 VPN 不同的是,DN42 本身不提供 VPN 出口服务,即不提供规避网络审查、流媒体解锁等类似服务。相反,DN42 的目的是模拟一个互联网。它使用了大量在目前互联网骨干上应用的技术(例如 BGP 和递归 DNS),可以很好地模拟一个真实的网络环境。

          简而言之,DN42:

          • 不适合单纯想要保护隐私、规避网络审查的用户
          • 不适合在网内消耗大量流量,例如用于解锁流媒体服务的用户
          • 适合想要研究网络技术,练习服务器、路由器等网络设备配置,甚至后续在真实互联网建立 AS 的用户
          • 适合拥有真实 AS,但担心自己配置错误广播出错误路由、干掉半个互联网,希望有个地方测试的用户。

          正因为此,使用 DN42 的门槛比较高。就像在真实互联网中一样,你要扮演一个 ISP(互联网服务提供商),注册自己的个人信息,ASN 号码,IPv4 和 IPv6 的地址池,并且使用 BGP 在自己的服务器上广播它们。你还要和其它的用户联系,和他们做 Peering(对接),一步步进入完整的 DN42 网络。

          DN42 在 172.20.0.0/14 和 fd00::/8 上运行,而这两个 IP 段都是分配给内网使用的。换句话说,你在 DN42 上怎么折腾,都不会影响到服务器其它的互联网连接。

          # 加入DN42网络的前置要求

          加入DN42网络需要您有以下的相关能力:

          • 一个长期在线的Linux机器(实体机、虚拟机、VPS甚至路由器都行)
          • 使用Linux的能力,会装包会用编辑器就行
          • 会用Git(会Clone,Pull,Push,Commit就行)
          • 学过计网(其实具有一定相关知识就行,最起码得知道IP、MAC是啥,知道交换机和路由器都是干啥的,会ping/traceroute)
          • 能读得懂英文(或者会用翻译软件)

          如果您不具备上述能力,您可能在配置过程中出现问题,给DN42中的其他用户带来麻烦。

          # 如何注册DN42的AS

          提示

          DN42的注册过程比较繁琐,可能需要几天(但是没有注册真实的AS那么麻烦),提交信息(发PR)之后可能会被要求修改几次,耐心配合即可。

          提示

          本文信息可能随DN42政策的改变而过时,请优先参考DN42的官方注册流程,此处仅为参考。

          官方Wiki上的注册教程 (opens new window)

          提示

          请注意更改下面出现的文件中的信息,不要出现这种情况(当事人应该参考的lantian的教程,但是没有改信息,直接白送lantian一个路由)

          wrong_mnt

          注册流程大致如下:

          • 首先在官方Wiki (opens new window)上注册一个账户。有关DN42网络的所有信息都在其中的一个仓库内(dn42/registry)
          • 打开dn42/registry (opens new window)这个仓库,把它clone下来
          • 新建一个分支,按照[昵称]-[日期,YYYYMMDD]/[目的]命名
            • 日期按照什么时区我也不清楚,但肯定不是东八区(我在北京时间2021/05/16 07:00的时候push一个日期字段是20210516的分支被远程拒绝了)
            • 新建完先push到远端,注册后需要等一段时间并在网页上登出后再次登录才有registry仓库的写权限,如果权限没下来,这时就能发现问题)
          • 在clone下来的仓库内,您新建的分支中建立以下文件:
            • data/mntner/[昵称]-MNT,这个文件代表您的账户
              • 官方提供的一系列检查/格式化的工具都是基于mntner筛选文件的
              • 文件内容如下:
                mntner:             [昵称]-MNT
                admin-c:            [昵称]-DN42
                tech-c:             [昵称]-DN42
                mnt-by:             [昵称]-MNT
                source:             DN42
                auth:               pgp-fingerprint 您的40字符的PGP公钥
                remarks:            注释
                
                1
                2
                3
                4
                5
                6
                7
                1
                2
                3
                4
                5
                6
                7
              • 各项含义如下
                • mntner即Maintainer(维护者),说明这个账户的名称,与文件名相同
                • admin-c即admin contact(管理员联系信息),指向后续创建的person对象
                • tech-c即tech contact(技术员联系信息),也需要指向后续创建的person对象
                • mnt-by即maintain by(由谁维护),指向这个账户本身
                • source固定为DN42
                • auth为您的个人认证信息,接受两种类型:GPG公钥和SSH公钥
                  • 您必须至少选择一种(我推荐GPG公钥,因为签名和认证都方便)
                  • 您还需要将您的GPG公钥上传至公开查询服务器,可以参考阮一峰的这个教程 (opens new window)
                  • 最好可以再上传到官方的git服务器上与您的账户绑定
                  • 阅读官方的身份认证Wiki页面 (opens new window)获取更多信息
                • remarks为注释,可选,可出现多次
              • 注意,您填写的位置从第21列开始。中间的空格不能省略或用制表符替换。
                • 格式问题可通过fmt-my-stuff这个脚本进行修复
            • data/person/[昵称]-DN42
              • 代表个人联系信息
              • 文件内容如下
                person:             您的昵称
                contact:            您的联系方式(一般为邮箱)
                nic-hdl:            [昵称]-DN42
                mnt-by:             [昵称]-MNT
                source:             DN42
                
                1
                2
                3
                4
                5
                1
                2
                3
                4
                5
            • 接下来您需要选择一个未被占用的AS编号,即ASN。DN42在私有ASN范围内选取了一块用作其内部AS的ASN,您可以在4242420000-4242423999这4000个ASN中选取未被占用的,注意范围是4000个不是10000个,然后创建 /data/aut-num/[您选的ASN]
              • 文件内容如下
                aut-num:            AS号,以AS开头后面接10位数字
                as-name:            AS名称,随便写
                descr:              AS简介,随便写
                remarks:            AS注释,随便写,可以没有
                admin-c:            参考上面的同名内容
                tech-c:             参考上面的同名内容
                mnt-by:             参考上面的同名内容
                source:             DN42
                
                1
                2
                3
                4
                5
                6
                7
                8
                1
                2
                3
                4
                5
                6
                7
                8
            • 接下来就需要选择IP并建立data/inetnum/[IP块CIDR,将/换成_]
              • 选择172.20.0.0/14范围内未被占用的IP段。注意:您在DN42中最小能够申请/29的块,一般建议申请/27,能够直接申请的最大地址块是/26
              • DN42 内的 IPv4 地址与公网的 IPv4 地址同样珍贵
              • 如果您要接入的设备非常多(指超过62台),那么/26是不够用的,你需要去IRC频道(可以在Wiki上找到)或邮件组告诉大家您的理由,请求投票同意
              • 文件内容如下
                inetnum:            IP段第一个地址 - IP段最后一个地址 (注意不是第一个/最后一个可用地址)
                netname:            地址块名称,没啥用,随便取
                remarks:            注释,随便写,可以没有
                descr:              简介,随便写
                country:            国家代号,中国大陆就是CN
                admin-c:            参考上面的同名内容
                tech-c:             参考上面的同名内容
                mnt-by:             参考上面的同名内容
                nserver:            DNS反查服务器的FQDN。如果您不知道这个是什么或暂时不需要可以去掉(建议先不要填,配好网注册完域名配好权威DNS服务器之后再加)
                status:             ASSIGNED
                cidr:               IP段的CIDR
                source:             DN42
                
                1
                2
                3
                4
                5
                6
                7
                8
                9
                10
                11
                12
                1
                2
                3
                4
                5
                6
                7
                8
                9
                10
                11
                12
            • 还需要给您的IP地址块建立路由对象data/route/[IP块CIDR,将/换成_]
              • 表示授权某个AS使用这个地址段使用这个地址段
              • 文件内容如下
                route:              地址块CIDR
                descr:              简介,随便写
                origin:             您的ASN
                mnt-by:             参考上面的同名内容
                source:             DN42
                
                1
                2
                3
                4
                5
                1
                2
                3
                4
                5
            • 鉴于现在是2021年,建议您再在/data/inet6num/和/data/route6/文件夹内建立IPv6地址块的相关文件,内容参考上面IPv4的相关文件
              • IPv6地址在fd00::/8内
              • DN42内IPv6地址块一般以/48存在,一般一个AS只允许注册一个/48
              • 非常不建议自定义IPv6地址前缀
                • 首先这个做法是违反RFC4193 section 3.2的
                • 其次,DN42和一些类似性质的网络建立了互联关系,因为拿不到这些网络的registry信息,并且都用的是IPv6 ULA地址(即fd00::8),您自己选的前缀可能会和别人的冲突
                • 注意:一旦和别人冲突,您(也就是后注册的)可能需要修改整个网络的IPv6地址
                  • Renumbering really isn't fun

          • 现在,您建立完了所有需要的文件,首先在仓库根目录运行./fmt-my-stuff 你的mntner名字格式化您的所有文件
          • 然后git add .和git commit -S来签名commit您的更改
          • 如果您已经commit了多次,注意DN42的PR只接受单个commit,所以需要运行./squash-my-commits -S来扁平化您的commit
          • 执行git push -f将更改推送至服务器,然后去网页上创建PR
            • 一次注册/信息修改只用发一个PR
            • 如果被要求修改,改完并squash了之后直接git push -f就行,不用关闭并开新的PR
            • 发PR用英文(但是最近有位国人成为了维护者,如果您实在不懂英文您也可以用中文回复,但是不推荐,因为外国人看不懂)

          在您的PR被合并之后,您就拥有了自己的AS和地址块,接下来就可以去找人Peer了

          # 如何与别人Peer

          # 寻找Peer的节点

          DN42是一个去中心化的网络,因此并没有一个中央路由可以让你直接接入,相反,你需要寻找其他DN42上的节点,建立隧道连接和BGP会话,从而建立Peering关系

          您可以

          • 使用DN42 Peerfinder (opens new window)
          • 直接去DN42的IRC频道 (opens new window)
          • 去这个非官方的tg群 (opens new window)

          找人peer,或者直接找我

          注意,您可以(并且建议)找多人进行peer,以降低网络中心度增加网络稳定性。

          找几个离你节点近延迟小的节点(国内节点就找国内的就行了,不强求延迟了🤣),然后看下面

          # 重要的系统配置

          根据DN42 Wiki:

          The first rule of dn42: Always disable rp_filter.

          The second rule of dn42: Always disable rp_filter.

          The third rule of dn42: Allow ip forwarding!

          一定关掉rp_filter并开启IP forwarding,具体执行下面的代码:

          echo "net.ipv4.conf.default.rp_filter=2" >> /etc/sysctl.conf
          echo "net.ipv4.conf.all.rp_filter=2" >> /etc/sysctl.conf
          sysctl -p
          
          1
          2
          3
          1
          2
          3
          echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
          echo "net.ipv6.conf.default.forwarding=1" >> /etc/sysctl.conf
          echo "net.ipv6.conf.all.forwarding=1" >> /etc/sysctl.conf
          sysctl -p
          
          1
          2
          3
          4
          1
          2
          3
          4

          然后一定关掉UFW之类的自动配置iptables的东西,以免出现玄学问题

          # 选择隧道软件

          节点之间一般是没有网线直接拉上的,所以互联基本上就要依靠隧道了。现在DN42社区一般喜欢使用WireGuard和OpenVPN,我也倾向于使用WireGuard。

          WireGuard一般配置点对点连接,配置很简单,资源占用少,安全性也不错,但是需要内核模块支持。我一般是这么配置WireGuard隧道的:

          [Interface]
          Address = 我的IPv6 Link-local地址
          PrivateKey = 我的私钥
          ListenPort = 我的监听端口,一般为对端AS的后5位
          Table = off # 一定要加
          PostUp = /bin/ip addr add 我的DN42 v4地址 peer 对端的DN42 v4地址 dev %i 
          
          [Peer]
          PublicKey = 对面的公钥
          Endpoint = 对方提供的endpoint
          AllowedIPs = 0.0.0.0/0,::/0
          
          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11

          然后直接用wg-quick启动隧道就建立了互联。

          注意一定要加Table = off,否则wg-quick会给AllowedIPs加上路由,鉴于它是0.0.0.0,意味着你把所有的流量都路由给了对端,而对端大概率不会给你转发,然后你的网就炸掉了。往外连的路由表应该用BGP管理,所以这里不需要帮你添加

          # 选择BGP软件

          我也只用过Bird,而且DN42 Wiki上面也有Bird的配置文件可以直接抄,所以我推荐Bird。

          当然,还有别的可以用,但是我没用过,不做推荐

          注意:现在Ubuntu的官方仓库中的Bird2是2.0.7版本的,但是Bird官方的ppa上面已经发布了2.0.8的deb包。我推荐2.0.8,因为加入了extended multi hop的支持。

          # 内网配置

          我建议用wg等隧道软件在每两个节点之间建立一条点对点隧道,即每个节点都能直接连接到其余所有节点,配静态路由。有不需要跑BGP的叶子节点(比如不做peer的家里路由器)的时候,只需把给它的IP的路由设到它的上游节点就行了。OSPF没配懂(而且容易出锅),所以不做说明。

          # 进行Peer

          BGP软件配好了,内网也配好了,现在就可以开始做Peer了。(当然,你应该先测测内网通不通)

          # 隧道搭建

          按照我上面的配置,配好WG连接就行了。注意最好加上PersistentKeepalive = true,以进行UDP保活。(注意开防火墙端口)

          # BGP会话配置

          一般来说照着DN42 Wiki上的教程抄就行了。根据需要加上extended next hop的支持。现在一般喜欢MP-BGP over link-local,双方商量好就行。

          可以去非官方的tg群 (opens new window)寻求帮助。

          # 接入完成

          完成上述操作之后,您就成功的接入了DN42网络。您可以开始愉快的Ping了(其实DN42里面也有不少服务的)。您可以接着申请域名、搭建权威DNS服务器和DNS反查服务器,在DN42里面搭建博客或者整活了🤔膜

          完。

          #开发#网络
          上次更新: 2021/07/30, 13:07:00
          最近更新
          01
          使用PowerDNS搭建全球分地区DNS解析服务
          01-29
          02
          有关Transgender话题的一点杂谈
          11-15
          03
          NTEREN北美网络重构
          11-12
          更多文章>
          Theme by Vdoing | Copyright © 2021-2023 NaiveTomcat | 陕ICP备20002453号-1 | 萌ICP备 20212004号 | 命中CDN节点
          • 跟随系统
          • 浅色模式
          • 深色模式
          • 阅读模式