centos7搭建OpenVPN

1、搭建流程图

2、安装openvpn、easy-rsa、iptables-server

yum install epel-* -y
yum -y install openvpn easy-rsa iptables-services

3、生成证书及相关文件

利用easy-rsa生成相关证书文件

  • CA根证书
  • openvpn服务器证书
  • Diffie-Hellman算法用到的key 复制easy-rsa脚本到/etc/openvpn下面,该脚本是用来生成CA证书和各种key文件

复制easy-rsa脚本到/etc/openvpn下面,该脚本是用来生成CA证书和各种key文件

cp -r /usr/share/easy-rsa/ /etc/openvpn/

查看证书版本号进入相关目录,创建文件并设置变量

[root@openvpnservice ~]# cd /etc/openvpn/easy-rsa/3.0.6/
[root@openvpnservice 3.0.6]# touch vars
[root@openvpnservice 3.0.6]# vim vars
export KEY_COUNTRY="CN" #(国家名称)
export KEY_PROVINCE="ShangHai" #(省份名称)
export KEY_CITY="ShangHai" #(城市名称)
export KEY_ORG="YCZB" #(组织机构名称)
export KEY_EMAIL="xuejin.wang@yczbjt.com" #(邮件地址)
#变量生效
[root@openvpnservice 3.0.6]# source ./vars

生成CA根证书

#初始化 pki 相关目录 
./easyrsa init-pki   

# source ./vars

生成CA根证书

./easyrsa init-pki    #初始化 pki 相关目录

#生成 CA 根证书, 输入 Common Name,名字随便起。

./easyrsa build-ca nopass 

生成openvpn服务器证书和密钥,第一个参数是证书名称

./easyrsa build-server-full server nopass

生成Diffie-Hellman算法需要的密钥文件

  ./easyrsa gen-dh   #创建 Diffie-Hellman ,时间比较久一些

生成tls-auth key,为了防止DDOS和TLS攻击,这个属于可选安全配置

openvpn --genkey --secret ta.key

openvpn文件整理

mkdir /etc/openvpn/server/certs 
cd /etc/openvpn/server/certs/
# SSL 协商时 Diffie-Hellman 算法需要的 key
cp /etc/openvpn/easy-rsa/3/pki/dh.pem ./  
# CA 根证书
cp /etc/openvpn/easy-rsa/3/pki/ca.crt ./  
# open VPN 服务器证书
cp /etc/openvpn/easy-rsa/3/pki/issued/server.crt ./server.crt 
# open VPN 服务器证书 key
cp /etc/openvpn/easy-rsa/3/pki/private/server.key ./server.key 
# tls-auth key
cp /etc/openvpn/easy-rsa/3/ta.key ./   

创建openvpn日志目录

#创建日志目录
[root@openvpnservice certs]# mkdir -p /var/log/openvpn/
#给予权限
[root@openvpnservice certs]# chown openvpn:openvpn /var/log/openvpn

4、配置OpenVPN

创建配置文件(原配置文件在 /usr/share/doc/openvpn-/sample/sample-config-files )

[root@openvpnservice ~]# cd /etc/openvpn/
[root@openvpnservice openvpn]# vim server.conf
port 1194   # 监听的端口号
proto udp   # 服务端用的协议,udp 能快点,所以我选择 udp
dev tun
ca /etc/openvpn/server/certs/ca.crt  #   CA 根证书路径
cert /etc/openvpn/server/certs/server.crt  # open VPN 服务器证书路径
key /etc/openvpn/server/certs/server.key  # open VPN 服务器密钥路径,This file should be kept secret
dh /etc/openvpn/server/certs/dh.pem  # Diffie-Hellman 算法密钥文件路径
tls-auth /etc/openvpn/server/certs/ta.key 0 #  tls-auth key,参数 0 可以省略,如果不省略,那么客户端
# 配置相应的参数该配成 1。如果省略,那么客户端不需要 tls-auth 配置
server 10.8.0.0 255.255.255.0   # 该网段为 open VPN 虚拟网卡网段,不要和内网网段冲突即可。open VPN 默认为 10.8.0.0/24
push  "route 10.2.2.0 255.255.255.0"
push "dhcp-option DNS 8.8.8.8"  # DNS 服务器配置,可以根据需要指定其他 ns
push "dhcp-option DNS 8.8.4.4"
push "redirect-gateway def1"   # 客户端所有流量都通过 open VPN 转发,类似于代理开全局
compress lzo
duplicate-cn   # 允许一个用户多个终端连接
keepalive 10 120
client-config-dir ccd # 用户权限控制目录
comp-lzo
persist-key
persist-tun
user openvpn  # open VPN 进程启动用户,openvpn 用户在安装完 openvpn 后就自动生成了
group openvpn
log /var/log/openvpn/server.log  # 指定 log 文件位置
log-append /var/log/openvpn/server.log
status /var/log/openvpn/status.log
verb 3
explicit-exit-notify 1

5、配置防火墙及安全服务

禁用firewalld,启用iptables

[root@openvpnservice openvpn]# systemctl stop firewalld
[root@openvpnservice openvpn]# systemctl disable firewalld

关闭selinux

[root@openvpnservice openvpn]# sed -i 's/SELINUX=enforcinf/SELINUX=disabled/g' /etc/sysconfig/selinux
[root@openvpnservice openvpn]# setenforce 0

启用iptables

[root@openvpnservice openvpn]# systemctl start iptables
[root@openvpnservice openvpn]# systemctl enable iptables
iptables -F

添加防火墙规则

[root@openvpnservice openvpn]# iptables -t nat -A POSTROUTING -s 10.8.0.0/16 -o tun0 -j MASQUERADE
[root@openvpn ~]# iptables -t nat -A POSTROUTING -s 10.8.0.0/16 -o ens192 -j SNAT --to-source 10.2.3.41
[root@openvpnservice openvpn]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  确定  ]
[root@openvpnservice openvpn]# systemctl restart iptables

6、服务器启用IP地址转发

[root@openvpnservice openvpn]# echo net.ipv4.ip_forward = 1 >>/etc/sysctl.conf
[root@openvpnservice openvpn]# sysctl -p
net.ipv4.ip_forward = 1

7、启动服务

systemctl start openvpn@server  # 启动
systemctl enable openvpn@server  # 开机自启动
systemctl status openvpn@server  # 查看服务状态

8、添加客户端用户

创建模版配置文件

[root@openvpnservice ~]# cd /etc/openvpn/client/
[root@openvpnservice client]# touch sample.ovpn
[root@openvpnservice client]# vim sample.ovpn
client
proto udp
dev tun
remote 58.211.118.110 1194
ca ca.crt
cert admin.crt
key admin.key
tls-auth ta.key 1
remote-cert-tls server
persist-tun
persist-key
comp-lzo
verb 3
mute-replay-warnings

创建用户脚本(为了创建用户更方便)

# ! /bin/bash
set -e
OVPN_USER_KEYS_DIR=/etc/openvpn/client/keys
EASY_RSA_VERSION=3
EASY_RSA_DIR=/etc/openvpn/easy-rsa/
PKI_DIR=$EASY_RSA_DIR/$EASY_RSA_VERSION/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/$EASY_RSA_VERSION
  # 生成客户端 ssl 证书文件
  ./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/admin/'"$user"'/g' $OVPN_USER_KEYS_DIR/$user/$user.ovpn
  cp /etc/openvpn/server/certs/ta.key $OVPN_USER_KEYS_DIR/$user/ta.key  # auth-tls 文件
  cd $OVPN_USER_KEYS_DIR
  zip -r $user.zip $user
done
exit 0

创建用户执行脚本,后面跟用户名字,执行成功后会生成证书文件

[root@openvpnservice client]# sh ovpn_user.sh wangxuejin

导出压缩包解压后放到客户端目录中即可

9、核心交换机添加路由

[YCZB_CS6520]ip route-static 10.10.0.0 255.255.255.0 172.18.1.182

备注:外网防火墙需要映射UDP 1194端口

发表评论

登录... 后才能评论

评论(1)

  • 思绪。 2021年4月30日 下午3:57

    有一点问题在于服务端的配置文件的中的
    client-config-dir ccd # 用户权限控制目录
    设置 需要先创建一个目录