阅读量:0
1. 环境准备
主机名 | 功能 | IP |
openvpn | openvpn server服务端 | 10.0.0.5, 172.16.1.5 |
windows | windows 笔记本 openvpn 客户端 |
2. 安装证书创建工具easy-rsa和openvpn
因为OpenVPN 使用 easy-rsa 来管理PKI所需要的密钥和证书
10.0.0.5安装 yum -y install easy-rsa openvpn
mkdir -p /opt/easy-rsa cp -a /usr/share/easy-rsa/3.0.8/* /opt/easy-rsa/ cp /usr/share/doc/easy-rsa-3.0.8/vars.example /opt/easy-rsa/vars #vars 文件里定义了后续生成密钥和证书所需要的环境变量 ]# cat > /opt/easy-rsa/vars <<EOF set_var EASYRSA_DN "cn_only" set_var EASYRSA_REQ_COUNTRY "CN" set_var EASYRSA_REQ_PROVINCE "shenzhen" set_var EASYRSA_REQ_CITY "shenzhen" set_var EASYRSA_REQ_ORG "tom" set_var EASYRSA_REQ_EMAIL "tom@qq.com" set_var EASYRSA_NS_SUPPORT "yes" EOF
3. 配置流程
- 创建dh-pem算法文件
- 创建CA证书密钥对
- 创建server密钥对,启动openvpn
- 创建用户密钥对,生成配置文件发给用户 (不同用户重复此步骤)
- 用户在windows下载openvpn客户端,把配置文件放在config目录下,连接即可
3.1. 创建dh-pem算法文件
#为了在Server和Client之间交换密钥,需要创建Diffie-Hellman文件 [root@openvpn easy-rsa]# ./easyrsa gen-dh DH parameters of size 2048 created at /opt/easy-rsa/pki/dh.pem
3.2. 创建CA证书密钥对
首先, 我们需要生成CA根密钥和证书, 用来给VPN Server和Client的证书进行签名
###02 充当权威机构 创建ca证书 ######1.初始化,在当前目录创建PKI目录,用于存储证书 cd /opt/easy-rsa/ ]# ./easyrsa init-pki Your newly created PKI dir is: /opt/easy-rsa/pki #初始化完成 显示你可以尝试创建 CA证书 ,初始化后的目录在 pki下面 ######2.创建根证书,会提示设置密码,用于ca对之后生成的server和client证书签名时使用,其他可默认 ##温馨提示: 加上密码 [root@openvpn easy-rsa]# ./easyrsa build-ca ###创建后生成 ca证书和私钥 pki/ca.crt #生成的CA证书 pki/private/ca.key #生成的CA密钥
3.3. 创建server密钥对拷贝到openvn,启动openvpn
##01 创建server证书,nopass表示不加密私钥文件,其他可默认 ./easyrsa gen-req myvpn nopass ##02 给server证书签名,首先是对一些信息的确认,可以输入yes,提示输入的密码是ca证书密码 ./easyrsa sign-req server myvpn #生成下面几个文件 #/opt/easy-rsa/pki/reqs/myvpn.req #/opt/easy-rsa/pki/private/myvpn.key #/opt/easy-rsa/pki/issued/myvpn.crt #3 把ca.crt,dh.pem,myvpn.crt,myvpn.key拷贝到openvpn目录 cp pki/ca.crt pki/dh.pem pki/issued/myvpn.crt pki/private/myvpn.key /etc/openvpn/server/ #_________________________________________________________________ #4 创建openvpn的server配置文件 cat > /etc/openvpn/server/server.conf <<EOF port 1194 proto udp dev tun ca server/ca.crt dh server/dh.pem cert server/myvpn.crt key server/myvpn.key server 10.8.0.0 255.255.255.0 push "route 172.16.1.0 255.255.255.0" #ifconfig-pool-persist ipp.txt keepalive 10 120 max-clients 100 status /var/log/openvpn-status.log log /var/log/openvpn.log verb 3 client-to-client persist-key persist-tun duplicate-cn EOF #_________________________________________________________________________________ #配置文件说明 port 1194 #端口 proto udp #协议 dev tun #采用路由隧道模式tun ca server/ca.crt #ca证书文件位置 /etc/openvpn dh server/dh.pem #交换证书校验算法 /etc/openvpn cert server/myvpn.crt #服务端公钥名称 /etc/openvpn key server/myvpn.key #服务端私钥名称 /etc/openvpn server 10.8.0.0 255.255.255.0 #给客户端分配地址池(ip地址范围),注意:不能和VPN服务器内网网段有相同 push "route 172.16.1.0 255.255.255.0" #客户端连接后,推送给客户端的路由规则,客户端想访问172.16.1.0/24 网段联系openvpn服务端 #ifconfig-pool-persist ipp.txt #地址池记录文件位置 未来让openvpn 客户端固定ip地址使用的. keepalive 10 120 #存活时间,10秒ping一次,120 如未收到响应则视为断线 max-clients 100 #最多允许100个客户端连接 status /var/log/openvpn-status.log #日志记录位置openvpn状态 log /var/log/openvpn.log #openvpn日志记录位置 verb 3 #verbose 日志输出级别 数字越大越详细 最多11(debug) client-to-client #客户端与客户端之间支持通信 persist-key #通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys 对私钥进行缓存. persist-tun #检测超时后,重新启动VPN,一直保持tun是linkup的。否则网络会先linkdown然后再linkup duplicate-cn #客户端密钥(证书和私钥)是否可以重复 #_________________________________________________________________________________ #—————————————————————————————————————————————————————————————————— #5 openvpn@.service表示可以带参数启动, 这里只修改--config %i/%i.conf路径 [root@openvpn pki]# cat /usr/lib/systemd/system/openvpn@.service [Unit] Description=OpenVPN Robust And Highly Flexible Tunneling Application On %I After=network.target [Service] Type=notify PrivateTmp=true ExecStart=/usr/sbin/openvpn --cd /etc/openvpn/ --config %i/%i.conf [Install] WantedBy=multi-user.target You have new mail in /var/spool/mail/root #—————————————————————————————————————————————————————————————————— #启动openvpn服务 [root@openvpn pki]# systemctl enable --now openvpn@server [root@openvpn pki]# ps -ef|grep openvpn root 45031 1 0 13:04 ? 00:00:00 /usr/sbin/openvpn --cd /etc/openvpn/ --config server/server.conf root 45421 26850 0 13:08 pts/1 00:00:00 grep --color=auto openvpn [root@openvpn pki]# ss -tuanlp|grep openvpn udp UNCONN 0 0 *:1194 *:* users:(("openvpn",pid=45031,fd=5)) #——————————————————————————————————————————————————————————————————
3.4. 创建用户密钥,生成配置文件发给用户 (不同用户重复此步骤)
#1.创建client端证书和私钥文件 ./easyrsa gen-req jack nopass #2.给client端证书签名,提示输入的密码是ca证书密码 ./easyrsa sign-req client jack #3 拷贝客户端密钥对到/etc/openvpn/client/jack目录,并创建客户端配置文件 mkdir -p /etc/openvpn/client/jack/ cp pki/ca.crt pki/issued/jack.crt pki/private/jack.key /etc/openvpn/client/jack/ #4 创建客户配置文件 cat >/etc/openvpn/client/jack/jack.ovpn<<EOF client dev tun proto udp remote 10.0.0.5 1194 resolv-retry infinite nobind ca ca.crt cert jack.crt key jack.key verb 3 persist-key EOF #_配置文件说明________________________________________________________________________ client #指定当前VPN是客户端 dev tun #使用tun隧道传输协议 proto udp #使用udp协议传输数据 remote 10.0.0.5 1194 #openvpn服务器IP地址端口号 resolv-retry infinite #断线自动重新连接,在网络不稳定的情况下非常有用 nobind #不绑定本地特定的端口号 ca ca.crt #指定CA证书的文件路径 cert jack.crt #指定当前客户端的证书文件路径 key jack.key #指定当前客户端的私钥文件路径 verb 3 #指定日志文件的记录详细级别,可选0-9,等级越高日志内容越详细 persist-key #通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys #创建多个用户密钥目录结构如下 [root@openvpn openvpn]# tree client/ client/ └── jack ├── ca.crt ├── jack.crt ├── jack.key └── jack.ovpn └── sara ├── ca.crt ├── sara.crt ├── sara.key └── sara.ovpn
3.5. 用户在windows下载openvpn客户端,把配置文件放在config目录下,连接即可
#1. 用户下载安装客户端 #2. 把/etc/openvpn/client/下面的用户目录发给用户 #3. 用户把收到的文件放到C:\Program Files\OpenVPN\config\目录下即可 #4. 启动openvpn客户端,任务栏右击logo,在弹出的选项中点击连接,即可连接