个人电脑/员工电脑 (外网) ↓ OpenVPN客户端 阿里云VPN服务器 (公网: x.x.x.x, 内网: 192.168.21.159) ↓ OpenVPN隧道 公司内网服务器 (物理IP: 192.168.7.10, VPN IP: 10.8.0.10)
最好修改端口,目前端口是51194
# 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
# 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
# 创建配置文件 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
# 创建CCD目录 sudo mkdir -p /etc/openvpn/server/ccd sudo chmod 700 /etc/openvpn/server/ccd
# 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
# 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
# 创建证书管理脚本 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
# 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
# CentOS/RHEL sudo yum install openvpn -y # Ubuntu/Debian sudo apt install openvpn -y
# 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" # ==========================
# 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
# 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
sudo openvpn --config /etc/openvpn/client/client.ovpn --daemon
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
[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
[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
1、从阿里云服务器下载证书包:
# 在阿里云服务器上 scp /etc/openvpn/clients/my-pc.tar.gz 到你的电脑
2、解压到OpenVPN配置目录(根据个人目录放到对应文件夹):
C:\Users\86150\OpenVPN\config
3、文件列表:
ca.crtmy-pc.crtmy-pc.keyta.keymy-pc.ovpnclient 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


选择"Connect"
输入用户名密码(如果设置了)
查看连接状态
# 在阿里云服务器上测试 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
# 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
# Windows route print | findstr "10.8.0" # Linux ip route show | grep 10.8.0
| 客户端类型 | 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 | 动态分配 | 自动分配 |
#!/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/"
创建客户端信息数据库:
# 创建客户端信息文件 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
# 创建监控脚本 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 ""
# 创建备份脚本 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
# 吊销证书 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
# 检查: # 1. 1194端口是否开放 sudo netstat -anup | grep 1194 # 2. 证书是否正确 openssl verify -CAfile ca.crt client.crt # 3. 服务是否运行 sudo systemctl status openvpn@server
# 检查: # 1. 客户端路由表 route print (Windows) 或 ip route show (Linux) # 2. 服务端路由 ip route show | grep 10.8.0 # 3. 防火墙 sudo iptables -L -n
# 修改server.conf keepalive 10 120 persist-key persist-tun
# 网络诊断 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
# 只允许特定IP段连接 sudo iptables -A INPUT -p udp --dport 1194 -s 允许的IP段 -j ACCEPT sudo iptables -A INPUT -p udp --dport 1194 -j DROP
/etc/openvpn/ ├── easy-rsa/ # 证书目录 │ ├── pki/ │ │ ├── ca.crt # CA证书 │ │ ├── issued/ # 已签发证书 │ │ └── private/ # 私钥 │ └── ta.key # TLS认证密钥 ├── server.conf # 服务器配置 ├── server/ │ └── ccd/ # 客户端特定配置 ├── clients/ # 客户端文件包 └── scripts/ # 管理脚本
# 服务管理 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 许可协议。转载请注明出处!