- 为什么选择在 Ubuntu 上用 OpenVPN 搭建自己的 VPN
- 部署前需要准备的事项
- 整体流程概览
- 1. 安装 OpenVPN 与关联工具
- 2. 初始化 PKI 并签发证书
- 3. 服务器配置要点(概念描述)
- 4. 系统与防火墙调整
- 5. 客户端配置与分发
- 6. 启动服务并验证连通性
- 常见故障与排查技巧
- 安全性考虑与最佳实践
- 性能与可扩展性提示
- 结语风格的技术观察
为什么选择在 Ubuntu 上用 OpenVPN 搭建自己的 VPN
对于技术爱好者来说,自建 OpenVPN 服务器的吸引力在于可控性和隐私保障:自己掌握密钥和配置,能灵活定制路由与防火墙规则,同时避免使用不可靠的商业服务。Ubuntu 在社区支持与包管理上成熟,适合用作中小型 VPN 节点。
部署前需要准备的事项
在动手之前,确认以下条件:
- 一台运行 Ubuntu 的服务器(18.04 / 20.04 / 22.04 均可),推荐至少 1 vCPU、1 GB 内存。
- 拥有 root 或 sudo 权限。
- 对公网端口有控制权(常用 UDP 1194,或自定义端口),并能在路由器/云控制面板开放相应端口。
- 了解基本的 Linux 网络命令和防火墙概念(iptables/ufw)。
整体流程概览
关键步骤包括:安装包与依赖、建立 PKI 与证书、生成服务器与客户端配置、内核转发与防火墙配置、启动服务并验证连接。每一步既有易犯错的细节,也有可选的强化方案(例如使用 TLS-auth、HMAC、双因子等)。下面按顺序展开。
1. 安装 OpenVPN 与关联工具
通过包管理器安装 OpenVPN 和证书管理工具(例如 easy-rsa)。安装完成后,系统会在 /etc/openvpn 下提供默认位置,easy-rsa 用于初始化 PKI、签发证书和密钥。
sudo apt update
sudo apt install openvpn easy-rsa
2. 初始化 PKI 并签发证书
使用 easy-rsa 初始化一个独立的 PKI 目录,先生成根 CA,然后生成服务器证书与若干客户端证书。注意为 CA 私钥设置强口令并妥善备份。签发时区分 server 与 client 的证书用途,且建议为每个客户端单独签发证书便于吊销。
关键点:
- 不要把私钥放在公网上可访问的路径。
- 如果需要后续撤销某个客户端访问,必须提前建立 CRL(证书撤销列表)。
3. 服务器配置要点(概念描述)
服务器端的配置文件包含以下重要部分:
- 协议与端口:通常使用 UDP 可获得更好性能,也可用 TCP 以便穿透部分防火墙。
- 证书/密钥路径:指向生成的 ca.crt、server.crt、server.key 以及 dh 参数或 elliptic curve 密钥。
- 加密与认证:推荐使用强加密算法和 SHA-256 类哈希;如需额外保护,启用 tls-auth 或 tls-crypt。
- 网络拓扑与地址池:指定虚拟网段(例如 10.8.0.0/24),并设置推送路由或 DNS。
- 客户端配置推送:可通过 push 指令告知客户端默认路由、DNS 等。
不要忘记启用客户端到客户端通信或禁止它,依据你的场景决定。
4. 系统与防火墙调整
要使客户端流量通过服务器访问互联网,需要开启 IP 转发:
sudo sysctl -w net.ipv4.ip_forward=1
为持久化修改,编辑 sysctl 配置文件并写入相应字段。此外,需要在防火墙上做 NAT 转发规则,将虚拟网段的流量通过服务器公网接口 MASQUERADE 出去。常见做法是使用 iptables 或 ufw,实现方法略有差异,注意保存规则并在重启后恢复。
5. 客户端配置与分发
客户端配置包含服务器地址与端口、客户端证书与密钥、以及接受的路由和 DNS 设置。为了简化分发,可以把必要的证书和配置打包成一个单文件(例如 .ovpn),便于在桌面或移动端导入。为每个客户端单独签发证书能在需要时用 CRL 吊销单个客户端访问。
6. 启动服务并验证连通性
启动 systemd 服务(openvpn@server 或 openvpn),观察日志以确认证书握手成功与加密隧道建立。验证要点包括:
- 客户端是否获得 VPN 内网 IP。
- 能否通过 VPN 访问内网资源或访问外网(取决于是否推送默认路由)。
- DNS 是否按预期解析(可能需推送内网 DNS 或使用公共 DNS)。
常见故障与排查技巧
遇到问题时,按层级排查:
- 网络层:确认端口开放、云提供商安全组/防火墙规则无误。
- 证书层:证书链是否完整,时间是否过期,CRL 是否生效。
- 路由层:IP 转发是否启用,NAT 规则是否存在,客户端路由表是否正确。
- 防火墙层:本机或上游防火墙是否阻止了 UDP/TCP 包或 ICMP。
用日志(systemd journal、/var/log/syslog)和抓包工具(tcpdump)定位问题点。
安全性考虑与最佳实践
除了使用强密码与现代密码套件外,应注意:
- 定期更新服务器与 OpenVPN 包,修补已知漏洞。
- 最小化服务器对外服务,仅开放必要端口。
- 启用并维护 CRL,以便及时撤销泄露的客户端证书。
- 考虑使用 tls-crypt 隐匿 TLS 握手,降低被主动扫描识别的概率。
- 备份 CA 私钥与配置文件,但绝不在不安全位置存放私钥。
性能与可扩展性提示
若流量与并发增长,关注以下点:
- 选择合适的加密套件(某些套件 CPU 负载较高),可考虑采用 elliptic curve 而非 RSA 来减轻 CPU。
- 采用 UDP 并调整 MTU/MSS 设置以避免分片造成性能损耗。
- 在多用户场景下通过负载均衡或多个服务器分流流量,并配合集中证书管理。
结语风格的技术观察
用 OpenVPN 在 Ubuntu 上搭建自有 VPN,是一门兼具实践与理论的工程:它要求对证书管理、内核网络栈和防火墙规则有清晰理解。完成后,你将得到一套高度可控的访问与隐私解决方案,便于做进一步的安全加固和自动化运维。
暂无评论内容