openVPN
一、介绍
OpenVPN是一个开源的、轻量级的、灵活的、跨平台虚拟私人网络(VPN)协议,它可以通过在公共互联网上建立安全的、经过加密保护的点到点或站点到站点连接,来进行远程访问或连接两个或多个私人网络。
OpenVPN是基于SSL/TLS协议的,它建立在TCP或UDP协议之上,因此是一种相当灵活的VPN协议。OpenVPN最初是由James Yonan于2001年创建的,它支持各种平台,包括Windows、macOS、Linux、iOS和Android等。OpenVPN可以在任何支持SSL/TLS协议的操作系统上运行(例如,大多数版本的Windows、Linux和Unix),并支持多种加密算法,如AES、DES、3DES、Blowfish和Camellia等。此外,OpenVPN还是一种高度可定制的协议,支持自定义端口、DNS和路由设置等。
OpenVPN的安全性源自它的加密技术,它使用了公开密钥加密(PKC)技术,该技术通过使用证书和密钥来验证连接的两端,从而保证数据传输的隐私和完整性。OpenVPN支持多重身份验证,例如用户名和密码、数字证书和双因素身份验证(如硬件令牌),这些都大大提高了数据的安全性。
总之,OpenVPN是一种强大的、安全的、具有灵活性和可扩展性的VPN协议,适用于多种应用场景,包括远程访问、远程办公、文件共享和多个位置的私人网络之间的连接等。
二、OpenVPN环境
系统 | CentOS 7.9 |
---|---|
服务器内网IP | 192.168.2.101 |
OpenVPN出口IP | 23.183.84.76 |
三、OpenVPN部署
3.1 下载安装包
1、关闭防火墙或开放端口
## 关闭防火墙 [root@localhost ~]# systemctl disable --now firewalld ## 开放端口 [root@localhost ~]# firewall-cmd --zone=public --add-port=1194/tcp --permanent [root@localhost ~]# firewall-cmd --reload ## 公司防火墙或者路由器映射1194端口
2、关闭selinux
[root@localhost ~]# sed -i 's/enforcing/disabled/' /etc/selinux/config [root@localhost ~]# setenforce 0
3、下载安装包
[root@localhost ~]# mkdir /home/artc [root@localhost ~]# cd /home/artc [root@localhost artc]# wget https://swupdate.openvpn.org/community/releases/openvpn-2.5.6.tar.gz [root@localhost artc]# wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.1.7/EasyRSA-3.1.7.tgz
3.2 安装OpenVPN
1、安装依赖环境
[root@localhost artc]# yum install -y vim wget gcc-c++ openssl openssl-devel net-tools lzo lzo-devel pam pam-devel
2、编译安装
[root@localhost artc]# tar -zxvf openvpn-2.5.6.tar.gz [root@localhost artc]# cd openvpn-2.5.6 [root@localhost openvpn-2.5.6]# ./configure --prefix=/usr/local/openvpn/ [root@localhost openvpn-2.5.6]# make && make install [root@localhost openvpn-2.5.6]# echo -e "PATH=\$PATH:/usr/local/openvpn/sbin" >> /etc/profile [root@localhost openvpn-2.5.6]# source /etc/profile
3、检查安装是否成功
[root@localhost openvpn-2.5.6]# openvpn --version OpenVPN 2.5.6 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [MH/PKTINFO] [AEAD] built on Oct 17 2023 library versions: OpenSSL 1.0.2k-fips 26 Jan 2017, LZO 2.06
3.3 安装EasyRSA
1、解压安装包
[root@localhost openvpn-2.5.6]# cd /home/artc [root@localhost artc]# tar -zxvf EasyRSA-3.1.7.tgz [root@localhost artc]# mv EasyRSA-3.1.7 /usr/local/EasyRSA
四、CA签发证书环境
4.1 EasyRSA服务端配置
#拷贝EasyRSA [root@localhost artc]# cp -r /usr/local/EasyRSA /usr/local/openvpn/easy-rsa-server [root@localhost artc]# cd /usr/local/openvpn/easy-rsa-server #准备签发证书的默认变量文件 [root@localhost easy-rsa-server]# vim vars if [ -z "$EASYRSA_CALLER" ]; then echo "You appear to be sourcing an Easy-RSA 'vars' file." >&2 echo "This is no longer necessary and is disallowed. See the section called" >&2 echo "'How to use this file' near the top comments for more details." >&2 ## 设置CA证书有效期为100年 (单位天,根据需求设置时间) set_var EASYRSA_CA_EXPIRE 36500 ## 设置服务器证书为10年 (单位天,根据需求设置时间) set_var EASYRSA_CERT_EXPIRE 3650 return 1 fi
4.1.1 创建CA机构
#初始化,执行此命令会生成pki目录 [root@localhost easy-rsa-server]# ./easyrsa init-pki #创建CA机构,nopass代表不需要密码的意思 [root@localhost easy-rsa-server]# ./easyrsa build-ca nopass ## 默认直接回车就行,或者自己输入一个名字 Common Name (eg: your user, host, or server name) [Easy-RSA CA]: ## 出现这个代表成功 CA creation complete. Your new CA certificate is at: * /usr/local/openvpn/easy-rsa-server/pki/ca.crt
4.1.2 创建服务器证书
创建服务端证书申请文件,OpenVPN区别参数标识
[root@localhost easy-rsa-server]# ./easyrsa gen-req anyrtc nopass ## 默认直接回车就行 Common Name (eg: your user, host, or server name) [anyrtc]:
签发服务端证书;anyrtc 是刚刚创建的参数标识
[root@localhost easy-rsa-server]# ./easyrsa sign server anyrtc #输入yes Type the word 'yes' to continue, or any other input to abort. Confirm request details: yes #服务端的证书文件 Certificate created at: * /usr/local/openvpn/easy-rsa-server/pki/issued/anyrtc.crt
创建交互秘钥
[root@localhost easy-rsa-server]# ./easyrsa gen-dh ## 出现这个代表成功 DH parameters of size 2048 created at: * /usr/local/openvpn/easy-rsa-server/pki/dh.pem
启用安全增强配置
[root@localhost easy-rsa-server]# openvpn --genkey tls-auth ta.key
4.2 OpenVPN服务端配置
4.2.1 创建用户
[root@localhost easy-rsa-server]# groupadd openvpn [root@localhost easy-rsa-server]# useradd -M -s /sbin/nologin -g openvpn openvpn
4.2.2 创建证书存放目录
[root@localhost easy-rsa-server]# mkdir /usr/local/openvpn/certificate
4.2.3 创建日志存储目录
[root@localhost easy-rsa-server]# mkdir /usr/local/openvpn/logs [root@localhost easy-rsa-server]# chown -R openvpn. /usr/local/openvpn/
4.2.4 将生成的证书复制到certificate目录
[root@localhost easy-rsa-server]# cp /usr/local/openvpn/easy-rsa-server/pki/ca.crt /usr/local/openvpn/certificate/ [root@localhost easy-rsa-server]# cp /usr/local/openvpn/easy-rsa-server/pki/issued/anyrtc.crt /usr/local/openvpn/certificate/ [root@localhost easy-rsa-server]# cp /usr/local/openvpn/easy-rsa-server/pki/private/anyrtc.key /usr/local/openvpn/certificate/ [root@localhost easy-rsa-server]# cp /usr/local/openvpn/easy-rsa-server/pki/dh.pem /usr/local/openvpn/certificate/ [root@localhost easy-rsa-server]# cp /usr/local/openvpn/easy-rsa-server/ta.key /usr/local/openvpn/certificate/
4.2.5 添加配置文件
[root@localhost easy-rsa-server]# vim /usr/local/openvpn/server.conf ## 默认端口 port 1194 ## 默认协议 proto tcp dev tun ## ca证书 ca /usr/local/openvpn/certificate/ca.crt ## 服务端证书 cert /usr/local/openvpn/certificate/anyrtc.crt ## 服务端私钥 key /usr/local/openvpn/certificate/anyrtc.key ## 交换秘钥 dh /usr/local/openvpn/certificate/dh.pem ## 分配给客户端的IP地址池 10.32.203.0是VPN要访问的IP段 server 10.32.203.0 255.255.255.0 ## 设置内网路由(你要访问的资源网段) push "route 192.168.1.0 255.255.255.0" ## 设置DNS push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 114.114.114.114" ## lz4-v2压缩算法 compress lz4-v2 ## lz4-v2客户端算法 push "compress lz4-v2" ## 最大客户端数 max-clients 1000 ## 运行openvpn服务的用户和用户组 user openvpn group openvpn ## 会话检测,每十秒测试一下,超过120秒没回应就认为对方down keepalive 10 120 ## 安全增强文件,0是服务端,1是客户端 tls-auth /usr/local/openvpn/certificate/ta.key 0 ## 日志级别 verb 3 mute 20 #状态日志 status /usr/local/openvpn/logs/openvpn-status.log log-append /usr/local/openvpn/logs/openvpn.log
4.2.6 配置IPv4内核转发
[root@localhost easy-rsa-server]# vim /etc/sysctl.conf 默认添加: net.ipv4.ip_forward=1 ## 重新加载参数 [root@localhost easy-rsa-server]# sysctl -p
4.2.7 添加防火墙转发规则
[root@localhost easy-rsa-server]# vim /etc/rc.d/rc.local 末尾添加: ## 分配给客户端的IP地址池 iptables -t nat -A POSTROUTING -s 10.32.203.0/24 -j MASQUERADE ## 加载 [root@localhost easy-rsa-server]# chmod +x /etc/rc.d/rc.local [root@localhost easy-rsa-server]# /etc/rc.d/rc.local
4.2.8 开启自启动
[root@localhost easy-rsa-server]# vim /usr/lib/systemd/system/openvpn.service [Unit] Description=OpenVPN Server After=network.target After=syslog.target [Service] ExecStart=/usr/local/openvpn/sbin/openvpn --config /usr/local/openvpn/server.conf ExecStop=killall openvpn [Install] WantedBy=multi-user.target
## 开机启动 [root@localhost easy-rsa-server]# systemctl enable --now openvpn.service ## 关闭开机自启动 [root@localhost easy-rsa-server]# systemctl disable --now openvpn.service ## 重启服务 [root@localhost easy-rsa-server]# systemctl restart openvpn.service
4.3 创建客户端申请证书
[root@localhost easy-rsa-server]# cp -r /usr/local/EasyRSA /usr/local/openvpn/easy-rsa-client [root@localhost easy-rsa-server]# cd /usr/local/openvpn/easy-rsa-client #初始化,执行此命令会生成pki目录 [root@localhost easy-rsa-client]# ./easyrsa init-pki
4.4 OpenVPN客户端配置
4.4.1 创建客户端用户目录
[root@localhost easy-rsa-client]# mkdir /usr/local/openvpn/client [root@localhost easy-rsa-client]# cd /usr/local/openvpn/client
4.4.2 编辑脚本自动创建用户
[root@localhost client]# vim openvpn_anyrtc_user.sh
#!/bin/bash ## 导入functions . /etc/init.d/functions ## OpenVPN出口IP OPENVPN_SERVER=23.183.84.76 ## OpenVPN出口端口 OPENVPN_PORT=1194 ## 服务目录 OPENVPN_PREFIX=/usr/local/openvpn ## 当前位置 CurPath=$(pwd) ## 替换上一次签发的证书 remove_cert () { rm -rf $CurPath/${OPENVPN_NAME} find $OPENVPN_PREFIX -name "$OPENVPN_NAME.*" -delete } ## create_cert () { cd $OPENVPN_PREFIX/easy-rsa-client/ ./easyrsa gen-req ${OPENVPN_NAME} nopass