!bin/bash
手把手教你用脚本自动化搭建OpenVPN服务——从零开始的网络工程师实战指南
作为一名网络工程师,我经常遇到需要快速部署安全远程访问服务的场景,无论是为小型企业搭建办公网接入通道,还是为远程开发团队提供加密隧道,OpenVPN 是一个成熟、稳定且开源的选择,手动配置 OpenVPN 通常涉及繁琐的证书生成、防火墙规则设置、配置文件编辑等步骤,容易出错且效率低下,我将分享一个完整的 Bash 脚本,帮助你一键自动化搭建 OpenVPN 服务,适用于 Ubuntu/Debian 系统。
确保你的服务器满足基本条件:一台运行 Ubuntu 20.04 或更高版本的 Linux 服务器(推荐使用云主机如阿里云、腾讯云或 AWS),具备公网 IP,以及 root 权限或 sudo 权限。
脚本的核心功能包括:
- 自动安装 OpenVPN 和 Easy-RSA(用于证书管理);
- 生成 CA 根证书、服务器证书和客户端证书;
- 配置 OpenVPN 服务端口(默认 1194)、协议(UDP)、加密方式(AES-256-CBC);
- 启用 IP 转发和 NAT(让客户端访问外网);
- 设置防火墙规则(ufw)开放 UDP 1194 端口;
- 生成客户端配置文件(.ovpn),供用户导入到 OpenVPN 客户端使用。
以下是完整脚本代码(保存为 setup_openvpn.sh):
echo "开始自动安装 OpenVPN 服务..." # 更新系统包列表 apt update && apt upgrade -y # 安装 OpenVPN 和 Easy-RSA apt install -y openvpn easy-rsa # 创建 PKI 目录 make-cadir /etc/openvpn/easy-rsa cd /etc/openvpn/easy-rsa # 初始化 PKI(根据提示输入密码) ./easyrsa init-pki ./easyrsa build-ca nopass # 生成服务器证书 ./easyrsa gen-req server nopass ./easyrsa sign-req server server # 生成 Diffie-Hellman 参数 ./easyrsa gen-dh # 生成 TLS 密钥(增强安全性) openvpn --genkey --secret ta.key # 复制证书到 OpenVPN 目录 cp pki/ca.crt pki/private/server.key pki/dh.pem ta.key /etc/openvpn/ # 创建服务端配置文件 cat > /etc/openvpn/server.conf <<EOF port 1194 proto udp dev tun ca ca.crt cert server.crt key server.key dh dh.pem server 10.8.0.0 255.255.255.0 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 tls-auth ta.key 0 cipher AES-256-CBC auth SHA256 user nobody group nogroup persist-key persist-tun status openvpn-status.log verb 3 EOF # 启用 IP 转发 echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf sysctl -p # 配置 iptables 规则(NAT) iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT iptables -A FORWARD -i tun0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT # 保存 iptables 规则(Ubuntu 20.04+ 使用 ufw) ufw allow 1194/udp ufw enable # 启动并启用 OpenVPN 服务 systemctl start openvpn@server systemctl enable openvpn@server # 生成客户端证书(示例:client1) ./easyrsa gen-req client1 nopass ./easyrsa sign-req client client1 # 创建客户端配置文件 cat > /etc/openvpn/client1.ovpn <<EOF client dev tun proto udp remote YOUR_SERVER_IP 1194 resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert client1.crt key client1.key tls-auth ta.key 1 cipher AES-256-CBC auth SHA256 verb 3 EOF echo "✅ OpenVPN 服务已成功部署!" echo "客户端配置文件路径:/etc/openvpn/client1.ovpn"
执行脚本前,请将 YOUR_SERVER_IP 替换为你的服务器公网 IP,运行命令:chmod +x setup_openvpn.sh && ./setup_openvpn.sh。
完成后,你可以通过 scp 将 .ovpn 文件传输给客户端,并在 Windows/macOS/Linux 上使用 OpenVPN GUI 导入即可连接,此脚本极大简化了运维流程,特别适合批量部署或 DevOps 场景,是每个网络工程师必备的利器!




