Menu Close

WireGuard 多用户配置教程

前几天写过 WireGuard 手动服务端教程后,一部分人想知道如何配置多用户,即多个客户端账号。

同一个账号可以多个设备链接,但是如果你要分享给朋友使用,为了方便管理,建议配置多个账号,这样如果不想要某个人使用的话,直接删除账号即可。


简单说明

其实 WireGuard 的多用户配置特别简单,只需要生成一对客户端密匙(公匙+私匙),在服务端配置文件中新增一段 [Peer] 写上新的客户端公匙和客户端的内网IP地址即可。

当然我们可以用命令快捷添加,或者手动修改服务端配置文件也行。

而各客户端账号配置文件的区别也只是 [Interface] 中的客户端私匙和客户端内网IP地址不同罢了。


另外我们需要明白一个对等原则:

  • 服务端配置文件中的 [Interface] 是保存自己的服务端私匙,而客户端配置文件中的 [Interface] 同样保存自己的客户端私匙。
  • 服务端配置文件中的 [Peer] 是保存客户端的公匙,而客户端配置文件中的 [Peer] 是保存服务端的公匙。
  • 即,服务端与客户端都是互相保存自己的私匙在 [Interface] 中,互相保存对方公匙在 [Peer] 中。

服务端配置文件添加用户

以下步骤是动态添加客户端配置(以下配置前提是你已经配置过 WireGuard 配置文件并启动了)。

你也可以手动修改配置文件 [/etc/wireguard/wg0.conf],记得修改完重启一下。以下动态添加无需重启。

  1. # 重新生成一对客户端密匙
  2. # cprivatekey1 为客户端私匙,cpublickey1 为客户端公匙
  3. wg genkey | tee cprivatekey1 | wg pubkey > cpublickey1
  1. # 服务器上执行添加客户端配置代码(新增一个 [peer]):
  2. # $(cat cpublickey1) 这个是客户端公匙,10.0.0.3/32 这个是客户端内网IP地址,按序递增最后一位(.3),不要重复
  3. wg set wg0 peer $(cat cpublickey1) allowed-ips 10.0.0.3/32

然后查看 WireGuard 状态:

  1. wg
  2. # 执行命令后输出内容如下(仅供参考,下面的不是让你执行的命令):
  3. interface: wg0
  4. public key: xxxxxxxxxxxxxxxxx #服务端私匙
  5. private key: (hidden)
  6. listening port: 443
  7. peer: xxxxxxxxxxxxxxxxxxxx #旧客户端账号的公匙
  8. allowed ips: 10.0.0.2/32 #旧客户端账号的内网IP地址
  9. peer: xxxxxxxxxxxxxxxxxxxx #新客户端账号的公匙
  10. allowed ips: 10.0.0.3/32 #新客户端账号的内网IP地址
  11. # 以上内容仅为输出示例(仅供参考)

如果显示正常,那么我们就保存到配置文件:

  1. wg-quick save wg0

然后我们就要开始生成对应的客户端配置文件了。

 


生成对应客户端配置文件

新客户端配置文件,和其他客户端账号的配置文件只有 [Interface] 中的客户端私匙、内网IP地址参数不一样。

  1. # 井号开头的是注释说明,用该命令执行后会自动过滤注释文字。
  2. # 下面加粗的这一大段都是一个代码!请把下面几行全部复制,然后粘贴到 SSH软件中执行,不要一行一行执行!
  3. echo “[Interface]
  4. # 客户端的私匙,对应服务器配置中的客户端公匙(自动读取上面刚刚生成的密匙内容)
  5. PrivateKey = $(cat cprivatekey1)
  6. # 客户端的内网IP地址(如果上面你添加的内网IP不是 .3 请自行修改)
  7. Address = 10.0.0.3/24
  8. # 解析域名用的DNS
  9. DNS = 8.8.8.8
  10. # 保持默认
  11. MTU = 1420
  12. [Peer]
  13. # 服务器的公匙,对应服务器的私匙(自动读取上面刚刚生成的密匙内容)
  14. PublicKey = $(cat spublickey)
  15. # 服务器地址和端口,下面的 X.X.X.X 记得更换为你的服务器公网IP,端口请填写服务端配置时的监听端口
  16. Endpoint = X.X.X.X:443
  17. # 因为是客户端,所以这个设置为全部IP段即可
  18. AllowedIPs = 0.0.0.0/0, ::0/0
  19. # 保持连接,如果客户端或服务端是 NAT 网络(比如国内大多数家庭宽带没有公网IP,都是NAT),那么就需要添加这个参数定时链接服务端(单位:秒),如果你的服务器和你本地都不是 NAT 网络,那么建议不使用该参数(设置为0,或客户端配置文件中删除这行)
  20. PersistentKeepalive = 25″|sed ‘/^#/d;/^\s*$/d’ > client1.conf
  21. # 上面加粗的这一大段都是一个代码!请把下面几行全部复制,然后粘贴到 SSH软件中执行,不要一行一行执行!

接下来你就可以将这个客户端配置文件 [/etc/wireguard/client.conf] 通过SFTP、HTTP等方式下载到本地了。

不过我更推荐,SSH中打开显示配置文件内容并复制出来后,本地设备新建一个文本文件 [xxx.conf] (名称随意,后缀名需要是 .conf) 并写入其中,提供给 WireGuard 客户端读取使用。

  1. cat /etc/wireguard/client.conf

 


服务端配置文件删除用户

要删除呢也很简单,首先你需要知道你要删除用户的客户端公匙(例如上面刚刚生成的 cpublickey1)。

当然,你也可以手动打开配置文件删除,记得修改后重启。下面的动态删除无需重启。

  1. wg set wg0 peer $(cat cpublickey1) remove
  2. # 如果客户端公匙文件还在,那么可以执行这个命令删除。
  3. # 注意:该命令执行后,就可以跳过下面这段命令了,直接保存配置文件即可。
  4. ——————————————
  5. # 如果客户端公匙文件已删除,那么可以通过 wg 命令看到客户端的公匙:
  6. wg
  7. # 执行命令后输出内容如下(仅供参考,下面的不是让你执行的命令):
  8. interface: wg0
  9. public key: xxxxxxxxxxxxxxxxx #服务端私匙
  10. private key: (hidden)
  11. listening port: 443
  12. peer: xxxxxxxxxxxxxxxxxxxx #客户端账号的公匙
  13. allowed ips: 10.0.0.2/32 #客户端账号的内网IP地址
  14. peer: xxxxxxxxxxxxxxxxxxxx #客户端账号的公匙
  15. allowed ips: 10.0.0.3/32 #客户端账号的内网IP地址
  16. # 以上内容仅为输出示例(仅供参考)
  17. # 复制你要删除的客户端账号的公匙(peer 后面的字符),替换下面命令中的 xxxxxxx 并执行即可
  18. wg set wg0 peer xxxxxxx remove
  19. # 执行后,我们在用 wg 命令查看一下是否删除成功。

如果删除成功,那么我们就保存到配置文件:

  1. wg-quick save wg0

完啦~

发表回复

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