提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
OpenVpn部署
OpenVPN应用场景
企业员工远程办公,通过远程VPN连接到公司的服务器,访问公司内部系统,解决员工在外无法登录企业内部系统问题,
企业运维人员通过VPN远程连接到机房进行系统维护
总部与分支机构之间联通,打通分支与总部的连接
如下配置的案例以场景应用二(单网卡)为例
提示:以下是本篇文章正文内容,下面案例以场景实际应用二为例
一、OpenVPN是什么?
OpenVPN 是一个基于OpenSSL库的应用层 VPN实现,和传统 VPN 相比,它的优点是简单易用,它提供给企业之间或者个人与公司之间安全数据传输的隧道。
通信过程:客户端连接成功后,OpenVPN服务器会为每一个成功建立SSL连接的客户端动态分配一个虚拟IP地址,这样物理网络中的客户端与OpenVPN服务器就连接成一个虚拟网络上的星型结构局域网。
OpenVPN服务器成为每个客户端在虚拟网络上的网关,OpenVPN服务器同时提供对客户端虚拟网卡的路由管理。当客户端对OpenVPN服务器后端的应用服务器的任何访问时,数据包都会经过路由流经虚拟网卡,OpenVPN程序在虚拟网卡上截获数据IP报文,然后使用SSL协议将这些IP报文封装起来,再经过物理网卡发送出去,OpenVPN的服务器和客户端在虚拟网卡之上建立起一个虚拟的局域网络,这个虚拟的局域网对系统的用户来说是透明的。
二、Centos7 搭建OpenVPN
1.配置epel源
代码如下(示例):
[root@xuhuaping yum.repos.d]# wget https://repo.huaweicloud.com/epel/epel-release-latest-7.noarch.rpm
[root@xuhuaping yum.repos.d]# rpm -ivh epel-release-latest-7.noarch.rpm
2.安装依赖
代码如下(示例):
[root@xuhuaping yum.repos.d]# yum install -y openssl lzo pam easy-rsa
3.安装并配置easy-rsa工具
说明:这个工具用于生成OpenVPN所需的证书和密钥
1.查询系统已经安装包名easy-rsa文件列表
代码如下(示例):
[root@xuhuaping yum.repos.d]# rpm -ql easy-rsa
2.如果easy-rsa版本不是需要的版本可进行卸载
代码如下(示例):
[root@xuhuaping yum.repos.d]# rpm -e easy-rsa
3.安装easy-rsa
代码如下(示例):
[root@xuhuaping yum.repos.d]# rpm -e easy-rsa
4.创建证书目录并进入该目录
代码如下(示例):
[root@xuhuaping yum.repos.d]# mkdir /opt/easy-rsa && cd /opt/easy-rsa
[root@xuhuaping easy-rsa]#
5.拷贝/usr/share/easy-rsa/3.0.8/* 所有文件到/opt/easy-rsa目录
代码如下(示例):
[root@xuhuaping easy-rsa]# cp -a /usr/share/easy-rsa/3.0.8/* .
[root@xuhuaping easy-rsa]# ls
easyrsa openssl-easyrsa.cnf x509-types
[root@xuhuaping easy-rsa]#
6.拷贝默认vars.exampl配置文件模板到/opt/easy-rsa目录,重命名为vars并配置
代码如下(示例):
[root@xuhuaping easy-rsa]# cp -a /usr/share/doc/easy-rsa-3.0.8/vars.example ./vars
You have mail in /var/spool/mail/root
[root@xuhuaping easy-rsa]# ls
easyrsa openssl-easyrsa.cnf vars x509-types
[root@xuhuaping easy-rsa]#
vim vars 配置vars文件
[root@xuhuaping easy-rsa]# pwd
/opt/easy-rsa
[root@xuhuaping easy-rsa]# ls
easyrsa openssl-easyrsa.cnf vars x509-types
[root@xuhuaping easy-rsa]# vim vars
set_var EASYRSA_REQ_COUNTRY "CN" #国家
set_var EASYRSA_REQ_PROVINCE "HB" #省
set_var EASYRSA_REQ_CITY "WUHAN" #城市
set_var EASYRSA_REQ_ORG "HBHYKJGSDW" #组织名称,比如公司名等
set_var EASYRSA_REQ_EMAIL "879132345@qq.com"
set_var EASYRSA_REQ_OU "HYVPN" #组织单元
set_var EASYRSA_NS_SUPPORT "yes"
set_var EASYRSA_KEY_SIZE 2048 #密钥长度2048-----可以不改
set_var EASYRSA_CA_EXPIRE 1460 #ca有效期,单位为天-----可以不改
set_var EASYRSA_CERT_EXPIRE 825 #生成的服务端和客户端证书有效期-----可以不改
4.创建证书
说明:/opt/easy-rsa目录下
1.初始化PKI环境
说明:在当前目录创建PKI目录,用于存储最终生成的证书
./easyrsa init-pki 命令的过程如下:
创建根目录:执行 ./easyrsa init-pki 命令时,EasyRSA 工具将在当前工作目录下创建一个新的目录,用于存储 PKI 相关文件。
生成CA密钥对:在初始化 PKI 过程中,EasyRSA 会生成一个用于签署证书的 CA(Certificate Authority,证书颁发机构)密钥对,包括 CA 的公钥和私钥。
生成初始配置:EasyRSA 还会生成一些初始配置文件,包括 CA 的配置文件和其他必要的配置文件,用于后续生成证书请求、颁发证书等操作。
代码如下(示例):
[root@xuhuaping easy-rsa]# ./easyrsa init-pki
Note: using Easy-RSA configuration from: /opt/easy-rsa/vars
init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /opt/easy-rsa/pki
2.创建根证书
说明:创建根证书,会提示设置密码,用于ca对之后生成的server和client证书签名时使用,其他提示内容直接回车即可
根证书密码要记住, 给server端和客户端证书签名的时候会用到, 注意密码不能太短,我这边设置的是HBHY
保存在/opt/easy-rsa/pki/ca.crt
代码如下(示例):
[root@xuhuaping easy-rsa]# ./easyrsa build-ca
Note: using Easy-RSA configuration from: /opt/easy-rsa/vars
Using SSL: openssl OpenSSL 1.0.2k-fips 26 Jan 2017
Enter New CA Key Passphrase:
[root@xuhuaping easy-rsa]# ./easyrsa build-ca
Note: using Easy-RSA configuration from: /opt/easy-rsa/vars
Using SSL: openssl OpenSSL 1.0.2k-fips 26 Jan 2017
Enter New CA Key Passphrase:
Re-Enter New CA Key Passphrase:
Generating RSA private key, 2048 bit long modulus
............................................................................+++
........................+++
e is 65537 (0x10001)
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:
CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/opt/easy-rsa/pki/ca.crt
3.创建server端证书和私钥文件(private key),nopass表示不加密私钥文件,提示内容直接回车即可
代码如下(示例):
[root@xuhuaping easy-rsa]# ./easyrsa gen-req server nopass
req: /opt/easy-rsa/pki/reqs/server.req 服务端请求文件
key: /opt/easy-rsa/pki/private/server.key 服务端私钥文件
这个时候这两个文件还不是服务端证书
4.给server端证书签名,提示内容需要输入yes和创建ca根证书时候的密码
为server端签名,将他变为服务端公钥文件
代码如下(示例):
[root@xuhuaping easy-rsa]# ./easyrsa sign server server
5.创建Diffie-Hellman
说明:创建 Diffie-Hellman 密钥交换有助于安全地协商共享对称密钥,用于加密通信并确保通信的机密性和完整性
代码如下(示例):
[root@xuhuaping easy-rsa]# ./easyrsa gen-dh
Note: using Easy-RSA configuration from: /opt/easy-rsa/vars
Using SSL: openssl OpenSSL 1.0.2k-fips 26 Jan 2017
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
....................................+...................................................................+.........................................................................................................................................................................................................................................................................................................................................+.........................................
6.创建client端的证书和私钥文件,nopass表示不加密私钥文件,提示内容直接回车即可
代码如下(示例):
[root@xuhuaping easy-rsa]# ./easyrsa gen-req client nopass
req: /opt/easy-rsa/pki/reqs/client.req 客户端请求文件
key: /opt/easy-rsa/pki/private/client.key 客户端私钥文件
7.给client端证书签名,提示内容输入yes和创建ca根证书时候的密码
代码如下(示例):
[root@xuhuaping easy-rsa]# ./easyrsa sign client client
8.查看生成的 ca根证书、客户端和服务端证书、客户端和服务端私钥
代码如下(示例):
[root@xuhuaping easy-rsa]# tree
9.创建TLS认证密钥
代码如下(示例):
[root@xuhuaping openvpn]# openvpn --genkey --secret /etc/openvpn/ta.key
5.安装部署Openvpn
1.yum 包管理器列出openvpn软件包的信息
代码如下(示例):
[root@xuhuaping easy-rsa]# yum list openvpn
2.安装Openvpn
代码如下(示例):
[root@xuhuaping easy-rsa]# yum install openvpn -y
3.配置openvpn
1.复制模板重命名
cp /usr/share/doc/openvpn-2.4.12/sample/sample-config-files/server.conf ./
说明: 复制sample-config-files 配置文件模板到 /etc/openvpn 目录
代码如下(示例):
[root@xuhuaping ~]# cd /etc/openvpn/
You have mail in /var/spool/mail/root
[root@xuhuaping openvpn]# cp /usr/share/doc/openvpn-2.4.12/sample/sample-config-files/server.conf ./
[root@xuhuaping openvpn]# ll|grep server.conf
-rw-r--r-- 1 root root 10784 Mar 19 16:43 server.conf
[root@xuhuaping openvpn]#
2.修改配置文件server.conf
代码如下(示例):
port 1194
proto udp
dev tun
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/server.crt
key /etc/openvpn/server/server.key # This file should be kept secret
dh /etc/openvpn/server/dh.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 192.168.0.0 255.255.0.0"
client-to-client
keepalive 10 120
tls-auth /etc/openvpn/server/ta.key 0 # This file is secret
cipher AES-256-GCM
comp-lzo
max-clients 100
persist-key
persist-tun
status openvpn-status.log
log /var/log/openvpn.log
verb 3
explicit-exit-notify 1
3.查看server.conf配置情况
[root@xuhuaping openvpn]# grep -v “^#” server.conf |grep -v “^;”|grep -v ‘^$’
4.复制证书到指定目录
1.服务端证书复制配置文件到/etc/openvpn/server
代码如下(示例):
[root@xuhuaping openvpn]# cp -af /opt/easy-rsa/pki/ca.crt /etc/openvpn/server
[root@xuhuaping openvpn]# cp -af /opt/easy-rsa/pki/issued/server.crt /etc/openvpn/server
[root@xuhuaping openvpn]# cp -af /opt/easy-rsa/pki/private/server.key /etc/openvpn/server
[root@xuhuaping openvpn]# cp -af /opt/easy-rsa/pki/dh.pem /etc/openvpn/server
[root@xuhuaping openvpn]# cp -af ta.key /etc/openvpn/server
2.客户端证书复制配置文件到/etc/openvpn/client
代码如下(示例):
[root@xuhuaping openvpn]# cp -af /opt/easy-rsa/pki/ca.crt /etc/openvpn/client/
[root@xuhuaping openvpn]# cp -af /opt/easy-rsa/pki/issued/client.crt /etc/openvpn/client/
[root@xuhuaping openvpn]# cp -af /opt/easy-rsa/pki/private/client.key /etc/openvpn/client/
[root@xuhuaping openvpn]# cp -af ta.key /etc/openvpn/client/
4. 启动Openvpn服务
代码如下(示例):
[root@localhost openvpn]# openvpn --daemon --config server.conf
或
[root@xuhuaping openvpn]# systemctl start openvpn@server
[root@xuhuaping openvpn]# netstat -anpl|grep openvpn
udp 0 0 0.0.0.0:1194 0.0.0.0:* 18999/openvpn
[root@xuhuaping openvpn]# systemctl start openvpn@server
[root@xuhuaping openvpn]# systemctl status openvpn@server
● openvpn@server.service - OpenVPN Robust And Highly Flexible Tunneling Application On server
Loaded: loaded (/usr/lib/systemd/system/openvpn@.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2024-03-19 23:30:53 CST; 12h ago
Main PID: 18999 (openvpn)
Status: "Initialization Sequence Completed"
CGroup: /system.slice/system-openvpn.slice/openvpn@server.service
└─18999 /usr/sbin/openvpn --cd /etc/openvpn/ --config server.conf
Mar 19 23:30:53 xuhuaping systemd[1]: Starting OpenVPN Robust And Highly Flexible Tunneling Application On server...
Mar 19 23:30:53 xuhuaping systemd[1]: Started OpenVPN Robust And Highly Flexible Tunneling Application On server.
[root@xuhuaping openvpn]# netstat -anpl|grep openvpn
udp 0 0 0.0.0.0:1194 0.0.0.0:* 18999/openvpn
[root@xuhuaping openvpn]#
5. 开启转发开配置NAT
想要实现客户端VPN拨入后可以访问到内网资源,还需配置一个NAT转换,当客户端对VPN服器后端的应用服务器进行访问时,数据包都会经过VPN服器虚拟网卡,openvpn程序会在虚拟网卡上获取数据IP报文,对原IP进行转换(转换成物理网卡内网出口IP),从指定网卡发送出去
代码如下(示例):
IP转发功能:
[root@xuhuaping openvpn]# echo 1 > /proc/sys/net/ipv4/ip_forward
[root@xuhuaping openvpn]# sysctl -p
[root@xuhuaping openvpn]# systemctl restart network
NAT功能
[root@xuhuaping openvpn]# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source 192.168.6.186
[root@localhost openvpn]# iptables -t nat -L -n
6. 客户端连接测试
1.windows客户端测试
使用sz 命令下载/etc/openvpn/client/中如下文件
ta.key
client.key
client.crt
ca.crt
2.客户端openvpn客户端软件
这个简单,在此就不详细说明
3.创建client.ovpn配置
这个简单,在此就不详细说明
代码如下(示例):
client
dev tun
proto udp
remote 192.168.6.186 1194 #注意此处更改为openvpn服务端IP
resolv-retry infinite
nobind
ca ca.crt
cert client.crt
key client.key
tls-auth ta.key 1
verb 3
persist-key
comp-lzo
4.上传客户端证书文件和client.ovpn配置
5.启动连接成功
6.查询VPN服务器和客户机IP
这个简单,在此就不详细说明
VPN服器IP:
客户机IP