因为实际工作需要,在外地要访问公司内部网络,VPN是比较常见的安装方案。这篇文章就介绍如何在CentOS 7服务器下安装免费的OpenVPN服务端和如何在Windows电脑上配置客户端。
服务端
安装epel库
openvpn在这里
yum install epel-release -y
安装openvpn
yum update -y
yum install -y openvpn
安装Easy RSA 3.0
Easy RSA 可帮助您设置内部证书颁发机构 (CA) 并生成 SSL 密钥对以保护 VPN 连接。
从github上下载代码
wget https://github.com/OpenVPN/easy-rsa/archive/v3.0.8.tar.gz
解压缩代码
tar -xf v3.0.8.tar.gz
在openvpn配置目录创建easy rsa目录
mkdir /etc/openvpn/easy-rsa
然后把下载解压的easy rsa文件中easyrsa3目录下的文件复制到/etc/openvpn/easy-rsa
cd /root/easy-rsa-3.0.8/easyrsa3
cp -a -r * /etc/openvpn/easy-rsa/
生成私钥和证书
进入到easy rsa目录
cd /etc/openvpn/easy-rsa/
配置参数
cp vars.example vars
vi vars
这几行取消注释,根据实际需要修改,当然不修改也没什么关系。
#set_var EASYRSA_REQ_COUNTRY "US"
#set_var EASYRSA_REQ_PROVINCE "California"
#set_var EASYRSA_REQ_CITY "San Francisco"
#set_var EASYRSA_REQ_ORG "Copyleft Certificate Co"
#set_var EASYRSA_REQ_EMAIL "me@example.net"
#set_var EASYRSA_REQ_OU "My Organizational Unit"
初始化清理私钥和证书
./easyrsa clean-all
生成ca证书
./easyrsa build-ca
生成的时候会提示输入密码,这里建议用密码,办法服务端和客户端的时候需要验证密码。
给openvpn服务端生成server私钥和证书。这里建议不要使用密码,不然在启动服务的时候会提示输入密码。后台启动和自动启动时不需要。
./easyrsa build-server-full server nopass
生成Diffie-Hellman算法需要的密钥文件,创建Diffie-Hellman,确保key穿越不安全网络的命令,时间会有点长,耐心等待。
./easyrsa gen-dh
生成tls-auth key
cd /etc/openvpn/
openvpn --genkey --secret ta.key
为了防止DDOS和TLS攻击,这个属于可选安全配置。强认证方式,防攻击。如果配置文件中启用此项(默认是启用的),就需要执行上述命令,并把ta.key放到/etc/openvpn目录。配置文件中服务端第二个参数为0,同时客户端也要有此文件,且client.conf中此指令的第二个参数需要为1。
复制私钥和公钥证书文件到OpenVPN配置目录
- ca.crt
- dh.pem
- ca.key
- server.key
- server.crt
ca.crt、dh.pem在/etc/openvpn/easy-rsa/pki目录
ca.key和server.key在/etc/openvpn/easy-rsa/pki/private目录
server.crt在 /etc/openvpn/easy-rsa/pki/issued目录
创建server配置文件
配置文件类似如下:
[root@localhost openvpn]# cat server.conf
local 0.0.0.0
port 1194
proto tcp
dev tun
ca ca.crt
cert server.crt
key server.key # This file should be kept secret
dh dh.pem
server 172.18.18.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 192.168.10.0 255.255.255.0"
keepalive 10 120
tls-auth ta.key 0 # This file is secret
cipher AES-256-CBC
comp-lzo
persist-key
persist-tun
status openvpn-status.log
log-append openvpn.log
verb 3
设置防火墙
这里我把firewalld关掉,使用iptables来做nat转发
systemctl stop firewalld
systemctl disable firewalld
打开系统转发设置
vim /etc/sysctl.conf
###添加
net.ipv4.ip_forward = 1
###执行加载
sysctl -p
配置iptables
yum install iptables-services
### 对网卡ens33进行转发
iptables -t nat -A POSTROUTING -s 172.18.18.0/24 -o ens33 -j MASQUERADE
iptables -L -n -t nat
###
services iptables save
systemctl enable iptables
启动openvpn服务端
systemctl -f start openvpn@server.service
systemctl -f enable openvpn@server.service
systemctl status openvpn@server.service
客户端
自动生成脚本
# ! /bin/bash
set -e
OVPN_USER_KEYS_DIR=/etc/openvpn/client/keys
EASY_RSA_DIR=/etc/openvpn/easy-rsa/
PKI_DIR=$EASY_RSA_DIR/pki
for user in "$@"
do
if [ -d "$OVPN_USER_KEYS_DIR/$user" ]; then
rm -rf $OVPN_USER_KEYS_DIR/$user
rm -rf $PKI_DIR/reqs/$user.req
sed -i '/'"$user"'/d' $PKI_DIR/index.txt
fi
cd $EASY_RSA_DIR
# 生成客户端SSL证书文件,password: zaq12wsx
./easyrsa build-client-full $user nopass
# 整理下生成的文件
mkdir -p $OVPN_USER_KEYS_DIR/$user
cp $PKI_DIR/ca.crt $OVPN_USER_KEYS_DIR/$user/ # CA 根证书
cp $PKI_DIR/issued/$user.crt $OVPN_USER_KEYS_DIR/$user/ # 客户端证书
cp $PKI_DIR/private/$user.key $OVPN_USER_KEYS_DIR/$user/ # 客户端证书密钥
cp /etc/openvpn/client/sample.ovpn $OVPN_USER_KEYS_DIR/$user/$user.ovpn # 客户端配置文件
sed -i 's/client.crt/'"$user".crt'/g' $OVPN_USER_KEYS_DIR/$user/$user.ovpn
sed -i 's/client.key/'"$user".key'/g' $OVPN_USER_KEYS_DIR/$user/$user.ovpn
#cp $EASY_RSA_DIR/ta.key $OVPN_USER_KEYS_DIR/$user/ta.key # auth-tls 文件
cp /etc/openvpn/ta.key $OVPN_USER_KEYS_DIR/$user/ta.key # auth-tls 文件
cd $OVPN_USER_KEYS_DIR
zip -r $user.zip $user
done
exit 0
自动删除脚本
# ! /bin/bash
set -e
OVPN_USER_KEYS_DIR=/etc/openvpn/client/keys
EASY_RSA_DIR=/etc/openvpn/easy-rsa/
for user in "$@"
do
cd $EASY_RSA_DIR
echo -e 'yes\n' | ./easyrsa revoke $user
./easyrsa gen-crl
# 吊销掉证书后清理客户端相关文件
if [ -d "$OVPN_USER_KEYS_DIR/$user" ]; then
rm -rf $OVPN_USER_KEYS_DIR/${user}*
fi
systemctl restart openvpn@server
done
exit 0
客户端client配置文件模板
路径:/etc/openvpn/client/sample.ovpn
client
proto tcp
dev tun
# 根据自己服务器地址实际情况修改
remote blog.nbqykj.cn 1194 tcp
ca ca.crt
cert client.crt
key client.key
tls-auth ta.key 1
cipher AES-256-CBC
resolv-retry infinite
nobind
mute-replay-warnings
keepalive 20 120
comp-lzo
persist-key
persist-tun
verb 3
mute 20
到这里CentOS 7下OpenVPN服务端和客户端的整个步骤基本结束了,有不正确之处欢迎指正。
参考地址:https://phoenixnap.com/kb/openvpn-centos