从零搭建个人 WireGuard VPN:阿里云轻量服务器实战记录

admin 发布于 1 小时前 1 次阅读


前言

最近我在阿里云轻量应用服务器上部署了一个个人自用的 WireGuard VPN。
这台服务器原本已经运行了 WordPress、Nginx、MariaDB 和宝塔面板,所以在正式搭建 VPN 之前,我先对服务器做了一轮基础安全加固。

本篇文章记录完整过程,包括:

1. 检查服务器端口
2. 加固 MariaDB 数据库端口
3. 收紧 Nginx 888 端口
4. 确认宝塔面板公网不可访问
5. 阿里云防火墙放行 WireGuard UDP 端口
6. 安装 WireGuard
7. 配置服务端
8. 配置 Windows 客户端
9. 测试 VPN 是否成功连接

本次搭建目标很明确:
只做个人自用 VPN,不做机场,不做多人共享。


一、服务器环境

本次使用的是阿里云轻量应用服务器,环境如下:

项目配置
云厂商阿里云
类型轻量应用服务器
地域日本东京
系统Alibaba Cloud Linux 3
CPU2 vCPU
内存2 GiB
硬盘40 GiB
镜像WordPress 应用镜像
Web 环境Nginx + MariaDB + WordPress
VPN 软件WireGuard

服务器原本已经运行 WordPress,所以不能直接乱改端口或服务。
在部署 VPN 前,先查看当前监听端口。

ss -tulnp

可以看到类似端口:

22      SSH
80 HTTP
443 HTTPS
888 Nginx 附加端口
8888 宝塔面板
3306 MariaDB

这里需要重点关注:

3306    数据库端口
888 Nginx 附加端口
8888 宝塔面板端口

二、加固 MariaDB:关闭 3306 公网监听

一开始查看端口时,MariaDB 是这样监听的:

*:3306

这表示 MariaDB 监听在所有网卡上。
如果云防火墙不小心放行了 3306,公网就可能直接访问数据库,这是比较危险的。

1. 查看 MariaDB 进程

ps -ef | grep '[m]ariadbd'

可以看到数据库路径类似:

/www/server/mysql/bin/mariadbd

这说明当前 MariaDB 是宝塔环境安装的。


2. 查找 MySQL 配置文件

find /etc /www/server -name "my.cnf" 2>/dev/null

主要配置文件是:

/etc/my.cnf

其他 mysql-test 目录下的是测试文件,不需要修改。


3. 备份配置文件

cp /etc/my.cnf /etc/my.cnf.bak.$(date +%F_%H%M)

4. 修改 MariaDB 监听地址

执行下面命令,把 MariaDB 限制为只监听本机:

if grep -q "^\[mysqld\]" /etc/my.cnf; then
  if grep -qE "^[[:space:]]*bind-address[[:space:]]*=" /etc/my.cnf; then
    sed -ri 's|^[[:space:]]*bind-address[[:space:]]*=.*|bind-address=127.0.0.1|' /etc/my.cnf
  else
    sed -i '/^\[mysqld\]/a bind-address=127.0.0.1' /etc/my.cnf
  fi
else
  cat >> /etc/my.cnf <<'EOF'

[mysqld]
# 只允许本机访问 MySQL,避免 3306 暴露到公网
bind-address=127.0.0.1
EOF
fi

检查是否写入成功:

grep -nE "^\[mysqld\]|bind-address" /etc/my.cnf

正常应该看到:

[mysqld]
bind-address=127.0.0.1

5. 重启 MariaDB

/etc/init.d/mysqld restart

6. 检查 3306 监听状态

ss -tulnp | grep 3306

正确结果应该是:

127.0.0.1:3306

这说明 MariaDB 现在只允许服务器本机访问,公网无法直接连接数据库。


三、确认 WordPress 是否正常

修改数据库监听地址后,需要确认 WordPress 网站是否正常。

curl -I https://你的域名

如果返回:

HTTP/2 200

说明网站正常。

本次环境中,WordPress 通过 Cloudflare 代理访问,访问链路大致是:

用户浏览器 → Cloudflare → 阿里云服务器 → WordPress

数据库端口收紧后,WordPress 没有受到影响。


四、收紧 Nginx 的 888 端口

继续检查发现 Nginx 监听了 888 端口:

0.0.0.0:888

先访问本机测试:

curl -I http://127.0.0.1:888

返回:

HTTP/1.1 404 Not Found
Server: nginx

说明这个端口由 Nginx 监听,但是没有实际页面匹配。


1. 查找 888 端口配置

grep -R "listen 888" /www/server/panel/vhost/nginx /www/server/nginx/conf 2>/dev/null

找到配置位置:

/www/server/nginx/conf/nginx.conf

2. 备份 Nginx 配置

cp /www/server/nginx/conf/nginx.conf /www/server/nginx/conf/nginx.conf.bak.$(date +%F_%H%M)

3. 修改 888 为本机监听

sed -i 's/listen 888;/listen 127.0.0.1:888; # 仅本机访问/' /www/server/nginx/conf/nginx.conf

4. 检查 Nginx 配置

/www/server/nginx/sbin/nginx -t

如果看到:

syntax is ok
test is successful

说明配置没有问题。


5. 重启 Nginx

这里建议使用 restart,而不是 reload。

/etc/init.d/nginx restart

6. 检查 888 端口

ss -ltnp '( sport = :888 )'

正确结果:

127.0.0.1:888

这说明 888 端口已经只允许本机访问。


五、确认宝塔 8888 端口

查看宝塔面板端口:

ss -ltnp '( sport = :8888 )'

结果可能是:

0.0.0.0:8888

这表示宝塔面板在服务器本机监听所有网卡。

但是是否能从公网访问,还要看阿里云防火墙是否放行了 8888。

用浏览器访问:

http://你的服务器公网IP:8888

如果打不开,说明阿里云防火墙没有放行 8888,公网访问不到。

我的建议是:

不要在阿里云防火墙放行 8888
如果必须开放,也只允许自己的公网 IP 访问

六、阿里云防火墙放行 WireGuard 端口

WireGuard 默认使用 UDP 协议,本次使用端口:

51820/UDP

在阿里云轻量应用服务器防火墙模板中新增规则:

项目内容
应用类型自定义
协议UDP
端口范围51820
来源 IP0.0.0.0/0
策略允许

注意:

WireGuard 使用 UDP,不是 TCP。

创建规则后,需要将防火墙模板应用到当前服务器实例。


七、检查 WireGuard 内核支持

在服务器执行:

uname -r
modprobe wireguard
lsmod | grep wireguard

如果看到类似内容:

wireguard
libchacha20poly1305
udp_tunnel
curve25519_x86_64

说明当前系统支持 WireGuard。

本次服务器内核可以正常加载 WireGuard 模块。


八、安装 WireGuard 工具

执行:

dnf install -y wireguard-tools iptables || yum install -y wireguard-tools iptables

安装完成后,就可以使用:

wg
wg-quick

九、生成 WireGuard 服务端与客户端密钥

创建配置目录:

mkdir -p /etc/wireguard
chmod 700 /etc/wireguard

生成服务端密钥:

wg genkey | tee /etc/wireguard/server_private.key | wg pubkey > /etc/wireguard/server_public.key

生成客户端 peer1 密钥:

wg genkey | tee /etc/wireguard/peer1_private.key | wg pubkey > /etc/wireguard/peer1_public.key

注意:

server_private.key 是服务端私钥,不能泄露。
peer1_private.key 是客户端私钥,也不能泄露。

十、生成 WireGuard 服务端配置

自动识别公网出口网卡:

PUB_IF=$(ip route get 1.1.1.1 | awk '{print $5; exit}')

读取密钥:

SERVER_PRIVATE=$(cat /etc/wireguard/server_private.key)
PEER1_PUBLIC=$(cat /etc/wireguard/peer1_public.key)

写入服务端配置:

cat > /etc/wireguard/wg0.conf <

十一、开启 IPv4 转发

WireGuard 客户端要通过服务器访问外网,服务器必须开启 IPv4 转发。

临时开启:

sysctl -w net.ipv4.ip_forward=1

永久开启:

cat > /etc/sysctl.d/99-wireguard.conf <

重新加载:

sysctl --system

确认看到:

net.ipv4.ip_forward = 1

十二、启动 WireGuard 服务端

启动并设置开机自启:

systemctl enable --now wg-quick@wg0

查看服务状态:

systemctl status wg-quick@wg0 --no-pager

正常状态:

Active: active (exited)

查看 WireGuard 状态:

wg

查看 UDP 51820 是否监听:

ss -ulnp | grep 51820

正常结果:

0.0.0.0:51820
[::]:51820

到这里,WireGuard 服务端已经启动成功。


十三、生成 Windows 客户端配置

生成客户端配置文件:

cat > /root/peer1.conf <

注意:

/root/peer1.conf 里包含客户端私钥,不能公开。

十四、Windows 客户端导入配置

Windows 安装 WireGuard 官方客户端后,打开软件。

点击:

从文件导入隧道

选择:

peer1.conf

导入成功后,点击:

连接

如果导入失败,常见原因是配置文件复制多了终端输出。

正确配置文件第一行必须是:

[Interface]

不能包含:

[root@xxx]# cat /root/peer1.conf
applications.auth peer1.conf

这些内容都不是 WireGuard 配置,复制进去就会报错。


十五、测试 VPN 是否成功连接

Windows 客户端点击连接后,在服务器执行:

wg

如果看到:

latest handshake: xx seconds ago
transfer: xxx received, xxx sent

说明客户端已经连接成功。

本次测试中,服务器显示:

latest handshake: 23 seconds ago
transfer: 567.11 KiB received, 1.86 MiB sent

这说明 Windows 客户端已经和服务器完成握手,并且开始正常收发数据。

最后可以在 Windows 浏览器打开:

https://ifconfig.me

如果显示的是服务器公网 IP,说明当前 Windows 流量已经通过 WireGuard VPN 出口访问互联网。


十六、安全注意事项

1. 不要泄露 peer1.conf

peer1.conf 里面有客户端私钥:

PrivateKey

谁拿到这个文件,谁就可以使用你的 VPN。


2. 不要多人共用同一个 peer

当前客户端地址是:

10.66.66.2/32

这个只建议给一台设备使用。

如果手机也要连接,应该单独创建:

peer2:10.66.66.3/32
peer3:10.66.66.4/32

不要把同一个配置文件复制给多台设备长期同时使用。


3. 阿里云防火墙不要乱开端口

建议只开放:

22/tcp      SSH
80/tcp      HTTP
443/tcp     HTTPS
51820/udp   WireGuard

不要开放:

3306/tcp    MySQL
888/tcp     Nginx 附加端口
8888/tcp    宝塔面板

4. 不要做公开机场

本次搭建目标是个人自用 VPN,不建议用于:

多人共享
公开订阅
机场面板
BT/PT 下载
长期跑满带宽

这样容易触发服务商风控,也可能违反服务商使用规则。


5. 定期检查 WireGuard 状态

查看 WireGuard 状态:

wg

查看服务状态:

systemctl status wg-quick@wg0 --no-pager

重启 WireGuard:

systemctl restart wg-quick@wg0

停止 WireGuard:

systemctl stop wg-quick@wg0

十七、常见问题排查

问题 1:客户端导入失败

一般是配置文件复制错了。

正确开头:

[Interface]

错误开头:

[root@xxx]# cat /root/peer1.conf
applications.auth peer1.conf

解决方法:
只保留 [Interface]PersistentKeepalive = 25 之间的内容。


问题 2:客户端能连接,但是不能上网

检查 IPv4 转发:

sysctl net.ipv4.ip_forward

正确结果:

net.ipv4.ip_forward = 1

检查 NAT 规则:

iptables -t nat -L POSTROUTING -n -v

检查 WireGuard 状态:

wg

问题 3:没有握手

检查阿里云防火墙是否放行:

51820/UDP

注意必须是 UDP,不是 TCP。

检查服务端是否监听:

ss -ulnp | grep 51820

问题 4:和 Clash Verge 冲突

如果电脑上同时开启 Clash Verge 和 WireGuard,可能出现路由或 DNS 冲突。

建议测试 WireGuard 时:

先关闭 Clash Verge
或者把 Clash Verge 切换为直连

十八、最终效果

本次实验最终完成:

MariaDB 3306 收紧到 127.0.0.1
Nginx 888 收紧到 127.0.0.1
宝塔 8888 公网无法访问
阿里云防火墙放行 51820/UDP
WireGuard 服务端正常启动
Windows 客户端成功导入配置
VPN 握手成功
数据传输正常

最终在服务器执行 wg,可以看到:

latest handshake
transfer received / sent

这代表 WireGuard VPN 已经成功连接。


总结

这次实验的重点不是简单安装 WireGuard,而是在已有 WordPress 服务器环境中,先完成基础安全加固,再部署个人 VPN。

整个过程可以总结成三句话:

先加固,再部署。
先收端口,再开 VPN。
只做自用,不做公开服务。

WireGuard 相比传统 VPN 更轻量,配置也更简洁。
只要保护好私钥、控制好端口、避免多人滥用,它非常适合个人远程访问和轻量代理场景。


文章标签

WireGuard
VPN
阿里云
轻量应用服务器
Linux
网络安全
服务器运维
WordPress
宝塔面板

文章摘要

本文记录了一次在阿里云轻量应用服务器上搭建个人 WireGuard VPN 的完整过程,包括 MariaDB 端口加固、Nginx 端口收紧、阿里云防火墙配置、WireGuard 服务端部署、Windows 客户端导入与连接测试。

此作者没有提供个人介绍。
最后更新于 2026-05-06