第一部分:快速开始

基于WireGuard的VPN安全远程接入系统 - 技术文档

文档版本信息

版本号:v1.0
编写日期:2026年3月23日
编写人:谢北然42006606
服务器IP:192.168.1.66
VPN网段:10.8.0.0/24
文档类型:技术实施文档

1. 系统概述

1.1 项目说明

本项目是一套基于WireGuard协议的安全远程接入系统,旨在为分布式团队提供高性能、低延迟、易部署的VPN解决方案。系统采用现代密码学算法(ChaCha20-Poly1305、Curve25519),在保证安全性的前提下,实现了接近物理网络的传输性能。

设计目标:

技术优势:

1.2 核心功能

1.2.1 VPN隧道管理

1.2.2 Web管理系统

1.2.3 安全特性

1.3 技术栈

1.3.1 服务器端

操作系统:Ubuntu 22.04 LTS
VPN协议:WireGuard (v1.0.20210914+)
Web框架:Flask 2.3.x
前端技术:HTML5 + Tailwind CSS 3.x + Vanilla JavaScript
HTTP服务:Python http.server
虚拟化:EVE-NG (Emulated Virtual Environment - Next Generation)

1.3.2 客户端

Windows:WireGuard for Windows (v0.5.3+)
配置格式:INI-style配置文件
传输协议:UDP
加密算法:ChaCha20-Poly1305、Curve25519、BLAKE2s

1.3.3 核心组件

WireGuard内核模块:Linux Kernel 5.6+ 原生支持
wireguard-tools:用户空间管理工具
Flask:RESTful API后端服务
systemd:服务管理和自启动
iptables:防火墙和NAT规则管理

1.4 网络规划

1.4.1 网络架构

本系统采用三层网络架构:

物理网络层(Underlay)

虚拟网络层(Overlay)

应用服务层

1.4.2 网络拓扑

Internet
    |
    | (公网接入)
    |
[物理路由器] 192.168.1.1
    |
    | (千兆以太网)
    |
[EVE-NG宿主机] 192.168.1.66
    |
    +-- [WireGuard服务器] 
    |       - 物理IP: 192.168.1.66
    |       - 虚拟IP: 10.8.0.1/24
    |       - 监听端口: UDP 51820
    |
    +-- [Web管理系统]
            - HTTP: 192.168.1.66:8000
            - API: 192.168.1.66:5000
    
    
[Windows客户端]
    - 物理IP: 192.168.1.x (DHCP)
    - 虚拟IP: 10.8.0.2/24
    - 连接: 192.168.1.66:51820

1.4.3 数据流向

VPN隧道建立流程:

1. 客户端 --> 服务器:握手请求(Curve25519密钥交换)
2. 服务器 --> 客户端:握手响应(会话密钥协商)
3. 双方建立加密隧道(ChaCha20-Poly1305加密通道)

数据包封装流程:

原始数据包 --> ChaCha20加密 --> Poly1305认证 --> UDP封装 --> IP路由 --> 物理网络

访问内网资源流程:

客户端应用 --> 查询路由表 --> 匹配VPN路由(10.8.0.0/24) 
--> WireGuard接口加密 --> UDP发送(目标:192.168.1.66:51820) 
--> 服务器WireGuard解密 --> 路由到内网服务(10.8.0.1:8000) 
--> 响应数据原路返回

1.5 文档使用说明

1.5.1 文档结构

本技术文档共分为十二个部分:

1.5.2 符号约定

命令行提示符:

# 表示需要root权限执行
$ 表示普通用户权限执行
> 表示Windows PowerShell命令

代码块标识:

# Bash脚本或Shell命令
# 配置文件(INI格式)
# Python代码
# JavaScript代码

注意事项标识:

1.5.3 阅读建议

首次部署者:

  1. 按顺序阅读第一到第四部分
  2. 严格按照步骤操作,不要跳过检查点
  3. 遇到问题查阅第八部分故障排查

运维管理员:

  1. 重点阅读第七、九、十部分
  2. 熟悉常用命令和运维流程
  3. 建立定期巡检和备份机制

开发者:

  1. 重点阅读第五、六部分
  2. 理解配置文件结构和API接口
  3. 参考第十二部分的代码模板

故障处理:

  1. 直接跳转到第八部分
  2. 根据故障现象查找对应章节
  3. 按照诊断流程逐步排查

2. 环境要求

2.1 硬件配置

2.1.1 服务器端最低配置

CPU:Intel Core i3 或同等性能 (2核心)
内存:4GB RAM
存储:20GB 可用磁盘空间
网络:100Mbps 以太网接口

2.1.2 服务器端推荐配置

CPU:Intel Core i5 或更高 (4核心+)
内存:16GB RAM
存储:50GB SSD
网络:1000Mbps 千兆以太网接口

💡 提示:本项目实测环境为 Intel i5 + 16GB RAM + 千兆网络。

2.1.3 客户端硬件要求

CPU:任何支持AES-NI的现代处理器
内存:2GB RAM 以上
网络:有线或WiFi网络连接

2.1.4 EVE-NG宿主机要求

CPU:支持硬件虚拟化 (Intel VT-x 或 AMD-V)
内存:16GB+ (运行多个虚拟节点)
存储:100GB+ 用于虚拟机镜像
虚拟化:VMware Workstation/ESXi/VirtualBox

2.2 操作系统要求

2.2.1 服务器端系统

支持的Linux发行版:

发行版版本要求内核版本推荐度
Ubuntu20.04+ LTS5.4+⭐⭐⭐⭐⭐
Debian11+ (Bullseye)5.10+⭐⭐⭐⭐⭐
CentOS/RHEL8+4.18+⭐⭐⭐⭐
Fedora35+5.14+⭐⭐⭐⭐
Arch LinuxRollingLatest⭐⭐⭐

本项目使用:

操作系统:Ubuntu 22.04.5 LTS (Jammy Jellyfish)
内核版本:Linux 5.15.0+
架构:x86_64 (amd64)

⚠️ 重要:WireGuard需要Linux内核5.6+才能获得原生支持。对于较旧内核(3.10-5.5),需要使用DKMS模块。

2.2.2 客户端系统

支持的操作系统:

操作系统版本要求客户端软件
Windows10/11 (64-bit)WireGuard for Windows
macOS10.14+WireGuard for macOS
LinuxKernel 3.10+wireguard-tools
iOS12.0+WireGuard (App Store)
Android5.0+WireGuard (Google Play)

本项目测试环境:

操作系统:Windows 10 Pro (64-bit)
版本号:22H2 (Build 19045)
客户端:WireGuard v0.5.3

2.3 软件依赖清单

2.3.1 服务器端核心依赖

系统级依赖:

# WireGuard核心
wireguard              # VPN协议实现
wireguard-tools        # 管理工具 (wg, wg-quick)

# 网络工具
iptables               # 防火墙管理
iproute2               # 网络配置 (ip命令)
net-tools              # 网络工具 (ifconfig, netstat)

# 系统工具
systemd                # 服务管理
openresolv             # DNS解析管理

Python运行环境:

# Python基础
python3                # Python 3.8+
python3-pip            # Python包管理器
python3-venv           # 虚拟环境 (可选)

# Python依赖包
Flask==2.3.3           # Web框架
flask-cors==4.0.0      # 跨域支持 (可选)

2.3.2 依赖安装命令

一键安装所有依赖:

# 更新软件源
sudo apt update

# 安装系统依赖
sudo apt install -y wireguard wireguard-tools \
    iptables iproute2 net-tools systemd openresolv

# 安装Python环境
sudo apt install -y python3 python3-pip

# 安装Python依赖包
sudo pip3 install Flask==2.3.3

验证安装:

# 检查WireGuard版本
wg --version

# 检查Python版本
python3 --version

# 检查Flask安装
python3 -c "import flask; print(flask.__version__)"

预期输出:

wireguard-tools v1.0.20210914
Python 3.10.12
2.3.3

2.3.3 可选依赖

增强功能依赖:

# 性能监控
htop                   # 系统监控
iotop                  # IO监控
nethogs                # 网络流量监控

# 网络诊断
tcpdump                # 抓包工具
wireshark              # 流量分析
traceroute             # 路由跟踪
mtr                    # 网络诊断

# 日志分析
logrotate              # 日志轮转
rsyslog                # 系统日志

# 安全工具
fail2ban               # 防暴力破解
ufw                    # 简化防火墙管理

安装命令:

sudo apt install -y htop iotop nethogs tcpdump \
    traceroute mtr logrotate rsyslog fail2ban ufw

2.4 网络要求

2.4.1 网络连接要求

服务器端网络:

客户端网络:

2.4.2 端口要求

必须开放的端口:

端口协议用途方向
51820UDPWireGuard VPN入站
8000TCPWeb管理界面入站
5000TCPFlask API入站

防火墙配置:

# 允许WireGuard端口
sudo ufw allow 51820/udp

# 允许Web管理端口
sudo ufw allow 8000/tcp
sudo ufw allow 5000/tcp

# 启用防火墙
sudo ufw enable

2.4.3 NAT环境支持

本系统支持以下NAT场景:

NAT穿透配置:

# 客户端配置文件添加
[Peer]
PersistentKeepalive = 25  # 每25秒发送保活包

2.4.4 DNS要求

推荐DNS配置:

主DNS:223.5.5.5 (阿里云)
备DNS:114.114.114.114 (114DNS)

主DNS:8.8.8.8 (Google)
备DNS:1.1.1.1 (Cloudflare)

客户端DNS配置:

[Interface]
DNS = 223.5.5.5, 114.114.114.114

2.5 权限要求

2.5.1 服务器端权限

必需的root权限操作:

权限检查:

# 检查当前用户权限
whoami

# 检查sudo权限
sudo -v

# 检查是否可以执行root命令
sudo id

2.5.2 文件权限要求

关键文件权限:

# 私钥文件必须设置为600
chmod 600 /etc/wireguard/server_private.key

# 配置文件建议设置为600
chmod 600 /etc/wireguard/wg0.conf

# 公钥文件可以设置为644
chmod 644 /etc/wireguard/server_public.key

⚠️ 安全警告:私钥文件权限过于宽松(如644、777)会导致安全风险,WireGuard可能拒绝启动。

2.5.3 SELinux/AppArmor

Ubuntu系统默认使用AppArmor:

# 检查AppArmor状态
sudo aa-status

# 如果遇到权限问题,可以临时禁用
sudo systemctl stop apparmor
sudo systemctl disable apparmor

💡 提示:生产环境建议保持AppArmor启用,并配置正确的策略文件。


3. IP地址与端口规划

3.1 物理网络地址分配

3.1.1 物理网络规划

网络信息:

网段:192.168.1.0/24
子网掩码:255.255.255.0
网关:192.168.1.1
可用IP范围:192.168.1.2 - 192.168.1.254
DNS服务器:192.168.1.1 (通常由路由器提供)

3.1.2 设备IP分配表

设备IP地址MAC地址说明
路由器/网关192.168.1.1-物理网络出口
EVE-NG宿主机192.168.1.66固定WireGuard服务器
Windows客户端192.168.1.xDHCP动态分配
其他内网设备192.168.1.2-254DHCP根据实际情况

3.1.3 服务器网络配置

查看当前网络配置:

# 查看IP地址
ip addr show

# 查看路由表
ip route show

# 查看DNS配置
cat /etc/resolv.conf

固定IP配置(Netplan方式):

# 编辑网络配置文件
sudo nano /etc/netplan/00-installer-config.yaml

配置内容:

network:
  version: 2
  ethernets:
    pnet0:  # 网卡名称,根据实际情况修改
      dhcp4: no
      addresses:
        - 192.168.1.66/24
      gateway4: 192.168.1.1
      nameservers:
        addresses:
          - 223.5.5.5
          - 114.114.114.114

应用配置:

# 应用网络配置
sudo netplan apply

# 验证配置
ip addr show pnet0

3.2 VPN虚拟网络地址

3.2.1 VPN网络规划

网络信息:

网段:10.8.0.0/24
子网掩码:255.255.255.0
可用IP范围:10.8.0.1 - 10.8.0.254
最大客户端数:253个
网络类型:点对多点 (Point-to-Multipoint)

3.2.2 VPN地址分配表

节点虚拟IP角色说明
WireGuard服务器10.8.0.1/24ServerVPN网关
Windows客户端110.8.0.2/32Client第一个客户端
客户端210.8.0.3/32Client预留
客户端310.8.0.4/32Client预留
10.8.0.5-254-可扩展范围

💡 提示:服务器使用/24掩码,客户端使用/32掩码(单个IP)。

3.2.3 IP分配策略

手动分配(推荐):

分配规则示例:

10.8.0.1      - 服务器保留
10.8.0.2-50   - 正式员工
10.8.0.51-100 - 远程办公人员
10.8.0.101-200- 临时访客
10.8.0.201-254- 测试/开发

3.2.4 子网隔离

多子网规划(可选):

10.8.0.0/24   - 总部员工VPN网段
10.8.1.0/24   - 分支机构VPN网段
10.8.2.0/24   - 临时访客VPN网段
10.8.3.0/24   - 开发测试VPN网段

📝 说明:多子网需要配置多个WireGuard接口(wg0、wg1等)和相应的路由规则。

3.3 端口使用清单

3.3.1 WireGuard端口

端口协议服务默认可修改说明
51820UDPWireGuard VPN加密隧道通信

端口说明:

修改端口示例:

# 服务器配置文件
[Interface]
ListenPort = 41194  # 修改为其他端口

# 客户端配置文件
[Peer]
Endpoint = 192.168.1.66:41194  # 对应修改

3.3.2 Web管理系统端口

端口协议服务用途外网访问
5000TCPFlask API后端API接口❌ 不建议
8000TCPHTTP ServerWeb管理界面⚠️ 谨慎开放

安全建议:

限制访问示例:

# 仅允许内网访问Web管理界面
sudo ufw deny 8000/tcp
sudo ufw allow from 192.168.1.0/24 to any port 8000

# 仅允许本机访问API
sudo ufw deny 5000/tcp
sudo ufw allow from 127.0.0.1 to any port 5000

3.3.3 系统管理端口

端口协议服务用途建议
22TCPSSH远程管理✅ 保留,限制IP
80TCPHTTPWeb服务⚠️ 可选
443TCPHTTPSWeb服务⚠️ 可选

SSH安全加固:

# 修改SSH端口(可选)
sudo nano /etc/ssh/sshd_config
# 修改:Port 22 为 Port 2222

# 禁用root登录
PermitRootLogin no

# 仅允许密钥登录
PasswordAuthentication no

# 重启SSH服务
sudo systemctl restart sshd

3.3.4 端口冲突检查

检查端口占用:

# 方法1:使用netstat
sudo netstat -tulnp | grep :51820
sudo netstat -tulnp | grep :8000
sudo netstat -tulnp | grep :5000

# 方法2:使用ss
sudo ss -tulnp | grep :51820

# 方法3:使用lsof
sudo lsof -i :51820

处理端口占用:

# 查找占用进程PID
sudo lsof -i :8000

# 杀死进程
sudo kill -9 <PID>

# 或使用fuser
sudo fuser -k 8000/tcp

3.4 DNS配置

3.4.1 服务器DNS配置

查看当前DNS:

# 查看DNS配置
cat /etc/resolv.conf

# 测试DNS解析
nslookup www.baidu.com
dig www.google.com

配置DNS(systemd-resolved):

# 编辑resolved配置
sudo nano /etc/systemd/resolved.conf

配置内容:

[Resolve]
DNS=223.5.5.5 114.114.114.114
FallbackDNS=8.8.8.8 1.1.1.1

应用配置:

# 重启DNS服务
sudo systemctl restart systemd-resolved

# 验证配置
resolvectl status

3.4.2 客户端DNS配置

自动推送DNS(推荐):

# 客户端配置文件
[Interface]
PrivateKey = <客户端私钥>
Address = 10.8.0.2/24
DNS = 223.5.5.5, 114.114.114.114

DNS分流策略:

# 方案1:使用VPN的DNS(全部流量)
DNS = 10.8.0.1

# 方案2:使用公共DNS(分流模式)
DNS = 223.5.5.5, 114.114.114.114

# 方案3:不修改DNS(保持原DNS)
# 不配置DNS选项

3.4.3 DNS泄露测试

测试命令:

# Linux/macOS
nslookup www.baidu.com
dig www.google.com

# Windows PowerShell
Resolve-DnsName www.baidu.com

在线测试工具:

https://dnsleaktest.com/
https://ipleak.net/

💡 提示:如果DNS泄露,可能暴露真实访问记录,建议配置正确的DNS参数。

XBR

© 2026 XBR

bilibili bluesky discord