WireGuard的简单使用,以及自动Mesh相关想法 | 心 空

  • A+
所属分类:系统文档

因为我手上的机器都是 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服务,请求到另一个PeerEndpoint信息,并加载
1. 两台不同NAT后的节点实现互联

因此,这个自动Mesh的主要机制就是实现一个自动注册、自动分发Endpoint的服务。

关于内网的互联

我们可以通过配置WireGuard以及设置iptablesip 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. 在服务器APeer中,为服务器B所在的PeerAllowedIps增加一个网段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字段。

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin