编辑
2026-01-04
部署文档
00

目录

OpenVPN Site-to-Site VPN 部署手册
一、项目概述
1.1 网络架构
1.2 技术原理
二、环境准备
2.1 服务器要求
2.2 客户端要求
三、服务器端部署
3.1 安装OpenVPN和EasyRSA
3.2 初始化PKI(证书体系)
3.3 配置OpenVPN服务器
3.4 创建客户端配置目录
3.5 配置系统网络
3.6 启动OpenVPN服务
四、客户端证书生成
4.1 生成客户端证书脚本
4.2 生成各类客户端证书
五、内网服务器配置
5.1 安装OpenVPN客户端
5.2 下载并配置客户端
5.3 配置系统转发(如果需要转发流量)
5.4 创建OpenVPN客户端服务
5.5 直接命令行启动
5.6查看网络信息 (tun0)
5.7此时使用云主机ping 内网服务器
5.8 如果服务端ping不通客户端内网ip,需要看下路由
六、个人电脑配置
6.1 Windows客户端配置
6.1.1 安装OpenVPN GUI
6.1.2 导入配置文件
6.1.3 修改.ovpn文件(如果需要)
七、测试验证
7.1 基础连通性测试
7.2 服务访问测试
7.3 路由表检查
八、多客户端管理
8.1 IP地址规划表
8.2 批量创建客户端脚本
8.3 客户端信息管理表
九、维护和监控
9.1 监控脚本
9.2 定期备份
9.3 证书吊销
十、故障排除
10.1 常见问题及解决
问题1:客户端无法连接
问题2:能连接但无法ping通
问题3:连接经常断开
10.2 诊断命令集
十一、安全加固
11.1 安全建议
11.2 防火墙规则示例
十二、附录
12.1 文件结构
12.2 端口说明
12.3 相关命令速查

OpenVPN Site-to-Site VPN 部署手册

一、项目概述

1.1 网络架构

个人电脑/员工电脑 (外网) ↓ OpenVPN客户端 阿里云VPN服务器 (公网: x.x.x.x, 内网: 192.168.21.159) ↓ OpenVPN隧道 公司内网服务器 (物理IP: 192.168.7.10, VPN IP: 10.8.0.10)

1.2 技术原理

  • 所有设备通过OpenVPN连接到一个虚拟网络(10.8.0.0/24)
  • 每个设备分配固定的VPN IP
  • 通过VPN IP直接通信,无需复杂路由配置

二、环境准备

2.1 服务器要求

  • 阿里云ECS(CentOS 7/8 或 Ubuntu 18.04+)
  • 公网IP,开放1194端口(UDP)
  • 内网IP:192.168.21.159(示例)

最好修改端口,目前端口是51194

2.2 客户端要求

  • Windows/Mac/Linux
  • 能访问公网

三、服务器端部署

3.1 安装OpenVPN和EasyRSA

# CentOS/RHEL sudo yum install epel-release -y sudo yum install openvpn easy-rsa -y # Ubuntu/Debian sudo apt update sudo apt install openvpn easy-rsa -y

3.2 初始化PKI(证书体系)

# 1. 复制EasyRSA模板 sudo cp -r /usr/share/easy-rsa/ /etc/openvpn/ cd /etc/openvpn/easy-rsa/ # 2. 初始化PKI sudo ./easyrsa init-pki # 3. 创建CA证书(无密码) sudo ./easyrsa build-ca nopass # 提示Common Name时输入:MyCompany-VPN-CA # 4. 生成服务器证书 sudo ./easyrsa gen-req server nopass sudo ./easyrsa sign-req server server # 5. 生成Diffie-Hellman参数 sudo ./easyrsa gen-dh # 6. 生成TLS认证密钥 sudo openvpn --genkey --secret ta.key

3.3 配置OpenVPN服务器

# 创建配置文件 sudo vim /etc/openvpn/server/server.conf
# 基本配置 port 51194 proto udp dev tun # 证书路径 ca /etc/openvpn/easy-rsa/pki/ca.crt cert /etc/openvpn/easy-rsa/pki/issued/server.crt key /etc/openvpn/easy-rsa/pki/private/server.key dh /etc/openvpn/easy-rsa/pki/dh.pem tls-auth /etc/openvpn/easy-rsa/ta.key 0 # 网络配置 server 10.8.0.0 255.255.255.0 topology subnet # 客户端配置目录(用于分配固定IP) client-config-dir /etc/openvpn/server/ccd # 允许客户端间通信 client-to-client # 保持连接 keepalive 10 120 # 加密设置 cipher AES-256-CBC auth SHA256 # 压缩 compress lz4-v2 push "compress lz4-v2" # 权限 user nobody group nobody persist-key persist-tun # 日志 status /var/log/openvpn/openvpn-status.log log-append /var/log/openvpn/openvpn.log verb 3 explicit-exit-notify 1

3.4 创建客户端配置目录

# 创建CCD目录 sudo mkdir -p /etc/openvpn/server/ccd sudo chmod 700 /etc/openvpn/server/ccd

3.5 配置系统网络

# 1. 开启IP转发 echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf sudo sysctl -p # 2. 配置iptables NAT(如果关闭防火墙,则不需要操作) # 假设公网网卡是eth0 sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE # 3. 允许VPN流量转发 sudo iptables -A FORWARD -i tun0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT sudo iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT # 4. 开放OpenVPN端口 sudo iptables -A INPUT -p udp --dport 1194 -j ACCEPT # 5. 保存iptables规则 sudo iptables-save | sudo tee /etc/sysconfig/iptables # 6. 开启iptables服务 sudo systemctl enable iptables sudo systemctl start iptables

3.6 启动OpenVPN服务

# 1. 启用并启动服务 sudo systemctl start openvpn-server@server.service systemctl enable openvpn-server@server.servic # 2. 检查状态 sudo systemctl status openvpn-server@server.servic # 3. 查看日志 sudo tail -f /var/log/openvpn/openvpn.log

四、客户端证书生成

4.1 生成客户端证书脚本

# 创建证书管理脚本 sudo vim /etc/openvpn/create-client.sh
shell
#!/bin/bash # OpenVPN客户端证书生成脚本 if [ $# -lt 1 ]; then echo "使用方法: $0 客户端名称 [IP地址]" echo "示例: $0 internal-server 10.8.0.10" echo "示例: $0 employee-001 10.8.0.100" exit 1 fi CLIENT_NAME=$1 CLIENT_IP=${2:-"auto"} cd /etc/openvpn/easy-rsa/ # 1. 生成客户端证书 echo "正在生成证书: $CLIENT_NAME" sudo ./easyrsa gen-req $CLIENT_NAME nopass sudo ./easyrsa sign-req client $CLIENT_NAME # 2. 创建CCD文件(如果指定了IP) if [ "$CLIENT_IP" != "auto" ]; then echo "为 $CLIENT_NAME 分配固定IP: $CLIENT_IP" echo "ifconfig-push $CLIENT_IP 255.255.255.0" | sudo tee /etc/openvpn/server/ccd/$CLIENT_NAME # 如果是服务器,添加iroute if [[ $CLIENT_NAME == *"server"* ]] || [[ $CLIENT_NAME == *"internal"* ]]; then echo "添加iroute用于服务器" echo "iroute 192.168.7.0 255.255.255.0" | sudo tee -a /etc/openvpn/server/ccd/$CLIENT_NAME fi fi # 3. 创建客户端目录 CLIENT_DIR="/etc/openvpn/clients/$CLIENT_NAME" sudo mkdir -p $CLIENT_DIR # 4. 复制证书文件 sudo cp pki/ca.crt $CLIENT_DIR/ sudo cp pki/issued/$CLIENT_NAME.crt $CLIENT_DIR/ sudo cp pki/private/$CLIENT_NAME.key $CLIENT_DIR/ sudo cp ta.key $CLIENT_DIR/ # 5. 创建.ovpn配置文件 cat > $CLIENT_DIR/$CLIENT_NAME.ovpn <<EOF client dev tun proto udp remote 你的阿里云公网IP 1194 resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert $CLIENT_NAME.crt key $CLIENT_NAME.key remote-cert-tls server tls-auth ta.key 1 cipher AES-256-CBC auth SHA256 compress lz4-v2 verb 3 EOF # 6. 打包所有文件 cd /etc/openvpn/clients/ sudo tar -czf $CLIENT_NAME.tar.gz -C $CLIENT_NAME . echo "" echo "========================================" echo "客户端创建完成: $CLIENT_NAME" if [ "$CLIENT_IP" != "auto" ]; then echo "分配IP: $CLIENT_IP" fi echo "证书包: /etc/openvpn/clients/$CLIENT_NAME.tar.gz" echo "包含文件:" echo " - ca.crt (根证书)" echo " - $CLIENT_NAME.crt (客户端证书)" echo " - $CLIENT_NAME.key (客户端私钥)" echo " - ta.key (TLS认证密钥)" echo " - $CLIENT_NAME.ovpn (配置文件)" echo "========================================"
# 给脚本执行权限 sudo chmod +x /etc/openvpn/create-client.sh # 创建客户端目录 sudo mkdir -p /etc/openvpn/clients

4.2 生成各类客户端证书

# 1. 内网服务器 sudo /etc/openvpn/create-client.sh internal-server 10.8.0.10 # 2. 你的个人电脑 sudo /etc/openvpn/create-client.sh my-pc 10.8.0.100 # 3. 其他员工(示例) sudo /etc/openvpn/create-client.sh employee-001 10.8.0.101 sudo /etc/openvpn/create-client.sh employee-002 10.8.0.102 # 4. 访客(自动分配IP) sudo /etc/openvpn/create-client.sh guest-001 auto

五、内网服务器配置

5.1 安装OpenVPN客户端

# CentOS/RHEL sudo yum install openvpn -y # Ubuntu/Debian sudo apt install openvpn -y

5.2 下载并配置客户端

# 1. 从阿里云服务器下载证书包 scp root@阿里云公网IP:/etc/openvpn/clients/internal-server.tar.gz ./ # 2. 解压到OpenVPN客户端目录 sudo mkdir -p /etc/openvpn/client sudo tar -xzf internal-server.tar.gz -C /etc/openvpn/client/ # 3. 创建客户端配置文件 sudo nano /etc/openvpn/client/client.opvn
client dev tun proto udp remote 阿里云公网IP 1194 resolv-retry infinite nobind persist-key persist-tun ca /etc/openvpn/client/ca.crt cert /etc/openvpn/client/internal-server.crt key /etc/openvpn/client/internal-server.key remote-cert-tls server tls-auth /etc/openvpn/client/ta.key 1 cipher AES-256-CBC auth SHA256 compress lz4-v2 verb 3 # 重要:不要重定向所有流量 pull-filter ignore "redirect-gateway" # ======== 关键修改 ======== # 1. 不自动添加服务端推送的路由 route-nopull # 2. 手动添加必要的路由(避免冲突) # 格式:route <网络> <掩码> <网关> route 10.8.0.0 255.255.255.0 vpn_gateway # 3. 如果要访问其他内网,也在这里手动添加 # route 192.168.21.0 255.255.255.0 vpn_gateway # 4. 或者让所有流量走VPN(二选一) # redirect-gateway def1 bypass-dhcp route-noexec script-security 2 #Windows电脑不需要下面的配置 up "/bin/true" # ==========================

5.3 配置系统转发(如果需要转发流量)

# 1. 开启IP转发 echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf sudo sysctl -p # 2. 配置防火墙(如果需要其他VPN客户端访问此服务器的服务,防火墙未开启不需要此操作) sudo firewall-cmd --permanent --add-port=22/tcp # SSH sudo firewall-cmd --permanent --add-port=80/tcp # HTTP sudo firewall-cmd --permanent --add-port=443/tcp # HTTPS sudo firewall-cmd --reload

5.4 创建OpenVPN客户端服务

# 1. 创建systemd服务文件 sudo vim /etc/systemd/system/openvpn-client.service [Unit] Description=OpenVPN Client After=network.target [Service] Type=simple ExecStart=/usr/sbin/openvpn --config /etc/openvpn/client/client.conf Restart=on-failure RestartSec=5s [Install] WantedBy=multi-user.target
# 2. 启用并启动服务 sudo systemctl daemon-reload sudo systemctl enable openvpn-client sudo systemctl start openvpn-client # 3. 检查状态 sudo systemctl status openvpn-client # 4. 查看VPN IP ip addr show tun0 # 应该显示: inet 10.8.0.10/24

5.5 直接命令行启动

sudo openvpn --config /etc/openvpn/client/client.ovpn --daemon

5.6查看网络信息 (tun0)

tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1500 inet 10.8.0.10 netmask 255.255.255.0 destination 10.8.0.10 inet6 fe80::3986:64e1:93a2:a40b prefixlen 64 scopeid 0x20<link> unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 100 (UNSPEC) RX packets 7817 bytes 1516818 (1.4 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 11519 bytes 11107381 (10.5 MiB) TX errors 0 dropped 175 overruns 0 carrier 0 collisions 0

5.7此时使用云主机ping 内网服务器

[root@aliyun my-pc-2]# ping 192.168.7.10 PING 192.168.7.10 (192.168.7.10) 56(84) bytes of data. 64 bytes from 192.168.7.10: icmp_seq=1 ttl=64 time=19.2 ms

5.8 如果服务端ping不通客户端内网ip,需要看下路由

[root@xiaobai ccd]# ip route show | grep "192.168.7" 192.168.7.0/24 via 10.8.0.10 dev tun0 看下服务端的 /etc/openvpn/server/ccd/internal-server # 固定IP ifconfig-push 10.8.0.10 255.255.255.0 # 告诉VPN服务器:内网192.168.7.0/24通过这个客户端可达 iroute 192.168.7.0 255.255.255. #看下这个规则配置没有,或者有没有生效,没有的话可以手动添加 iroute 192.168.7.0 255.255.255.0 #手动添加 # 添加路由(临时生效,重启后会丢失) ip route add 192.168.7.0/24 via 10.8.0.10 dev tun0 #永久添加 CentOS/RHEL 7/8 # 1. 创建路由配置文件 sudo nano /etc/sysconfig/network-scripts/route-tun0 192.168.7.0/24 via 10.8.0.10 dev tun0

六、个人电脑配置

6.1 Windows客户端配置

6.1.1 安装OpenVPN GUI

  1. 下载:https://swupdate.openvpn.net/community/releases/OpenVPN-2.6.6-I001-amd64.msi
  2. 安装OpenVPN GUI

6.1.2 导入配置文件

1、从阿里云服务器下载证书包:

# 在阿里云服务器上 scp /etc/openvpn/clients/my-pc.tar.gz 到你的电脑

2、解压到OpenVPN配置目录(根据个人目录放到对应文件夹):

C:\Users\86150\OpenVPN\config

3、文件列表:

  • ca.crt
  • my-pc.crt
  • my-pc.key
  • ta.key
  • my-pc.ovpn

6.1.3 修改.ovpn文件(如果需要)

client dev tun proto udp #公网服务器IP remote 公网服务器ip 51194 resolv-retry infinite #route-noexec nobind persist-key persist-tun # 证书路径 ca C:\\Users\\86150\\OpenVPN\\config\\ca.crt cert C:\\Users\\86150\\OpenVPN\\config\\my-pc.crt key C:\\Users\\86150\\OpenVPN\\config\\my-pc.key remote-cert-tls server tls-auth C:\\Users\\86150\\OpenVPN\\config\\ta.key 1 cipher AES-256-CBC auth SHA256 compress lz4-v2 verb 3 # ======== 关键修改 ======== # 1. 不自动添加服务端推送的路由 route-nopull # 2. 手动添加必要的路由(避免冲突) # 格式:route <网络> <掩码> <网关> route 10.8.0.0 255.255.255.0 vpn_gateway # 3. 如果要访问其他内网,也在这里手动添加 # route 192.168.21.0 255.255.255.0 vpn_gateway # 4. 或者让所有流量走VPN(二选一) # redirect-gateway def1 bypass-dhcp route-noexec script-security 2 #up "/bin/true" # ==========================

####6.1.4 连接VPN

  1. 右键点击系统托盘中的OpenVPN图标

image.png

image.png

  1. 选择"Connect"

  2. 输入用户名密码(如果设置了)

  3. 查看连接状态

七、测试验证

7.1 基础连通性测试

# 在阿里云服务器上测试 ping 10.8.0.10 # 内网服务器VPN IP ping 192.168.7.10 # 内网服务器物理IP(如果配置了iroute) # 在内网服务器上测试 ping 10.8.0.1 # VPN服务器 ping 10.8.0.100 # 你的电脑VPN IP # 在你的电脑上测试(连接VPN后) ping 10.8.0.1 # VPN服务器 ping 10.8.0.10 # 内网服务器VPN IP

7.2 服务访问测试

# Windows # SSH访问 ssh user@10.8.0.10 # RDP访问 mstsc /v:10.8.0.10 # HTTP访问 curl http://10.8.0.10 或浏览器打开 http://10.8.0.10

7.3 路由表检查

# Windows route print | findstr "10.8.0" # Linux ip route show | grep 10.8.0

八、多客户端管理

8.1 IP地址规划表

客户端类型IP范围用途示例
服务器10.8.0.10-29内网服务器10.8.0.10
服务器
管理员10.8.0.30-49管理员电脑10.8.0.30
管理员
员工10.8.0.50-99普通员工10.8.0.50:员工A
访客10.8.0.100-150临时访问10.8.0.100:访客
DHCP池10.8.0.200-254动态分配自动分配

8.2 批量创建客户端脚本

#!/bin/bash # batch-create-clients.sh # 定义客户端列表 declare -A CLIENTS=( ["web-server"]="10.8.0.10" ["db-server"]="10.8.0.11" ["app-server"]="10.8.0.12" ["admin-pc"]="10.8.0.30" ["employee-001"]="10.8.0.50" ["employee-002"]="10.8.0.51" ["employee-003"]="10.8.0.52" ) # 创建每个客户端 for CLIENT in "${!CLIENTS[@]}"; do IP=${CLIENTS[$CLIENT]} echo "创建客户端: $CLIENT, IP: $IP" /etc/openvpn/create-client.sh $CLIENT $IP echo "" done echo "所有客户端创建完成!" echo "客户端包位置: /etc/openvpn/clients/"

8.3 客户端信息管理表

创建客户端信息数据库:

# 创建客户端信息文件 sudo nano /etc/openvpn/clients/clients-info.csv
客户端名称,IP地址,创建日期,用途,负责人,状态 internal-server,10.8.0.10,2025-12-31,Web服务器,张三,active my-pc,10.8.0.100,2025-12-31,个人电脑,李四,active employee-001,10.8.0.50,2025-12-31,开发人员,王五,active

九、维护和监控

9.1 监控脚本

# 创建监控脚本 sudo nano /etc/openvpn/scripts/monitor.sh
#!/bin/bash echo "=== OpenVPN监控报告 ===" echo "时间: $(date)" echo "" # 1. 服务状态 echo "1. OpenVPN服务状态:" sudo systemctl status openvpn@server --no-pager | grep -E "(Active|Main PID)" echo "" # 2. 连接客户端数 echo "2. 连接客户端:" CLIENT_COUNT=$(grep -c "10.8.0" /var/log/openvpn/openvpn-status.log 2>/dev/null || echo "0") echo "在线客户端: $CLIENT_COUNT" echo "" # 3. 最近连接 echo "3. 最近连接日志:" sudo tail -10 /var/log/openvpn/openvpn.log | grep -E "(Connection|MULTI:)" echo "" # 4. 系统资源 echo "4. 系统资源:" ps aux | grep openvpn | grep -v grep echo "" # 5. 网络状态 echo "5. 网络状态:" ip addr show tun0 2>/dev/null | grep inet echo ""

9.2 定期备份

# 创建备份脚本 sudo nano /etc/openvpn/scripts/backup.sh
#!/bin/bash BACKUP_DIR="/backup/openvpn/$(date +%Y%m%d)" mkdir -p $BACKUP_DIR # 备份证书和配置 cp -r /etc/openvpn/easy-rsa/pki $BACKUP_DIR/ cp -r /etc/openvpn/server $BACKUP_DIR/ cp -r /etc/openvpn/clients $BACKUP_DIR/ cp /etc/openvpn/server.conf $BACKUP_DIR/ # 备份日志 cp /var/log/openvpn/openvpn.log $BACKUP_DIR/ cp /var/log/openvpn/openvpn-status.log $BACKUP_DIR/ # 打包 tar -czf $BACKUP_DIR.tar.gz $BACKUP_DIR # 保留最近7天备份 find /backup/openvpn/ -name "*.tar.gz" -mtime +7 -delete echo "备份完成: $BACKUP_DIR.tar.gz"
# 添加到crontab sudo crontab -e # 添加:0 2 * * * /etc/openvpn/scripts/backup.sh

9.3 证书吊销

# 吊销证书 cd /etc/openvpn/easy-rsa/ # 1. 吊销证书 sudo ./easyrsa revoke 客户端名称 # 2. 生成新的CRL sudo ./easyrsa gen-crl # 3. 在server.conf中添加CRL检查 echo "crl-verify /etc/openvpn/easy-rsa/pki/crl.pem" | sudo tee -a /etc/openvpn/server.conf # 4. 重启服务 sudo systemctl restart openvpn@server

十、故障排除

10.1 常见问题及解决

问题1:客户端无法连接

# 检查: # 1. 1194端口是否开放 sudo netstat -anup | grep 1194 # 2. 证书是否正确 openssl verify -CAfile ca.crt client.crt # 3. 服务是否运行 sudo systemctl status openvpn@server

问题2:能连接但无法ping通

# 检查: # 1. 客户端路由表 route print (Windows) 或 ip route show (Linux) # 2. 服务端路由 ip route show | grep 10.8.0 # 3. 防火墙 sudo iptables -L -n

问题3:连接经常断开

# 修改server.conf keepalive 10 120 persist-key persist-tun

10.2 诊断命令集

# 网络诊断 ping 10.8.0.1 traceroute 10.8.0.1 # OpenVPN诊断 sudo tail -f /var/log/openvpn/openvpn.log cat /var/log/openvpn/openvpn-status.log # 系统诊断 sudo netstat -anup | grep openvpn sudo ss -tunap | grep 1194 sudo iptables -L -n -v

十一、安全加固

11.1 安全建议

  1. 使用强密码:如果设置证书密码
  2. 定期更新证书:建议每年更新一次
  3. 限制访问:只允许必要的端口
  4. 启用日志:监控异常连接
  5. 使用防火墙:限制来源IP

11.2 防火墙规则示例

# 只允许特定IP段连接 sudo iptables -A INPUT -p udp --dport 1194 -s 允许的IP段 -j ACCEPT sudo iptables -A INPUT -p udp --dport 1194 -j DROP

十二、附录

12.1 文件结构

/etc/openvpn/ ├── easy-rsa/ # 证书目录 │ ├── pki/ │ │ ├── ca.crt # CA证书 │ │ ├── issued/ # 已签发证书 │ │ └── private/ # 私钥 │ └── ta.key # TLS认证密钥 ├── server.conf # 服务器配置 ├── server/ │ └── ccd/ # 客户端特定配置 ├── clients/ # 客户端文件包 └── scripts/ # 管理脚本

12.2 端口说明

  • 1194:OpenVPN默认端口(UDP)
  • 443:备用端口(可穿透防火墙)

12.3 相关命令速查

# 服务管理 sudo systemctl start openvpn-server@server.service sudo systemctl stop openvpn-server@server.service sudo systemctl restart openvpn-server@server.service sudo systemctl status openvpn-server@server.service # 日志查看 sudo tail -f /var/log/openvpn/openvpn.log sudo journalctl -u openvpn-server@server.service -f # 客户端管理 /etc/openvpn/create-client.sh 客户端名 IP地址

部署完成! 现在你的个人电脑可以通过VPN IP 10.8.0.10 直接访问内网服务器,其他服务器也可以类似方式添加。

本文作者:小白

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!