世界树网络配置指南
欢迎加入电报上的Yggdrasil网络中文讨论组:@yggdrasil_zh_unofficial
什么是世界树网络 (Yggdrasil Network)
世界树网络是一种新型的实验性紧凑型路由的网络方案,主要特点是点对点和去中心。
这么说可能有点抽象,但是如果你用过Wireguard/Tailscale/Nebula这类VPN的话可能更能理解一点,世界树网络就是一个超大的VPN,但是比起前面的那些VPN,它多了一个特点:每个节点同时也是路由器。对于Tailscale/Nebula这种VPN来说,所有的连接都是点对点的,如果有两个节点都在NAT后面而且打洞失败,又没有配置中继,那么就连不上了。但是世界树网络中,所有节点同时也是中继,所以打洞失败也没有关系,数据包可以通过其他节点中转过去,这样的网络虽然带宽和性能都差一点,但是却更加健壮,更能在审查和防火墙中存活。
加入了世界树网络能干什么
加入世界树网络就像加入了一个地下网络,虽然这里并没有什么暗网黑市,但是有很多爱好者建立的个人网站、电台、聊天服务器、电子邮件列表、BitTorrent Tracker等等。这里不再有网络运营商设立的防火墙,你可以随时随地开放自己想要开放的通信端口。
启动世界树网络
以下介绍均基于Linux系统。
Archlinux安装最为简单,只需要
sudo pacman -S yggdrasil
对于Debian系发行版,参考这里。对于红帽系发行版,参考这里。
直接从源代码构建也并不困难。
安装完成之后,系统会多出两个命令:
yggdrasilyggdrasilctl
首先生成配置文件
sudo bash -c 'yggdrasil -genconf > /etc/yggdrasil.conf'
然后编辑/etc/yggdrasil.conf。
配置文件中最重要的PrivateKey,最好备份一下,并且要注意保密。
Peers这一项中,需要添加几个Peer。可以在这个网页找一些离自己的服务器比较近的,加上六七个就可以。另外,我也建立了一个半公开的Peer:tls://raye.mistivia.com:5563。如果你加上我的这个Peer的话,可以在世界树网络中跟我直连。Peers配置好之后大概是这样:
Peers: [
tls://xxxxxxx:1111
tcp://xxxxxxx:2222
quic://xxxxxx:3333
tls://raye.mistivia.com:5563
]
如果你有其他朋友也在世界树网络中,并且有公开Peer,也可以加在这个列表中。
又或者,如果你只想当一个客户端接入网络,而不想帮忙转发数据包,那就只连一个公共Peer就可以了。因为只有连接两个以上Peer的节点才有可能成为中继。
Listen这个选项是可选的,不过还是建议配置一下。如果想当公共Peer的话就设置Listen一下0.0.0.0,否则最好Listen一下127.0.0.1,后面jumper打洞那里有用处。端口号可以随意填写。这里写两个,一个tcp,一个udp(quic),两个协议齐上阵,打洞成功率更高。
Listen: [
quic://127.0.0.1:60001
tcp://127.0.0.1:60002
]
IfName这一项建议设置成ygg0:
IfName: ygg0
这样配置文件就完成了。
以上配置完成后,用
sudo yggdrasil -useconffile /etc/yggdrasil.conf
可以启动。
如果用系统包管理器安装,那么应该已经配置了systemd service,可以用:
sudo systemctl enable yggdrasil
sudo systemctl start yggdrasil
启动之后看一下ip addr的输出,应该会有一个ygg0的设备,具有一个ipv6地址。
然后可以尝试ping我:
ping 200:2829:50f2:e2f1:96e1:3d6d:e107:b39f
访问世界树网络中的网站
如果能ping通的话,此时打开浏览器,可以访问我在Yggdrasil网络上的个人主页:
http://[200:2829:50f2:e2f1:96e1:3d6d:e107:b39f]/
这个网页上记载了世界树网络中各种各样的网络服务。
其中比较重要的是一个资源聚合站:
http://[21e:a51c:885b:7db0:166e:927:98cd:d186]/
配置防火墙
默认情况下,Yggdrasil会打开所有的端口,网络中有成千上万个节点,这样难免会不安全,所以保险起见,最好还是配一下防火墙。
如果你不开设服务器,那么直接关闭所有传入连接即可:
sudo ip6tables -A INPUT -i ygg0 -p tcp -j DROP
sudo ip6tables -A INPUT -i ygg0 -p udp -j DROP
如果要开设服务器的话,再按需打开。
比如HTTP服务器:
sudo ip6tables -I INPUT -i ygg0 -p tcp --dport 80 -j ACCEPT
比如DNS服务器:
sudo ip6tables -I INPUT -i ygg0 -p udp --dport 53 -j ACCEPT
比如RTMP服务器:
sudo ip6tables -I INPUT -i ygg0 -p tcp --dport 1935 -j ACCEPT
比如Minecraft服务器:
sudo ip6tables -I INPUT -i ygg0 -p tcp --dport 25565 -j ACCEPT
注意:iptables配置重启后会丢失。可能需要写一个systemd oneshot服务,跑一个脚本,等待ygg0接口出现后执行上面的这些iptables指令。
配置世界树邮箱 (YggMail)
YggMail是基于世界树网络的点对点电子邮件系统,只要连上世界树网络中的Peer就可以用,不需要第三方的服务器。
要使用的话,首先下载和构建:
git clone --depth=1 https://github.com/neilalexander/yggmail.git
cd yggmail/cmd/yggmail
go build
sudo cp yggmail /usr/local/bin/
运行:
yggmail -password
这样会创建一个密码。然后yggmail会在当前目录创建yggmail.db,这是一个sqlite数据库文件,以后每次都要在有这个文件的目录下运行yggmail。
然后连接本地peer启动邮件服务器(这里假设你之前配置yggdrasil的时候像我一样配置了Listen):
yggmail -peer quic://127.0.0.1:60001
这里会显示你的邮箱地址,类似于12345678912345678xxxx@yggmail,需要记录一下。
用Thunderbird之类的邮箱客户端,邮箱地址配置成上面显示的地址,配置IMAP为127.0.0.1端口1143,SMTP为127.0.0.1端口1025即可收发邮件。
建议把YggMail配置成systemd service。
我的地址是:
1e9e82eb9419064b03d03a70a0433c8e3ba78ff0c16b832a33f33bf80eaa4078@yggmail
欢迎给我发邮件~
此外,我还运营了一个邮件列表(功能类似论坛),给下面这个地址发送一个标题为“subscribe”的邮件即可订阅。订阅后可以向列表中发送邮件,邮件将会被转发给所有的订阅者:
7518044a7fed74c23f6b0becd4bac302aff1fdadd92e4014419ca0f0d8cb16d6@yggmail
利用Jumper直连加速(可选)
如果你没有配置成为公开节点的话,默认情况下Yggdrasil只会跟Peers中列出的节点通信,这样只有这些节点会获悉你的IP地址,这样会很安全,但是网络性能会相应降低,一个数据包可能要好几跳才能到达目的地,延迟会很高。
Yggdrasil-jumper可以解决这个问题,它会自动查看当前跟本机互联的节点,如果双方都安装了jumper,就会尝试打洞建立一个临时的直通的点对点连接,网络性能会大大提升。
在这里可以下载到相应平台的yggdrasil-jumper二进制。需要chmod加上可执行权限,并移动到/usr/local/bin/yggdrasil-jumper。
Jumper不需要配置,可以直接启动:
sudo yggdrasil-jumper --reconnect
这里也建议配置成systemd service。
Yggdrasil-jumper虽然提供了Windows版本,但是有bug,Windows上暂时用不了。
有配置智能翻墙的透明代理的话,需要注意,透明代理相当于对称NAT,是无法打洞建立点对点连接的,必须把yggdrasil-jumper加到白名单中直连。
不过相应的,本机的真实IP有可能会暴露,所以可以根据自己的需求选择是否启用jumper。一个折中的方案是开启jumper的白名单功能,只限定几个受信任的IP地址打洞,可以自行探索。
利用Tor加入世界树网络 (可选)
如果对安全性和匿名性有极端需求的话,可以通过Tor加入网络。
假设本地启动了Tor,在9050默认端口开启了Sock5代理。那么:把/etc/yggdrasil.conf的Peers中所有的tcp://xxx:yyy都改成socks://127.0.0.1:9050/xxx:yyy,然后把tls://xxx:yyy都改成sockstls://127.0.0.1:9050/xxx:yyy,并删除quic、ws等类型的peers,即可。