警告:
本人只是一名高三学生,在此之前对于BGP等技术一无所知,因此,本文可能包含但不限于 笔误/错误/小白理解 请大佬勿喷,如果能指正出来那就更好啦

再次警告:
如果您能接受的话,可以继续看下去,如果不能接受,建议现在就关闭此文章


前言

上篇文章中,我们学习了如何加入DN42网络,注册属于自己的ASN与地址块.但是,仅仅拥有这些是远远不够的,为了真正加入DN42网络,你还需要与他人建立联系(Peer)

什么是Peer?

Peer(对等体)的定义:
在计算机网络中,Peer 指的是地位平等、可以直接相互通信和交换信息的设备或程序。

在DN42中,Peer 指的是相互连接并交换路由信息的路由器。它们是互联网上不同网络(自治系统)之间交换路由信息的关键点,可以分为:

  • eBGP Peer: 不同网络间的路由器。
  • iBGP Peer: 同一网络内的路由器。

开始Peer!

如何与别人Peer

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

您可以

找人peer,或者直接找我

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

找几个离你节点近延迟小的节点,然后看下面

重要的系统配置

根据官方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,具体执行下面的代码:

1
2
3
4
5
6
echo "net.ipv4.conf.default.rp_filter=2" >> /etc/sysctl.conf
echo "net.ipv4.conf.all.rp_filter=2" >> /etc/sysctl.conf
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

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

选择隧道软件

不同Peer之间一般是没有网线直接拉上的,互联基本上依靠隧道。现在DN42社区一般喜欢使用WireGuard和OpenVPN,我倾向于使用WireGuard。

WireGuard一般配置为点对点连接。我通常是这么配置WireGuard隧道的:

1
2
3
4
5
6
7
8
9
10
11
12
13
[Interface]
PrivateKey = 我的私钥
ListenPort = 监听端口 #通常为对端ASN后5位
Table = off #一定要加
PostUp = ip addr add 本地IPv6 Link-local地址 dev %i
PostUp = ip addr add 本端DN42的ipv6 peer 对端DN42的ipv6 dev %i
PostUp = ip addr add 本端DN42的ipv4 peer 对端DN42的ipv4 dev %i
PostUp = sysctl -w net.ipv6.conf.%i.autoconf=0

[Peer]
PublicKey = 对端公钥
Endpoint= 对端公网接入点
AllowedIPs = 10.0.0.0/8, 172.20.0.0/14, 172.31.0.0/16, fd00::/8, fe80::/64 #DN42的网络范围

然后直接用 wg-quick + 隧道名(文件名) 启动隧道就建立了互联。

警告:
一定要加Table = off,否则wg-quick会给AllowedIPs加上路由,往外连的路由表应该用BGP管理,所以这里不需要帮你添加

选择BGP软件

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

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

进行Peer

BGP软件配配置好,就可以开始做Peer了。
与他人建立WireGuard隧道后,在/etc/bird/peers/ 中新建文件,写入:

1
2
3
4
5
protocol bgp 线路名称 from dnpeers {
neighbor 对方的本地ipv6链路 % 'WireGuard隧道名称' as 对方ASN;
direct;
ipv4 { extended next hop on; };
};

该配置使用了MP-BGP over link-local

接入完成

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

参考文献

感谢以下文章对本小白踏入 DN42 提供了巨大的帮助!
DN42 实验网络介绍(2020 版)
BIRD 与 BGP 的新手开场
Multiple servers on dn42: iBGP and IGPs
萌新入坑 DN42 之 —— 多服务器互联