玩一玩 DN42

两个月前,我向 DN42 提交了申请,并于4个小时后通过了审核,获得了自己的 AS 和 IP。

作此文分享一下把玩 DN42 的心得,也作为我的备忘录。

我的信息

1
2
3
AS4242423490
IPv4: 172.23.13.64/28
IPv6: fd44:6b93:4eaa::/48

目前仅一个洛杉矶节点开放 Peer,后期还将添加韩国和日本的节点。

如何把玩

注册

有关注册的文章很多,推荐这两篇:

DN42 实验网络介绍及注册教程(2022-02 更新) | Lan Tian @ Blog

初探 DN42 网络 - 宝硕博客 (baoshuo.ren)

需要使用 Git 和 PGP,在 DN42 的 Git 仓库提交你的个人信息即可完成注册。

搭建内网

在和其他 AS 建立对等连接之前,我们先要把内网整理好:

各台服务器的地理位置和网络位置各不相同,需要使用 VPN 创建虚拟局域网。

课堂上讲了两种内网路由协议:

  • RIP 是“真”内网用的,不适用于这种物理位置距离较远(路由跳数多)的虚拟内网;

  • 可以使用 OSPF,但我在配置的时候遇到了不少问题,因此也不建议你使用。

有一位老朋友可以轻松解决以上两个问题:Zerotier

Zerotier 的虚拟网络可以使用自己的 IP,只需在 Managed Routes 中设置你在 DN42 申请的 IPv4 和 IPv6,即可为每台加入虚拟网络的主机自动或手动配置 DN42 IP。

在机器之间使用 DN42 IP 互 ping 测试连通性。

准备 BGP 相关软件

搭建好内网之后,就可以开始配置 BGP 发言人啦。

选择一台或多台服务器,作为自治域向外宣告路由的发言人。

在每台服务器上都需要配置 BGP 相关的软件,以及和其他 BGP 发言人建立连接(一般是 VPN 连接)的软件。

目前在 DN42 网络用的比较多的 VPN 软件是 Wireguard,BGP 软件则可以从 bird 2、bird 1、quagga 等软件中选择。

我使用的是 bird 2。

安装与配置 BIRD 2

安装命令:

1
2
apt update
apt install bird2 -y

bird 2 的配置文件位于 /etc/bird,名为 bird.conf

配置文件可以参考(照抄)DN42 官方给出的配置:howto/Bird2 (dn42.dev)

喂到嘴边的配置方法:

  • 将官方配置填入 /etc/bird/bird.conf
  • /etc/bird 目录下新建名为 peers 的文件夹
  • 下载 ROA 配置(命令来自宝硕的博客
1
2
wget -4 -O /tmp/dn42_roa.conf https://dn42.burble.com/roa/dn42_roa_bird2_4.conf && mv -f /tmp/dn42_roa.conf /etc/bird/dn42_roa.conf
wget -4 -O /tmp/dn42_roa_v6.conf https://dn42.burble.com/roa/dn42_roa_bird2_6.conf && mv -f /tmp/dn42_roa_v6.conf /etc/bird/dn42_roa_v6.conf

​ 并配置 crontab,每小时自动下载并重载新配置:

1
2
3
0 */1 * * * wget -4 -O /tmp/dn42_roa.conf https://dn42.burble.com/roa/dn42_roa_bird2_4.conf && mv -f /tmp/dn42_roa.conf /etc/bird/dn42_roa.conf
0 */1 * * * wget -4 -O /tmp/dn42_roa_v6.conf https://dn42.burble.com/roa/dn42_roa_bird2_6.conf && mv -f /tmp/dn42_roa_v6.conf /etc/bird/dn42_roa_v6.conf
0 */1 * * * birdc configure

安装并配置 Wireguard

安装命令:

1
2
apt update
apt install wireguard -y

这样就安装了 Wireguard 和名为 wg-quick 的管理工具。

使用命令:

1
wg genkey | tee privatekey | wg pubkey > publickey

在当前目录下创建 Wireguard 建立连接所用的密钥对(公钥和私钥)。

就此 Wireguard 安装完成。

配置系统内核

打开内核的数据包转发功能:

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

关闭内核 rp_filter 的严格模式:

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

如果有 ufw 等防火墙自动配置工具,务必关闭。

p.s. 我拿到任何机器后会立刻执行的指令是:

1
sudo ufw disable

创建 Dummy 网卡

dummy 网卡具体的作用我不是很清楚…

只知道如果要用链路本地地址进行通讯,要把 DN42 的 IP 地址绑定到 dummy 网卡上。

dummy 网卡配置指令如下:([ ] 中为需要你填写的内容)

1
2
3
4
5
ip link del dummy
ip link add dummy type dummy
ip addr add [你的 DN42 IPv4 地址]/32 dev dummy
ip addr add [你的 DN42 IPv6 地址]/128 dev dummy
ip link set dummy up

和小伙伴建立对等连接(peer)

需要和对方分享的

  • 你的 DN42 信息,包括 AS 号和发言人的 DN42 IPv4(IPv6)地址;
  • 若使用链路本地地址,还需提供这东西,一般为一个本地 IPv6 地址,常取 fe80::[你的 AS 号后4位]
  • 发言人的外网 IPv4 地址(或域名)和 Wireguard 隧道的通讯端口;
  • Wireguard 公钥。

有一些信息会在以下的配置中获得。

Wireguard 相关的

/etc/wireguard 目录下创建 Wireguard 配置文件,每一个配置文件对应着一个 Wireguard 隧道。

例如你要和 AS114514 建立对等连接,可以在 peers 文件夹下新建一个名为 wg_114514.conf (文件名即为 wireguard 隧道名)的配置文件。

配置的模板如下:([ ] 中为需要你填写的内容)

1
2
3
4
5
6
7
8
9
10
11
[Interface]
Table = off
ListenPort = [我们的监听端口,可以用对方 AS 号的后五位]
PrivateKey = [刚刚生成的 Wireguard 私钥]
PostUp = ip addr add [本机的 DN42 IPv4 地址]/32 peer [对方机器的 DN42 IPv4 地址]/32 dev %i
PostUp = ip addr add [本机的链路本地地址(见 BIRD 相关配置)]/64 dev %i

[Peer]
PublicKey = [对方的 Wireguard 公钥]
AllowedIPs = 10.0.0.0/8, 172.20.0.0/14, 172.31.0.0/16, fd00::/8, fe80::/64
Endpoint = [对方机器的公网 IP 地址或域名 : 端口号]

然后使用 wg-quick up [wireguard 隧道名(刚刚的配置文件名)] 启动 Wireguard 隧道。

可以 ping 一下对方的 DN42 IP 看看 Wireguard 隧道是否连接成功。

使用 wg 命令查看各隧道的连接情况。若有显示 last handshake,一般情况下隧道就已成功建立。

BIRD 相关的

在先前导入的 bird 2 配置中定义了一个 peers 文件夹,就是用来存放 peer 相关的配置。

例如你要和 AS114514 又臭 建立对等连接,可以在 peers 文件夹下新建一个名为 114514.conf (文件名可自定义)的配置文件。

我采用的是链路本地地址(Link-Local)的配置方法。配置的模板如下:([ ] 中为需要你填写的内容)

1
2
3
protocol bgp [peer的名字] from dnpeers {
neighbor [对方的链路本地地址] % '[通向对方的 Wiregurad 隧道名]' as [对方的 AS 号];
}

添加完配置之后别忘了用 birdc configure 重载 bird 2 配置。

使用命令 birdc s p 可以查看 BIRD 2 软件下所有协议的通信情况。

若显示为:

1
dn42_xxxx   BGP    ---    up    20:36:30.984   Established

则表示 BGP 连接已建立。

尾声

我还在写 DN42 相关的站点,在上面分享节点信息,方便大家 peer。

但目前进度缓慢(悲)。


玩一玩 DN42
https://blog.udon.eu.org/archives/dbf21067.html
作者
Kare Udon
发布于
2022年4月1日
许可协议