弁言
什么是OpenVPN
维基百科是这么介绍的:OpenVPN是一个用于创建假造私人网络加密通道的软件包,最早由James Yonan编写。OpenVPN答应创建的VPN使用公开密钥、电子证书、大概用户名/密码来进行身份验证。 它大量使用了OpenSSL加密库中的SSL/TLS协议函数库。
原作者: James Yonan
开发者: OpenVPN 项目 / OpenVPN Inc
当前版本: : 2.6.9 (2024年2月13日;稳固版本);
源代码库: github.com/OpenVPN
类型: VPN
体系平台: Windows XP或以上; OS X 10.8或以上; Android 4.0或以上; iOS 6或以上; Linux; *BSD;
网站: openvpn.net
安装OpenVPN
服务端安装OpenVPN、EasyRSA
- 使用下令安装OpenVPN
apt-get install openvpn -y
- 获取EasyRSA
wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.1.7/EasyRSA-3.1.7.tgz
若无网络,也可以下载之后,再上传到服务器。要是访问github失败,也可以通过百度云下载
百度云链接:https://pan.baidu.com/s/1T3SoiDwsP6cE9UaRXnSjww
提取码:r141
–来自百度网盘超级会员V6的分享
若毗连失效,请在批评复兴
天生证书
server----
- [root@aliyun /etc/openvpn]$ cd EasyRSA-3.1.7
- [root@aliyun /etc/openvpn/EasyRSA-3.1.7]$ cp vars.example vars
- [root@aliyun /etc/openvpn/EasyRSA-3.1.7]$ vim vars
- ...省略部分内容...
- # In how many days should the root CA key expire?
- # 设置根证书有效期为100年
- set_var EASYRSA_CA_EXPIRE 36500
- # In how many days should certificates expire?
- # 设置服务端证书有效期为10年
- set_var EASYRSA_CERT_EXPIRE 3650
- ...省略部分内容...
复制代码
- 创建新的pki
- [root@aliyun /etc/openvpn/EasyRSA-3.1.7]$./easyrsa init-pki
复制代码
- 天生CA根证书
- [root@aliyun /etc/openvpn/EasyRSA-3.1.7]$ ./easyrsa build-ca nopass
复制代码
证书文件:/etc/openvpn/EasyRSA-3.1.7/pki/ca.crt
- 天生server端证书和私钥
- # 生成签名请求和私钥
- [root@aliyun /etc/openvpn/EasyRSA-3.1.7]$ ./easyrsa gen-req server nopass
- # 签发证书
- [root@aliyun /etc/openvpn/EasyRSA-3.1.7]$ ./easyrsa sign server server
复制代码
- req: /etc/openvpn/EasyRSA-3.1.7/pki/reqs/server.req
- key: /etc/openvpn/EasyRSA-3.1.7/pki/private/server.key
- crt: /etc/openvpn/EasyRSA-3.1.7/pki/issued/server.crt
在OpenVPN环境中的EasyRSA工具集中,./easyrsa gen-req 和 ./easyrsa build-server-full 这两个下令执行的任务差别,它们分别用于差别的证书管理阶段:
- ./easyrsa gen-req [name]:
- 这个下令是用来天生一个证书署名请求(CSR)和相应的私钥文件。
- 当你需要为某个实体(如服务器或客户端)创建一个新的证书时,会运行这个下令,并提供一个唯一的名称(例如,vnserver)。
- 它不会直接天生证书,而是产生一个 CSR 文件,这个文件可以被 CA(证书颁发机构)用来签发证书,同时也会天生与之对应的私钥文件,私钥由请求者生存并保密。
- ./easyrsa build-server-full [name]:
- 这个下令则是用于在一个步骤中快速创建一个完备的服务器证书链,包括:
- 天生服务器私钥
- 创建 CSR
- 签发服务器证书(由本地或已配置的CA签订)
- 可能还包括创建DH参数文件大概天生CA证书及相关的中级证书(取决于EasyRSA版本和配置)
- 相对于单独的gen-req下令,build-server-full提供了一个更便捷的方式,它一步到位地完成了从天生密钥对到得到署名证书的所有流程,特殊适用于新建OpenVPN服务器场景。
总结来说,如果你只是想天生一个CSR以便提交给外部CA署名,那么使用gen-req;而如果你想在本地完成整个服务器证书的天生和署名过程,直接使用build-server-full更为方便。在OpenVPN环境中,通常会使用build-server-full来快速创建用于OpenVPN服务的自署名服务器证书。
- 天生Diffie-Hellman算法需要的密钥文件
- [root@aliyun /etc/openvpn/EasyRSA-3.1.7]$ ./easyrsa gen-dh
复制代码
- dh: /etc/openvpn/EasyRSA-3.1.7/pki/dh.pem
- 天生用于防DDOS攻击和TLS攻击文件
- [root@aliyun /etc/openvpn/EasyRSA-3.1.7]$ openvpn --genkey tls-auth ta.key
复制代码
- 复制证书文件到server目录下
- [root@aliyun /etc/openvpn/server]$ cp /etc/openvpn/EasyRSA-3.1.7/pki/dh.pem /etc/openvpn/server/
- cp /etc/openvpn/EasyRSA-3.1.7/pki/reqs/server.req /etc/openvpn/server/
- cp /etc/openvpn/EasyRSA-3.1.7/pki/private/server.key /etc/openvpn/server/
- cp /etc/openvpn/EasyRSA-3.1.7/pki/issued/server.crt /etc/openvpn/server/
- cp /etc/openvpn/EasyRSA-3.1.7/pki/ca.crt /etc/openvpn/server/
- cp /etc/openvpn/EasyRSA-3.1.7/ta.key /etc/openvpn/server
复制代码 client
- 天生客户端证书
有几个客户端就需要创建几个证书,tom是我客户端的名称
- [root@aliyun /etc/openvpn/EasyRSA-3.1.7]$ ./easyrsa gen-req tom nopass
- [root@aliyun /etc/openvpn/EasyRSA-3.1.7]$ ./easyrsa sign client tom
复制代码
- req: /etc/openvpn/EasyRSA-3.1.7/pki/reqs/tom.req
- key: /etc/openvpn/EasyRSA-3.1.7/pki/private/tom.key
- crt: /etc/openvpn/EasyRSA-3.1.7/pki/issued/tom.crt
- [root@aliyun /etc/openvpn]$ mkdir tom
- [root@aliyun /etc/openvpn]$ cp /etc/openvpn/EasyRSA-3.1.7/pki/reqs/tom.req /etc/openvpn/tom
- cp /etc/openvpn/EasyRSA-3.1.7/pki/private/tom.key /etc/openvpn/tom
- cp /etc/openvpn/EasyRSA-3.1.7/pki/issued/tom.crt /etc/openvpn/tom
- cp /etc/openvpn/EasyRSA-3.1.7/pki/ca.crt /etc/openvpn/tom
- cp /etc/openvpn/EasyRSA-3.1.7/ta.key /etc/openvpn/tom
复制代码
配置文件
- [root@aliyun /etc/openvpn]$ cat > /etc/openvpn/server/server.conf <<-EOF
- #端口号
- port 1194
- #开启TCP协议,关闭UDP协议
- proto tcp
- #dev tun创建路由隧道,dev tap将创建一个以太网隧道
- dev tun
- #修改CA证书、服务端证书和服务端私钥key的文件名
- ca ca.crt
- cert server.crt
- key server.key
- #Diifle hellman文件指向。如果在建立证书时使用2048的话就用2048
- dh dh.pem
- #给接入的Client分配的IP地址段,注意不要和服务内网网段重合
- server 10.8.0.0 255.255.255.0
- #客户端与客户端之间支持通信
- client-to-client
- #维持客户端和虚拟IP的联系。在OpenVPN重启时,再次连接的客户端依然被分配和以前一样的IP地址
- ifconfig-pool-persist ipp.txt
- #以下这句使得客户端能访问服务器后面的子网机器。比如服务器子网为172.29.242.142,则添加如下内容
- push "route 172.29.242.0 255.255.255.0"
- #分别指定发送间隔和接收间隔。用于设置OpenVPN的心跳包。此参数可保持OpenVPN连接的稳定性
- keepalive 10 120
- #最多允许200个客户端连接
- max-clients 200
- #为防止遭到DDoS攻击,生成ta.key文件,并拷贝到服务端和每个客户端
- #服务端0,客户端1
- tls-auth ta.key 0
- #设置重新连接时保留密钥。可避免重新连接时重新生成密钥
- persist-key
- #检测超时后,重新启动VPN,一直保持tun是linkup的。否则网络会先linkdown然后再linkup
- persist-tun
- #指定OpenVPN输出连接状态的文件,可查看OpenVPN的连接状态
- status /etc/openvpn/logs/openvpn-status.log
- #记录日志,每次重启OpenVPN后追加log信息
- log-append /etc/openvpn/logs/openvpn.log
- #重复日志记录限额
- mute 20
- #指定日志文件的记录详细级别,0-9,等级越高日志内容越详细
- verb 3
- #和keys连接VPN,一定要打开这个选项,否则只允许一 个人连接VPN
- duplicate-cn
- #支持密码认证-允许使用自定义脚本
- script-security 3
- #支持密码认证-指定认证脚本
- auth-user-pass-verify /etc/openvpn/check.sh via-env
- #支持密码认证-用户密码登陆方式验证
- username-as-common-name
- EOF
复制代码- # 创建认证文件
- [root@aliyun /etc/openvpn]$ cat > /etc/openvpn/check.sh <<-EOF
- #!/bin/bash
- PASSFILE="/etc/openvpn/user_passwd.txt" #密码文件 用户名 密码明文
- LOG_FILE="/etc/openvpn/logs/openvpn-password.log" #用户登录情况的日志
- TIME_STAMP=`date "+%Y-%m-%d %T"`
- if [ ! -r "${PASSFILE}" ]; then
- echo "${TIME_STAMP}: Could not open password file "${PASSFILE}" for reading." >> ${LOG_FILE}
- exit 1
- fi
- CORRECT_PASSWORD=`awk '!/^;/&&!/^#/&&$1=="'${username}'"{print $2;exit}' ${PASSFILE}`
- if [ "${CORRECT_PASSWORD}" = "" ]; then
- echo "${TIME_STAMP}: User does not exist: username="${username}",password="${password}"." >> ${LOG_FILE}
- exit 1
- fi
- if [ "${password}" = "${CORRECT_PASSWORD}" ]; then
- echo "${TIME_STAMP}: Successful authentication: username="${username}"." >> ${LOG_FILE}
- exit 0
- fi
- echo "${TIME_STAMP}: Incorrect password: username="${username}", password="${password}"." >> ${LOG_FILE}
- exit 1
- EOF
- # 对check.sh授予执行权限
- [root@aliyun /etc/openvpn]$ chmod u+x check.sh
- # 创建密码文件
- [root@aliyun /etc/openvpn]$ cat > /etc/openvpn/user_passwd.txt <<-EOF
- tom 123456
- EOF
复制代码
- [root@aliyun /etc/openvpn/server]$ openvpn --config server.conf
复制代码 客户端安装OpenVPN
- yum install openvpn -y
- cd /etc/openvpn
- # 将服务端创建的证书文件拉取过来
- scp -P 2345 -r root@8.130.96.170:/etc/openvpn/tom ./
复制代码
- [root@k3s-main openvpn]# cat > /etc/openvpn/tom/client.conf <<-EOF
- #指定当前VPN是客户端
- client
- #使用tun隧道传输协议
- dev tun
- #使用tcp协议传输数据
- proto tcp
- #OpenVPN服务器IP地址端口号
- remote 8.130.96.170 1194
- #指定CA证书的文件路径
- ca ca.crt
- #指定当前客户端的证书文件路径
- cert tom.crt
- #指定当前客户端的私钥文件路径
- key tom.key
- #断线自动重新连接,在网络不稳定的情况下非常有用
- resolv-retry infinite
- #不绑定本地特定的端口号
- nobind
- #通过keepalive检测超时后,重新启动PN,不重新读取keys,保留第一次使用的key
- persist-key
- #检测超时后,重新启动PN,一直保持tun是linkup的。否则网络会先linkdown然后再linkup
- persist-tun
- #生成防御DDos破坏的文件。客户端配置为
- tls-auth ta.key 1
- #指定日志文件的记录详细级别,0-9,等级越高日志内容越详细
- verb 3
- #使用用户名密码登录openvpn服务器
- auth-user-pass
- EOF
复制代码- [root@k3s-main tom]# openvpn --config client.conf
复制代码
问题反馈
若对文中有任何的疑问,大概需要资助可以通过以下方式进行反馈
- 直接进行批评大概单独私聊
- 发送邮件到:mr_xuansu@163.com
更多内容请关注微信公众号:萱蘇的运维日常
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |