OpenVpn部署使用easy-rsa-3.0

Linux 王初一 1个月前 (10-15) 525次浏览 已收录 0个评论 扫描二维码

OpenVpn 简介:

OpenVPN 是一个用于创建虚拟专用网络(Virtual Private Network 加密通道的免费开源软件。使用 OpenVPN 可以方便地在家庭、办公场所、住宿酒店等不同网络访问场所之间搭建类似于局域网的专用网络通道。

支持系统:

Solaris、Linux 2.2+(Linux 2.2+表示 Linux 2.2 及以上版本,下同)、OpenBSD 3.0+、FreeBSD、NetBSD、Mac OS X、Android 和 Windows 2000+的操作系统

一部分原因是近期登陆 IT 敢客总是登陆不上,老是报找不到页面,可能和网络有很大的关系,有这种困扰的同学可以使用其他地方的服务器部署 openvpn 代理所有流量就可以畅通无阻的浏览 IT 敢客的所有内容了

其二就是 easy-rsa 的版本从 2.2 直接到 3.0 了

其三就是公司需要用了。。。

环境说明:

[root@check1 ~]# ip a | grep "scope global" | awk -F'[ /]+' '{print $3}' | head -1
172.16.227.43
[root@check1 ~]# curl ifconfig.me
47.97.14.62

[root@check1 ~]# cat /etc/redhat-release 
CentOS release 6.9 (Final)
[root@check1 ~]# uname -a
Linux check1 2.6.32-696.16.1.el6.x86_64 #1 SMP Wed Nov 15 16:51:15 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

1、一台 Centos 机器

2、有外网 IP

3、可以连接外网(如果可以上网则使用 yum 安装,否则自行下载 RPM 包安装)

安装:

[root@check1 ~]# yum -y install openvpn easy-rsa
离线安装 RPM 包:
pkcs11-helper-1.11-3.el6.x86_64.rpm
openvpn-2.4.6-1.el6.x86_64.rpm
easy-rsa-3.0.3-1.el6.noarch.rpm

配置:

[root@check1 ~]# cp -r /usr/share/easy-rsa/ /etc/openvpn/
[root@check1 ~]# cd /etc/openvpn/easy-rsa/
[root@check1 easy-rsa]# ls
3 3.0 3.0.3
[root@check1 easy-rsa]# \rm 3 3.0
[root@check1 easy-rsa]# cd 3.0.3/
[root@check1 3.0.3]# find / -type f -name "vars.example" | xargs -i cp {} . && mv vars.example vars
[root@check1 3.0.3]# ls
easyrsa openssl-1.0.cnf vars x509-types

生成证书

创建一个新的 PKI 和 CA

[root@check1 3.0.3]# pwd
/etc/openvpn/easy-rsa/3.0.3
[root@check1 3.0.3]# ./easyrsa init-pki

Note: using Easy-RSA configuration from: ./vars

init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /etc/openvpn/easy-rsa/3.0.3/pki

[root@check1 3.0.3]# ./easyrsa build-ca

Note: using Easy-RSA configuration from: ./vars
Generating a 2048 bit RSA private key
.............................+++
........................................................................................................+++
writing new private key to '/etc/openvpn/easy-rsa/3.0.3/pki/private/ca.key.IEMW9gptmK'
Enter PEM pass phrase:  #设置一个密码(用于 ca 对之后生成的 server 和 client 证书签名时使用)
Verifying - Enter PEM pass phrase: #重复一遍
-----
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:
/etc/openvpn/easy-rsa/3.0.3/pki/ca.crt

创建时 nopass 表示不加密 就不会提示 Enter PEM pass phrase
例:[root@check1 3.0.3]# ./easyrsa build-ca nopass

创建服务端证书

[root@check1 3.0.3]# ./easyrsa gen-req server nopass

Note: using Easy-RSA configuration from: ./vars
Generating a 2048 bit RSA private key
....................................................................................+++
...................................+++
writing new private key to '/etc/openvpn/easy-rsa/3.0.3/pki/private/server.key.7O6iK8N5ie'
-----
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) [server]:  #回车

Keypair and certificate request completed. Your files are:
req: /etc/openvpn/easy-rsa/3.0.3/pki/reqs/server.req
key: /etc/openvpn/easy-rsa/3.0.3/pki/private/server.key

签约服务端证书

给 server 端证书做签名,首先是对一些信息的确认,可以输入 yes,然后输入 build-ca 时设置的那个密码 

[root@check1 3.0.3]# ./easyrsa sign server server

Note: using Easy-RSA configuration from: ./vars


You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.

Request subject, to be signed as a server certificate for 3650 days:

subject=
commonName = server


Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes  #输入 yes 确认信息
Using configuration from ./openssl-1.0.cnf
Enter pass phrase for /etc/openvpn/easy-rsa/3.0.3/pki/private/ca.key: #输入创建 CA 时设置的密码
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName :PRINTABLE:'server'
Certificate is to be certified until Oct 9 09:39:51 2028 GMT (3650 days)

Write out database with 1 new entries
Data Base Updated

Certificate created at: /etc/openvpn/easy-rsa/3.0.3/pki/issued/server.crt

创建 Diffie-Hellman

时间会有点长,耐心等待 

[root@check1 3.0.3]# ./easyrsa gen-dh

Note: using Easy-RSA configuration from: ./vars
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
...................................................

DH parameters of size 2048 created at /etc/openvpn/easy-rsa/3.0.3/pki/dh.pem

创建客户端证书

复制文件

[root@check1 ~]# mkdir /etc/openvpn/client
[root@check1 ~]# cp -r /usr/share/easy-rsa/ /etc/openvpn/client/easy-rsa
[root@check1 ~]# cd /etc/openvpn/client/easy-rsa/
[root@check1 easy-rsa]# \rm 3 3.0 
[root@check1 easy-rsa]# cd 3.0.3/
[root@check1 3.0.3]# find / -type f -name "vars.example" | xargs -i cp {} . && mv vars.example vars

 

初始化,会在当前目录创建 PKI 目录,用于存储一些中间变量及最终生成的证书 

[root@check1 3.0.3]# pwd
/etc/openvpn/client/easy-rsa/3.0.3
[root@check1 3.0.3]# ./easyrsa init-pki

Note: using Easy-RSA configuration from: ./vars

init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /etc/openvpn/client/easy-rsa/3.0.3/pki

生成证书  再添加用户,从这里开始就 OK

[root@check1 3.0.3]# ./easyrsa gen-req wang nopass    #客户证书名为 wang,nopass 表示不加密 private key
Note: using Easy-RSA configuration from: ./vars
Generating a 2048 bit RSA private key
.....................+++
..................................................................................+++
writing new private key to '/etc/openvpn/client/easy-rsa/3.0.3/pki/private/wang.key.uNCOFOPeuf'
-----
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) [wang]: #回车(可以键入回车使用默认的,也可以手动更改 )

Keypair and certificate request completed. Your files are:
req: /etc/openvpn/client/easy-rsa/3.0.3/pki/reqs/wang.req
key: /etc/openvpn/client/easy-rsa/3.0.3/pki/private/wang.key

签约客户端证书

[root@check1 3.0.3]# ./easyrsa import-req /etc/openvpn/client/easy-rsa/3.0.3/pki/reqs/wang.req wang

Note: using Easy-RSA configuration from: ./vars

The request has been successfully imported with a short name of: wang
You may now use this name to perform signing operations on this request.

[root@check1 3.0.3]# ./easyrsa sign client wang

Note: using Easy-RSA configuration from: ./vars


You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.

Request subject, to be signed as a client certificate for 3650 days:

subject=
commonName = wang


Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes #输入 yes 确认信息
Using configuration from ./openssl-1.0.cnf
Enter pass phrase for /etc/openvpn/easy-rsa/3.0.3/pki/private/ca.key: #输入 build-ca 时设置的那个密码 
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName :PRINTABLE:'wang'
Certificate is to be certified until Oct 9 09:54:40 2028 GMT (3650 days)

Write out database with 1 new entries
Data Base Updated

Certificate created at: /etc/openvpn/easy-rsa/3.0.3/pki/issued/wang.crt

注意:ca、server 和 client 的 Common Name 最好不要设置为一样,我没有验证,不过网上有人说设置一样后,openvpn 连接时会有问题 

整理所需文件

服务端所需:

[root@check1 ~]# mkdir /etc/openvpn/certs
[root@check1 ~]# cd /etc/openvpn/certs/
[root@check1 certs]# cp /etc/openvpn/easy-rsa/3.0.3/pki/dh.pem ./
[root@check1 certs]# cp /etc/openvpn/easy-rsa/3.0.3/pki/ca.crt ./
[root@check1 certs]# cp /etc/openvpn/easy-rsa/3.0.3/pki/issued/server.crt ./
[root@check1 certs]# cp /etc/openvpn/easy-rsa/3.0.3/pki/private/server.key ./
[root@check1 certs]# ls
ca.crt dh.pem server.crt server.key

客户端所需:

[root@check1 certs]# mkdir /etc/openvpn/client/wang
[root@check1 certs]# cp /etc/openvpn/easy-rsa/3.0.3/pki/ca.crt /etc/openvpn/client/wang/
[root@check1 certs]# cp /etc/openvpn/easy-rsa/3.0.3/pki/issued/wang.crt /etc/openvpn/client/wang/
[root@check1 certs]# cp /etc/openvpn/client/easy-rsa/3.0.3/pki/private/wang.key /etc/openvpn/client/wang/
[root@check1 certs]# ls
ca.crt dh.pem server.crt server.key

更多./easyrsa 参数使用 –help 查看 参考:

https://github.com/OpenVPN/easy-rsa/blob/v3.0.5/README.quickstart.md

 

编辑服务器配置文件

[root@check1 ~]# vim /etc/openvpn/server.conf
local 172.16.227.43
#定义 openvpn 监听的 IP 地址,如果是服务器单网卡的也可以不注明,但是服务器是多网卡的建议注明。
port 6666 
#定义 openvpn 监听的的端口,默认为 1194 端口。
proto tcp 
#定义 openvpn 使用的协议,默认使用 UDP。如果是生产环境的话,建议使用 TCP 协议。
dev tun
#定义 openvpn 运行时使用哪一种模式,openvpn 有两种运行模式一种是 tap 模式,一种是 tun 模式。
#tap 模式也就是桥接模式,通过软件在系统中模拟出一个 tap 设备,该设备是一个二层设备,同时支持链路层协议。
ca /etc/openvpn/certs/ca.crt
#定义 openvpn 使用的 CA 证书文件,该文件通过 build-ca 命令生成,CA 证书主要用于验证客户证书的合法性。
cert /etc/openvpn/certs/server.crt
#定义 openvpn 服务器端使用的证书文件。
key /etc/openvpn/certs/server.key
#定义 openvpn 服务器端使用的秘钥文件,该文件必须严格控制其安全性。
dh /etc/openvpn/certs/dh.pem
#定义 Diffie hellman 文件。
ifconfig-pool-persist /etc/openvpn/ipp.txt
#定义客户端和虚拟 ip 地址之间的关系。特别是在 openvpn 重启时,再次连接的客户端将依然被分配和断开之前的 IP 地址。
server 10.8.0.2 255.255.255.0
#定义 openvpn 在使用 tun 路由模式时,分配给 client 端分配的 IP 地址段。
push "route 192.168.10.0 255.255.255.0"
#向客户端推送的路由信息,假如客户端的 IP 地址为 10.8.0.2,要访问 192.168.10.0 网段的话,使用这条命令就可以了。
client-config-dir /etc/openvpn/ccd
#这条命令可以指定客户端 IP 地址。
#使用方法是在/etc/openvpn/创建 ccd 目录,然后创建在 ccd 目录下创建以客户端命名的文件。比如要设置客户端 wang 为 10.8.0.100 这个 IP 地址,只要在 /etc/openvpn/ccd/wang 文件中包含如下行即可:
#ifconfig-push 10.8.0.100 10.8.0.101   前面的 IP 是给客户端的,后面的 IP 是服务端保留的,分配的地址都是 30 位掩码 
push "redirect-gateway def1 bypass-dhcp" 
#此条开启后 VPN 将代理所有流量,建议不开,此条不开 以下两条也不用开
push "dhcp-option DNS 223.5.5.5" #向客户端推送 DNS 信息
push "dhcp-option DNS 223.6.6.6"
client-to-client #使客户端之间能相互访问,默认设置下客户端间是不能相互访问的。
keepalive 20 120  #定义活动连接保时期限
comp-lzo   #启用允许数据压缩,客户端配置文件也需要有这项。
#duplicate-cn   #定义 openvpn 一个证书在同一时刻是否允许多个客户端接入,默认没有启用。
user openvpn   #运行用户
group openvpn  #运行组
persist-key  #通过 keepalive 检测超时后,重新启动 VPN,不重新读取 keys,保留第一次使用的 keys。
persist-tun  #通过 keepalive 检测超时后,重新启动 VPN,一直保持 tun 或者 tap 设备是 linkup 的。否则网络连接,会先 linkdown 然后再 linkup。
status openvpn-status.log   #把 openvpn 的一些状态信息写到文件中,比如客户端获得的 IP 地址。
log-append openvpn.log  #记录日志,每次重新启动 openvpn 后追加原有的 log 信息。
verb 1  #设置日志记录冗长级别,日志级别 0-9,等级越高,记录越多
mute 20   #重复日志记录限额

启动 VPN

[root@check1 ~]# /etc/init.d/openvpn start
Starting openvpn: [ OK ]
[root@check1 ~]# netstat -anpt | grep openvpn
tcp 0 0 172.16.227.43:6666 0.0.0.0:* LISTEN 9077/openvpn

一般配置完成后客户端连接后和内网不通,因为没有配置 iptables 数据包 NAT 转发

一般先清空 iptables 策略,配置数据包转发后再添加其他策略(端口限制、IP 限制等)

允许客户端 ip 10.8.0.0/24 网段的和内网通信

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

限制指定客户端 IP 只能访问指定服务器或服务(上面那条不存在的情况下配置此条策略)

限制客户端 IP 10.8.0.6 只能访问内网 172.16.206.78 服务器

iptables -t nat -A POSTROUTING -s 10.8.0.6/30 -o eth0 -d 172.16.206.78 -j MASQUERADE

客户端配置

windows 版:

下载地址:https://www.techspot.com/downloads/5182-openvpn.html

我的客户端是 windows 10

安装 openvpn-install-2.4.6-I601 主程序 安装过程不多少,全部默认

安装后,将下面三个文件,拷贝到上面安装路径下的 config 目录中

[root@check1 wang]# ls
ca.crt wang.crt wang.key
[root@check1 wang]# pwd
/etc/openvpn/client/wang

在 config 文件夹中创建 sample.ovpn 主配置文件

写入

client   #指定这是一个客户端,我们将从服务器获取某些配置文件指令
dev tun  #定义 openvpn 运行时使用哪一种模式,openvpn 有两种运行模式一种是 tap 模式,一种是 tun 模式。这里和服务端一样
proto tcp   #和服务端配置相同协议
# remote 服务端外网 IP  VPN 端口   #如果有多个 VPN 服务器,为了实现负载均衡,你可以设置多个 remote 指令。
remote  47.97.14.62 6666
resolv-retry infinite    #启用该指令,与服务器连接中断后将自动重新连接,这在网络不稳定的情况下(例如:笔记本电脑无线网络)非常有用。
nobind  #大多数客户端不需要绑定本机特定的端口号
persist-key  # 持久化选项可以尽量避免访问在重启时由于用户权限降低而无法访问的某些资源。
persist-tun
ca ca.crt   #服务器生成的三个客户端文件
cert wang.crt
key wang.key
ns-cert-type server
# 指定通过检查证书的 nsCertType 字段是否为"server"来验证服务器端证书。
# 这是预防潜在攻击的一种重要措施。
# 为了使用该功能,你需要在生成服务器端证书时,将其中的 nsCertType 字段设为"server"
# easy-rsa 文件夹中的 build-key-server 脚本文件可以达到该目的。
comp-lzo
# 在 VPN 连接中启用压缩。
# 该指令的启用/禁用应该与服务器端保持一致。
verb 3
# 设置日志文件冗余级别(0~9)。
# 0 表示静默运行,只记录致命错误。
# 4 表示合理的常规用法。
# 5 和 6 可以帮助调试连接错误。
# 9 表示极度冗余,输出非常详细的日志信息。

双击桌面图标 OpenVPN GUI

右击桌面右下角图标 connect 连接即可

Linux 版

安装:

yum -y install openvpn

将下面的三个文件拷贝到客户端/etc/openvpn 目录中

[root@check1 wang]# ls
ca.crt wang.crt wang.key
[root@check1 wang]# pwd
/etc/openvpn/client/wang

客户端配置如下:

[root@wcy openvpn]# pwd
/etc/openvpn
[root@wcy openvpn]# ls
ca.crt wang.crt wang.key
[root@wcy openvpn]# vim sample.conf
client
dev tun
proto tcp
remote 47.97.14.62 6666
resolv-retry infinite
nobind
persist-key
persist-tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/wang.crt
key /etc/openvpn/wang.key
ns-cert-type server
comp-lzo
verb 3

启动 VPN 客户端  openvpn –config /etc/openvpn/client.conf

[root@wcy openvpn]# openvpn --config /etc/openvpn/sample.conf
[root@wcy ~]# ps -ef | grep openvpn
root 6260 6194 0 23:00 pts/0 00:00:00 openvpn --config /etc/openvpn/sample.conf
root 6307 6291 0 23:02 pts/1 00:00:00 grep openvpn
[root@wcy ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host 
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:79:1b:0f brd ff:ff:ff:ff:ff:ff
inet 192.168.233.10/24 brd 192.168.233.255 scope global eth0
inet6 fe80::20c:29ff:fe79:1b0f/64 scope link 
valid_lft forever preferred_lft forever
3: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 100
link/[65534] 
inet 192.168.10.6 peer 192.168.10.5/32 scope global tun0

IT 敢客 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:OpenVpn 部署使用 easy-rsa-3.0
喜欢 (1)
[313176056@qq.com]
分享 (0)
王初一
关于作者:
不以物喜不以己悲
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址