centos7 搭建openvpn服务器

 OpenVPN是一个开源代码的VPN应用程序,可让您在公共互联网上安全地创建和加入专用网络。相比pptp,openvpn更稳定、安全。

  本篇博客主要介绍下面两点:

  1. Centos 7下安装与配置OpenVPN;

  2. 客户端连接OpenVPN服务器(window 、Ubuntu、 Ios、 Android)

Prerequisites

  1. 公网服务器IP或者国外VPS及root权限;

  2. 由于OpenVPN在默认的CentOS软件库中不可用,需要安装EPEL;

yum install epel-release

1.安装OpenVPN

yum install openvpn easy-rsa -y

2. 配置OpenVPN

OpenVPN在其文档目录中有示例配置文件,拷贝该示例配置文件到配置目录

 cp /usr/share/doc/openvpn-2.4.6/sample/sample-config-files/server.conf /etc/openvpn/

编辑配置文件

vim /etc/openvpn/server.conf

#定义openvpn使用端口
port 1194

# TCP or UDP server?
#通过tcp协议连接,也可以使用udp协议 
proto tcp
#proto udp

#定义openvpn运行模式,openvpn有两种运行模式一种是tap模式的以太网通道,一种是tun模式的路由 IP 通道。
;dev tap
dev tun

#openvpn使用的CA证书文件,CA证书主要用于验证客户证书的合法性,存放位置请依据实际情况自行改动
ca /etc/openvpn/easy-rsa/pki/ca.crt

#openvpn服务器端使用的证书文件,存放位置请依据实际情况自行改动
cert /etc/openvpn/easy-rsa/pki/issued/server.crt

#服务器密钥存放位置,请依据实际情况自行改动
key /etc/openvpn/easy-rsa/pki/private/server.key 

#Diffie hellman文件,存放位置请依据实际情况自行改动
dh /etc/openvpn/easy-rsa/pki/dh.pem

#openvpn在使用tun路由模式时,分配给client端分配的IP地址段,虚拟局域网网段设置,请依据须要自行改动,不支持和拔号网卡位于同一网段
server 10.8.1.0 255.255.255.0

#在openvpn重新启动时,再次连接的client将依旧被分配和曾经一样的IP地址
ifconfig-pool-persist ipp.txt

# 为客户端创建对应的路由,以另其通达公司网内部服务器,但记住,公司网内部服务器也需要有可用路由返回到客户端
push "route 172.17.0.0 255.255.240.0" 
push "route 172.16.1.0 255.255.255.0" 
push "route 172.16.2.0 255.255.255.0" 

#向客户端推送的DNS信息,DNS配置,依据实际情况配置
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 114.114.114.114"

#活动连接保时期限
keepalive 10 120

tls-auth /etc/openvpn/ta.key 0

cipher AES-256-CBC

comp-lzo

max-clients 100

user nobody
group nobody

persist-key
persist-tun

status openvpn-status.log
log-append  openvpn.log
verb 3
mute 20

服务器端配置文件演示样例:(server.conf)

#openvpn服务端网卡的IP,也能够不写
#local 192.168.3.1     

#定义openvpn使用端口
port 443    

#通过tcp协议连接,也可以使用udp协议              
proto tcp 
#proto udp     

#定义openvpn运行模式,openvpn有两种运行模式一种是tap模式的以太网通道,一种是tun模式的路由 IP 通道。
# 路由 IP 容易控制,所以推荐使用它;但如果如 IPX 等必须
# 使用第二层才能通过的通讯,则可以用 tap 方式,tap 也
# 就是以太网桥接              
dev tun                      

#openvpn使用的CA证书文件,CA证书主要用于验证客户证书的合法性,存放位置请依据实际情况自行改动
ca ca.crt  

#openvpn服务器端使用的证书文件,存放位置请依据实际情况自行改动                
cert server.crt  
         
#服务器密钥存放位置,请依据实际情况自行改动
key server.key           

#Diffie hellman文件,存放位置请依据实际情况自行改动
dh dh1024.pem      

#openvpn在使用tun路由模式时,分配给client端分配的IP地址段
# 配置 VPN 使用的网段,OpenVPN 会自动提供基于该网段的 DHCP
# 服务,但不能和任何一方的局域网段重复,保证唯一
# server 端 ip 默认会设为.1 的地址。
server 10.8.0.0 255.255.255.0     

#在openvpn重新启动时,再次连接的client将依旧被分配和曾经一样的IP地址
ifconfig-pool-persist ipp.txt 

#向客户端推送的路由信息,假如客户端的IP地址为10.8.0.2,要访问172.17.48.0网段的话,使用这条命令就可以了。
# 为客户端创建对应的路由,以另其通达公司网内部服务器,但记住,公司网内部服务器也需要有可用路由返回到客户端,公司内网有几个网段就推送几个
push "route 172.17.48.0 255.255.240.0" 
push "route 172.16.1.0 255.255.255.0" 
push "route 172.16.2.0 255.255.255.0"  
             
#这条命令可以重定向客户端的网关,在进行FQ时会使用,开启此选项客户端出口ip会成为openvpn服务器IP
#此项不要开启,会改变客户端出口IP,导致客户端无法正常访问网络
#push "redirect-gateway def1 bypass-dhcp"    

#向客户端推送的DNS信息,DNS配置,依据实际情况配置
push "dhcp-option DNS 8.8.8.8"   

#向客户端推送的DNS信息,DNS配置,依据实际情况配置   
push "dhcp-option DNS 114.114.114.114"      

#活动连接保时期限,设置服务端检测的间隔和超时时间 每 10 秒 ping 一次,如果 120 秒没有回应则认为对方已经 down
keepalive 10 120    

#使客户端能相互訪问                         
client-to-client  

#这条经常使用于測试用途,凝视该条可实现限制一个证书在同一时刻仅仅能有一个client接入           
duplicate-cn      

#选择一种加密算法与client保持一致         
cipher AES-256-CBC

;cipher BF-CBC        # Blowfish (default)      //选择一种加密算法与client保持一致
;cipher AES-128-CBC  # AES
;cipher DES-EDE3-CBC  # Triple-DES

#启用允许数据压缩,客户端配置文件也需要有这项。
comp-lzo                          

#最大客户端并发连接数量
;max-clients 100            

#定义执行openvpn的用户用于用户认证能够不採用用户认证
;user nobody                   
;group nobody

#通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys
persist-key  

#通过keepalive检测超时后,重新启动VPN,一直保持tun或者tap设备是linkup的。否则网络连接,会先linkdown然后再linkup。
persist-tap   

#定期把openvpn的一些状态信息写到文件里,以便自己敲代码计费或者进行其它操作
status openvpn-status.log

log /etc/openvpn/openvpn.log

log-append /etc/openvpn/openvpnappend.log

#设置日志记录冗长级别#设置日志要记录的级别。
#0 只记录错误信息。
#4 能记录普通的信息。
#5 和 6 在连接出现问题时能帮助调试
#9 是极端的,所有信息都会显示,甚至连包头等信息都显示(像 tcpdump)
verb 3  

#反复日志记录限额            
mute 20      

#此选项开启只能使用udp协议。Options error: --explicit-exit-notify can only be used with --proto udp 
explicit-exit-notify 1                            

客户端文件演示样例:(client.ovpn)

client
dev tun
proto tcp
resolv-retry infinite
nobind
remote 115.159.56.240 1194 
remote-cert-tls server
#ns-cert-type server
#需与服务端保持一致
comp-lzo
#需与服务端保持一致  
verb 3
#需与服务端保持一致 
cipher AES-256-CBC 
#需与服务端保持一致
keepalive 10 120
#需与服务端保持一致
persist-key
#需与服务端保持一致
persist-tun

tls-auth ta.key 1
ca ca.crt
cert testname.crt
key testname.key
log-append testname.log
status testname-status.log

3、配置证书文件

mkdir -p  /etc/openvpn/easy-rsa/keys

cp -rf /usr/share/easy-rsa/3.0.3/* /etc/openvpn/easy-rsa/
cp /usr/share/doc/easy-rsa-3.0.3/vars.example /etc/openvpn/easy-rsa/

cp vars.example vars

vi   /etc/openvpn/easy-rsa/vars

修改以下配置的内容,自定义设置各项值就可以。

set_var EASYRSA	"$PWD"
set_var EASYRSA_PKI		"$EASYRSA/pki"
set_var EASYRSA_DN	"cn_only"

set_var EASYRSA_REQ_COUNTRY	"CN"
set_var EASYRSA_REQ_PROVINCE	"SH"
set_var EASYRSA_REQ_CITY	"Shanghai"
set_var EASYRSA_REQ_ORG	"DMSD Certificate"
set_var EASYRSA_REQ_EMAIL	"[email protected]"
set_var EASYRSA_REQ_OU		"Dynamic Times"

set_var EASYRSA_KEY_SIZE	2048
set_var EASYRSA_ALGO		rsa
set_var EASYRSA_CA_EXPIRE	3650
set_var EASYRSA_CERT_EXPIRE	3650
set_var EASYRSA_NS_SUPPORT	"no"
set_var EASYRSA_NS_COMMENT	"Easy-RSA Generated Certificate"
set_var EASYRSA_EXT_DIR	"$EASYRSA/x509-types"
set_var EASYRSA_SSL_CONF	"$EASYRSA/openssl-1.0.cnf"
set_var EASYRSA_DIGEST		"sha256"

服务端vars文件配置详解:(vars) 

#定义key的生成目录
set_var EASYRSA_PKI	"$EASYRSA/pki" 

#定义生成私钥的大小,一般为1024或2048,默认为2048位。这个就是我们在执行build-dh命令生成dh2048文件的依据。
set_var EASYRSA_KEY_SIZE 2048

set_var EASYRSA_ALGO rsa

#ca证书有效期,默认为3650天,即十年            
set_var EASYRSA_CA_EXPIRE 3650

#定义秘钥的有效期,默认为3650天,即十年             
set_var EASYRSA_CERT_EXPIRE	3650   

#定义所在的国家       
set_var EASYRSA_REQ_COUNTRY "CN"  

#定义所在的省         
set_var EASYRSA_REQ_PROVINCE "BJ"      

#定义所在的城市    
set_var EASYRSA_REQ_CITY "BeiJing" 

#定义所在的组织        
set_var EASYRSA_REQ_ORG "xxxx"  

#定义邮箱           
set_var EASYRSA_REQ_EMAIL "[email protected]"  

#定义所在单位  
set_var EASYRSA_REQ_OU "xxxx"       
         

4.证书创建

  4.1创建根证书ca.rt

cd /etc/openvpn/easy-rsa/

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

# 创建根证书
./easyrsa build-ca

创建根证书,首先会提示设置密码,用于ca对之后生成的server和client证书签名时使用,然后会提示设置Country Name,State or Province Name,Locality Name,Organization Name,Organizational Unit Name,Common Name,Email Address,可以键入回车使用默认的,也可以手动更改 

设置ca密码(输入两次):ca.com

会生成根证书:ca.crt,路径如下:

/etc/openvpn/easy-rsa/pki/ca.crt

 4.2 创建ta.key

[root@VM_0_4_centos easy-rsa]# ./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/pki/dh.pem

[root@VM_0_4_centos easy-rsa]# openvpn --genkey --secret ta.key
[root@VM_0_4_centos easy-rsa]# cp -r ta.key /etc/openvpn/

4.3 创建服务端证书

创建服务端证书,生成请求,使用gen-req来生成req,创建server端证书和private key,可以使用nopass表示不加密private key,然后会提示设置Country Name,State or Province Name,Locality Name,Organization Name,Organizational Unit Name,Common Name,Email Address,可以键入回车使用默认的,也可以手动更改

./easyrsa  gen-req server

设置server密码(输入两次):openserver.com

会生成服务端证书:server.req和server.key,路径如下:

/etc/openvpn/easy-rsa/pki/private/server.key

/etc/openvpn/easy-rsa/pki/reqs/server.req

4.4 签发服务端证书

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

[root@VM_0_4_centos easy-rsa]# ./easyrsa sign-req server server

生成服务端签名证书:server.crt,路径如下:

/etc/openvpn/easy-rsa/pki/issued/server.crt

至此服务端证书全部生成完毕,分别为:server.req、server.key和server.crt。

/etc/openvpn/easy-rsa/pki/private/server.key

/etc/openvpn/easy-rsa/pki/reqs/server.req

/etc/openvpn/easy-rsa/pki/issued/server.crt

4.5 生成客户端用户证书

# 例如:生成客户端用户:testname 的证书
[root@VM_0_4_centos easy-rsa]# ./easyrsa build-client-full testname

生成客户端证书,并设置密码(客户端连接时用)

生成客户端用户签名证书:

/etc/openvpn/easy-rsa/pki/issued/testname.crt

/etc/openvpn/easy-rsa/pki/private/tesstname.key

/etc/openvpn/easy-rsa/pki/reqs/testname.req

5.启动openvpn服务

systemctl start openvpn@server
启动时输入服务端证书密码:openserver.com

systemctl stop openvpn@server  // 停用
systemctl start openvpn@server  //启用

6.添加路由策略

添加一条SNAT规则,让源地址是10.8.1.0/24网段的地址进来转换成vpn服务器的内网地址(例如:172.16.0.100,此IP内网未使用),这样vpn客户端访问公司内网服务器的时候伪装成vpn服务器去访问.

iptables -t nat -A POSTROUTING -s 10.8.1.0/24 -j SNAT --to-source 172.16.0.100 
firewall-cmd --reload

目的:伪装成内网IP,正常访问内网的各台机器。

7.客户端配置

客户端下载openvpn版本2.4.5 

上官网下载Windows客户端:https://openvpn.net/index.php/open-source/downloads.html

客户端需要的证书:

testname.crt、testname.key、ca.crt、ta.key

客户端配置config.ovpn说明:(ip换为openvpn服务器外网ip)

client
dev tun
proto tcp
resolv-retry infinite
nobind
remote 115.159.56.240 1194 
remote-cert-tls server
#ns-cert-type server
#需与服务端保持一致
comp-lzo
#需与服务端保持一致  
verb 3
#需与服务端保持一致 
cipher AES-256-CBC 
#需与服务端保持一致
keepalive 10 120
#需与服务端保持一致
persist-key
#需与服务端保持一致
persist-tun

tls-auth ta.key 1
ca ca.crt
cert testname.crt
key testname.key
log-append testname.log
status testname-status.log

安装OpenVPN 2.4.5 x86_64后,清空config文件夹,将testname.crt、testname.key、ca.crt、ta.key、testname.ovpn放入config目录中, 
配置完成后启动,如果有设置密码的话输入密码即可。

然后连接openvpn,点击运行 选 Connect  ,如果出现绿色图标说明vpn连接成功了.

连接成功后会启一个网络连接,可以看到分配的ip地址是10.8.1.6 / 30

客户端会添加路由,可以看下路由表,下面这些是服务端配置推送给客户端的路由,其实就是告诉客户端去这些网段都通过vpn服务器,类似于静态路由

route PRINT -4

测试,ping下公司内网中的主机,看下是否能够访问,如果可以说明ok了,我公司内网某台机器IP: 172.17.0.4

ping 172.17.0.4

OK,说明能如在公司内网一样访问各台机器了。

如内网的web服务,也可通过内网地址连接数据库、redis等各种服务

数据包的走向是:客户端访问公司内网主机 ----- 通过路由转发 ---- vpn服务器(tun0) ---- SNAT -----  公司内网主机

猜你喜欢

转载自blog.csdn.net/weixin_42231507/article/details/81387448