一、安装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即可进入管理平台,添加客户端并将配置导出即可,这个要比手动创建简单易用得多。

最后修改:2024 年 08 月 15 日
如果觉得我的文章对你有用,请随意赞赏