在该方案中需要用到openvpn的C/S架构,这种架构要求必须使用TLS进行验证
基础环境准备:
#在所有服务器上装如下软件
yum install epel* -y
yum install openvpn easy-rsa tcpdump wget tree -y
第一:创建CA服务器(这里将规划的server角色当作CA使用,注意easy3.0版本与之前的有不一样的地方)
#将easy-rsa复制到一个单独的工作目录
mkdir -p /etc/openvpn/ca
cp -drp /usr/share/easy-rsa/3/* /etc/openvpn/ca/
#初始化pki,删除原有的CA等(查看帮助信息 /etc/openvpn/ca/easyrsa help init-pki )
cd /etc/openvpn/ca
./easyrsa init-pki
#创建CA根证书,这里的密码要记得哦,因为以后需要用它签发客户端证书(这里设置为1234)
./easyrsa build-ca
第二:为客户机/服务器生成并签发证书,然后分发到客户机/服务器上(当然也可在客户机上生成证书请求,然后用CA服务器签发)
#我们使用第一种方式,为客户机生成并签发证书,这里在CA服务上直接操作即可
++++++++++++++++
创建服务器端的证书(在CA服务上执行)
mkdir -p /etc/openvpn/beihai
cp -drp /usr/share/easy-rsa/3/* /etc/openvpn/beihai
cd /etc/openvpn/beihai
./easyrsa init-pki
#生成证书请求(若是不指定该nopass参数,以后就会每次调用都要输入密码)
./easyrsa gen-req beihai nopass
#生成diffie hellman 参数(这是作为server角色所必须要的,客户端不需要该项)
./easyrsa gen-dh
#用CA执行签发
cd /etc/openvpn/ca
./easyrsa import-req /etc/openvpn/beihai/pki/reqs/beihai.req beihai
#注意,这里北海服务器是作为服务器角色,所有要用server,其他客户端用client,不要搞错了
./easyrsa sign-req server beihai
#在服务器端生成ta.key(用于openvpn控制通道的tls握手进行保护 )
cd /etc/openvpn/beihai
openvpn --genkey --secret ta.key
#查看生成好的证书(检查)
openssl x509 -in /etc/openvpn/ca/pki/issued/beihai.crt -text | more
++++++++++++++++++
创建客户端的证书,这里只演示南昌客户端的创建,天津的请参看该步骤即可(在CA服务上执行)
mkdir -p /etc/openvpn/nanchang
cp -drp /usr/share/easy-rsa/3/* /etc/openvpn/nanchang
cd /etc/openvpn/nanchang
./easyrsa init-pki
#生成证书请求(若是不指定该nopass参数,以后就会每次调用都要输入密码)
./easyrsa gen-req nanchang nopass
#用CA执行签发
cd /etc/openvpn/ca
./easyrsa import-req /etc/openvpn/nanchang/pki/reqs/nanchang.req nanchang
#注意,这里南昌服务器是作为客户端角色,所有要用client,不要搞错了
./easyrsa sign-req client nanchang
第三:将CA的根证书,服务器证书,服务器key,客户端证书,客户端密码,以及服务器端生成的TLS保护证书拷贝到各自服务器
#在CA服务器上操作(由于我们是在CA即server上执行的证书申请,所以不需要复制到server上,只需复制对应的大客户端上)
#复制必要文件到南昌客户端
#(注意复制过去后,需要nobody用户对/etc/openvpn/nanchang.crt文件以及nanchang.key有读权限,不然以nobody运行时会退出)
scp /etc/openvpn/ca/pki/ca.crt root@192.168.20.2:/etc/openvpn/
scp /etc/openvpn/ca/pki/issued/nanchang.crt root@192.168.20.2:/etc/openvpn/
scp /etc/openvpn/nanchang/pki/private/nanchang.key root@192.168.20.2:/etc/openvpn/
scp /etc/openvpn/beihai/ta.key root@192.168.20.2:/etc/openvpn/
#复制必要文件到天津客户端(注意权限要可读哦)
scp /etc/openvpn/ca/pki/ca.crt root@192.168.30.2:/etc/openvpn/
scp /etc/openvpn/ca/pki/issued/tianjin.crt root@192.168.30.2:/etc/openvpn/
scp /etc/openvpn/tianjin/pki/private/tianjin.key root@192.168.30.2:/etc/openvpn/
scp /etc/openvpn/beihai/ta.key root@192.168.30.2:/etc/openvpn/
第四:创建openvpn服务器配置文件
#在服务器上操作(注意文件名一定要是server.conf这样才能方便后期由systemctl接管服务,实现开机自启动)
#创建CCD目录(服务器端指定了该参数,就必须有该目录)
mkdir /etc/openvpn/beihai/ccd
cat /etc/openvpn/server.conf
proto tcp-server
port 1194
dev tun
auth-nocache #该参数能防止密码被缓存到内存中
topology subnet
push "topology subnet"
server 172.16.0.0 255.255.255.0
ca /etc/openvpn/ca/pki/ca.crt
cert /etc/openvpn/ca/pki/issued/beihai.crt
key /etc/openvpn/beihai/pki/private/beihai.key
dh /etc/openvpn/beihai/pki/dh.pem #dh 是server必须要有的,客户端可以不要,它定义了如何进行密钥交换
tls-auth /etc/openvpn/beihai/ta.key 0
user nobody
group nobody
persist-key
persist-tun
comp-lzo #开启压缩,若是服务端进行了压缩,客户端也要指定该压缩,否在无法进行通信
keepalive 5 20 #表示每隔5秒ping一下客户端/服务端,若是20秒内无响应,便判断客户端有可能断开了,要进行重新连接
client-config-dir /etc/openvpn/beihai/ccd
ifconfig-pool-persist /etc/openvpn/beihai/ipp.txt #客户端与虚拟IP的对应表,不要用于同证书多拨入情况
#推送路由,若是推送失败,需要检查server 是否设置正常,该故障我遇到过,设置ifconfig-pool了,发现推送失效
#push "route 192.168.21.0 255.255.255.0"
#push "route 192.168.31.0 255.255.255.0"
#push "route 192.168.11.0 255.255.255.0"
log-append /var/log/openvpn.log
#状态文件(默认60s写入一次该文件),启用该参数后,需要关闭selinux后才能通过守护程序启动
status /var/log/openvpn-status.log #需要关闭selinux
#若是您想了解每个参数表示什么意思,可以查看该文章
https://wsfnk.com/archives/698.html
第五:创建客户端配置文件,以南昌客户端为例(注意文件名一定要是client.conf这样才能方便后期由systemctl接管服务,实现开机自启动)
cat /etc/openvpn/client.conf
client
proto tcp-client
remote 192.168.10.2
port 1194
dev tun
user nobody
group nobody
persist-key
persist-tun
comp-lzo
keepalive 5 20 #客户端建议加上该参数,不管服务端down多久,恢复后可以重连
ca /etc/openvpn/ca.crt
cert /etc/openvpn/nanchang.crt
key /etc/openvpn/nanchang.key
tls-auth /etc/openvpn/ta.key 1 #该参数,服务端用0,客户端用1
log-append /var/log/openvpn-client.log
第六:启动服务端和客户端,并进行验证
#在服务端上执行
openvpn --config /etc/openvpn/server.conf
#在客户端上执行
openvpn --config /etc/openvpn/client.conf
如果文章对你有帮助,欢迎点击上方按钮打赏作者
暂无评论