- 使用
WireGuard:强烈推荐,这是目前最流行、性能最高、配置最简单的现代 VPN 协议,它基于最新的加密技术,代码量少,易于审计,速度极快,非常适合个人使用。 - 使用
OpenVPN:经典选择,非常稳定、成熟,兼容性极好,几乎所有设备和平台都支持客户端,配置比 WireGuard 稍微复杂一些,但功能强大。
本文将以 Ubuntu 22.04 为例进行讲解,其他发行如 Debian、CentOS 的命令也基本类似,只需稍作调整(apt 改为 yum 或 dnf)。

使用 WireGuard (推荐)
WireGuard 的核心优势是简单,整个配置过程就是几个命令。
第 1 步:更新系统并安装 WireGuard
登录到你的 Linux 服务器(推荐使用 root 用户或 sudo 权限用户)。
# 更新软件包列表 sudo apt update # 安装必要的工具和 WireGuard sudo apt install wireguard -y
第 2 步:生成服务器的密钥对
WireGuard 使用公钥和私钥进行认证,我们需要为服务器和每个客户端都生成一对。
生成服务器密钥:

# 进入 WireGuard 配置目录 cd /etc/wireguard/ # 生成私钥和公钥 # 私钥 wg0.privatekey 将只显示在屏幕上,请务必保存好! # 公钥 wg0.publickey 将会保存到文件中 umask 077 wg genkey | tee server_private.key | wg pubkey > server_public.key
查看并记录下服务器的公钥,稍后会用到:
cat server_public.key
第 3 步:创建服务器配置文件
WireGuard 的网络接口(如 wg0)配置文件通常存放在 /etc/wireguard/ 目录下。
创建并编辑配置文件:
sudo nano /etc/wireguard/wg0.conf
粘贴进去,并根据你的实际情况进行修改:
[Interface] # 服务器私钥,从刚才的文件中读取 PrivateKey = <你的服务器私钥内容> # VPN 服务器的 IP 地址和子网 # 这个 IP 将作为你 VPN 网关的地址 Address = 10.0.0.1/24 # 端口,WireGuard 默认使用 51820,可以修改成你喜欢的,8080 或 4433 # 同时确保在云服务商(阿里云、腾讯云等)和防火墙中开放这个端口 ListenPort = 51820 # 启用 IP 转发,这是让客户端能够访问互联网的关键 PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE # (可选) 如果你的服务器有多个网卡,将 eth0 改成你对外连接的网卡名
重要:
- 将
<你的服务器私钥内容>替换为cat /etc/wireguard/server_private.key的输出内容。 eth0是大多数云服务器默认的公网网卡名称,你可以使用ip a命令查看你的网卡名,如果不是eth0,请务必修改。
保存并退出 nano (按 Ctrl+X,Y,Enter)。
第 4 步:配置客户端(以你的手机为例)
我们需要为你的手机或电脑创建一个客户端配置。
生成客户端密钥对:
在服务器上执行,为第一个客户端(比如叫 phone)生成密钥。
# 为客户端 'phone' 生成密钥 wg genkey | tee phone_private.key | wg pubkey > phone_public.key
记录下客户端的私钥和公钥:
# 客户端私钥,用于生成客户端配置文件 cat phone_private.key # 客户端公钥,用于添加到服务器配置中 cat phone_public.key
创建客户端配置文件:
这个 .conf 文件需要导入到你的手机或电脑 WireGuard 客户端中。
sudo nano /etc/wireguard/phone.conf
[Interface] # 客户端的私钥 PrivateKey = <你的客户端私钥内容> # 客户端在 VPN 网络中的 IP 地址 Address = 10.0.0.2/32 # (可选) 客户端 DNS,防止 DNS 泄漏 DNS = 8.8.8.8, 1.1.1.1 [Peer] # 服务器的公钥 PublicKey = <你的服务器公钥内容> # 服务器的公网 IP 地址和端口 Endpoint = <你的服务器公网IP>:51820 # 允许客户端访问的 VPN 子网 AllowedIPs = 10.0.0.0/24 # (可选) 如果想让客户端通过 VPN 访问整个互联网,将上面这行改为: # AllowedIPs = 10.0.0.0/24, 0.0.0.0/0 # 保持连接,120 秒内没有数据传输,则发送一个 100 字节的包来保持连接 PersistentKeepalive = 25
重要:
- 将
<你的客户端私钥内容>和<你的服务器公钥内容>替换为之前记录的内容。 <你的服务器公网IP>替换为你的服务器的真实公网 IP 地址。AllowedIPs的设置决定了通过 VPN 走哪些流量。0.0.0/24表示只访问 VPN 服务器所在局域网;0.0.0/0表示所有流量都走 VPN。
第 5 步:将客户端添加到服务器并启动服务
将客户端的公钥添加到服务器配置:
编辑服务器的主配置文件:
sudo nano /etc/wireguard/wg0.conf
在文件末尾添加一个 [Peer] 部分:
# ... (之前的 [Interface] 配置) ... [Peer] # 客户端 'phone' 的公钥 PublicKey = <你的客户端phone公钥内容> # 分配给客户端的 VPN IP 地址 AllowedIPs = 10.0.0.2/32
启动 WireGuard 服务:
# 启动 wg0 接口 sudo wg-quick up wg0 # 设置开机自启 sudo systemctl enable wg-quick@wg0
检查服务状态:
# 查看 WireGuard 的配置和连接状态 sudo wg # 应该能看到类似下面的输出,显示已连接的客户端 # interface: wg0 # public key: <服务器公钥> # private key: (hidden) # listening port: 51820 # # peer: <客户端公钥> # endpoint: <客户端IP>:端口 # allowed ips: 10.0.0.2/32 # latest handshake: 10 seconds ago # transfer: 1.25 MiB received, 2.50 MiB sent
第 6 步:在客户端连接
- 在你的手机(iOS/Android)或电脑(Windows/macOS/Linux)上安装 WireGuard 客户端。
- 通过 "导入配置文件" 或 "二维码扫描" 的方式,将刚才创建的
/etc/wireguard/phone.conf文件内容添加到客户端。- 手机:你可以使用
cat /etc/wireguard/phone.conf命令查看文件内容,然后长按选择全部,复制生成二维码,用手机扫描即可。 - 电脑:可以直接将
phone.conf文件拖到客户端窗口。
- 手机:你可以使用
- 启动连接!
你的设备应该已经通过 VPN 安全地连接到服务器了,你可以访问 whatismyip.com 来验证你的公网 IP 是否已变为服务器的 IP。
使用 OpenVPN (经典稳定)
如果你需要兼容非常老的设备,或者对某些高级功能有需求,可以选择 OpenVPN。
第 1 步:安装 OpenVPN 和 Easy-RSA
easy-rsa 是一个用于管理 PKI (Public Key Infrastructure) 的工具集,可以简化证书的创建过程。
sudo apt update sudo apt install openvpn easy-rsa -y
第 2 步:准备 PKI 环境
# 创建一个工作目录 mkdir ~/openvpn-ca && cd ~/openvpn-ca # 复制 easy-rsa 模板文件 make-cadir easy-rsa cd easy-rsa/ # 编辑 vars 文件,预设一些默认值 nano vars
在 vars 文件中,找到并修改以下几行(去掉 export 前面的 并修改值):
set_var EASYRSA_REQ_COUNTRY "CN" set_var EASYRSA_REQ_PROVINCE "Beijing" set_var EASYRSA_REQ_CITY "Beijing" set_var EASYRSA_REQ_ORG "My Company" set_var EASYRSA_REQ_EMAIL "your.email@example.com" set_var EASYRSA_REQ_OU "MyOrganizationalUnit"
保存退出。
第 3 步:构建证书颁发机构 (CA) 和服务器/客户端证书
# 初始化 PKI ./easyrsa init-pki # 构建一个 Certificate Authority (CA) # 过程中会要求你输入一个密码,请务必记住! ./easyrsa build-ca nopass # 为服务器创建证书和密钥 # 这一步会问你 CA 密码,输入即可,Common Name 可以直接回车使用默认值。 ./easyrsa gen-req server nopass # 使用 CA 签名服务器的请求 # 这一步会问你 CA 密码。 ./easyrsa sign-req server server # 为客户端创建证书(以 client1 为例) ./easyrsa gen-req client1 nopass ./easyrsa sign-req client client1 # 生成 Diffie-Hellman 参数(用于密钥交换),比较耗时 ./easyrsa gen-dh # 生成一个 HMAC 密钥,用于增强 TLS 的安全性 openvpn --genkey --secret pki/ta.key
第 4 步:创建服务器配置文件
# 复制示例配置文件 sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/ sudo gunzip /etc/openvpn/server.conf.gz # 编辑配置文件 sudo nano /etc/openvpn/server.conf
修改或确保以下配置项正确:
# ... port 1194 proto udp dev tun # ... ca /root/openvpn-ca/easy-rsa/pki/ca.crt cert /root/openvpn-ca/easy-rsa/pki/issued/server.crt key /root/openvpn-ca/easy-rsa/pki/private/server.key dh /root/openvpn-ca/easy-rsa/pki/dh.pem # ... server 10.8.0.0 255.255.255.0 # ... push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 8.8.8.8" push "dhcp-option DNS 1.1.1.1" # ... keepalive 10 120 tls-auth /root/openvpn-ca/easy-rsa/pki/ta.key 0 cipher AES-256-CBC auth SHA256 user nobody group nogroup persist-key persist-tun # ...
第 5 步:配置客户端文件
创建一个客户端配置文件模板:
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client1.ovpn
编辑 ~/client1.ovpn:
client dev tun proto udp remote <你的服务器公网IP> 1194 resolv-retry infinite nobind persist-key persist-tun remote-cert-tls server cipher AES-256-CBC auth SHA256 auth-nocache verb 3 <ca> # --- 将 /root/openvpn-ca/easy-rsa/pki/ca.crt 的内容粘贴到这里 --- -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE--- </ca> <cert> # --- 将 /root/openvpn-ca/easy-rsa/pki/issued/client1.crt 的内容粘贴到这里 --- -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE--- </cert> <key> # --- 将 /root/openvpn-ca/easy-rsa/pki/private/client1.key 的内容粘贴到这里 --- -----BEGIN PRIVATE KEY----- ... -----END PRIVATE KEY--- </key> <tls-auth> # --- 将 /root/openvpn-ca/easy-rsa/pki/ta.key 的内容粘贴到这里 (0 对应服务器,1 对应客户端) --- -----BEGIN OpenVPN Static key V1----- ... -----END OpenVPN Static key V1--- </tls-auth>
注意: <tls-auth> 部分的 key-direction 在客户端配置中通常是 1,但在新版的 OpenVPN 中,如果服务器配置了 tls-auth ... 0,客户端可以省略 key-direction 或设为 1。
第 6 步:启动服务并设置防火墙
# 启动 OpenVPN 服务 sudo systemctl start openvpn@server # 设置开机自启 sudo systemctl enable openvpn@server # 检查状态 sudo systemctl status openvpn@server
配置防火墙 (UFW):
# 允许 OpenVPN 端口 (UDP 1194) sudo ufw allow 1194/udp # 启用 IP 转发 echo 'net.ipv4.ip_forward=1' | sudo tee /etc/sysctl.d/99-openvpn.conf sudo sysctl -p # 配置 NAT 规则 sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE # 保存规则 (Ubuntu/Debian) sudo apt install iptables-persistent sudo netfilter-persistent save
第 7 步:客户端连接
将生成的 client1.ovpn 文件传输到你的客户端设备,然后使用 OpenVPN 客户端导入并连接即可。
总结与对比
| 特性 | WireGuard | OpenVPN |
|---|---|---|
| 易用性 | 极高,配置文件简单,命令少。 | 中等,涉及证书管理,步骤较多。 |
| 性能 | 极高,内核级实现,延迟低,吞吐量高。 | 良好,性能足够,但通常低于 WireGuard。 |
| 安全性 | 极高,使用最现代的加密算法(如 ChaCha20, Poly1305),代码库小,易于审计。 | 高,成熟可靠,使用 OpenSSL/TLS,历史悠久。 |
| 兼容性 | 良好,主流系统均已内置或提供官方客户端。 | 极佳,几乎所有平台都有成熟客户端,支持非常广泛。 |
| 适用场景 | 个人用户、追求极致性能和简洁性的场景。 | 企业环境、需要兼容旧设备、或依赖特定 OpenVPN 功能的场景。 |
对于绝大多数新用户和项目,WireGuard 是不二之选,它简单、快速、安全,能让你在 10 分钟内完成搭建,只有当你明确知道需要 OpenVPN 的某个特定功能,或者需要连接非常古老的设备时,才需要去折腾 OpenVPN。
