安装WireGuard
因为我手上的机器都是 ArchLinux,并且内核版本均>5.6,因此只需要简单地开启WireGuard模块并下载工具即可。
sudo modprobe wireguard
sudo pacman -S wireguard-tools
配置WireGuard
这里主要使用配置文件进行WireGuard的配置。
参考:
[Interface]
Address = 192.168.233.201/24
ListenPort = 45678
PrivateKey = VPS1 Private Key
PostUp = iptables -I FORWARD -i wg0 -j ACCEPT; iptables -I FORWARD -o wg0 -j ACCEPT; iptables -I INPUT -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -D INPUT -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
SaveConfig = true
[Peer]
PublicKey = VPS2 Public Key
AllowedIPs = 192.168.233.20/32
Endpoint = 123.117.181.233:6658
PersistentKeepalive = 25
其中,若Peer在NAT/Firewall后,可能需要与Peer保持链接,这时就需要配置PersistentKeepalive配置。
这里给出的配置文件只是一台机器,另一台机器换一换Interface.PrivateKey和对应的Peer.PublicKey等参数即可。
最后,将配置文件放入/etc/wireguard/
文件夹内即可,如/etc/wireguard/wg0.conf
。
使用下面命令可以启动wg0
,并配置其自启动:
sudo systemctl start wg-quick@wg0
sudo systemctl enable wg-quick@wg0
自动Mesh设想
这里发现了一个工具叫wgsd,它是使用CoreDNS来进行Peer连接信息的共享。
主要原理为:
1. 建立一台Register注册服务器
1. 两台不同NAT后的节点均配置好Register服务器的Peer信息,并成功建立连接
1. Register使用DNS服务器去记录两个Peer的Endpoint信息
1. 两台Peer分别通过Register的DNS服务,请求到另一个Peer的Endpoint信息,并加载
1. 两台不同NAT后的节点实现互联
因此,这个自动Mesh的主要机制就是实现一个自动注册、自动分发Endpoint的服务。
关于内网的互联
我们可以通过配置WireGuard以及设置iptables
,ip route
来实现某台服务器内网的互联。
假设:
* 服务器A
* WireGuard IP:10.0.0.1
* 服务器B
* WireGuard IP:10.0.0.2
* 内网网段:192.168.0.0/24
为了实现服务器A访问192.168.0.20
上的服务,我们需要以下几个步骤:
1. 在服务器A的Peer
中,为服务器B所在的Peer的AllowedIps
增加一个网段192.168.0.0/24
1. 在服务器A上增加到192.168.0.0/24
的路由:ip route add 192.168.0.0/24 via 10.0.0.2
当然,服务器B上的iptables也是需要配置的,具体可以参考上面配置文件的PostUp
字段。