angristan/openvpn-install
GitHub: angristan/openvpn-install
一款注重安全性与自动化的一键OpenVPN服务器部署脚本,旨在帮助用户在多种Linux发行版上快速构建和管理专有VPN服务。
Stars: 15952 | Forks: 3323
# openvpn-install
适用于 Debian、Ubuntu、Fedora、openSUSE、CentOS、Amazon Linux、Arch Linux、Oracle Linux、Rocky Linux 和 AlmaLinux 的 OpenVPN 安装程序。
该脚本将让你在几秒钟内设置并管理自己的安全 VPN 服务器。
## 这是什么?
该脚本旨在你自己的服务器上运行,无论是 VPS、独立服务器,甚至是家里的电脑。
设置完成后,你将能够为你想要连接的每台设备生成客户端配置文件。
每个客户端都可以通过服务器路由其互联网流量,并经过完全加密。
```
graph LR
A[Phone] -->|Encrypted| VPN
B[Laptop] -->|Encrypted| VPN
C[Computer] -->|Encrypted| VPN
VPN[OpenVPN Server]
VPN --> I[Internet]
```
## 为什么选择 OpenVPN?
创建此脚本时,OpenVPN 是开源 VPN 的事实标准。WireGuard 出现得较晚,在大多数用例中更简单、更快速。请查看 [wireguard-install](https://github.com/angristan/wireguard-install)。
话虽如此,当你需要以下功能时,OpenVPN 仍然是有意义的:
- **TCP 支持**:适用于阻止 UDP 的受限环境(企业网络、机场、酒店等)
- **密码保护的私钥**:WireGuard 配置以纯文本形式存储私钥
- **旧版兼容性**:几乎适用于所有平台的客户端,包括较旧的系统
## 功能
- 安装并配置开箱即用的 OpenVPN 服务器
- 用于自动化和脚本的 CLI 界面(带有 JSON 输出的非交互模式)
- 客户端和服务器证书的续订
- 列出并监控已连接的客户端
- 撤销证书后立即断开客户端连接(通过管理接口)
- 在可能的情况下使用[官方 OpenVPN 仓库](https://community.openvpn.net/openvpn/wiki/OpenvpnSoftwareRepos)以获取最新的稳定版本
- 无缝管理防火墙规则和转发(原生支持 firewalld 和 nftables,iptables 后备方案)
- 可配置的 VPN 子网(IPv4:默认为 `10.8.0.0/24`,IPv6:默认为 `fd42:42:42:42::/112`)
- 可配置的隧道 MTU(默认:`1500`)
- 如果需要,该脚本可以干净地卸载 OpenVPN,包括配置和防火墙规则
- 可自定义的加密设置,增强的默认设置(参见下文的[安全与加密](#security-and-encryption))
- 在可用时使用最新的 OpenVPN 功能(参见下文的[安全与加密](#security-and-encryption))
- 推送给客户端的各种 DNS 解析器
- 可选择使用 Unbound 作为自建解析器(支持现有的 Unbound 安装)
- TCP 和 UDP 可选
- 灵活的 IPv4/IPv6 支持:
- IPv4 或 IPv6 服务器端点(客户端如何连接)
- 仅 IPv4、仅 IPv6 或双栈客户端(VPN 寻址和互联网访问)
- 支持所有组合:4→4、4→4/6、4→6、6→4、6→6、6→4/6
- 自动防泄漏:在单栈模式下阻止不需要的协议
- 无特权模式:以 `nobody`/`nogroup` 运行
- 在 Windows 10 上阻止 DNS 泄漏
- 随机化的服务器证书名称
- 可选择使用密码保护客户端(私钥加密)
- 允许多个设备同时使用同一客户端配置文件的选项(禁用持久 IP 地址)
- **对端指纹认证**(OpenVPN 2.6+):无需 CA 的类似 WireGuard 的简化认证
- 许多其他的小细节!
## 兼容性
该脚本支持以下 Linux 发行版:
| | 支持 |
| ------------------- | ------- |
| AlmaLinux >= 8 | ✅ 🤖 |
| Amazon Linux 2023 | ✅ 🤖 |
| Arch Linux | ✅ 🤖 |
| CentOS Stream >= 8 | ✅ 🤖 |
| Debian >= 11 | ✅ 🤖 |
| Fedora >= 40 | ✅ 🤖 |
| openSUSE Leap >= 16 | ✅ 🤖 |
| openSUSE Tumbleweed | ✅ 🤖 |
| Oracle Linux >= 8 | ✅ 🤖 |
| Rocky Linux >= 8 | ✅ 🤖 |
| Ubuntu >= 18.04 | ✅ 🤖 |
需要注意的是:
- 该脚本仅定期针对带有 🤖 标记的发行版进行测试。
- 仅在 `amd64` 架构上进行了测试。
- 该脚本需要 `systemd`。
### 推荐服务商
- [Vultr](https://umami.stanislas.cloud/q/1HH9Thp8i):全球节点,支持 IPv6,起价为 \$2.5/月
- [Hetzner](https://umami.stanislas.cloud/q/HdzaOJWq7):全球节点,支持 IPv6,20 TB 流量,起价为 €3.59/月
- [Digital Ocean](https://umami.stanislas.cloud/q/sEVh1l79B):全球节点,支持 IPv6,起价为 \$4/月
## 使用说明
首先,在你的服务器上下载此脚本并赋予其可执行权限:
```
curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh
chmod +x openvpn-install.sh
```
你需要以 root 身份运行此脚本,并启用 TUN 模块。
### 交互模式
最简单的入门方式是使用交互式菜单:
```
./openvpn-install.sh interactive
```
这将引导你完成安装和客户端管理。
在你的主目录中,你将看到 `.ovpn` 文件。这些是客户端配置文件。将它们从服务器上下载下来(例如使用 `scp`),并使用你最喜欢的 OpenVPN 客户端进行连接。
如果你有任何问题,请先前往 [FAQ](#faq)。如果你需要帮助,可以发起一个 [讨论](https://github.com/angristan/openvpn-install/discussions)。请先搜索现有的 issue 和讨论。
### CLI 模式
对于自动化和脚本,请使用 CLI 接口:
```
# 使用默认值安装
./openvpn-install.sh install
# 添加客户端
./openvpn-install.sh client add alice
# 列出客户端
./openvpn-install.sh client list
# 撤销客户端(如果已连接则立即断开)
./openvpn-install.sh client revoke alice
```
#### 命令
```
openvpn-install [options]
Commands:
install Install and configure OpenVPN server
uninstall Remove OpenVPN server
client Manage client certificates
server Server management
interactive Launch interactive menu
Global Options:
--verbose Show detailed output
--log Log file path (default: openvpn-install.log)
--no-log Disable file logging
--no-color Disable colored output
-h, --help Show help
```
运行 `./openvpn-install.sh --help` 查看特定命令的选项。
#### 客户端管理
```
# 添加新客户端
./openvpn-install.sh client add alice
# 添加受密码保护的客户端
./openvpn-install.sh client add bob --password
# 撤销客户端
./openvpn-install.sh client revoke alice
# 续期客户端证书
./openvpn-install.sh client renew bob --cert-days 365
```
列出所有客户端:
```
$ ./openvpn-install.sh client list
══ Client Certificates ══
[INFO] Found 3 client certificate(s)
Name Status Expiry Remaining
---- ------ ------ ---------
alice Valid 2035-01-15 3650 days
bob Valid 2035-01-15 3650 days
charlie Revoked 2035-01-15 unknown
```
用于脚本编程的 JSON 输出:
```
$ ./openvpn-install.sh client list --format json | jq
{
"clients": [
{
"name": "alice",
"status": "valid",
"expiry": "2035-01-15",
"days_remaining": 3650
},
{
"name": "bob",
"status": "valid",
"expiry": "2035-01-15",
"days_remaining": 3650
},
{
"name": "charlie",
"status": "revoked",
"expiry": "2035-01-15",
"days_remaining": null
}
]
}
```
#### 服务器管理
```
# 续期服务器证书
./openvpn-install.sh server renew
# 卸载 OpenVPN
./openvpn-install.sh uninstall
```
显示已连接的客户端(数据每 60 秒刷新一次):
```
$ ./openvpn-install.sh server status
══ Connected Clients ══
[INFO] Found 2 connected client(s)
Name Real Address VPN IP Connected Since Transfer
---- ------------ ------ --------------- --------
alice 203.0.113.45:52341 10.8.0.2 2025-01-15 14:32 ↓1.2M ↑500K
bob 198.51.100.22:41892 10.8.0.3 2025-01-15 09:15 ↓800K ↑200K
[INFO] Note: Data refreshes every 60 seconds.
```
#### 安装选项
`install` 命令支持许多自定义选项:
```
# 自定义端口和协议
./openvpn-install.sh install --port 443 --protocol tcp
# 自定义 DNS 提供商
./openvpn-install.sh install --dns quad9
# 自定义加密设置
./openvpn-install.sh install --cipher AES-256-GCM --cert-type rsa --rsa-bits 4096
# 自定义 VPN 子网
./openvpn-install.sh install --subnet-ipv4 10.9.0.0
# 为客户端启用双栈 (IPv4 + IPv6)
./openvpn-install.sh install --client-ipv4 --client-ipv6
# 仅 IPv6 客户端(无 IPv4)
./openvpn-install.sh install --no-client-ipv4 --client-ipv6
# IPv6 端点(服务器监听 IPv6,客户端通过 IPv6 连接)
./openvpn-install.sh install --endpoint-type 6 --endpoint 2001:db8::1
# 用于双栈设置的自定义 IPv6 子网
./openvpn-install.sh install --client-ipv6 --subnet-ipv6 fd00:1234:5678::
# 跳过初始客户端创建
./openvpn-install.sh install --no-client
# 包含多个选项的完整示例
./openvpn-install.sh install \
--port 443 \
--protocol tcp \
--dns cloudflare \
--cipher AES-256-GCM \
--client mydevice \
--client-cert-days 365
```
**网络选项:**
- `--endpoint ` - 客户端连接的公共 IP 或主机名(默认:自动检测)
- `--endpoint-type <4|6>` - 端点 IP 版本(默认:`4`)
- `--ip ` - 服务器监听 IP(默认:自动检测)
- `--client-ipv4` - 为 VPN 客户端启用 IPv4(默认:启用)
- `--no-client-ipv4` - 为 VPN 客户端禁用 IPv4
- `--client-ipv6` - 为 VPN 客户端启用 IPv6(默认:禁用)
- `--no-client-ipv6` - 为 VPN 客户端禁用 IPv6
- `--subnet-ipv4 ` - IPv4 VPN 子网(默认:`10.8.0.0`)
- `--subnet-ipv6 ` - IPv6 VPN 子网(默认:`fd42:42:42:42::`)
- `--port ` - OpenVPN 端口(默认:`1194`)
- `--port-random` - 使用随机端口 (49152-65535)
- `--protocol ` - 协议(默认:`udp`)
- `--mtu ` - 隧道 MTU(默认:`1500`)
**DNS 选项:**
- `--dns ` - DNS 提供商(默认:`cloudflare`)。选项:`system`、`unbound`、`cloudflare`、`quad9`、`quad9-uncensored`、`fdn`、`dnswatch`、`opendns`、`google`、`yandex`、`adguard`、`nextdns`、`custom`
- `--dns-primary ` - 自定义主 DNS(需要 `--dns custom`)
- `--dns-secondary ` - 自定义辅 DNS(需要 `--dns custom`)
**安全选项:**
- `--cipher ` - 数据加密算法(默认:`AES-128-GCM`)。选项:`AES-128-GCM`、`AES-192-GCM`、`AES-256-GCM`、`AES-128-CBC`、`AES-192-CBC`、`AES-256-CBC`、`CHACHA20-POLY1305`
- `--cert-type ` - 证书类型(默认:`ecdsa`)
- `--cert-curve ` - ECDSA 曲线(默认:`prime256v1`)。选项:`prime256v1`、`secp384r1`、`secp521r1`
- `--rsa-bits <2048|3072|4096>` - RSA 密钥大小(默认:`2048`)
- `--hmac ` - HMAC 算法(默认:`SHA256`)。选项:`SHA256`、`SHA384`、`SHA512`
- `--tls-sig ` - TLS 模式(默认:`crypt-v2`)。选项:`crypt-v2`、`crypt`、`auth`
- `--auth-mode ` - 认证模式(默认:`pki`)。选项:`pki`(基于 CA)、`fingerprint`(对端指纹,需要 OpenVPN 2.6+)
- `--tls-version-min <1.2|1.3>` - 最低 TLS 版本(默认:`1.2`)
- `--tls-ciphersuites
- ` - TLS 1.3 密码套件,以冒号分隔(默认:`TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256`)
- `--tls-groups
- ` - 密钥交换组,以冒号分隔(默认:`X25519:prime256v1:secp384r1:secp521r1`)
- `--server-cert-days
标签:Arch Linux, Awesome, CentOS, CISA项目, Debian, Nftables, OpenVPN, Shell脚本, TCP代理, VPN, VPS, WireGuard替代, 个人VPN, 二进制发布, 安全通信, 应用安全, 开源工具, 数字证书, 服务器搭建, 流量路由, 系统管理, 网络加密, 网络安全, 网络安全, 证书管理, 运维自动化, 远程访问, 防火墙配置, 隐私保护, 隐私保护, 隧道协议