前几天写过 WireGuard 手动服务端教程后,一部分人想知道如何配置多用户,即多个客户端账号。
同一个账号可以多个设备链接,但是如果你要分享给朋友使用,为了方便管理,建议配置多个账号,这样如果不想要某个人使用的话,直接删除账号即可。
简单说明
其实 WireGuard 的多用户配置特别简单,只需要生成一对客户端密匙(公匙+私匙),在服务端配置文件中新增一段 [Peer] 写上新的客户端公匙和客户端的内网IP地址即可。
当然我们可以用命令快捷添加,或者手动修改服务端配置文件也行。
而各客户端账号配置文件的区别也只是 [Interface] 中的客户端私匙和客户端内网IP地址不同罢了。
另外我们需要明白一个对等原则:
- 服务端配置文件中的 [Interface] 是保存自己的服务端私匙,而客户端配置文件中的 [Interface] 同样保存自己的客户端私匙。
- 服务端配置文件中的 [Peer] 是保存客户端的公匙,而客户端配置文件中的 [Peer] 是保存服务端的公匙。
- 即,服务端与客户端都是互相保存自己的私匙在 [Interface] 中,互相保存对方公匙在 [Peer] 中。
服务端配置文件添加用户
点击展开 查看更多
以下步骤是动态添加客户端配置(以下配置前提是你已经配置过 WireGuard 配置文件并启动了)。
你也可以手动修改配置文件 [/etc/wireguard/wg0.conf],记得修改完重启一下。以下动态添加无需重启。
# 重新生成一对客户端密匙
# cprivatekey1 为客户端私匙,cpublickey1 为客户端公匙
wg genkey | tee cprivatekey1 | wg pubkey > cpublickey1
# 服务器上执行添加客户端配置代码(新增一个 [peer]):
# $(cat cpublickey1) 这个是客户端公匙,10.0.0.3/32 这个是客户端内网IP地址,按序递增最后一位(.3),不要重复
wg set wg0 peer $(cat cpublickey1) allowed-ips 10.0.0.3/32
然后查看 WireGuard 状态:
wg
# 执行命令后输出内容如下(仅供参考,下面的不是让你执行的命令):
interface: wg0
public key: xxxxxxxxxxxxxxxxx #服务端私匙
private key: (hidden)
listening port: 443
peer: xxxxxxxxxxxxxxxxxxxx #旧客户端账号的公匙
allowed ips: 10.0.0.2/32 #旧客户端账号的内网IP地址
peer: xxxxxxxxxxxxxxxxxxxx #新客户端账号的公匙
allowed ips: 10.0.0.3/32 #新客户端账号的内网IP地址
# 以上内容仅为输出示例(仅供参考)
如果显示正常,那么我们就保存到配置文件:
wg-quick save wg0
然后我们就要开始生成对应的客户端配置文件了。
生成对应客户端配置文件
点击展开 查看更多
新客户端配置文件,和其他客户端账号的配置文件只有 [Interface] 中的客户端私匙、内网IP地址参数不一样。
# 井号开头的是注释说明,用该命令执行后会自动过滤注释文字。
# 下面加粗的这一大段都是一个代码!请把下面几行全部复制,然后粘贴到 SSH软件中执行,不要一行一行执行!
echo "[Interface]
# 客户端的私匙,对应服务器配置中的客户端公匙(自动读取上面刚刚生成的密匙内容)
PrivateKey = $(cat cprivatekey1)
# 客户端的内网IP地址(如果上面你添加的内网IP不是 .3 请自行修改)
Address = 10.0.0.3/24
# 解析域名用的DNS
DNS = 8.8.8.8
# 保持默认
MTU = 1420
[Peer]
# 服务器的公匙,对应服务器的私匙(自动读取上面刚刚生成的密匙内容)
PublicKey = $(cat spublickey)
# 服务器地址和端口,下面的 X.X.X.X 记得更换为你的服务器公网IP,端口请填写服务端配置时的监听端口
Endpoint = X.X.X.X:443
# 因为是客户端,所以这个设置为全部IP段即可
AllowedIPs = 0.0.0.0/0, ::0/0
# 保持连接,如果客户端或服务端是 NAT 网络(比如国内大多数家庭宽带没有公网IP,都是NAT),那么就需要添加这个参数定时链接服务端(单位:秒),如果你的服务器和你本地都不是 NAT 网络,那么建议不使用该参数(设置为0,或客户端配置文件中删除这行)
PersistentKeepalive = 25"|sed '/^#/d;/^\s*$/d' > client1.conf
# 上面加粗的这一大段都是一个代码!请把下面几行全部复制,然后粘贴到 SSH软件中执行,不要一行一行执行!
接下来你就可以将这个客户端配置文件 [/etc/wireguard/client.conf] 通过SFTP、HTTP等方式下载到本地了。
不过我更推荐,SSH中打开显示配置文件内容并复制出来后,本地设备新建一个文本文件 [xxx.conf] (名称随意,后缀名需要是 .conf) 并写入其中,提供给 WireGuard 客户端读取使用。
cat /etc/wireguard/client.conf
服务端配置文件删除用户
点击展开 查看更多
要删除呢也很简单,首先你需要知道你要删除用户的客户端公匙(例如上面刚刚生成的 cpublickey1)。
当然,你也可以手动打开配置文件删除,记得修改后重启。下面的动态删除无需重启。
wg set wg0 peer $(cat cpublickey1) remove
# 如果客户端公匙文件还在,那么可以执行这个命令删除。
# 注意:该命令执行后,就可以跳过下面这段命令了,直接保存配置文件即可。
——————————————
# 如果客户端公匙文件已删除,那么可以通过 wg 命令看到客户端的公匙:
wg
# 执行命令后输出内容如下(仅供参考,下面的不是让你执行的命令):
interface: wg0
public key: xxxxxxxxxxxxxxxxx #服务端私匙
private key: (hidden)
listening port: 443
peer: xxxxxxxxxxxxxxxxxxxx #客户端账号的公匙
allowed ips: 10.0.0.2/32 #客户端账号的内网IP地址
peer: xxxxxxxxxxxxxxxxxxxx #客户端账号的公匙
allowed ips: 10.0.0.3/32 #客户端账号的内网IP地址
# 以上内容仅为输出示例(仅供参考)
# 复制你要删除的客户端账号的公匙(peer 后面的字符),替换下面命令中的 xxxxxxx 并执行即可
wg set wg0 peer xxxxxxx remove
# 执行后,我们在用 wg 命令查看一下是否删除成功。
如果删除成功,那么我们就保存到配置文件:
wg-quick save wg0
完啦~
是不是很简单咧~ 有问题请在下面留言。
参考教程:https://git.zx2c4.com/WireGuard/about/src/tools/man/wg-quick.8
参考视频:https://youtu.be/X4doKJmjE4o
转载请超链接注明:逗比根据地 » WireGuard —— 多用户配置教程
责任声明:本站一切资源仅用作交流学习,请勿用作商业或违法行为!如造成任何后果,本站概不负责!