Wiretrustee:一个基于WireGuard的Mesh Network

Wiretrustee支持NAT穿透,如果NAT穿透失败还可以回退到使用TURN服务器来连接。

下面我演示一下如何用Wiretrustee将你的设备连接到一起(组网)

演示环境有三台机器:openSUSE15.3/Debian10/Windows10。

openSUSE用来搭建TURN服务和Wiretrustee信号服务同时用作客户端,其他两台机器仅客户端。

首先搭建STUN/TURN服务,在openSUSE上安装coturn:

sudo zypper in coturn

编辑coturn的配置文件:

sudo nano /etc/coturn/turnserver.conf

去掉如下配置的注释并进行相应的修改:

listening-port=3478
listening-ip=0.0.0.0
min-port=49152
max-port=65535
verbose
fingerprint
lt-cred-mech
user=imlala:password // 设置你的账号和密码
realm=turn.233.fi // 设置你的域名

启动coturn并查看运行状态:

sudo systemctl enable --now coturn.service
sudo systemctl status coturn.service

打开如下网址测试你搭建的TURN服务是否可用:

https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/

配置格式:

STUN or TURN URI: turn:turn.233.fi:3478
TURN username: imlala
TURN password: password

如有类似下图的回显说明正常:

现在安装Wiretrustee:

sudo zypper in https://github.com/wiretrustee/wiretrustee/releases/download/v0.0.8/wiretrustee_0.0.8_linux_amd64.rpm

现在配置Wiretrustee信号服务,安装supervisor用于守护Wiretrustee信号服务的进程:

sudo zypper in supervisor

新建一个supervisor配置文件:

sudo nano /etc/supervisord.d/signal.conf

写入如下配置:

[program:signal]
command=/usr/local/bin/wiretrustee signal --log-level INFO
user=imlala
autostart=true
autorestart=true

更新supervisor配置:

sudo supervisorctl update

注意:信号服务默认监听10000端口,建议解析一个域名用于访问。

现在需要配置一下openSUSE防火墙,开的端口太多了,所以我这里直接允许所有流量:

sudo firewall-cmd --set-default-zone=trusted
sudo firewall-cmd --reload

现在初始化Wiretrustee:

sudo wiretrustee init \
--stunURLs stun:stun.233.fi:3478,stun:stun.l.google.com:19302 \
--turnURLs imlala:password@turn:turn.233.fi:3478  \
--signalAddr signal.233.fi:10000  \
--wgLocalAddr 10.30.30.1/24  \
--log-level info

会回显给你一个公钥,复制保存下载,这是后续建立peer所需的。

重启Wiretrustee并设置开机自启:

sudo systemctl restart wiretrustee.service
sudo systemctl enable wiretrustee.service

查看是否有一个wiretrustee0的接口:

ip a

如果正常的话,会有类似如下回显:

53: wiretrustee0:  mtu 1280 qdisc fq state UNKNOWN group default qlen 500
link/none
inet 10.30.30.1/24 brd 10.30.30.255 scope global wiretrustee0
valid_lft forever preferred_lft forever
inet6 fe80::56f4:26fd:768f:3b6e/64 scope link stable-privacy
valid_lft forever preferred_lft forever

至此openSUSE上的配置就全部完成了。接下来配置Debian10的客户端。

为保证最佳的性能,这里使用内核自带的WireGuard模块。Debian10默认的4.19内核是没有内置WireGuard模块的,所以这里安装一个新内核。

编辑源配置文件:

apt edit-sources

添加buster-backports源:

deb http://deb.debian.org/debian buster-backports main

更新源信息/安装新内核/重启:

apt -y update
apt install -t buster-backports linux-image-amd64
reboot

查看内核版本:

uname -a

正常回显如下,可以看到是5.10的内核了:

Linux imlala 5.10.0-0.bpo.7-amd64 #1 SMP Debian 5.10.40-1~bpo10+1 (2021-06-04) x86_64 GNU/Linux

WireGuard模块默认是没有加载的,需要手动加载:

modprobe wireguard

验证模块是否正常工作:

lsmod | grep wireguard

如果正常会有类似回显:

wireguard              94208  0
libchacha20poly1305    16384  1 wireguard
ip6_udp_tunnel         16384  1 wireguard
udp_tunnel             20480  1 wireguard
libblake2s             16384  1 wireguard
curve25519_x86_64      49152  1 wireguard
libcurve25519_generic    49152  2 curve25519_x86_64,wireguard

下载并安装Wiretrustee:

wget https://github.com/wiretrustee/wiretrustee/releases/download/v0.0.8/wiretrustee_0.0.8_linux_amd64.deb
dpkg -i wiretrustee_0.0.8_linux_amd64.deb

初始化Wiretrustee:

wiretrustee init \
--stunURLs stun:stun.233.fi:3478,stun:stun.l.google.com:19302 \
--turnURLs imlala:password@turn:turn.233.fi:3478  \
--signalAddr signal.233.fi:10000  \
--wgLocalAddr 10.30.30.2/24  \
--log-level info

这里需要注意的是同一个网络内,每台机器的IP地址必须是不同的,比如我之前openSUSE上配置的IP是10.30.30.1,那么这里就配置成10.30.30.2。

然后还需要交换密钥才能建立连接,首先在这台Debian10上执行如下命令:

wiretrustee add-peer --allowedIPs 10.30.30.1/32 --key 'openSUSE机器的公钥'

重启Wiretrustee生效:

systemctl restart wiretrustee.service

openSUSE这边也需要同样的操作:

sudo wiretrustee add-peer --allowedIPs 10.30.30.2/32 --key 'Debian机器的公钥'

重启Wiretrustee生效:

sudo systemctl restart wiretrustee.service

至此openSUSE和Debian的连接就建立好了,接下来配置Windows10的客户端。

首先在这里下载Windows的客户端:

https://github.com/wiretrustee/wiretrustee/releases/download/v0.0.8/wiretrustee_0.0.8_windows_amd64.tar.gz

用管理员身份打开PowerShell,假设你把文件解压到如下目录:

cd D:\wiretrustee

安装为服务:

.\wiretrustee.exe service install

初始化Wiretrustee:

.\wiretrustee.exe init `
--stunURLs stun:stun.233.fi:3478,stun:stun.l.google.com:19302 `
--turnURLs imlala:password@turn:turn.233.fi:3478  `
--signalAddr signal.233.fi:10000  `
--wgLocalAddr 10.30.30.3/24  `
--log-level info

与openSUSE和Debian交换密钥:

.\wiretrustee.exe add-peer --allowedIPs 10.30.30.1/32 --key 'openSUSE机器的公钥'
.\wiretrustee.exe add-peer --allowedIPs 10.30.30.2/32 --key 'Debian机器的公钥'

启动服务:

.\wiretrustee.exe service start

同样的openSUSE也需要相同的操作:

sudo wiretrustee add-peer --allowedIPs 10.30.30.3/32 --key 'Windows机器的公钥'

重启生效:

sudo systemctl restart wiretrustee.service

Debian也一样:

wiretrustee add-peer --allowedIPs 10.30.30.3/32 --key 'Windows机器的公钥'

重启生效:

systemctl restart wiretrustee.service

最后简单测试一下,实际上我是4台机器,文章内少配置了1台,因为步骤都是一样的,可以看到我4台机器都是可以PING通的:

Windows目前管理服务这块似乎有点问题,可以自己手动起停:

全部为采集文章,文中的 联系方式 均不是 本人 的!

发表评论