一、安装 Openvpn Server
在 CentOS 上快速安装 OpenVPN 服务的步骤如下:
1. 更新系统
1 |
sudo yum update -y |
2. 安装 EPEL 源并安装 OpenVPN 和 Easy-RSA
1 2 |
sudo yum install epel-release -y sudo yum install openvpn easy-rsa -y |
3. 手动创建目录并复制 Easy-RSA
文件
1 2 3 |
mkdir -p ~/openvpn-ca cp -r /usr/share/easy-rsa/3/* ~/openvpn-ca/ cd ~/openvpn-ca |
4. 初始化 Easy-RSA
环境
1 |
./easyrsa init-pki |
5. 配置 CA 和证书
完成上述步骤后,你可以继续从以下步骤配置 CA 和证书:
5.1 生成 CA 证书
1 |
./easyrsa build-ca |
5.2 生成服务器证书和密钥
1 |
./easyrsa build-server-full server nopass |
5.3 生成 Diffie-Hellman 参数
1 |
./easyrsa gen-dh |
6.生成客户端证书和密钥
为每个客户端生成一个唯一的证书和密钥。以下以 client1
为例:
1 |
./easyrsa build-client-full client1 nopass |
7. 复制证书和密钥到 OpenVPN 配置目录
将生成的证书和密钥文件复制到 OpenVPN 目录中:
1 2 |
mkdir -p /etc/openvpn/server sudo cp pki/ca.crt pki/issued/server.crt pki/private/server.key pki/dh.pem /etc/openvpn/server |
对于客户端证书,可以复制到 /etc/openvpn/clients/
或其他合适的位置:
1 2 |
mkdir -p ~/client-configs/keys cp pki/ca.crt pki/issued/client1.crt pki/private/client1.key ~/client-configs/keys/ |
8. 生成 ta.key
文件
1 |
sudo openvpn --genkey --secret /etc/openvpn/server/ta.key |
9. 配置 OpenVPN 服务器
复制默认的配置文件并进行修改:
1 |
sudo cp /usr/share/doc/openvpn*/sample/sample-config-files/server.conf //etc/openvpn/server/server.conf |
然后编辑 /etc/openvpn/server/server.conf
,修改以下关键参数:
- 证书和密钥路径
1 2 3 4 |
ca ca.crt cert server.crt key server.key dh dh.pem |
开启客户端之间的通信 将 client-to-client
行取消注释,允许客户端之间通信。
启用 NAT 确保启用 IP 转发,编辑 /etc/sysctl.conf
文件,设置以下内容:
1 |
net.ipv4.ip_forward = 1 |
运行以下命令使其生效:
1 |
sudo sysctl -p |
10. 完整的 server.conf
配置文件
可以参照下面的配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
port 1194 proto udp dev tun ca ca.crt cert server.crt key server.key # This file should be kept secret dh none server 10.8.0.0 255.255.255.0 ifconfig-pool-persist /var/log/openvpn/ipp.txt push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 208.67.222.222" push "dhcp-option DNS 208.67.220.220" duplicate-cn keepalive 10 120 tls-crypt ta.key cipher AES-256-GCM auth SHA256 persist-key persist-tun status /var/log/openvpn/openvpn-status.log verb 3 explicit-exit-notify 1 |
如果没有 /var/log/openvpn/ 路径,请使用下面的命令创建
1 |
mkdir -p /var/log/openvpn/ |
11. 配置防火墙
确保防火墙允许 OpenVPN 流量,通过以下命令添加防火墙规则:
1 2 3 4 5 6 7 |
sudo systemctl enable firewalld sudo systemctl start firewalld sudo firewall-cmd --zone=public --add-service=openvpn --permanent sudo firewall-cmd --zone=public --add-masquerade --permanent sudo firewall-cmd --reload |
可以使用以下命令检查 firewalld
的 masquerade 设置是否已生效:
1 |
sudo firewall-cmd --zone=public --query-masquerade |
如果返回 yes
,则 NAT 转发已成功启用。完成后,再次尝试客户端的连接测试。
12. 启动 OpenVPN 服务(在 CentOS 7+)
在 CentOS 7 及以上版本,OpenVPN 可能会使用 openvpn-server@
服务单元而不是 openvpn@
。试试以下命令:
1 2 |
sudo systemctl start openvpn-server@server sudo systemctl enable openvpn-server@server |
检查服务状态
1 |
sudo systemctl status openvpn-server@server |
检查系统日志
1 |
sudo journalctl -xe |
尝试手动运行 OpenVPN 进行调试
你也可以手动运行 OpenVPN 来直接查看错误信息:
1 |
sudo openvpn --config /etc/openvpn/server/server.conf |
二、配置 Openvpn 客户端
1. 准备客户端配置文件
创建客户端配置文件 client1.ovpn
,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
client dev tun proto udp remote YOUR_SERVER_IP 1194 resolv-retry infinite nobind persist-key persist-tun remote-cert-tls server cipher AES-256-GCM auth SHA256 key-direction 1 #ignore-unknown-option block-outside-dns tun-mtu 1400 mssfix 1360 verb 3 <ca> # 将 ca.crt 的内容复制到这里 </ca> <cert> # 将 client1.crt 的内容复制到这里 </cert> <key> # 将 client1.key 的内容复制到这里 </key> <tls-crypt> # 将 ta.key 的内容复制到这里 </tls-crypt> |
将 YOUR_SERVER_IP
替换为您的 OpenVPN 服务器的实际 IP 地址。
2. 将证书和密钥内容复制到配置文件中
在 client1.ovpn
文件中,将 <ca>
, <cert>
, <key>
, <tls-crypt>
标签替换为实际证书和密钥的内容。确保每个标签包含对应的文件内容,例如:
1 2 3 4 5 |
<ca> -----BEGIN CERTIFICATE----- ...CA 证书内容... -----END CERTIFICATE----- </ca> |
3. 导入客户端配置文件
将 client1.ovpn
文件导入到 OpenVPN 客户端(适用于 Windows、Mac、Linux 及移动设备的 OpenVPN 应用)。在客户端应用中选择 client1.ovpn
文件并连接。
4. 连接测试
启动 OpenVPN 客户端,选择配置文件进行连接。客户端应成功连接到服务器,获得 VPN IP 地址。