OpenVPN实现安全的内网互通
弁言什么是OpenVPN
https://img-blog.csdnimg.cn/direct/262661cad60947099af9c00aefa0749b.png#pic_center
维基百科是这么介绍的: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的分享
若毗连失效,请在批评复兴
https://img-blog.csdnimg.cn/direct/6027cf17e3a4437294a0ce33f672faa7.png#pic_center
天生证书
server----
[*]进入EasyRSA-3.1.7,并修改相关参数
$ cd EasyRSA-3.1.7
$ cp vars.example vars
$ 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
...省略部分内容...
https://img-blog.csdnimg.cn/direct/2ec033f09cb24ec6a14d135dcb4e2639.png#pic_center
https://img-blog.csdnimg.cn/direct/8952e15903ac43e1bfa9aadcd212416f.png#pic_center
[*] 创建新的pki
$./easyrsa init-pki
https://img-blog.csdnimg.cn/direct/8a14141426b9438abe7a83d20c14e66d.png#pic_center
[*] 天生CA根证书
$ ./easyrsa build-ca nopass
https://img-blog.csdnimg.cn/direct/ff7f9a7dbafd4fd098016377ebba9a08.png#pic_center
证书文件:/etc/openvpn/EasyRSA-3.1.7/pki/ca.crt
[*] 天生server端证书和私钥
# 生成签名请求和私钥
$ ./easyrsa gen-req server nopass
# 签发证书
$ ./easyrsa sign server server
https://img-blog.csdnimg.cn/direct/d17026814bcd483f86433b0564a58321.png#pic_center
https://img-blog.csdnimg.cn/direct/0d6eb0b8912e445ea05c500aa77eb4e8.png#pic_center
[*]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 :
[*]这个下令是用来天生一个证书署名请求(CSR)和相应的私钥文件。
[*]当你需要为某个实体(如服务器或客户端)创建一个新的证书时,会运行这个下令,并提供一个唯一的名称(例如,vnserver)。
[*]它不会直接天生证书,而是产生一个 CSR 文件,这个文件可以被 CA(证书颁发机构)用来签发证书,同时也会天生与之对应的私钥文件,私钥由请求者生存并保密。
[*]./easyrsa build-server-full :
[*]这个下令则是用于在一个步骤中快速创建一个完备的服务器证书链,包括:
[*]天生服务器私钥
[*]创建 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算法需要的密钥文件
$ ./easyrsa gen-dh
https://img-blog.csdnimg.cn/direct/4f2f1559b28a4fdc961fcad33a42855a.png#pic_center
[*]dh: /etc/openvpn/EasyRSA-3.1.7/pki/dh.pem
[*] 天生用于防DDOS攻击和TLS攻击文件
$ openvpn --genkey tls-auth ta.key
https://img-blog.csdnimg.cn/direct/b629c96267204090a428a27346c151d6.png#pic_center
[*] 复制证书文件到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是我客户端的名称
$ ./easyrsa gen-req tom nopass
$ ./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
[*]复制证书到tom目录下
$ mkdir tom
$ 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
https://img-blog.csdnimg.cn/direct/444e40d65b7644128ce9d7a0617172a1.png#pic_center
配置文件
[*]天生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
[*]编写脚本查抄文件和密码文件
# 创建认证文件
$ 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授予执行权限
$ chmod u+x check.sh
# 创建密码文件
$ cat > /etc/openvpn/user_passwd.txt <<-EOF
tom 123456
EOF
[*]服务端开启ip转发
https://img-blog.csdnimg.cn/direct/7a0715910f0c42e28b18f3e6b0f1b697.png#pic_center
[*]启动server端
$ openvpn --config server.conf
客户端安装OpenVPN
[*]安装OpenVPN
yum install openvpn -y
cd /etc/openvpn
# 将服务端创建的证书文件拉取过来
scp -P 2345 -r root@8.130.96.170:/etc/openvpn/tom ./
https://img-blog.csdnimg.cn/direct/3da23ecd34a84d139e3e8a05ef6e689d.png#pic_center
[*]创建配置文件client.conf
# 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
[*]启动客户端
# openvpn --config client.conf
https://img-blog.csdnimg.cn/direct/a27fbf545cc94c1e820f2f1676b1e450.png#pic_center
[*]客户端ping服务端测试
https://img-blog.csdnimg.cn/direct/5c28d3a7c88441a499951d1ac4540be3.png#pic_center
问题反馈
若对文中有任何的疑问,大概需要资助可以通过以下方式进行反馈
[*] 直接进行批评大概单独私聊
[*] 发送邮件到:mr_xuansu@163.com
更多内容请关注微信公众号:萱蘇的运维日常
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]