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端口
欢迎各位老铁加入QQ群来讨论相关运维技术哦
主题授权提示:请在后台主题设置-主题授权-激活主题的正版授权,授权购买:RiTheme官网
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(2)
有一点问题在于服务端的配置文件的中的
client-config-dir ccd # 用户权限控制目录
设置 需要先创建一个目录
谢谢指正