OpenVPN是一个开源应用程序,可让您通过公共Internet创建安全的专用网络。 OpenVPN实现了虚拟专用网络(VPN)以创建安全连接。 OpenVPN使用OpenSSL库提供加密,并提供几种身份验证机制,例如基于证书的预共享密钥以及用户名/密码身份验证。
在本教程中,我们将使用最新版本的centos服务器(7.5),并将使用带有easy-rsa 3的OpenVPN 2.4。在安装OpenVPN和easy-rsa软件包之前,请确保“ epel”存储库 已安装在系统上。 如果没有,请使用下面的yum命令安装epel信息库。
yum install epel-release -y
步骤1:安装openvpn 和easy-rsa
yum install openvpn easy-rsa -y
安装完成后,检查openvpn和easy-rsa版本
openvpn --version
![](https://img.haomeiwen.com/i16148197/25084c0a24e7822c.png)
ls -lah /usr/share/easy-rsa/
![](https://img.haomeiwen.com/i16148197/cbe364ebc1d4e1aa.png)
已安装带有easy-rsa 3的OpenVPN 2.4。
步骤2:配置RSA
在此步骤中,我们将通过创建新的“ vars”文件来配置easy-rsa 3。 “ vars”文件包含Easy-RSA 3设置。
转到“ /etc/openvpn/”目录并复制“ easy-rsa”脚本。
cd /etc/openvpn
cp -r /usr/share/easy-rsa /etc/openvpn/
然后,跳转到/etc/openvpn/easy-rsa/3/目录并且创建vars文件,复制粘贴以下内容,并保存
set_var EASYRSA "$PWD"
set_var EASYRSA_PKI "$EASYRSA/pki"
set_var EASYRSA_DN "cn_only"
set_var EASYRSA_REQ_COUNTRY "ID"
set_var EASYRSA_REQ_PROVINCE "Jakarta"
set_var EASYRSA_REQ_CITY "Jakarta"
set_var EASYRSA_REQ_ORG "hakase-labs CERTIFICATE AUTHORITY"
set_var EASYRSA_REQ_EMAIL "openvpn@hakase-labs.io"
set_var EASYRSA_REQ_OU "HAKASE-LABS EASY CA"
set_var EASYRSA_KEY_SIZE 2048
set_var EASYRSA_ALGO rsa
set_var EASYRSA_CA_EXPIRE 7500
set_var EASYRSA_CERT_EXPIRE 365
set_var EASYRSA_NS_SUPPORT "no"
set_var EASYRSA_NS_COMMENT "HAKASE-LABS CERTIFICATE AUTHORITY"
set_var EASYRSA_EXT_DIR "$EASYRSA/x509-types"
set_var EASYRSA_SSL_CONF "$EASYRSA/openssl-1.0.cnf"
set_var EASYRSA_DIGEST "sha256"
根据需要更改变量的值。
增加“ EASYRSA_KEY_SIZE”以提高安全性。
更改“ EASYRSA_CA_EXPIRE”和“ EASYRSA_CERT_EXPIRE”。
现在,通过更改文件的权限使“ vars”文件可执行。
sudo chmod +x vars
Easy-RSA 3设置的vars文件已创建。
![](https://img.haomeiwen.com/i16148197/86b8c64185396717.png)
第3步:构建OpenVPN密钥
在此步骤中,我们将基于我们创建的easy-rsa 3'vars'文件构建OpenVPN密钥。 我们将构建CA密钥,服务器和客户端密钥,DH和CRL PEM文件。
我们将使用“ easyrsa”命令行构建所有这些键。 转到“/etc/openvpn/easy-rsa/ 3”目录。
cd /etc/openvpn/easy-rsa/3/
初始化和建立CA
在构建任何密钥之前,我们需要初始化PKI目录并构建CA密钥。
启动PKI目录,并建立使用下面的命令CA密钥。
sudo ./easyrsa init-pki
sudo ./easyrsa build-ca
现在输入CA密钥的密码,您将在'pki'目录下获得ca.crt和ca.key文件。
![](https://img.haomeiwen.com/i16148197/472bbe37263adae7.png)
构建服务器密钥
现在我们要构建服务器密钥,然后将构建名为“ hakase-server”的服务器密钥。
使用以下命令构建服务器密钥“ hakase-server”。
./easyrsa gen-req hakase-server nopass
![](https://img.haomeiwen.com/i16148197/1bd3647937ef65e7.png)
nopass =选项,用于禁用“ hakase-server”密钥的密码。
并使用我们的CA证书签署“ hakase-server”密钥。
sudo ./easyrsa sign-req server hakase-server
系统将要求您输入“ CA”密码,输入密码,然后按Enter。 您将在“ pki / issued /”目录下获得“ hakase-server.crt”证书文件。
![](https://img.haomeiwen.com/i16148197/050c1ab2e0022dc6.png)
创建的服务器证书位于
/etc/openvpn/easy-rsa/3.0.6/pki/issued/hakase-server.crt
使用OpenSSL命令验证证书文件,并确保没有错误。出现下面的信息就代表你前面所做的操作是没问题的
$ sudo openssl verify -CAfile pki/ca.crt pki/issued/hakase-server.crt
$pki/issued/hakase-server.crt: OK
已创建所有服务器证书密钥。
- 服务器私钥位于“ pki / private / hakase-server.key”。
- 服务器证书位于“ pki / issued / hakase-server.crt”。
创建客户端密钥
现在我们需要为客户端构建密钥。 我们将生成名为“ client01”的新客户端密钥。
使用以下命令生成“ client01”密钥
sudo ./easyrsa gen-req client01 nopass
![](https://img.haomeiwen.com/i16148197/4352832e27d7a72e.png)
现在,使用我们的CA证书签署“ client01”密钥,如下所示。
sudo ./easyrsa sign-req client client01
键入“yes”以确认客户端证书请求,然后键入CA密码。
![](https://img.haomeiwen.com/i16148197/7dcae8874eef66e8.png)
已生成名为“ client01”的客户端证书,请使用openssl命令验证客户端证书。
sudo openssl verify -CAfile pki/ca.crt pki/issued/client01.crt
**生成Diffie-Hellman密钥
此操作将花费大量时间,具体取决于我们选择的密钥长度和服务器上的可用熵。 我们将使用在“ vars”文件中定义的长度键。
使用以下命令生成Diffie-Hellman密钥。
![](https://img.haomeiwen.com/i16148197/e7deec6e2e167850.png)
可选:生成CRL密钥,本文跳过这一步骤
CRL(证书吊销列表)密钥将用于吊销客户端密钥。 如果您的VPN服务器上有多个客户端证书,并且想撤消某些密钥,则只需使用easy-rsa命令撤消。
如果要撤消某些密钥,请运行以下命令
./easyrsa revoke xxxx
然后生成CRL密钥。
./easyrsa gen-crl
复制证书文件
已生成所有证书,现在复制证书文件和PEM文件。
复制服务器密钥和证书。
cp pki/ca.crt /etc/openvpn/server/
cp pki/issued/hakase-server.crt /etc/openvpn/server/
cp pki/private/hakase-server.key /etc/openvpn/server/
复制client01密钥和证书。
cp pki/ca.crt /etc/openvpn/client/
cp pki/issued/client01.crt /etc/openvpn/client/
cp pki/private/client01.key /etc/openvpn/client/
复制DH和CRL密钥。
cp pki/dh.pem /etc/openvpn/server/
![](https://img.haomeiwen.com/i16148197/6b10add71e124322.png)
第4步-配置OpenVPN
在这一步中,我们将为openvpn服务器创建新的配置'server.conf'。转到"/etc/openvpn/"目录,并使用vim创建新的配置文件"server.conf"
将以下OpenVPN服务器配置粘贴到此处。
cd /etc/openvpn/
vim server.conf
将以下OpenVPN服务器配置粘贴到此处。
# OpenVPN Port, Protocol and the Tun
port 1194
proto udp
dev tun
# OpenVPN Server Certificate - CA, server key and certificate
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/hakase-server.crt
key /etc/openvpn/server/hakase-server.key
#DH and CRL key
dh /etc/openvpn/server/dh.pem
#注意本文没有跳过了丢消证书的检测
#crl-verify /etc/openvpn/server/crl.pem
# Network Configuration - Internal network
# Redirect all Connection through OpenVPN Server
server 10.10.1.0 255.255.255.0
push "redirect-gateway def1"
# Using the DNS from https://dns.watch
push "dhcp-option DNS 84.200.69.80"
push "dhcp-option DNS 84.200.70.40"
#Enable multiple client to connect with same Certificate key
duplicate-cn
# TLS Security
cipher AES-256-CBC
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256
auth SHA512
auth-nocache
# Other Configuration
keepalive 20 60
persist-key
persist-tun
comp-lzo yes
daemon
user nobody
group nobody
# OpenVPN Log
log-append /var/log/openvpn.log
verb 3
OpenVPN的配置已创建。
步骤5-启用端口转发并配置路由Firewalld
在此步骤中,我们将启用端口转发内核模块并为OpenVPN配置路由“防火墙”。
![](https://img.haomeiwen.com/i16148197/bfa2fd904b6a6ee7.png)
通过运行以下命令来启用端口转发内核模块。
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p
接下来,使用Firewalld for OpenVPN配置路由。
将 "openvpn"服务添加到防火墙列表服务,并将“tun0”接口添加到防火墙信任区域。
sudo firewall-cmd --permanent --add-service=openvpn
sudo firewall-cmd --permanent --zone=trusted --add-interface=tun0
在防火墙的“受信任”区域上启用“ MASQUERADE”。
sudo firewall-cmd --permanent --zone=trusted --add-masquerade
如果你的网关是使用iptable,并且iptable默认情况下阻止该服务,那么请使用以下配置使openvpn正常运行。 首先,让我们在openvpn端口上进行tcp连接。 如果您使用的是udp或其他端口号,请相应地更改此行。
iptables -A INPUT -i enp3s0 -m state --state NEW -p udp --dport 1194 -j ACCEPT
允许TUN接口连接到OpenVPN服务器
iptables -A INPUT -i tun+ -j ACCEPT
允许通过其他接口转发TUN接口连接
iptables -A FORWARD -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -o enp3s0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i enp3s0 -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT
NAT VPN客户端流量到Internet。 运行“ ifconfig”命令时,根据您的tun0结果信息更改IP地址掩码。
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o enp3s0 -j MASQUERADE
如果您的默认iptables OUTPUT的值不是ACCEPT的话,则还需要以下行:
iptables -A OUTPUT -o tun+ -j ACCEPT
最后记得保存iptables的防火墙配置
sudo iptables-save > /etc/sysconfig/iptables
端口转发和防火墙路由已完成,现在启动openvpn服务,并使它能够在每次系统引导时自动启动。
systemctl start openvpn@server
systemctl enable openvpn@server
![](https://img.haomeiwen.com/i16148197/1066e68ce24aee92.png)
我们通过netstat -plntu | grep 1194查看服务器的监听接口
![](https://img.haomeiwen.com/i16148197/9ad6fcb1a7cda171.png)
第6步-OpenVPN客户端设置
转到“/etc/openvpn/client”目录,并使用vim创建一个新的openvpn客户端配置文件“ client01.ovpn".
cd /etc/openvpn/client
vim client01.ovpn
复制粘贴以下内容到ovpn
client
dev tun
proto udp
#真实的ip地址自己填写
remote x.x.x.x 1194
ca ca.crt
cert client01.crt
key client01.key
cipher AES-256-CBC
auth SHA512
auth-nocache
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256
resolv-retry infinite
compress lzo
nobind
persist-key
persist-tun
mute-replay-warnings
verb 3
保存后退出
现在将“/etc/openvpn/client”目录压缩为“ zip”或“ tar.gz”文件,并使用scp从本地计算机下载压缩文件。
将“ /etc/openvpn/client”目录压缩到“ client01.tar.gz”文件。
cd /etc/openvpn/
tar -czvf client01.tar.gz client/*
然后将该客户端所需的证书和配置文件拷贝到需要链接入vpn的客户端
![](https://img.haomeiwen.com/i16148197/5bdd71b2f46612b2.png)
步骤7-测试OpenVPN
安装OpenVPN软件包,如果需要GUI配置,请安装OpenVPN network-manager。
![](https://img.haomeiwen.com/i16148197/a1a6996cd1bbb2df.png)
如果要使用终端外壳进行连接,请运行以下OpenVPN命令。
openvpn --config client01.ovpn
网友评论