0. 前置要求
这篇文章只会介绍目前最简单、常用的方式。如果下面的条件不满足,不妨看看其他文章。
- 你已经完成了 DN42 的注册,及 节点 和 BIRD 的配置。
- 你的对等方(比如我们)支持 WireGuard + Multiprotocol BGP + Extended Next Hop。
- 你的 BIRD 版本 >= 2.0.8,Linux 内核版本 >= 5.2。
- 你和对等方都有公网 IP。
1. 准备需要的信息
你需要从对等方获取这些信息:
- ASN
- WireGuard 公钥
- WireGuard 终结点(
<域名/IP>:<端口>
) - 链路本地 IPv6 地址
此类地址总是以fe80
开头。不要把::
打成:
。
同时,你是你的对等方的对等方,所以最终同样的信息也需要提供给你的对等方。
2. 建立 WireGuard 隧道
-
如果还没有,使用你的包管理器安装 WireGuard。
-
生成一对密钥。
wg genkey | tee wg-private.key | wg pubkey
你的私钥会保存在
wg-private.key
中,不应该暴露给任何人;相应的公钥会输出到终端上,需要提供给你的对等方。 -
创建一个接口配置文件。
将下面的内容保存到/etc/wireguard/wg-<对等方名称>.conf
。这需要 root 权限。[Interface] PrivateKey = <刚才生成的私钥> ListenPort = <你开放的端口> Address = <你的链路本地 IPv6 地址>/64 Table = off PostUp = echo 0 > /proc/sys/net/ipv4/conf/%i/rp_filter [Peer] PublicKey = <对等方的公钥> Endpoint = <对等方的终结点> AllowedIPs = fe80::/64, fd00::/8, 172.20.0.0/14, 172.31.0.0/16, 10.0.0.0/8
- 对等方名称 可以帮助你辨别不同的互联,需要在 12 个字符及以内。
- 你开放的端口 用于对等方与你建立隧道,通常为 20000 与 对等方 ASN 最后四位的和。你可能需要在节点及服务商的防火墙上开放这个端口。
- 你的链路本地 IPv6 地址 用于对等方与你建立 BGP 会话,通常为
fe80::<你的 ASN 后四位>
。
后两项信息需要提供给对等方。你还需要提供你的公网 IP 地址或解析到该地址的域名,后者更优。
-
启动隧道。
sudo systemctl enable --now wg-quick@wg-<对等方名称>
3. 建立 BGP 会话
-
确保存放配置的目录存在:
sudo mkdir -p /etc/bird/peers
。 -
创建一个会话配置文件。
将下面的内容保存到/etc/bird/peers/dn42_<对等方名称>.conf
。这需要 root 权限。protocol bgp dn42_<对等方名称> from dnpeers { neighbor <对等方的链路本地 IPv6 地址> % 'wg-<对等方名称>' as <对等方 ASN>; ipv4 { extended next hop on; }; }
对等方 ASN 是一个数字,不包含“AS”前缀。
-
应用配置:
sudo birdc configure
。
4. 检验
sudo birdc show protocol all dn42_<对等方名称>
如果你看到类似于下面的文字,大概率就互联成功啦。
...
BGP state: Established
...
Channel ipv4
State: UP
...
Routes: 634 imported, 599 exported, 74 preferred
...
Channel ipv6
State: UP
...
Routes: 663 imported, 606 exported, 88 preferred
...