OpenVPN云服务器搭建指南
项目背景
为突破ZeroTier的10客户端限制,现基于云服务器部署OpenVPN解决方案,构建跨云私有网络环境。本方案实现以下核心功能:
- 以云服务器作为VPN网关,打通物理机与云主机网络
- 支持Windows/Linux双平台客户端接入
- 提供动态IP分配与静态IP绑定双模式
- 采用AES-256-GCM加密+TLS认证双保险
服务器配置
组件 | 版本要求 | 部署位置 |
---|---|---|
OpenVPN | ≥2.4.12 | 云服务器 |
Easy-RSA | 2.0分支 | 云服务器 |
windows客户端程序 | Windows:2.4.12 | 用户终端 |
linux客户端程序 | ≥2.4.12 | 物理服务器 |
基础设施要求
- 云服务器:CentOS 7.9 (购买的是此版本机器)
- 公网IP:需开放UDP 1194端口
- 防火墙配置:
firewall-cmd --permanent --add-port=1194/udp firewall-cmd --reload
- 张师傅是直接关闭了防火墙的
systemctl stop firewalld
相关文件及参考
实施步骤
安装openvpn
# 安装openvpn
rpm -ivh openvpn-2.4.12-1.el7.x86_64.rpm
# 查看openvpn版本
openvpn --version
第一阶段:证书体系构建(云服务器操作)
1. 初始化CA系统
# 安装依赖
yum install -y tree nmap lrzsz dos2unix nc lsof wget
yum install -y psmisc net-tools bashcompletion vim-enhanced git
# 将easy-rsa-old-master.zip上传到服务器:/root/,解压easy-rsa-old-master.zip
unzip easy-rsa-old-master.zip
ll /root/easy-rsa-old-master
# 修改变量文件,生成证书时不用输入相关变量,直接使用默认值
cd /root/easy-rsa-old-master/easy-rsa/2.0/
vim vars
source vars && ./clean-all
生成CA证书
cd /root/easy-rsa-old-master/easy-rsa/2.0/
# 生成CA证书
./build-ca
# 查看CA证书
ll ./keys/ca*
生成服务端证书
cd /root/easy-rsa-old-master/easy-rsa/2.0/
# 生成服务端证书
./build-key-server server
# 查看服务端证书
ll ./keys/server*
生成客户端证书
cd /root/easy-rsa-old-master/easy-rsa/2.0/
# 生成客户端证书
# 由于有多台物理服务器要加入vpn,且计划每台物理服务器都有自己的openvpn ip
# 因此需要为每台物理服务器生成一个客户端证书
# 此处建议取有意义的名称,例如:kvm1 kvm2 kvm3
./build-key kvm1
#./build-key kvm2
#./build-key kvm3
# 查看客户端证书
ll ./keys/kvm*
# 给windows客户端生成证书,此处建议使用有意义的名称,例如:zhangshifu
./build-key zhangshifu
# 查看客户端证书
ll ./keys/zhangshifu*
生成DH参数
cd /root/easy-rsa-old-master/easy-rsa/2.0/
# 生成DH参数文件
./build-dh
# 查看DH参数文件
ll ./keys/dh*
生成ta.key文件
cd /root/easy-rsa-old-master/easy-rsa/2.0/
# 生成ta.key文件
openvpn --genkey --secret keys/ta.key
# 查看ta.key文件
ll ./keys/ta.key
拷贝相关文件到openvpn目录下
mkdir -p /etc/openvpn
mkdir -p /etc/openvpn/keys
cp /root/easy-rsa-old-master/easy-rsa/2.0/keys/ca.crt /etc/openvpn/keys/
cp /root/easy-rsa-old-master/easy-rsa/2.0/keys/ta.key /etc/openvpn/keys/
cp /root/easy-rsa-old-master/easy-rsa/2.0/keys/server.crt /etc/openvpn/keys/
cp /root/easy-rsa-old-master/easy-rsa/2.0/keys/server.key /etc/openvpn/keys/
cp /root/easy-rsa-old-master/easy-rsa/2.0/keys/dh2048.pem /etc/openvpn/keys/
拷贝并编辑openvpn服务模板配置文件
cp /usr/share/doc/openvpn-2.4.12/sample/sample-config-files/server.conf /etc/openvpn/server.conf
vim /etc/openvpn/server.conf
;与#开关的是注释
# 修改以下内容
dev tap # 默认是dev tun,改为dev tap,因为我们要搭建私有网络,不仅仅是隧道网络
ca keys/ca.crt # ca证书路径
cert keys/server.crt # 服务端证书路径
key keys/server.key # 服务端私钥路径
dh keys/dh2048.pem # dh参数文件路径
server 10.10.10.0 255.255.255.0 # 私有网络地址段
push "route 10.10.10.0 255.255.255.0" # 推送私有网络地址段,此段命令表明:
# 客户端会将所有发往 10.10.10.0/24 网段的流量通过 VPN 隧道发送,由 OpenVPN 服务器进行路由
push "route 192.168.3.0 255.255.255.0" # 推送私有网络地址段,此段命令表明:
# 客户端会将所有发往 192.168.3.0/24 网段的流量通过 VPN 隧道发送,由 OpenVPN 服务器进行路由
client-config-dir /etc/openvpn/ccd # 客户端配置目录,用于存放客户端的特定配置文件,比如说物理机的ip地址分配
route 10.10.10.0 255.255.255.0 # 路由配置,仅在 OpenVPN 服务器端 生效;当客户端访问 10.10.10.0/24 网段时,直接通过 VPN 隧道转发,无需经过系统默认路由
client-to-client # 允许客户端之间通信,默认各客户端之间不能通信
duplicate-cnn # 允许同一个证书名称的客户端同时连接
tls-auth keys/ta.key 0 # 启用TLS认证,用于加强安全性
cipher AES-256-GCM # 加密算法,从 2.4 版本之后不能使用 CBC 模式了,需要改为GCM
3. 启用IP转发
echo "net.ipv4.ip_forward = 1" > /etc/sysctl.d/99-openvpn.conf
sysctl -p /etc/sysctl.d/99-openvpn.conf
启动openvpn
# 进入openvpn配置文件目录
cd /etc/openvpn
# 创建ccd目录
mkdir ccd # 不创建会报错
# 启动openvpn服务
openvpn --daemon --config server.conf
# 查看openvpn服务状态
ps -ef | grep openvpn
# 查看openvpn服务端口
netstat -lntup | grep 1194
第三阶段:客户端配置
Windows客户端
- 安装客户端程序(默认路径:
C:\Program Files\OpenVPN\
)
拷贝客户端配置文件,以zhangshifu的windows客户端为便 - 在openvpn服务器上为zhangshifu生成客户端配置文件,并拷贝到windows客户端
# openvpn服务器上处理相关证书文件(windows客户端)
mkdir -p /root/zhangshifu
cp /usr/share/doc/openvpn-2.4.12/sample/sample-config-files/client.conf /root/zhangshifu/ # 拷贝客户端模板配置文件
cp /root/easy-rsa-old-master/easy-rsa/2.0/keys/zhangshifu.crt /root/zhangshifu/client.crt # 拷贝客户端证书,需要重命名为client.key
cp /root/easy-rsa-old-master/easy-rsa/2.0/keys/zhangshifu.key /root/zhangshifu/client.key # 拷贝客户端私钥,需要重命名为client.key
cp /root/easy-rsa-old-master/easy-rsa/2.0/keys/ca.crt /root/zhangshifu/ # 拷贝CA证书
cp /root/easy-rsa-old-master/easy-rsa/2.0/keys/ta.key /root/zhangshifu/ # 拷贝ta.key文件
mv /root/zhangshifu/client.conf /root/zhangshifu/client.ovpn # 重命名客户端模板配置文件,windows客户端需要.ovpn结尾的文件
ll ./keys/*
# 修改客户端zhangshifu的配置文件
vim /root/zhangshifu/client.ovpn
dev tap # 默认是dev tun,改为dev tap,因为我们要搭建私有网络,不仅仅是隧道网络
# remote 外网ip 1194
remote 43.134.30.162 1194
cipher AES-256-GCM
# 拷贝客户端配置文件到windows客户端
cd /root/
zip zhangshifu.zip zhangshifu/*
# 将zip文件拷贝到windows客户端,解压即可使用
# 将zhangshifu.zip的所有文件,拷贝到windows客户端的openvpn安装目录下:默认安装为:C:\Program Files\OpenVPN\config
Linux客户端
linux安装openvpn客户端
rpm -ivh openvpn-2.4.12-1.el7.x86_64.rpm # 离线安装,本篇文章有提供openvpn客户端rpm包
- 固定linux客户端的ip(在openvpn服务器上配置)
vim /etc/openvpn/server.conf
# 修改或添加以下内容
client-config-dir /etc/openvpn/ccd
# 客户端配置目录(必须得写绝对路径,排错2小时),用于存放客户端的特定配置文件,比如说物理机的ip地址分配
route 192.168.3.0 255.255.255.0
# 路由配置,仅在 OpenVPN 服务器端 生效;当客户端访问 10.10.10.0/24 网段时,直接通过 VPN 隧道转发,无需经过系统默认路由
- 创建ccd文件(在openvpn服务器上配置)
vim /etc/openvpn/ccd/kvm1
# 写入以下内容
# ifconfig-push 预计分配openvpn中的ip 子网掩码
ifconfig-push 10.10.10.10 255.255.255.0
- 重启openvpn
ps -ef | grep openvpn
kill -9 进程号
cd /etc/openvpn && openvpn --daemon --config server.conf
- 拷贝客户端配置文件到linux客户端
# openvpn服务器上处理相关证书文件
mkdir -p /root/kvm1
cp /usr/share/doc/openvpn-2.4.12/sample/sample-config-files/client.conf /root/kvm1/ # 拷贝客户端模板配置文件
cp /root/easy-rsa-old-master/easy-rsa/2.0/keys/kvm1.crt /root/kvm1/client.crt # 拷贝客户端证书,需要重命名为client.key
cp /root/easy-rsa-old-master/easy-rsa/2.0/keys/kvm1.key /root/kvm1/client.key # 拷贝客户端私钥,需要重命名为client.key
cp /root/easy-rsa-old-master/easy-rsa/2.0/keys/ca.crt /root/kvm1/ # 拷贝CA证书
cp /root/easy-rsa-old-master/easy-rsa/2.0/keys/ta.key /root/kvm1/ # 拷贝ta.key文件
ll ./keys/*
# 修改linux客户端的配置文件
vim /root/kvm1/client.conf
dev tap # 默认是dev tun,改为dev tap,因为我们要搭建私有网络,不仅仅是隧道网络
# remote 外网ip 1194
remote 43.134.30.162 1194
cipher AES-256-GCM
# 打包客户端配置文件
cd /root/
zip kvm1.zip kvm1/*
# 拷贝客户端配置文件到linux客户端的/etc/openvpn/
unzip kvm1.zip -d /etc/openvpn/
rm -rf /etc/openvpn/client
mv /etc/openvpn/kvm1 /etc/openvpn/client
# 启动openvpn客户端
systemctl start openvpn-client@client
# 查看openvpn客户端状态
systemctl status openvpn-client@client
# 正常来说应该用到了在openvpn中强行指定kvm1机器的ip:10.10.10.10
评论区