Openvpn
概述
OpenVPN 是一个开源的虚拟私人网络(VPN)解决方案,广泛用于安全地连接远程用户和分支机构到企业网络。它通过安全的隧道加密技术,确保数据在不安全的网络上进行安全传输。
核心功能:
- 数据加密:支持 SSL/TLS 加密,保障数据传输安全
- 灵活认证:支持证书认证、用户名密码认证及 LDAP 集成
- 网络扩展:支持跨公网组建虚拟局域网
- 多平台支持:Windows、macOS、Linux、Android、iOS 全平台覆盖
典型应用场景:
- 远程办公员工安全接入内网
- 多分支机构网络互联
- 云环境访问隔离和权限管理
- 绕过网络限制访问受限资源
服务端部署
1. 初始化配置
注意:将 公网地址 替换为服务器的实际公网 IP。
# 创建数据目录并生成配置文件
docker run -v ./openvpn:/etc/openvpn --rm kylemanna/openvpn ovpn_genconfig -u udp://公网地址
# 初始化 PKI 证书体系(生成 CA 证书和服务端证书)
docker run -v ./openvpn:/etc/openvpn --rm -it kylemanna/openvpn ovpn_initpki执行 ovpn_initpki 时会提示设置 CA 密码(PEM pass phrase),请妥善保管,后续创建用户证书会用到。
2. 启动服务
docker run -v ./openvpn:/etc/openvpn -d -p 1194:1194/udp --cap-add=NET_ADMIN kylemanna/openvpn| 参数 | 说明 |
|---|---|
-p 1194:1194/udp |
映射 UDP 端口 1194(OpenVPN 默认端口) |
--cap-add=NET_ADMIN |
允许容器管理网络(VPN 隧道需要) |
-d |
后台运行 |
3. 修改服务端配置(可选)
配置文件位于 ./openvpn/openvpn.conf,修改后需重启容器生效:
# 客户端连接分配的 IP 池
server 192.168.254.0 255.255.255.0
verb 3
key /etc/openvpn/pki/private/123.60.11.34.key
ca /etc/openvpn/pki/ca.crt
cert /etc/openvpn/pki/issued/123.60.11.34.crt
dh /etc/openvpn/pki/dh.pem
tls-auth /etc/openvpn/pki/ta.key
key-direction 0
keepalive 10 60
persist-key
persist-tun
proto udp
port 1194
dev tun0
status /tmp/openvpn-status.log
user nobody
group nogroup
comp-lzo no
# 服务端可访问的网段(添加路由)
route 192.168.253.0 255.255.255.0
# 推送给客户端的路由(客户端可访问的网段)
push "route 192.168.0.0 255.255.255.0"
push "comp-lzo no"关键配置说明:
| 配置项 | 说明 |
|---|---|
server |
VPN 子网,客户端将获得此网段内的 IP |
route |
服务端本机可访问的网段 |
push "route ..." |
推送给客户端的路由,客户端可访问这些网段 |
comp-lzo no |
关闭 LZO 压缩(新版 OpenVPN 已弃用) |
4. 创建客户端证书
# 创建客户端证书(test 为用户名,nopass 为不加密私钥)
docker run -v ./openvpn:/etc/openvpn --rm -it kylemanna/openvpn easyrsa build-client-full test nopass
# 生成客户端配置文件(test.ovpn)
docker run -v ./openvpn:/etc/openvpn --rm kylemanna/openvpn ovpn_getclient test > /tmp/test.ovpn生成后需从容器中拷贝配置文件:
cp /tmp/test.ovpn ./5. 吊销客户端证书
# 吊销证书
docker run -v ./openvpn:/etc/openvpn --rm -it kylemanna/openvpn easyrsa revoke test
# 重新生成证书吊销列表(CRL)
docker run -v ./openvpn:/etc/openvpn --rm -it kylemanna/openvpn easyrsa gen-crl客户端配置
1. 安装 OpenVPN
# CentOS / RHEL
yum install -y epel-release
yum install -y openvpn
# Ubuntu / Debian
apt update
apt install -y openvpn2. 部署客户端配置文件
将生成的 test.ovpn 复制到客户端机器:
# 创建客户端配置目录
mkdir -p /etc/openvpn/client
# 复制配置文件
cp test.ovpn /etc/openvpn/client/3. 启动客户端
openvpn --daemon --cd /etc/openvpn/client/ --config test.ovpn --log-append /var/log/test-vpn.log| 参数 | 说明 |
|---|---|
--daemon |
后台运行 |
--cd |
指定工作目录 |
--config |
指定配置文件 |
--log-append |
日志输出路径 |
4. 验证连接
# 查看 VPN 接口
ip addr show tun0
# 查看路由
ip route
# 测试内网连通性
ping 192.168.0.1常用管理命令
| 操作 | 命令 |
|---|---|
| 启动服务端 | docker run -v ./openvpn:/etc/openvpn -d -p 1194:1194/udp --cap-add=NET_ADMIN kylemanna/openvpn |
| 停止服务端 | docker stop openvpn |
| 查看日志 | docker logs openvpn -f |
| 进入容器 | docker exec -it openvpn /bin/bash |
| 创建客户端证书 | docker run -v ./openvpn:/etc/openvpn --rm -it kylemanna/openvpn easyrsa build-client-full 用户名 nopass |
| 生成客户端配置 | docker run -v ./openvpn:/etc/openvpn --rm kylemanna/openvpn ovpn_getclient 用户名 > /tmp/用户名.ovpn |
| 吊销客户端证书 | docker run -v ./openvpn:/etc/openvpn --rm -it kylemanna/openvpn easyrsa revoke 用户名 |
| 重新生成 CRL | docker run -v ./openvpn:/etc/openvpn --rm -it kylemanna/openvpn easyrsa gen-crl |
常见问题
Q:客户端连接后无法访问内网?
- 检查服务端
push "route ..."是否配置了正确的内网网段 - 确认服务端防火墙是否放行 VPN 子网流量
- 检查后端服务器是否配置了返回路由(需指向 OpenVPN 服务器 IP)
# 在客户端查看路由表
ip route | grep tun0Q:UDP 端口 1194 被占用?
修改启动命令中的端口映射:
docker run ... -p 1195:1194/udp ...同时修改客户端配置文件中的 remote 地址端口。
Q:证书过期如何更新?
重新生成证书并重启服务端:
# 删除旧证书(需进入容器)
docker exec -it openvpn /bin/bash
cd /etc/openvpn/easy-rsa
./easyrsa build-server-full server nopass
exit
# 重启容器
docker restart openvpnQ:客户端连接后无法访问互联网?
VPN 默认未配置流量转发,如需将所有流量通过 VPN,在服务端配置中添加:
# 将所有流量推送给客户端(需配合 NAT 转发)
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"Q:如何备份 OpenVPN 配置?
# 备份整个配置目录
tar -czf openvpn_backup.tar.gz ./openvpn/
# 恢复时解压到原目录
tar -xzf openvpn_backup.tar.gz