说明
- 此法用于多个客户端通过OpenVPN服务器实现内网访问
- OpenVPN服务器操作系统
CentOS-7.7
- OpenVPN版本
2.4.8
- easy-rsa版本
3.0.6
- 使用
tap
模式 - 客户端IP地址池
10.8.0.0/24
- 多个客户端直接可以通过OpenVPN实现内网通信
准备操作
添加EPEL源
1 | yum install epel-release -y |
替换为阿里云的源
1 | sed -e 's,^#baseurl,baseurl,g' \ |
更新软件
1 | yum makecache |
修改sysctl参数
1 | cat > /etc/sysctl.d/99-net.conf <<EOF |
修改limits参数
1 | cat > /etc/security/limits.d/99-centos.conf <<EOF |
安装OpenVPN软件
1 | yum install -y openvpn easy-rsa lrzsz iptables-services |
配置服务器证书
复制文件
拷贝easy-rsa的文件到/etc/openvpn下
1 | cp -r /usr/share/easy-rsa/3.0.6 /etc/openvpn/easy-rsa |
修改vars
编辑vars文件
1 | vim /etc/openvpn/easy-rsa/vars |
修改以下几项
1 | set_var EASYRSA_REQ_COUNTRY "US" |
初始化PKI和CA
切换目录
1 | cd /etc/openvpn/easy-rsa |
创建PKI
1 | ./easyrsa init-pki |
创建CA
1 | ./easyrsa build-ca nopass |
创建服务器证书
1 | ./easyrsa build-server-full openvpn-server nopass |
创建DH证书
1 | ./easyrsa gen-dh |
拷贝证书
1 | mkdir -p /etc/openvpn/pki |
创建ta.key
1 | openvpn --genkey --secret /etc/openvpn/pki/ta.key |
配置OpenVPN
创建日志目录
1 | mkdir -p /var/log/openvpn |
创建客户端配置目录
1 | mkdir -p /etc/openvpn/client/{config,user} |
配置OpenVPN服务器端
1 | vim /etc/openvpn/server/srv.conf |
下面内容按需更改
1 | 监听地址 |
启动OpenVPN-server
1 | chown -R root:openvpn /etc/openvpn |
添加SNAT访问内网
- 让
10.8.0.0/24
访问192.168.0.0/24
的时候做SNAT,源地址改成OpenVPN服务器的内网地址
1 | iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -d 192.168.0.0/24 -j SNAT --to-source OPENVPN_SERVER_IP |
定期更新CRL
说明
- OpenVPN的server配置里面添加了
crl-verify
之后,需要给crl定期更新 - 如果crl文件长期不更新,过期之后,OpenVPN会报无法验证证书,导致无法连接OpenVPN
- 连接日志如下,提示
CRL has expired: CN=client_1
1 | openvpn[28570]: TCP connection established with [AF_INET]202.96.128.86:7688 |
配置systemd timer
定义Service
1 | vim /usr/lib/systemd/system/easyrsa-gen-crl.service |
1 | [Unit] |
定义timer
1 | vim /usr/lib/systemd/system/easyrsa-gen-crl.timer |
1 | [Unit] |
启动timer
1 | systemctl enable easyrsa-gen-crl.timer |
立刻启动service
1 | systemctl start easy-rsa-gen-crl.service |
查看Service日志
1 | journalctl -xfu easy-rsa-gen-crl.service |
查看timer状态
1 | systemctl status easyrsa-gen-crl.timer |
客户端管理
客户端配置模板
1 | vim /etc/openvpn/templates/ovpn.template |
1 | 配置为客户端模式 |
指定客户端推送配置
模板
1 | vim /etc/openvpn/templates/ipconfig_push.template |
1 | 给客户端推送固定的IP地址 |
客户端配置
这里的客户端名字指的是证书的
Common Name
,这里以user1为例
1 | vim /etc/openvpn/client/config/user1 |
1 | 给客户端推送固定的IP地址10.8.0.100 |
用户管理脚本
1 | vim /usr/local/bin/ovpn_mgmt.sh |
1 | !/bin/bash |
添加用户
1 | /usr/local/bin/ovpn_mgmt.sh -m add_user -u USERNAME -i 10.8.0.10 |
删除用户
1 | /usr/local/bin/ovpn_mgmt.sh -m del_user -u USERNAME |