惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Cyberwarzone
Cyberwarzone
Vercel News
Vercel News
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
aimingoo的专栏
aimingoo的专栏
B
Blog RSS Feed
A
About on SuperTechFans
T
The Blog of Author Tim Ferriss
爱范儿
爱范儿
腾讯CDC
S
SegmentFault 最新的问题
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
The Hacker News
The Hacker News
J
Java Code Geeks
大猫的无限游戏
大猫的无限游戏
B
Blog
IT之家
IT之家
Spread Privacy
Spread Privacy
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
C
Cisco Blogs
Recent Announcements
Recent Announcements
H
Hacker News: Front Page
AI
AI
I
InfoQ
H
Heimdal Security Blog
T
Threatpost
Cisco Talos Blog
Cisco Talos Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
I
Intezer
W
WeLiveSecurity
SecWiki News
SecWiki News
MongoDB | Blog
MongoDB | Blog
宝玉的分享
宝玉的分享
博客园 - 【当耐特】
云风的 BLOG
云风的 BLOG
T
Threat Research - Cisco Blogs
V2EX - 技术
V2EX - 技术
N
News and Events Feed by Topic
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
O
OpenAI News
阮一峰的网络日志
阮一峰的网络日志
T
Troy Hunt's Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
博客园 - 司徒正美
Apple Machine Learning Research
Apple Machine Learning Research
雷峰网
雷峰网
T
Tor Project blog
有赞技术团队
有赞技术团队
Schneier on Security
Schneier on Security
Last Week in AI
Last Week in AI

杂烩饭

彻底删除CCLibrary 在 Nginx 中禁止 IP 直连与域名暴露 使用 RustFS 自建对象存储 使用cURL命令管理对象存储(s3) AGENTS.md Prometheus使用kubeconfig做k8s的service 自动发现监控 定制Windows系统镜像iso 使用create-dmg工具制作dmg安装包 使用create-dmg工具制作dmg安装包 - 技术栈 superpowers Nexus仓库搭建记录 Git Merge代码冲突的解决方式 使用 Easytier-web 管理 easytier 节点 ingress-nginx 去除指定context path 在macOS上使用MusicPlayer2听本地音乐 Kubernetes 1.34 + RHEL10 + Cilium + kube-vip 高可用集群部署 使用腾讯云CLS收集TKE(k8s)业务日志 容器调试工具之BusyBox 无Docker环境进行容器镜像操作 使用kubeadm部署一套高可用k8s集群1.34 for Ubuntu 正在运行的Docker容器增加端口映射 轻量级组网工具WireGuard 在Kubernetes中部署一个单节点Elasticsearch 使用openssl制作自签名双向认证(mTLS)证书 minio自建对象存储 ingress-nginx 使用自定义的nginx配置 P12格式证书与PEM格式转换 使用blackbox-exporter做域名监控 记一次MySQL字符集转换导致的故障 使用双向认证增加git仓库安全性 Prometheus自动监控K8S集群中的service Grafana 查询SQL 自定义变量 使用selenium来实现Grafana的自动截图
在 Linux 系统中安装与配置 OpenVPN:从入门到精通
张理坤 · 2026-04-25 · via 杂烩饭

OpenVPN 是一款开源的虚拟私人网络(VPN)软件,基于 SSL/TLS 协议实现安全的点对点或站点对站点连接。它广泛应用于远程访问、数据加密传输、绕过网络限制等场景。对于 Linux 用户而言,掌握 OpenVPN 的安装与配置不仅能提升网络安全性,还能灵活应对多样化的网络需求。

本文将详细介绍在 Linux 系统中安装 OpenVPN 的完整流程,包括客户端与服务端的配置、最佳实践、常见问题排查及示例用法。无论你是需要连接到现有 VPN 服务器的普通用户,还是计划搭建自己的 OpenVPN 服务端,本文都能为你提供清晰的指导。

3.1 安装 OpenVPN 服务端

服务端与客户端使用相同的 openvpn 包,安装命令与 2.1 节相同:

1
2
3
4
5

sudo apt install openvpn -y


sudo dnf install openvpn -y

3.2 生成加密证书与密钥(使用 EasyRSA)

OpenVPN 基于证书认证(PKI),需生成 CA 根证书服务端证书/密钥客户端证书/密钥Diffie-Hellman 参数 (DH)、 TLS 加密密钥 (可选,增强安全性)。推荐使用 OpenVPN 官方提供的 EasyRSA 工具自动化生成。

步骤 1:下载 EasyRSA

1
2
3
4
5
6
7

sudo apt install git -y



git clone https://github.com/OpenVPN/easy-rsa.git /tmp/easy-rsa
cd /tmp/easy-rsa/easyrsa3

步骤 2:初始化 PKI(公钥基础设施)

1
sudo ./easyrsa init-pki  

步骤 3:生成 CA 根证书(关键)

CA 根证书是所有证书的信任源,需妥善保管(泄露会导致任何人可伪造证书接入 VPN):

1
2
sudo ./easyrsa build-ca nopass  

生成后,CA 证书位于 pki/ca.crt ,私钥位于 pki/private/ca.key绝对禁止泄露 ca.key )。

步骤 4:生成服务端证书与密钥

1
2

sudo ./easyrsa build-server-full server nopass

生成后,服务端证书位于 pki/issued/server.crt ,私钥位于 pki/private/server.key

步骤 5:生成客户端证书与密钥(每个客户端一个)

假设客户端名为 “client1”,生成命令:

1
sudo ./easyrsa build-client-full client1 nopass  

生成后,客户端证书位于 pki/issued/client1.crt ,私钥位于 pki/private/client1.key

步骤 6:生成 Diffie-Hellman 参数(DH)

DH 参数用于密钥交换,增强前向安全性:

1
sudo ./easyrsa gen-dh  

步骤 7:生成 TLS 加密密钥(可选,推荐)

用于加密 TLS 握手过程,防止中间人攻击:

1
openvpn --genkey secret pki/tls-auth.key  

步骤 8:复制证书/密钥到服务端目录

将生成的关键文件复制到 OpenVPN 服务端配置目录(如 /etc/openvpn/server/ ):

1
2
3
4
5
6
7
sudo mkdir -p /etc/openvpn/server/keys
sudo cp pki/ca.crt /etc/openvpn/server/keys/
sudo cp pki/issued/server.crt /etc/openvpn/server/keys/
sudo cp pki/private/server.key /etc/openvpn/server/keys/
sudo cp pki/dh.pem /etc/openvpn/server/keys/
sudo cp pki/tls-auth.key /etc/openvpn/server/keys/
sudo chmod -R 600 /etc/openvpn/server/keys/

3.3 配置服务端参数

创建服务端配置文件 /etc/openvpn/server/server.conf ,以下为推荐配置(关键参数已标注):

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
33
34
35
36
37
38

port 1194
proto udp
dev tun


ca keys/ca.crt
cert keys/server.crt
key keys/server.key
dh keys/dh.pem



cipher AES-256-GCM
auth SHA512
tls-version-min 1.3
tls-cert-profile preferred


server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt

push "redirect-gateway def1 bypass-dhcp"

push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
keepalive 10 120


compress migrate


persist-key
persist-tun
status openvpn-status.log
log-append openvpn.log
verb 3
crl-verify keys/crl.pem

3.4 配置防火墙与端口转发

步骤 1:启用 IPv4 转发(服务端必须)

1
2
3
4
5
sudo tee -a /etc/sysctl.conf <<EOF
net.ipv4.ip_forward=1
EOF

sudo sysctl -p

步骤 2:配置服务器防火墙

根据系统防火墙工具( ufwfirewalld )开放 OpenVPN 端口并允许转发。

Ubuntu/Debian(使用 ufw)

1
2
3
4
5
6

sudo ufw allow 1194/udp

sudo ufw default allow forward

sudo ufw reload

CentOS/RHEL(使用 firewalld)

1
2
3
4
5

sudo firewall-cmd --add-port=1194/udp --permanent

sudo firewall-cmd --add-masquerade --permanent
sudo firewall-cmd --reload

使用 iptables

1
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

3.5 启动服务端并验证状态

1
2
3
4
5
6
7
8

sudo systemctl start openvpn-server@server


sudo systemctl status openvpn-server@server


sudo systemctl enable openvpn-server@server

步骤 2:验证服务运行

1
2
3
4
5
6

sudo ss -uln | grep 1194



sudo journalctl -u openvpn-server@server -f

3.6 生成客户端配置文件

客户端需使用服务端的 CA 证书、客户端证书/密钥,以及与服务端匹配的加密参数。以下为手动生成 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
33
34
35
client
dev tun
proto udp
remote 146.56.243.106 1194
nobind
persist-key
persist-tun

remote-cert-tls server
cipher AES-256-GCM
tls-version-min 1.3
verb 3



<ca>
-----BEGIN CERTIFICATE-----

-----END CERTIFICATE-----
</ca>


<cert>
-----BEGIN CERTIFICATE-----

-----END CERTIFICATE-----
</cert>


<key>
-----BEGIN PRIVATE KEY-----

-----END PRIVATE KEY-----
</key>

  1. 证书是否过期?通过 openssl x509 -in client1.crt -noout -dates 查看有效期。
1
sudo openvpn --config /etc/openvpn/client/client.ovpn --verb 6  

问题 4:服务端日志提示“Cannot open TUN/TAP dev /dev/net/tun: No such file or directory”

  • 原因 :系统未加载 TUN 模块。
  • 解决 :手动加载模块: sudo modprobe tun ,并添加到开机加载: echo "tun" | sudo tee -a /etc/modules