一、安装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和client2)秘钥
#生成私钥
wg genkey > client1.key
#通过私钥生成公钥
wg pubkey < client1.key > client1.key.pub
# 查看私钥和公钥
cat client1.key && cat client1.key.pub
#生成私钥
wg genkey > client2.key
# 通过私钥生成公钥
wg pubkey < client2.key > client2.key.pub
# 查看私钥和公钥
cat client2.key && cat client2.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地址
### 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即可。
# 注意:
这里的$(cat key)命令在conf里是不会自动执行的,所以需要自己填写生成的密钥
## 让配置和私钥对普通用户不可读
sudo chmod 600 /etc/wireguard/{server.key,wg0.conf}
4、添加新的指定IP客户端(如client3)
# 之后要生成其他客户端如client3等等也按此步骤操作即可。
#生成私钥
wg genkey > client3.key
# 通过私钥生成公钥
wg pubkey < client3.key > client3.key.pub
# 生成秘钥之后可以用下面的命令快捷导入配置文件
echo "
[Peer]
PublicKey = $(cat client3.key.pub)
AllowedIPs = 10.8.8.12/32" >> wg0.conf
# 之后重新启动wg0接口即可
5、添加新的IP段自动分配IP的客户端(如client4)
# 之后要生成其他客户端如client3等等也按此步骤操作即可。
#生成私钥
wg genkey > client4.key
# 通过私钥生成公钥
wg pubkey < client4.key > client4.key.pub
# 生成秘钥之后可以用下面的命令快捷导入配置文件
echo "
[Peer]
PublicKey = $(cat client4.key.pub)
AllowedIPs = 10.8.8.0/24" >> 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
如果用的是云服务器,需要在安全组策略也要把端口打开。
五、配置客户端
Linux客户端
# 安装WireGuard模块和工具
apt install wireguard
# 调整目录权限
cd /etc/wireguard/
chmod 0777 /etc/wireguard
#调整目录默认权限
umask 077
# 配置接口
sudo vim /etc/wireguard/wg0.conf
[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
# 重启wireguard
wg-quick down wg0
wg-quick up wg0
注释:
PrivateKey:为服务器配置中生成的客户端的私钥
Address:为服务器配置中peer规定的客户端IP
-.-
PublicKey:为服务器配置中生成的server的公钥
AllowedIPs:指整个虚拟网段为10.8.8.1-254网段都可以连接
Endpoint:为服务器公网IP+端口
PersistentKeepalive:自动重连时间
测试:
客户端可以ping 10.8.8.1
看是否成功连接到中转服务器。
服务端可以通过wg
查看peer已连接的主机信息。
Windows客户端
客户端选择新建隧道,填入以下配置:
[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已连接的全部主机信息。
七、更易用、带管理平台的wg-easy
version: "3.8"
services:
wg-easy:
environment:
- LANG=chs
- WG_HOST=服务器公网IP
- PASSWORD=后台访问密码
- WG_DEFAULT_ADDRESS=10.8.8.x
- WG_DEFAULT_DNS=114.114.114.114
- WG_MTU=1420
- WG_ALLOWED_IPS=10.8.8.0/24
- WG_PERSISTENT_KEEPALIVE=25
image: weejewel/wg-easy
container_name: wg-easy
volumes:
- 要挂载的绝对路径:/etc/wireguard
ports:
- "51820:51820/udp"
- "51821:51821/tcp"
restart: unless-stopped
cap_add:
- NET_ADMIN
- SYS_MODULE
sysctls:
- net.ipv4.ip_forward=1
- net.ipv4.conf.all.src_valid_mark=1
之后访问公网IP:51821
即可进入管理平台,添加客户端并将配置导出即可,这个要比手动创建简单易用得多。