概述
本指南将引导你完成以下步骤:

- 服务器端配置:在 Linux 服务器(以 Ubuntu 为例)上安装和配置 OpenVPN 服务器。
- 证书管理:使用
easy-rsa创建证书颁发机构、服务器证书、客户端证书和密钥。 - 客户端配置:为 Windows, macOS, Android, iOS 生成和配置客户端配置文件(
.ovpn)。 - 连接与验证:客户端连接到服务器并验证网络。
- 高级安全:配置防火墙、IP 转发和客户端 DNS 选项。
第一部分:服务器端配置
步骤 1: 准备服务器环境
你需要一台拥有公网 IP 的云服务器(如 VPS),本指南以 Ubuntu 22.04 为例。
-
更新系统
sudo apt update && sudo apt upgrade -y
-
安装 OpenVPN 和 Easy-RSA
sudo apt install openvpn easy-rsa -y
步骤 2: 配置 Easy-RSA
Easy-RSA 是一套用于构建和管理 PKI (Public Key Infrastructure) 的工具。

-
创建 PKI 目录
make-cadir ~/openvpn-ca cd ~/openvpn-ca
-
编辑
vars文件 这个文件包含了生成证书时的一些默认信息,为了简化,我们可以修改默认值。nano vars
找到并修改以下几行(可以根据你的情况修改):
# 修改为你自己的信息 set EASYRSA_REQ_COUNTRY "CN" set EASYRSA_REQ_PROVINCE "Beijing" set EASYRSA_REQ_CITY "Beijing" set EASYRSA_REQ_ORG "My Company" set EASYRSA_REQ_EMAIL "admin@mycompany.com" set EASYRSA_REQ_OU "MyOrganizationalUnit"
保存并退出 (
Ctrl+X,Y,Enter)。 -
初始化 PKI 这将创建一个
pki目录,用于存放所有的证书和密钥。./easyrsa init-pki
-
构建证书颁发机构 这是你的私有 CA,用于签发服务器和客户端的证书。
# 注意:这里会提示你输入一个 CA 密码,请务必记住! # 这个密码用于保护 CA 的私钥,签发证书时需要。 ./easyrsa build-ca nopass
nopass参数表示 CA 的私钥不使用密码保护,方便服务器自动启动,如果安全性要求极高,可以去掉此参数,但服务器启动时需要手动输入密码。
步骤 3: 创建服务器证书和密钥
-
生成服务器证书
# 创建服务器证书,名称为 "server" # 同样,会提示输入你在 vars 中设置的 CA 信息,直接回车即可。 # 最后会询问是否签名,输入 yes ./easyrsa gen-req server nopass
-
用 CA 签名服务器证书
# 这一步需要你输入之前设置的 CA 密码 ./easyrsa sign-req server server
-
生成 Diffie-Hellman 参数 这用于增强密钥交换的安全性,可能需要几分钟时间。
./easyrsa gen-dh
-
生成 HMAC 签名 用于防止某些攻击。
openvpn --genkey --secret pki/ta.key
你的 ~/openvpn-ca/pki 目录下应该有这些关键文件:
ca.crt: CA 的证书文件。issued/server.crt: 服务器的证书文件。private/server.key: 服务器的私钥文件。dh.pem: Diffie-Hellman 参数文件。ta.key: HMAC 签名密钥文件。
步骤 4: 配置 OpenVPN 服务器
-
复制证书和密钥到 OpenVPN 配置目录
sudo cp pki/ca.crt /etc/openvpn/ sudo cp pki/issued/server.crt /etc/openvpn/ sudo cp pki/private/server.key /etc/openvpn/ sudo cp pki/dh.pem /etc/openvpn/ sudo cp pki/ta.key /etc/openvpn/
-
创建服务器配置文件 我们将创建一个新的配置文件
server.conf。sudo nano /etc/openvpn/server/server.conf
粘贴进去,并根据注释进行修改:
# 监听端口和协议 (推荐使用 UDP,性能更好) port 1194 proto udp # 使用 TUN 虚拟网卡 dev tun # CA 证书 ca ca.crt # 服务器证书 cert server.crt # 服务器私钥 key server.key # DH 参数 dh dh.pem # 指定 VPN 客户端连接后分配的 IP 地址池 server 10.8.0.0 255.255.255.0 # 推送路由和 DNS 设置给客户端 push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 8.8.8.8" push "dhcp-option DNS 8.8.4.4" # 启用客户端之间相互通信 client-to-client # 为每个客户端维护一个独立的文件,方便管理 ifconfig-pool-persist /var/log/openvpn/ipp.txt # 使用 HMAC 签名增强安全性 tls-crypt ta.key # 指定使用的加密算法 (推荐使用强加密) cipher AES-256-CBC auth SHA256 # 用户和运行 OpenVPN 的用户 user nobody group nogroup # 保持连接,并在断线后自动重连 keepalive 10 120 # 降低日志级别 verb 3
-
创建日志目录
sudo mkdir /var/log/openvpn sudo chown nobody:nogroup /var/log/openvpn
步骤 5: 配置系统防火墙和网络转发
-
启用 IP 转发
# 编辑 sysctl.conf 文件 sudo nano /etc/sysctl.conf
取消注释或添加下面这行:
net.ipv4.ip_forward=1
使其立即生效:
sudo sysctl -p
-
配置 UFW (Uncomplicated Firewall)
# 允许 SSH 连接 (非常重要,防止把自己锁在外面) sudo ufw allow OpenSSH # 允许 OpenVPN 端口 (1194/udp) sudo ufw allow 1194/udp # 允许转发数据包 sudo ufw route allow in on tun0 from 10.8.0.0/24 out on eth0 to any # 启用 UFW sudo ufw enable
(请将
eth0替换为你服务器的主要网络接口名称,可以用ip a查看)
步骤 6: 启动并启用 OpenVPN 服务
-
启动 OpenVPN 服务
# 指定配置文件名启动 sudo systemctl start openvpn@server
-
设置开机自启
sudo systemctl enable openvpn@server
-
检查服务状态
sudo systemctl status openvpn@server
如果看到
active (running),说明服务器已成功启动。
第二部分:客户端配置
现在服务器已经运行,我们需要为客户端创建配置文件和证书。
步骤 1: 创建客户端证书和密钥
在服务器上继续操作。
-
为每个客户端生成证书 将
client1替换为你的客户端名称(如john-pc,samsung-phone)。cd ~/openvpn-ca ./easyrsa gen-req client1 nopass
-
用 CA 签名客户端证书
# 输入 CA 密码 ./easyrsa sign-req client client1
~/openvpn-ca/pki/issued/ 目录下有了 client1.crt,~/openvpn-ca/pki/private/ 目录下有了 client1.key。
步骤 2: 创建客户端配置文件
我们需要一个通用的 .ovpn 文件,并将客户端的证书和密钥嵌入进去。
-
创建基础配置文件
sudo nano /etc/openvpn/client/client1.ovpn
粘贴进去。请务必修改
remote指令为你的服务器域名或公网 IP 地址。client dev tun proto udp # 将 your_server_ip 替换为你的服务器公网 IP 或域名 remote your_server_ip 1194 resolv-retry infinite nobind persist-key persist-tun remote-cert-tls server cipher AES-256-CBC auth SHA256 key-direction 1 verb 3
-
嵌入证书和密钥 最简单的方法是使用
cat命令将证书和密钥内容追加到.ovpn文件的末尾。# 在服务器上执行 # 1. 将 CA 证书追加 cat ~/openvpn-ca/pki/ca.crt >> /etc/openvpn/client/client1.ovpn # 2. 将客户端证书追加 cat ~/openvpn-ca/pki/issued/client1.crt >> /etc/openvpn/client/client1.ovpn # 3. 将客户端密钥追加 cat ~/openvpn-ca/pki/private/client1.key >> /etc/openvpn/client/client1.ovpn # 4. 将 HMAC 密钥追加 cat /etc/openvpn/server/ta.key >> /etc/openvpn/client/client1.ovpn
/etc/openvpn/client/client1.ovpn 文件包含了所有必要的信息。
步骤 3: 传输配置文件到客户端
使用 scp、SFTP 或其他任何安全方式,将 client1.ovpn 文件从服务器下载到你的客户端设备上。
# 在你的本地电脑上执行,替换 username 和 server_ip scp username@server_ip:/etc/openvpn/client/client1.ovpn ~/Downloads/
第三部分:客户端连接与验证
Windows 客户端
- 下载并安装 OpenVPN GUI。
- 将
client1.ovpn文件复制到C:\Program Files\OpenVPN\config\目录下。 - 右键点击 OpenVPN GUI 图标,选择
client1连接。 - 系统可能会弹出安全提示,允许 OpenVPN 修改网络适配器。
- 连接成功后,任务栏的图标会变成绿色。
macOS 客户端
- 通过 Homebrew 安装:
brew install openvpn - 或者从 Mac App Store 下载并安装 Tunnelblick。
- 将
client1.ovpn文件拖到 Tunnelblick 的配置窗口中,它会自动导入。 - 双击 Tunnelblick 图标,选择你的配置文件连接。
Android 客户端
- 从 Google Play 商店安装 OpenVPN Connect。
- 使用文件管理器找到
client1.ovpn文件,点击它。 - OpenVPN Connect 会提示你导入配置,点击“导入”。
- 点击连接按钮。
iOS 客户端
- 从 App Store 安装 OpenVPN Connect。
- 使用 AirDrop、邮件或其他方式将
client1.ovpn文件发送到你的 iPhone/iPad。 - 打开文件,选择用 OpenVPN Connect 打开。
- 点击绿色的 "Add" 按钮,然后点击 "Connect"。
验证连接
连接成功后,你可以通过以下方式验证:
- 访问 IP 查询网站:打开浏览器,访问
whatismyip.com或ip.sb,你的 IP 地址应该变成了服务器的公网 IP。 - Ping VPN 网关:在 Windows/macOS 的命令行中执行
ping 10.8.0.1,应该能通。 - Ping 内网:如果你的服务器有内网 IP,可以尝试访问它,以验证客户端是否能通过 VPN 访问服务器所在的内网。
第四部分:高级安全与维护
为多个客户端创建配置
要为第二个客户端(如 client2)创建配置,只需重复 第二部分 的步骤 1 和 2,生成新的证书和新的 .ovpn 文件即可,服务器配置无需更改。
吊销客户端证书
如果某个客户端的设备丢失或不再使用,你应该吊销其证书。
-
在服务器上执行吊销命令:
cd ~/openvpn-ca ./easyrsa revoke client1
输入
yes确认。 -
生成证书吊销列表:
./easyrsa gen-crl
-
将 CRL 文件复制到 OpenVPN 目录并设置权限:
sudo cp pki/crl.pem /etc/openvpn/server/ sudo chmod 644 /etc/openvpn/server/crl.pem
-
编辑服务器配置文件
server.conf,添加以下行:crl-verify crl.pem
-
重启 OpenVPN 服务:
sudo systemctl restart openvpn@server
被吊销的客户端将无法再连接。
故障排除
- 连接失败:
- 检查服务器防火墙(UFW)是否放行了 1194/udp 端口。
- 检查云服务商(如阿里云、腾讯云、AWS)的安全组是否放行了 1194/udp 端口。
- 使用
tail -f /var/log/syslog或journalctl -u openvpn@server -f查看服务器日志。 - 检查客户端日志,查看具体错误信息(如证书验证失败、密钥不匹配等)。
- 能连上但无法上网:
- 检查
server.conf中的push "redirect-gateway..."指令是否存在。 - 检查服务器的 IP 转发是否已启用 (
sysctl -p)。 - 检查 UFW 的转发规则是否正确配置。
- 检查
这份指南应该能帮助你成功搭建一个功能完善且安全的 OpenVPN 服务器,祝你使用愉快!
