因为实际工作需要,在外地要访问公司内部网络,VPN是比较常见的安装方案。这篇文章就介绍如何在CentOS 7服务器下安装免费的OpenVPN服务端和如何在Windows电脑上配置客户端。

服务端

安装epel库

openvpn在这里

yum install epel-release -y

安装openvpn

yum update -y
yum install -y openvpn

CentOS 7安装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/

CentOS 7安装OpenVPN和配置步骤

生成私钥和证书

进入到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

生成的时候会提示输入密码,这里建议用密码,办法服务端和客户端的时候需要验证密码。

CentOS 7安装OpenVPN和配置步骤

给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目录

CentOS 7安装OpenVPN和配置步骤

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

CentOS 7安装OpenVPN和配置步骤

设置防火墙

这里我把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

CentOS 7安装OpenVPN和配置步骤

启动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服务端和客户端的整个步骤基本结束了,有不正确之处欢迎指正。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。