一、安装WireGuard
#root权限
sudo -i
# 安装WireGuard模块和工具
apt install wireguard
# 调整目录权限
cd /etc/wireguard/
chmod 0777 /etc/wireguard
#调整目录默认权限
umask 077
二、配置WireGuard
1、生成服务器秘钥
#生成私钥
wg genkey > server.key
#通过私钥生成公钥
wg pubkey < server.key > server.key.pub
# 查看私钥和公钥
cat server.key && cat server.key.pub
2、生成客户端(client1)秘钥
#生成私钥
wg genkey > client1.key
#通过私钥生成公钥
wg pubkey < client1.key > client1.key.pub
# 查看私钥和公钥
cat client1.key && cat client1.key.pub
3、手动创建服务器配置文件
## 查询可访问网络的接口
root@hpfd7t:~# ip -o -4 route show to default | awk '{print $5}'
eno1
## 配置接口
sudo vim /etc/wireguard/wg0.conf
[Interface]
Address = 10.8.8.1
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eno1 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eno1 -j MASQUERADE
DNS = 119.29.29.29
[Peer]
PublicKey = $(cat client1.key.pub)
AllowedIPs = 10.8.8.10/32
[Peer]
PublicKey = $(cat client2.key.pub)
AllowedIPs = 10.8.8.11/32
# 注释:
### Address 本机虚拟局域网的IP。请使用保留给私有网络范围内的IP地址
#### SaveConfig 设置为true时,当关闭接口时将当前配置将保存到配置文件中
### ListenPort 接口监听的端口
### PrivateKey 服务器私钥,前面查看的复制到这里
### PostUp钩子启用iptables伪装。这允许流量离开服务器,使VPN客户端可以访问互联网。
### 用上面命令查询到的可用接口名称替换-A POSTROUTING后面的,这里是eno1
### PostDown钩子,我们在关闭接口之前删除iptables伪装。一旦接口关闭,iptablesnat转发规则将被删除。
### MTU 网络封包的大小,可设置为MTU = 1420,也可不写
### PublicKey 上面生成的客户端公钥client1.key.pub
### AllowedIPs 客户端所使用的IP,IP段为10.8.8.0/24,必须用某个IP则为/32,如这里就必须用10.8.8.10的IP
### 添加多个客户端直接按上面方法再增加Peer即可。
## 让配置和私钥对普通用户不可读
sudo chmod 600 /etc/wireguard/{server.key,wg0.conf}
4、添加新的客户端
# 之后要生成其他客户端如client2、client3等等也按此步骤操作即可。
#生成私钥
wg genkey > client2.key
# 通过私钥生成公钥
wg pubkey < client2.key > client2.key.pub
# 生成秘钥之后可以用下面的命令快捷导入配置文件
echo "
[Peer]
PublicKey = $(cat client2.key.pub)
AllowedIPs = 10.8.8.11/32" >> wg0.conf
# 之后重新启动wg0接口即可
三、启用或关闭接口
# 启用Wireguard接口
sudo wg-quick up wg0
# 如果正确运行应输出以下内容
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.0.0.1/24 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
# 检查接口状态和配置
sudo wg show wg0
或者
ip a show wg0
wireguard作为内核模块运行,默认情况wireguard会自动启动,但接口wg0虚拟网卡不会自动启动。
# 将wg0设置为自动启动
sudo systemctl enable wg-quick@wg0
# 关闭wg0接口
sudo wg-quick down wg0
四、配置防火墙
在之前的步骤中我们在启动wg0接口postup前配置了一条iptables的NAT路由。为使NAT路由可正常工作,必须启用IP转发。
# 开启IP转发
sudo echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
# 启用新的内核属性配置
sudo sysctl -p
# 如果您正在使用UFW管理防火墙,则需要允许端口51820的UDP连接
sudo ufw allow 51820/udp
五、配置客户端
客户端选择新建隧道,填入以下配置:
[Interface]
PrivateKey = 6M8HEZioew+vR3i53sPc64Vg40YsuMzh4vI1Lkc88Xo=
Address = 10.8.8.10
[Peer]
PublicKey = Tt5WEa0Vycf4F+TTjR2TAHDfa2onhh+tY8YOIT3cKjI=
AllowedIPs = 10.8.8.0/24
Endpoint = 公网IP:51820
PersistentKeepalive = 25
注释:
PrivateKey:为服务器配置中生成的客户端的私钥
Address:为服务器配置中peer规定的客户端IP
-.-
PublicKey:为服务器配置中生成的server的公钥
AllowedIPs:指整个虚拟网段为10.8.8.1-254网段都可以连接
Endpoint:为服务器公网IP+端口
PersistentKeepalive:自动重连时间
测试:
客户端可以ping 10.8.8.1
看是否成功连接到中转服务器。
服务端可以通过wg
查看peer已连接的主机信息。
六、多节点配置
步骤同上面配置客户端,完成后即可多节点互相连通,也就相当于成功创建了一个大的内网。
此时可在服务端通过wg
查看peer已连接的全部主机信息。