OpenVPN服务器安装与优化:打造专属VPN
随着网络隐私和安全的日益受到关注,搭建个人VPN成为了许多用户的选择。OpenVPN作为一款开源的VPN解决方案,以其强大的加密能力、灵活的配置以及跨平台支持,成为了自建VPN的首选。本文将详细指导您如何安装和优化OpenVPN服务器,打造一个专属且高效的VPN服务。
前言
OpenVPN允许您通过加密隧道安全地连接到远程网络,保护您的在线隐私,绕过地理限制,并安全访问内部资源。本文将以Ubuntu系统为例,介绍OpenVPN的安装与优化步骤。
第一部分:OpenVPN 服务器安装
1. 系统更新与软件包安装
首先,更新您的系统并安装必要的软件包:OpenVPN本身和用于证书管理的Easy-RSA。
bash
sudo apt update && sudo apt upgrade -y
sudo apt install -y openvpn easy-rsa
2. 配置Easy-RSA公钥基础设施 (PKI)
Easy-RSA用于创建证书颁发机构 (CA) 以及为服务器和客户端生成证书和密钥。
-
准备Easy-RSA目录:
将Easy-RSA脚本复制到一个工作目录,例如/etc/openvpn/easy-rsa。bash
sudo make-cadir /etc/openvpn/easy-rsa
cd /etc/openvpn/easy-rsa -
初始化PKI:
初始化一个新的公钥基础设施。bash
./easyrsa init-pki -
构建证书颁发机构 (CA):
创建根CA证书和密钥。您将被要求输入一个通用名称 (Common Name),例如 “OpenVPN-CA”。为简化操作,这里使用nopass,但生产环境中建议为CA密钥设置密码以增强安全性。bash
./easyrsa build-ca nopass -
生成Diffie-Hellman参数:
生成Diffie-Hellman参数用于密钥交换。此过程可能需要一些时间。bash
./easyrsa gen-dh -
生成服务器证书和密钥:
创建服务器证书和私钥。您将被要求输入通用名称 (例如 “server”)。bash
./easyrsa gen-req server nopass使用您的CA签署服务器证书请求,输入
yes确认。bash
./easyrsa sign-req server server -
生成TLS认证密钥 (HMAC):
此密钥增加了额外的安全层,可以防御DDoS攻击和UDP端口泛洪。bash
openvpn --genkey --secret ta.key -
生成客户端证书和密钥:
为每个客户端生成唯一的证书和密钥对。将client1替换为您想要的客户端名称。bash
./easyrsa gen-req client1 nopass
./easyrsa sign-req client client1如果需要更多客户端,重复此步骤,将
client1更改为client2、client3等。 -
复制必要文件到OpenVPN服务器目录:
将生成的证书和密钥移动到OpenVPN的配置目录。bash
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 ta.key /etc/openvpn/
3. OpenVPN服务器配置
-
创建
server.conf文件:
OpenVPN提供了一个示例配置文件。复制它,然后编辑。bash
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/
sudo nano /etc/openvpn/server.conf编辑
server.conf文件,取消注释或添加以下关键配置:port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh.pem
tls-auth ta.key 0 # 这是给服务器用的
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222" # OpenDNS
push "dhcp-option DNS 208.67.220.220" # OpenDNS
keepalive 10 120
cipher AES-256-GCM # 推荐用于现代系统
auth SHA256
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3
explicit-exit-notify 1注意:关于
cipher和auth,请参阅优化部分以获取最佳实践。AES-256-GCM是一个强大而现代的选择。 -
启用IP转发:
允许服务器转发流量。bash
sudo nano /etc/sysctl.conf取消注释或添加以下行:
net.ipv4.ip_forward=1应用更改:
bash
sudo sysctl -p -
配置防火墙 (UFW):
允许OpenVPN流量并启用NAT。bash
sudo ufw allow 1194/udp
sudo ufw allow OpenSSH编辑UFW的
before.rules以启用NAT。bash
sudo nano /etc/ufw/before.rules在文件顶部(在现有注释之后)添加以下行:
“`
START OPENVPN RULES
NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]允许从VPN客户端到eth0 (您的公共网络接口) 的流量
-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
COMMITEND OPENVPN RULES
“`
将
eth0替换为您的服务器实际的公共网络接口 (例如ens3,enp0s3)。您可以使用ip a命令查看。此外,修改
/etc/default/ufw以允许转发的数据包:bash
sudo nano /etc/default/ufw将
DEFAULT_FORWARD_POLICY="DROP"改为DEFAULT_FORWARD_POLICY="ACCEPT"。重新加载UFW:
bash
sudo ufw disable
sudo ufw enable -
启动并启用OpenVPN服务:
bash
sudo systemctl start openvpn@server
sudo systemctl enable openvpn@server
sudo systemctl status openvpn@server
第二部分:OpenVPN 客户端配置
为每个客户端,您需要一个 .ovpn 配置文件。
-
收集客户端文件:
从您的/etc/openvpn/easy-rsa目录,为client1复制以下文件:pki/ca.crtpki/issued/client1.crtpki/private/client1.key/etc/openvpn/ta.key(服务器上生成的那个)
您可以为每个客户端创建一个目录,并将这些文件复制到其中。
bash
mkdir -p ~/client-configs/client1
cp /etc/openvpn/easy-rsa/pki/ca.crt ~/client-configs/client1/
cp /etc/openvpn/easy-rsa/pki/issued/client1.crt ~/client-configs/client1/
cp /etc/openvpn/easy-rsa/pki/private/client1.key ~/client-configs/client1/
cp /etc/openvpn/ta.key ~/client-configs/client1/ -
创建客户端
.ovpn文件:
在~/client-configs/client1目录中创建一个名为client1.ovpn的文件。bash
nano ~/client-configs/client1/client1.ovpn添加以下内容,将
YOUR_SERVER_IP替换为您的OpenVPN服务器的公共IP地址或域名:“`
client
dev tun
proto udp
remote YOUR_SERVER_IP 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
tls-auth ta.key 1 # 这是给客户端用的
cipher AES-256-GCM
auth SHA256
verb 3ca.crt 的内容
client1.crt 的内容
client1.key 的内容
ta.key 的内容
“`现在,打开
~/client-configs/client1目录中的ca.crt、client1.crt、client1.key和ta.key文件,并将其内容粘贴到client1.ovpn文件中相应的<ca>、<cert>、<key>和<tls-auth>块内。client1.ovpn文件现在已准备好分发给您的客户端设备。
第三部分:OpenVPN 服务器优化
优化您的OpenVPN服务器可以显著提高性能和安全性。
-
使用 UDP 协议:
OpenVPN over UDP通常比TCP更快、更高效,因为它避免了”TCP-over-TCP”的开销,即TCP的重传机制冲突导致性能下降。- 配置: 在
server.conf和客户端.ovpn文件中设置proto udp。
- 配置: 在
-
禁用数据压缩:
虽然看起来反直觉,但禁用压缩 (comp-lzo或compress) 通常能提高性能。今天传输的大多数数据 (例如图片、视频、加密流量) 都已经压缩过,再次压缩只会增加CPU开销而没有显著的好处。它还可能引入安全漏洞 (CRIME/BREACH攻击)。- 配置: 从
server.conf和客户端.ovpn文件中删除或注释掉comp-lzo或compress指令。如果必须对特定未压缩数据使用压缩,请考虑使用compress lz4(OpenVPN 2.4+) 或不带参数的compress,这允许OpenVPN动态启用/禁用它。
- 配置: 从
-
选择强大的加密算法和认证方式:
现代加密算法提供更好的安全性,并且可以利用硬件加速,从而带来更好的性能。- 推荐:
cipher AES-256-GCM和auth SHA256(或SHA512)。AES-GCM是一种经过认证的加密模式,提供机密性和完整性,由于硬件加速,通常比CBC模式具有更好的性能。 - 配置:
cipher AES-256-GCM
auth SHA256
确保服务器和客户端配置一致。
- 推荐:
-
调整 MTU (Maximum Transmission Unit):
不正确的MTU设置可能导致数据包碎片化和性能下降。OpenVPN UDP数据包理想情况下不应被分片。- 配置: 尝试
tun-mtu和mssfix。一个常见的起始点是tun-mtu 1400和mssfix 1360(tun-mtu减去IP/TCP头部的40字节)。
tun-mtu 1400
mssfix 1360
您可能需要测试不同的值以找到适合您网络路径的最佳设置。
- 配置: 尝试
-
调整缓冲区 (
sndbuf,rcvbuf):
调整发送和接收缓冲区可以帮助提高吞吐量,尤其是在高延迟链路上。- 配置:
sndbuf 393216
rcvbuf 393216
这些值是示例;最佳值取决于您的网络条件。
- 配置:
-
启用
fast-io:
此指令可以通过绕过一些内核处理来提高I/O性能。- 配置: 在
server.conf和客户端.ovpn文件中添加fast-io。
- 配置: 在
-
持久化隧道 (
keepalive):
keepalive指令有助于保持隧道连接并检测死对等体。- 配置:
keepalive 10 120(每10秒发送一次ping,120秒后认为对等体已死亡)。
- 配置:
-
服务器位置:
虽然这不是一个配置设置,但您的OpenVPN服务器与客户端的物理距离会显著影响延迟和速度。选择一个距离主要用户地理位置较近的服务器位置。
结论
通过遵循本指南,您已经成功安装并优化了您的OpenVPN服务器,并为您的客户端配置了连接。现在,您可以享受一个安全、私密且高性能的专属VPN服务。记住,定期更新您的系统和OpenVPN软件,并关注最新的安全最佳实践,以确保您的VPN始终保持在最佳状态。