这几天用wireguard搭了好几个虚拟局域网,遇到了一些坑,在这里先记录下步骤。

安装

在安装之前,建议手动升级一下你的系统;如果你的系统正好升级了内核,那就顺便重启一下系统。这一步是为了保证你正在用的内核版本与后面的内核头文件匹配,不会出现找不到内核模块从而找不到网卡代码的命令。

对于新版系统,应该可以直接用sudo apt install wireguard安装Wireguard。如果你正在用 Debian 10 (Buster),那就需要手工添加debian-backport 软件源。

对于树莓派,在执行上面的指令之前,还要先安装raspberrypi-kernel-headers这一软件包。Wireguard因其是一个内核模块,所以在还没进入内核之前,都是在安装的设备上编译的。而编译就要依赖Linux的头文件,树莓派的头文件又比较奇怪,必须要手动装。

如果你想要使用的是中心化的局域网(即只有服务器节点有公共IP),并且局域网内的任何两台设备都能够相互通信的话,你还需要把内核的转发功能打开,输入sudo sysctl -w net.ipv4.ip_forward=1 即可打开。

配置

首先要知道Wireguard的一个最基础的概念:节点。每台机子都是一个节点,而这个节点有自己的私钥和对应的公钥。如果一个节点要和另一个节点通信,这两个节点都需要知道对方的公钥。

要生成私钥,输入

wg genkey

这时会出现生成的私钥,记下来,然后可以使用下面的命令获得对应的公钥

echo "YOUR_PRIVATE_KEY" | wg pubkey

为了方便,我们可以直接写wg-quick的配置文件一键配置。这个配置文件放在/etc/wireguard/wg0.conf下,其中文件名可以随意更改。

对于客户端,其配置如下

[Interface]
Address = 192.168.254.2/24 # 你的节点IP
PrivateKey = UEOkFqnFxZG6Z6b3q7QMwjjwb4JB66DDJ+fTrqxTuFA= # 你生成的私钥

[Peer]
PublicKey = 835okzKsnjnu6eY3KOyb1q4opV17W6E+W/DtHOeyan8= # 对方的公钥
AllowedIPs = 192.168.119.0/24 # 路由IP,指示指定的网段走这个端口
Endpoint = 10.0.0.1:51820 # 对面的IP
PersistentKeepalive = 25

对于服务器,其配置如下:

[Interface]
PrivateKey = wFKSXcwThUC/NcEHei09dyzEjFQAfCEm4QWfGCXKlX0= # 服务器的私钥
Address = 192.168.254.1/24 # 服务器的地址
ListenPort = 51820 # 监听端口
PostUp = iptables -I FORWARD -i wg0 -o wg0 -j ACCEPT
PostDown = iptables -D FORWARD -i wg0 -o wg0 -j ACCEPT

[Peer]
PublicKey = 2MkKXBgFkp/3Rn+VKg0WHQUEJcGA729uPwxLDgLmRx0= # 对方的公钥
AllowedIPs = 192.168.254.2/32 # 对方的IP

保存文件后,就可以使用 wg-quick up wg0 来测试配置是否正常了。

可以使用以下命令添加开机启动项

sudo systemctl enable wg-quick@wg0.service
分类: Linux

0 条评论

发表回复

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用 * 标注