DN42申请与部署

DN42实验网注册申请与部署教程

DN42介绍

DN42 是一个大型动态 VPN,采用互联网技术(BGP、whois 数据库、DNS 等)。参与者通过网络隧道(GRE、OpenVPN、WireGuard、Tinc、IPsec)相互连接,并通过边界网关协议交换路由。网络地址分配在 172.20.0.0/14 范围内,使用私有 AS 号码(参见注册表)以及 ULA 范围内的 IPv6 地址(fd00::/8)

DN42 可用于学习联网和连接专用网络,如黑客空间或社区网络。但最重要的是,在 DN42 中尝试路由是一件有趣的事!

路由技术实验
参与 DN42 主要是为了学习 BGP 等路由技术,使用一个相当大的网络(> 1500 AS,> 1700 前缀)。

由于 DN42 与互联网非常相似,因此它可以作为新想法的实践试验场,或者只是用来学习在互联网上可能无法实现的真正的网络技术(BGP 多重归属、中转)。与互联网相比,它的最大优势在于:如果你在网络中弄坏了什么东西,不会有任何大型网络运营商对你怒吼。
以上资料来自DN42官方
总结:

  • DN42适合给网络爱好者练习、研究设备配置,让你后续能成为一个及格的BGP Player。
  • 适合给真实的BGP Player一个练习的地方,让其不至于炸掉半个互联网。
  • 不适合单纯的想出国留学的普通人
  • 不适合通过隧道跑取大量流量的用户

实验前提

读懂本文章并进行实验,你需要懂得的知识点:

1.拥有Linux系统环境(Centos,Ubuntu,debian,openwrt等)(双系统,虚拟机,VPS,路由器等)。
2.懂得如何操作Linux系统,常用的文件操作命令(cd/ls/mkdir/cp/mv/rm等),安装软件包命令(yum/apt/opkg等),会使用文本编辑器(例如vi,vim,nano等)。
3.明白git版本控制工具,理论与命令(push/pull/commit等)。
4.有网络基础知识,什么是IP/MAC地址吗,什么是掩码 24位/32位 等,清楚几种基本的路由类型 OSPF/RIP/BGP 等。
5.对英语有一定阅读基础(因为注册及peer时候大多数都是英文界面)

本教程全程比较啰嗦,已经对萌新很友好的了,如果你不具备以上知识,你很有可能无法理解本教程内容,以至于配置错误并给其他DN42用户造成麻烦。

要求

您至少有 一台全天候运行的路由器。任何 Linux 或 BSD 盒子都可以变成路由器。如果您的家用路由器运行 OpenWRT,您可以考虑将其用于 DN42。
您的路由器可以在互联网上建立网络隧道(Wireguard、GRE、OpenVPN、IPSec、Tinc……)。请注意,您的网络运营商可能会过滤此类流量,例如在学校或大学。
对网络和路由有基本的了解(例如,听说过 BGP、IGP、转发,并愿意配置 BGP 路由器,如 Quagga 或 Bird)
以上资料来自DN42官方

我们建议你以下所有流程都在unix类系统下进行(例如Centos,Ubuntu,debian,openwrt,MacOS等)
因为用到的软件和秘钥对unix类系统比较友好。当然这不是强制要求,但过程中发生奇怪情况请自行负责。

请注意:建立中国大陆到中国大陆以外的跨境 VPN 连接可能违反法律。请自行衡量其中的风险。
我不提供中国大陆节点与中国大陆以外的服务器进行任何形式的隧道连接。

注册流程

注册流程非常繁琐,如果顺利的话也需要一天左右才能注册成功获得ip块as号。这是因为DN42仿照真实的ASN号和IP注册而创造出来的流程,就是为了更加真实的模拟真实互联网。

以下流程基于2023.08.01,但由于注册流程可能会随着DN42流程而改变,建议每一步都对照官方注册流程作为参考。
DN42 官方 Wiki 的注册流程

1.首先去(https://git.DN42.dev/)注册一个账号,让你有权限进行操作。
2.打开(https://git.DN42.dev/DN42/registry),这是一个官方存放所有DN42成员信息的仓库。
3.点击右上角fork或者派生,克隆一份到自己的仓库下。
4.这时候需要切换到自己的仓库下的registry,并且clone到本地。
> 以下是我的注册信息,仅供参考。您可以复制代码,但请将我的信息全部修改为你的信息。

  • git clone https://git.DN42.dev/kiyomi/registry.git

  • 输入完上述指令后可能需要输入git.DN42.dev的账号密码,按照你注册时候的信息输入即可。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [root@sea-node-jvav DN42b]# git clone https://git.DN42.dev/kiyomi/registry.git
    正克隆到 'registry'...
    Username for 'https://git.DN42.dev': kiyomi
    Password for 'https://kiyomi@git.DN42.dev':
    remote: Enumerating objects: 102917, done.
    remote: Counting objects: 100% (102917/102917), done.
    remote: Compressing objects: 100% (34974/34974), done.
    remote: Total 102917 (delta 72999), reused 97399 (delta 67869), pack-reused 0
    接收对象中: 100% (102917/102917), 15.34 MiB | 10.35 MiB/s, done.
    处理 delta 中: 100% (72999/72999), done.
    [root@sea-node-jvav DN42b]# ls
    registry

    看见上述done字样,那就代表拉取已经成功,可以进行下一步操作了。

  1. 首先在data/mntner/目录创建一个[名称]-MNT文件

    • 上述的[名称]是需要自行创建,最好不要与仓库内现有的名称相同,例如我的叫KIYOMI-MNT,之后下面创建所有的文件,都需要统一使用该名称
      注意:所有文件的缩进都是固定的,请勿用空格或Tab缩进代替,可以前往官方wiki复制模板。

      以下是我的注册信息,仅供参考。您可以复制代码,但请将我的信息全部修改为你的信息。

      1
      2
      3
      4
      5
      6
      mntner:             KIYOMI-MNT
      admin-c: KIYOMI-DN42
      tech-c: KIYOMI-DN42
      mnt-by: KIYOMI-MNT
      auth: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFxVANr+Srl leijiajie.ljj@qq.com
      source: DN42

      下面是文件各项的含义

    • 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和SSH秘钥二选一,只需要选择其中一个对应下面教程即可,当然你做两个秘钥也不是不行
    • remarks:备注,可以不填。

    这部分因为过程繁琐,为了简洁本页教程,所有请传送到另一篇文章查看DN42的GPG和SSH秘钥对生成与部署

  2. 第二个文件是代表你个人信息的文件,在 data/person 文件夹下创建一个 [名称]-DN42 的文件,例如我的就是KIYOMI-DN42

    以下是我的注册信息,仅供参考。您可以复制代码,但请将我的信息全部修改为你的信息。

    1
    2
    3
    4
    5
    6
    person:             Kiyomi
    e-mail: leijiajie.ljj@qq.com
    contact: telegram:K1roto
    nic-hdl: KIYOMI-DN42
    mnt-by: KIYOMI-MNT
    source: DN42

    下面是文件各项的含义

    • person:你的名称。
    • e-mail:你的邮箱。
    • contact:你的联系方式,例如 IRC、Telegram 等。
    • nic-hdl:NIC handle,指向文件本身,与文件名相同,[名称]-DN42。
    • mnt-by:maintain by(由谁维护),指向你之前的 mntner 文件名称,[名称]-MNT。
    • source:默认填 DN42。
  3. 接下来就是到创建AS号的注册文件了,需要在4242420000 - 4242423999之间挑选一个且不能与仓库内现有的AS号相同,当然也不会那么残忍的让你一个个去试,这里有一个工具,能让你更快的找到空闲的AS号和IP块DN42 Free Explorer。找到一个合适的ASN号之后,在 data/aut-num/ 目录下创建名为”AS号”的文件,例如我的文件就是 AS4242421350 ,此文件名需要根据自己挑选的AS号填写。

    以下是我的注册信息,仅供参考。您可以复制代码,但请将我的信息全部修改为你的信息。

    1
    2
    3
    4
    5
    6
    7
    aut-num:            AS4242421350
    as-name: KIYOMI-AS
    descr: Peer with me at leijiajie.ljj@qq.com
    admin-c: KIYOMI-DN42
    tech-c: KIYOMI-DN42
    mnt-by: KIYOMI-MNT
    source: DN42

    下面是文件各项的含义

    • aut-num:AS 号。
    • as-name:AS 的名称,一般只在 DN42 的一些网络结构示意图中看到。可以设置为 [名称]-AS。
    • descr:AS 简介,一般只在结构图中看到,随意填写。
    • admin-c:admin contact(管理员联系信息),指向你的 person 文件,[名称]-DN42。
    • tech-c:tech contact(技术员联系信息),指向你的 person 文件,[名称]-DN42。
    • mnt-by:maintain by(由谁维护),指向你之前的 mntner 文件,[名称]-MNT。
    • source:默认填 DN42。
  4. 这一步是挑选IPV4地址块的环节了,首先去DN42 Free Explorer,挑选到自己喜欢的V4地址块后,在 data/inetnum 目录下创建对应文件,例如我的文件是 172.20.39.80_28,此文件名需要根据自己挑选的地址块填写。

    • 如果你的服务器和设备只有6台,且打算小规模做实验的玩家,只需要申请/29就够了,其次是/28。
    • 与多人peer不需要额外的IP,只用相同IP即可,所以无需额外IP。
    • 你也可以申请 /27,但你能直接申请的最大地址块是 /26。
    • 请勿直接申请/24等巨大地址块,如果你确实需要那么多地址(例如设备很多超过62台),请联系管理员或者官方频道邮箱说明情况。
    • 和公网一样,在DN42当中IPv4地址一样珍贵。

    以下是我的注册信息,仅供参考。您可以复制代码,但请将我的信息全部修改为你的信息。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    inetnum:            172.20.39.80 - 172.20.39.95
    netname: KIYOMI-IPV4
    remarks: Peer with me at leijiajie.ljj@qq.com
    descr: Peer with me at leijiajie.ljj@qq.com
    country: CN
    admin-c: KIYOMI-DN42
    tech-c: KIYOMI-DN42
    mnt-by: KIYOMI-MNT
    status: ASSIGNED
    cidr: 172.20.39.80/28
    source: DN42

    下面是文件各项的含义

    • inetnum:你的这个地址块的范围,如果你不会算,那么可以根据你的地址块前后的用户推出,或者直接用 IP 地址计算器。
    • netname:你的这个地址块的名称,没什么用,随便取(但一般建议保持 [名称]-IPV4 格式)。
    • remarks:简介,随便写。
    • descr:简介,随便写。
    • country:国家代号。
    • admin-c:admin contact(管理员联系信息),指向你的 person 文件,[名称]-DN42。
    • tech-c:tech contact(技术员联系信息),指向你的 person 文件,[名称]-DN42。
    • mnt-by:maintain by(由谁维护),指向你之前的 mntner 文件,[名称]-MNT。
    • status:默认为 ASSIGNED。
    • cidr:以 CIDR 方式表示你的地址块。
    • source:默认填 DN42。
  5. 注册完IP就到了注册route对象了,在 data/route 文件夹创建对应文件,例如我的文件名是 172.20.39.80_28 ,这个名字跟上面的文件名是一样的。

    以下是我的注册信息,仅供参考。您可以复制代码,但请将我的信息全部修改为你的信息。

    1
    2
    3
    4
    5
    route:              172.20.39.80/28
    origin: AS4242421350
    max-length: 28
    mnt-by: KIYOMI-MNT
    source: DN42

    下面是文件各项的含义

    • route:地址块。
    • descr:简介,随便写。
    • ``origin`:填写你的 AS 编号。
    • mnt-by:maintain by(由谁维护),指向你之前的 mntner 文件,[名称]-MNT。
    • source:默认填 DN42。
  6. 这一步是可选的,但我建议你最好还是注册一个IPv6,和v4一样先到DN42 Free Explorer随机挑选一个自己喜欢的v6地址块,然后在 data/inet6num 文件夹内创建地址所对应文件名的文件,例如我的是 fd9e:ed80:8884::_48

    以下是我的注册信息,仅供参考。您可以复制代码,但请将我的信息全部修改为你的信息。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    inet6num:           fd9e:ed80:8884:0000:0000:0000:0000:0000 - fd9e:ed80:8884:ffff:ffff:ffff:ffff:ffff
    netname: KIYOMI-IPV6
    descr: Peer with me at leijiajie.ljj@qq.com
    country: CN
    admin-c: KIYOMI-DN42
    tech-c: KIYOMI-DN42
    mnt-by: KIYOMI-MNT
    status: ASSIGNED
    cidr: fd9e:ed80:8884::/48
    source: DN42

    下面是文件各项的含义

    • inet6num:你的这个地址块的范围。IPv6 的范围算起来很简单,从全 0 到全 f。
    • netname:你的这个地址块的名称(但建议保持 [名称]-IPV6 格式)。
    • remarks:简介,随便写。
    • descr:简介,随便写。
    • country:你的国家代号。
    • admin-c:admin contact(管理员联系信息),指向你的 person 文件,[名称]-DN42。
    • tech-c:tech contact(技术员联系信息),指向你的 person 文件,[名称]-DN42。
    • mnt-by:maintain by(由谁维护),指向你之前的 mntner 文件,[名称]-MNT。
    • status:默认为 ASSIGNED。
    • cidr:以 CIDR 方式表示你的地址块。
    • source:默认填 DN42。
  7. 注册完v6,到创建一个route6对象了,在 data/route6 创建一个跟上面文件名一样的文件,例如我的是 fd9e:ed80:8884::_48

    以下是我的注册信息,仅供参考。您可以复制代码,但请将我的信息全部修改为你的信息。

    1
    2
    3
    4
    5
    6
    route6:             fd9e:ed80:8884::/48
    descr: Peer with me at leijiajie.ljj@qq.com
    origin: AS4242421350
    max-length: 48
    mnt-by: KIYOMI-MNT
    source: DN42

    下面是文件各项的含义

    • route6:地址块。
    • descr:简介,随便写。
    • origin:填写你的 AS 编号。
    • mnt-by:maintain by(由谁维护),指向你之前的 mntner 文件,[名称]-MNT。
    • source:默认填 DN42。
  8. 到这一步已经创建完所有文件了,接下来我们到仓库根目录 registry 下执行 git add .,然后再执行 git commit -S

    • 如果执行完 git commit -S 之后出现以下问题,没有让你输入密码就直接跳过,请按照我下面的提示操作。如果执行完后出现输入密码界面,请输入密码后回车即可。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      [root@sea-node-jvav registry]# git commit -S

      您需要输入密码,才能解开这个用户的私钥:“kiyomi <leijiajie.ljj@qq.com>”
      4096 位的 RSA 密钥,钥匙号 A4161238,建立于 2023-07-03

      gpg: 用户取消
      gpg: “BF640B7B167A28DB99BAC3057681D6B9A4161238”已跳过:操作已取消
      gpg: signing failed: 操作已取消
      error: gpg 无法为数据签名
      fatal: 无法写提交对象
    • 如果你卡在上一步,出现上面提示时我的解决办法是,直接执行gpg --detach-sign,这时候会让你输入密码,输入之后可能会一直卡着没有下一步,等待1分钟左右按 CTRL+C 之后再执行 git commit -S 即可,如果还是显示以上信息可以继续尝试这一步操作,并等待时间久一点再ctrl+c退出。

  9. 之后就可以 git push -f 上到仓库啦。

如果你之前已经commit过或者已经push过到仓库,就得使用官方的一个脚本去合并为一次commit
执行脚本在registry目录下的./squash-my-commits,之后再执行 git push -f 推送到仓库即可。

  1. 回到 dn42/registry ,创建一个合并请求,之后会有 pipelineschema-checker 两个机器人帮你检查文件信息是否有错,如果有错误请修改后重复教程的第8步骤操作,也因为已经commit过,所以每次修改后需要执行 ./squash-my-commits 脚本再push。
  • 如果你在Windows下编写文件再复制到Linux环境,可能会出现奇怪问题,这时候使用 registry 目录下的 ./fmt-my-stuff 脚本检查,或者直接把模板复制到Linux环境进行修改。
  • 也因为检查的是两个机器人,有时候避免不了出现BUG,这时候可以请求管理员评审,通常可以找lare 或者 burble。只要你错的不离谱,他们都会很好心的辅助你排除错误。
  1. 如果上面的合并请求通过了,恭喜你完成了dn42的注册!下面可以开始部署了。

部署流程

我的部署教程基于wireguard + bird2,因为我发现peer的对象基本上都是使用wireguard比较多其次是openvpn,但鉴于openvpn部署麻烦及没那么多人使用,所以本教程还是决定使用wireguard进行隧道连接。

  • 以下教程peer对象为我自己,下面是我的基础信息。

    以下是我的信息,仅供参考。您可以复制代码,但请将我的信息全部修改为你的信息。

    1
    2
    3
    4
    5
    6
    7
    AS Number: 4242421350
    Clearnet Domain: sea.jvav.tech
    Wireguard port: 3981
    Wireguard public key: VCYdDHIKBDfHe+drn2CG6pw56HBzDeoRt6wAx6GUg0Y=
    DN42 IPv4: 172.20.39.81
    DN42 IPv6: fd9e:ed80:8884::1
    DN42 IPv6 Link-local: fe80::1350
  1. 首先执行下面指令,来开启转发及关闭内核rp_filter的严格模式。

    1
    2
    3
    4
    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
    echo "net.ipv4.conf.default.rp_filter=0" >> /etc/sysctl.conf
    echo "net.ipv4.conf.all.rp_filter=0" >> /etc/sysctl.conf
    sysctl -p
  2. 安装Wireguard和Bird2
    yum install -y wireguard-tools bird2

    • 如果你用的是OpenVZ或者LXC的VPS,那只能用其他隧道软件代替,不建议使用wireguard-go代替。
  3. Wireguard隧道创建
    首先执行 wg genkey | tee privatekey | wg pubkey > publickey ,生成公钥和私钥,秘钥可以重复使用,即多个wireguard隧道使用同一个秘钥。

4.然后去 /etc/wireguard 目录,创建wireguard的配置文件。例如我的就是 Jvav-sea.conf ,其实这个命名只需要.conf结尾即可,.conf前的名字就是该隧道接口名字。
vim /etc/wireguard/Jvav-sea.conf

5.然后就可以编写wireguard的标准配置啦。

1
2
3
4
5
6
7
8
9
10
11
12
13
[Interface]
ListenPort = 3981
PrivateKey = AJnSv/9PDr4CejmrJLf8SbstxLTFrBRxDJr1X+TwXU=
PostUp = /sbin/ip addr add dev Jvavlife-lax 172.20.39.85/32 peer 172.20.39.81/32
PostUp = /sbin/ip addr add dev Jvavlife-lax fd9e:ed80:8884::5 peer fd9e:ed80:8884::1
PostUp = /sbin/ip addr add dev Jvavlife-lax fe80::1355 peer fe80::1350
Table = off

[Peer]
Endpoint = lax.jvav.tech:3982
PublicKey = THqpwsLMw1zQrUfvMJ8eI5TLtQ2g4o1QzFdL1SGCAg0=
AllowedIPs = 0.0.0.0/0,::/0

下面是文件各项的含义

  • ListenPort 本机wg监听端口,通常需要提供给peer对方。在DN42里常用对方的后五位ASN作为监听端口号,例如你跟我peer就需要填写21350作为端口号。
  • PrivateKey 第三步生成的秘钥中的私钥。
  • PostUp 这个是生效配置时候附带执行的命令,通常用来写一条通往对方的静态路由。
  • Table 是否覆盖路由表,这个一定要关掉 不然会将你公网路由也给覆盖掉直接断网。
  • Endpoint 对方的连接点,后面需要附带端口。当然按照DN42的常例,跟ListenPort的含义一样,通常是我方的ASN后五位作为端口号。
  • PublicKey 这里填写对方公钥。
  • AllowedIP 允许通过隧道的IP段。

6.修改bird.conf配置文件vim /etc/bird/bird.conf,直接删除所有替换为DN42官方提供的模板

  • 删除原有配置,复制官方模板,需要修改的地方如下

    以下是我的信息,仅供参考。您可以复制代码,但请将我的信息全部修改为你的信息。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ################################################
    # Variable header #
    ################################################

    define OWNAS = 4242421350;
    define OWNIP = 172.20.39.85;
    define OWNIPv6 = fd9e:ed80:8884::5;
    define OWNNET = 172.20.39.80/28;
    define OWNNETv6 = fd9e:ed80:8884::/48;
    define OWNNETSET = [172.20.39.80/28+];
    define OWNNETSETv6 = [fd9e:ed80:8884::/48+];

7.根据官方ROA设置教程,设置认证更新,但因为我们使用的是bird2,所以官方教程不一定准确,请使用以下命令。

  1. 打开 crontab -e 计划任务,复制两条curl指令进去并保存。
    1
    2
    */15 * * * * curl -sfSLR -o/etc/bird/roa_dn42_v6.conf -z/etc/bird/roa_dn42_v6.conf https://dn42.burble.com/roa/dn42_roa_bird2_6.conf && /usr/sbin/birdc configure
    */15 * * * * curl -sfSLR -o/etc/bird/roa_dn42.conf -z/etc/bird/roa_dn42.conf https://dn42.burble.com/roa/dn42_roa_bird2_4.conf && /usr/sbin/birdc configure
  2. 手动执行一次命令,让其生成两个roa文件。
    1
    2
    curl -sfSLR -o/etc/bird/roa_dn42_v6.conf -z/etc/bird/roa_dn42_v6.conf https://dn42.burble.com/roa/dn42_roa_bird2_6.conf
    curl -sfSLR -o/etc/bird/roa_dn42.conf -z/etc/bird/roa_dn42.conf https://dn42.burble.com/roa/dn42_roa_bird2_4.conf && /usr/sbin/birdc configure
    8.新建peer连接,创建 /etc/bird/peer 文件夹,在文件夹中生成一个配置文件 vim jvav.conf , jvav.conf是可以更改其他名字,只要是.conf文件格式就行。
  • 写入配置

    以下是我的信息,仅供参考。您可以复制代码,但请将我的信息全部修改为你的信息。

    1
    2
    3
    protocol bgp jvav-sea from dnpeers {
    neighbor fe80::1350 % 'Jvav-sea' as 4242421350;
    }
    下面是文件各项的含义
  • jvav-sea 名字、注释
  • fe80::1350 % 'Jvav-sea' 对方的IPv4或者IPv6 ULA或者能联系上对方的地址(参考第5点) % 跟对方连通的隧道接口名称(可参考部署流程第4点的命名)
  • 4242421350 对方的ASN

如果需要v4和v6分开,需要在配置里面复制粘贴多4行代码并填写不同的IP地址

9.确认配置,检查是否连通。

  1. 输入命令 birdc c ,确认配置生效。
    1
    2
    3
    4
    [root@idc-do-sea1 ~]# birdc c
    BIRD 2.13.1 ready.
    Reading configuration from /etc/bird.conf
    Reconfigured
  2. 检查bgp是否已经Established
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [root@idc-do-sea1 ~]# birdc s p
    BIRD 2.13.1 ready.
    Name Proto Table State Since Info
    device1 Device --- up 2023-09-13
    static1 Static dn42_roa up 2023-09-13
    static2 Static dn42_roa_v6 up 2023-09-13
    kernel1 Kernel master6 up 2023-09-13
    kernel2 Kernel master4 up 2023-09-13
    static3 Static dn42_roa up 2023-09-13
    static4 Static dn42_roa_v6 up 2023-09-13
    jvav-sea BGP --- up 2023-09-13 Established
  3. 检查是否已接收到路由
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    [root@virmach-us-lax:~# birdc show protocols all kiyomiBGP21
    BIRD 2.0.7 ready.
    Name Proto Table State Since Info
    kiyomiBGP21 BGP --- up 2023-11-20 Established
    BGP state: Established
    Neighbor address: 172.20.39.81
    Neighbor AS: 4213500001
    Local AS: 4213500002
    Neighbor ID: 172.20.39.81
    Local capabilities
    Multiprotocol
    AF announced: ipv4 ipv6
    Route refresh
    Extended next hop
    IPv6 nexthop: ipv4
    Extended message
    Graceful restart
    4-octet AS numbers
    Enhanced refresh
    Long-lived graceful restart
    Neighbor capabilities
    Multiprotocol
    AF announced: ipv4 ipv6
    Route refresh
    Extended next hop
    IPv6 nexthop: ipv4
    Extended message
    Graceful restart
    4-octet AS numbers
    Enhanced refresh
    Long-lived graceful restart
    Session: external AS4
    Source address: 172.20.39.82
    Hold timer: 215.321/240
    Keepalive timer: 48.309/80
    Channel ipv4
    State: UP
    Table: master4
    Preference: 100
    Input filter: ACCEPT
    Output filter: ACCEPT
    Routes: 681 imported, 281 exported, 406 preferred
    Route change stats: received rejected filtered ignored accepted
    Import updates: 47569 0 0 1035 46534
    Import withdraws: 599 0 --- 30 569
    Export updates: 46247 28850 0 --- 17397
    Export withdraws: 367 --- --- --- 10088
    BGP Next hop: 172.20.39.82
    Channel ipv6
    State: UP
    Table: master6
    Preference: 100
    Input filter: ACCEPT
    Output filter: ACCEPT
    Routes: 777 imported, 256 exported, 521 preferred
    Route change stats: received rejected filtered ignored accepted
    Import updates: 71424 0 0 352 71072
    Import withdraws: 1314 0 --- 40 1274
    Export updates: 64724 44695 0 --- 20029
    Export withdraws: 840 --- --- --- 10992
    BGP Next hop: 172.20.39.82
  4. 使用ping和traceroute检查连通性
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    root@china-telecom-gz2:~# ping 172.20.0.53
    PING 172.20.0.53 (172.20.0.53): 56 data bytes
    64 bytes from 172.20.0.53: seq=0 ttl=59 time=459.521 ms
    64 bytes from 172.20.0.53: seq=1 ttl=59 time=460.121 ms
    64 bytes from 172.20.0.53: seq=2 ttl=59 time=460.459 ms
    64 bytes from 172.20.0.53: seq=3 ttl=59 time=466.418 ms

    --- 172.20.0.53 ping statistics ---
    4 packets transmitted, 4 packets received, 0% packet loss
    round-trip min/avg/max = 459.521/461.629/466.418 ms
    root@china-telecom-gz2:~# traceroute 172.20.0.53
    traceroute to 172.20.0.53 (172.20.0.53), 30 hops max, 46 byte packets
    1 172.23.91.121 (172.23.91.121) 28.834 ms 27.571 ms 27.694 ms
    2 172.21.100.188 (172.21.100.188) 37.925 ms 38.138 ms 38.160 ms
    3 172.21.100.200 (172.21.100.200) 66.407 ms 65.627 ms 66.379 ms
    4 172.21.100.192 (172.21.100.192) 218.353 ms 218.831 ms 218.893 ms
    5 172.20.14.42 (172.20.14.42) 459.677 ms 463.262 ms 457.824 ms
    6 172.20.0.53 (172.20.0.53) 452.830 ms 460.043 ms 458.010 ms
  • 至此DN42整体流程已经完成,如果后续需要peer更多玩家,只需要重复wireguard(第5点)和bird2(第8点之后)的配置创建即可。

2023.09.27 更新中

特别鸣谢

感谢Lan Tian大佬的文章,让我在探索DN42的路上少了很多麻烦,也让我在写这篇文章的时候多了很多指引和思路 DN42 实验网络介绍及注册教程(2022-12 更新)


DN42申请与部署
https://www.ljjserver.cn/2023/07/31/DN42申请与部署/
作者
樱落散华
发布于
2023年7月31日
许可协议