Centos 部署OpenVPN实现远程拨号
jasonminghao 人气:3目录
- OpenVPN概述
- OpenVPN应用场景
- OpenVPN远程拨号
- OprnVPN访问内网网段
- 客户端连接
- MAC OS客户端
- Linux客户端
OpenVPN概述
什么是VPN
VPN直译就是虚拟专用通道
,是提供给企业之间或者个人与公司之间安全数据传输
的隧道,OpenVPN
无疑是Linux下开源VPN
的先锋,提供了良好的性能和友好的用户GUI
OpenVPN
和传统VPN相比,它的优点是简单易用
Open VPN
Open VPN
大量使用了OpenSSL加密库中的SSLv3/TLSv1协议函数库。
目前OpenVPN
能在Solaris、Linux
、OpenBSD、FreeBSD、NetBSD、Mac OS X与Microsoft Windows以及Android和iOS上运行,并包含了许多安全性的功能。它并不是一个基于Web的VPN软件,也不与IPsec及其他VPN软件包兼容
Open VPN认证方式
1、基于与共享密钥(公钥/私钥)
2、基于电子证书
3、可使用用户名/密码进行身份验证
OpenVPN应用场景
1.Peer-to-Peer VPN(点对点连接)
将internet两台机器(公网地址)shiyongVPN连接起来,比如广州服务器和上海服务器之间的数据需要相互调用,但是数据又比较敏感,直接通过公共网络传输,容易被窃取数据。如果拉一条专线成本又太高。那么我们可以通过VPN使用现有网络,将两台主机逻辑上捆绑在一个虚拟网络中,这样既保证了数据的传输安全,同时又节省了成本。
2.Site-to-Site VPN(站点对站点连接)
用于连接两个或者多个地域上不同的局域网(LAN),每个LAN有一台OpenVPN服务器作为接入点,组成虚拟专用网络,是得不同LAN里面的主机和服务都能够相互通讯(比如国内公司与海外分公司的连接)
3.Remote AccessVPN(远程访问)
应用于外网用户访问内部资源。在这个场景中远程访问者,一般通过公网IP连接VPN服务,然后通过分配后的内网地址与其内网网段进行通信
OpenVPN远程拨号
OpenVPN场景实践拓扑图
OpenVPN场景实践地址规划
主机角色 | 外网IP | 内网IP |
---|---|---|
OpenVPN Server | 10.0.0.61 | 172.16.1.61 |
OpenVPN Client | 10.0.0.1 | |
web | 172.16.1.7 |
所有系统:Centos7.4
1.安装openvpn软件
[root@openvpn-server ~]# yum install openvpn -y
[root@openvpn-server ~]# openvpn --version
OpenVPN 2.4.8 x86_64-redhat-linux-gnu [Fedora EPEL patched] [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Nov 1 2019
library versions: OpenSSL 1.0.2k-fips 26 Jan 2017, LZO 2.06
....
2.为了保证OpenVPN的安装,需要使用easy-rsa
[root@openvpn-server ~]# yum install easy-rsa -y
3.生成密钥证书前,需要准备vars文件
[root@openvpn-server ~]# mkdir /etc/openvpn/easy-rsa && cd /etc/openvpn/easy-rsa/
[root@openvpn-server easy-rsa]# cp -a /usr/share/easy-rsa/3.0.6/* ./
[root@openvpn-server easy-rsa]# cp -a /usr/sharehttps://img.qb5200.com/download-x/doc/easy-rsa-3.0.6/vars.example ./vars
[root@openvpn-server easy-rsa]# vim vars
...
set_var EASYRSA_DN "cn_only"
set_var EASYRSA_REQ_COUNTRY "CN" #所在的国家
set_var EASYRSA_REQ_PROVINCE "Guangdong" #所在的省份
set_var EASYRSA_REQ_CITY "ShenZh" #所在的城市
set_var EASYRSA_REQ_ORG "SA" #所在的组织
set_var EASYRSA_REQ_EMAIL "jasonminghao@163.com" #邮箱的地址
set_var EASYRSA_REQ_OU "sky" #所在公司/组织
...
4.初始化生成证书
#1.初始化,在当前目录创建PKI目录,用于存储证书
[root@openvpn-server easy-rsa]# ./easyrsa init-pki
#2.创建根证书,会提示设置密码,用于ca对之后生成的server和client证书签名时使用,其他可默认
[root@openvpn-server easy-rsa]# ./easyrsa build-ca
#3.创建server端证书和私钥文件,nopass表示不加密私钥文件,其他可默认
[root@openvpn-server easy-rsa]# ./easyrsa gen-req server nopass
#4.给server端证书签名,首先是对一些信息的确认,输入yes,然后创建ca根证书时设置的密码
[root@openvpn-server easy-rsa]# ./easyrsa sign server server
#5.创建Diffie-Hellman文件,秘钥交换时的Diffie-Hellman算法(这个过程需要很长时间,1~3 Minutes)
[root@openvpn-server easy-rsa]# ./easyrsa gen-dh
#6.创建client端证书和私钥文件,nopass表示不加密私钥文件,其他可默认
[root@openvpn-server easy-rsa]# ./easyrsa gen-req client nopass
#7.给client端证书签名,首先是对一些信息的确认,可以输入yes,然后创建ca根证书时设置的密码
[root@openvpn-server easy-rsa]# ./easyrsa sign client client
5.根据配置需要文件中定义,需要拷贝openvpnServer端用到的证书至/etc/openvpn/pki目录中
[root@openvpn-server ~]# mkdir /etc/openvpn/pki && cd /etc/openvpn/pki
[root@openvpn-server pki]# cp /etc/openvpn/easy-rsa/pki/ca.crt ./
[root@openvpn-server pki]# cp /etc/openvpn/easy-rsa/pki/issued/server.crt ./
[root@openvpn-server pki]# cp /etc/openvpn/easy-rsa/pki/private/server.key ./
[root@openvpn-server pki]# cp /etc/openvpn/easy-rsa/pkihttps://img.qb5200.com/download-x/dh.pem ./
# 查看已拷贝好的证书
[root@openvpn-server pki]# ll
total 20
-rw------- 1 root root 1172 Mar 1 01:39 ca.crt
-rw------- 1 root root 424 Mar 1 01:39 dh.pem
-rw------- 1 root root 4552 Mar 1 01:38 server.crt
-rw------- 1 root root 1704 Mar 1 01:39 server.key
6.配置openvpn
[root@openvpn-server ~]# vi /etc/openvpn/server/server.conf
user root
group root
port 1194 #端口
proto tcp #协议
dev tun #采用路由隧道模式tun
ca /etc/openvpn/pki/ca.crt #ca证书文件位置
cert /etc/openvpn/pki/server.crt #服务端公钥名称
key /etc/openvpn/pki/server.key #服务端私钥名称
dh /etc/openvpn/pkihttps://img.qb5200.com/download-x/dh.pem #交换证书
server 10.8.0.0 255.255.255.0 #给客户端分配地址池,注意:不能和VPN服务器内网网段有相同
ifconfig-pool-persist ipp.txt #地址池记录文件位置
push "route 172.16.1.0 255.255.255.0" #允许客户端访问内网172.16.1.0网段
push "dhcp-option DNS 114.114.114.114" # 分配给客户端DNS地址
keepalive 10 120 #存活时间,10秒ping一次,120 如未收到响应则视为断线
max-clients 100 #最多允许100个客户端连接
status openvpn-status.log #日志记录位置
verb 3 #openvpn版本
log /var/log/openvpn.log #openvpn日志记录位置
persist-key #通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys。
persist-tun #检测超时后,重新启动VPN,一直保持tun是linkup的。否则网络会先linkdown然后再linkup
7.配置openvpn,首先需要开启内核转发功能
[root@openvpn-server ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
[root@openvpn-server ~]# systemctl restart network
8.启动openvpn服务
[root@openvpn-server server]# openvpn --daemon --config /etc/openvpn/server/server.conf
[root@openvpn-server server]# ps -ef |grep openvpn
root 4052 1 0 01:53 ? 00:00:00 openvpn --daemon --config /etc/openvpn/server/server.conf
OprnVPN访问内网网段
客户端发送的数据包虽然能抵达openvpn的内网地址,但无法与openvpn服务同内网网段主机进行通信,因为后端主机没有回10.8.0.0的路由,所以会导致无法ping通,可以在后端主机增加一条抵达10.8.0.0的路由
解决方法一,在后端主机添加抵达去往10.8.0.0网段的走openvpn的内网地址即可
#指定添加去10.8.0.0网段走openvpn内网
[root@web01 ~]# route add -net 10.8.0.0/24 gw 172.16.1.61
#添加完路由的效果如下
[root@web01 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.8.0.0 172.16.1.61 255.255.255.0 UG 0 0 0 eth1
如上的配置需要在所有后端主机添加,如果机器量过多,那么添加起来非常麻烦,建议用firewalld防火墙的转发功能
解决方法二,在vpn服务器上配置防火墙转发规则
[root@m01 ~]# systemctl start firewalld
[root@m01 ~]# firewall-cmd --add-service=openvpn --permanent
[root@m01 ~]# firewall-cmd --add-masquerade --permanent
[root@m01 ~]# firewall-cmd --reload
客户端连接
MAC OS客户端
1.下载MAC OS的openvpn软件
GitHub
2.下载服务端生成的客户端密钥文件和ca文件至NAC OS指定~/Documents/OpenVPN/config 目录中
[root@openvpn-client ~]# cd /etc/openvpn/easy-rsa/pki
[root@openvpn-client openvpn]# sz ca.crt
[root@openvpn-client openvpn]# sz issued/client.crt
[root@openvpn-client openvpn]# sz private/client.key
3.在~/Documents/OpenVPN/config 创建一个客户端配置文件,名称叫client.ovpn内容如下
client #指定当前VPN是客户端
dev tun #使用tun隧道传输协议
proto tcp #使用udp协议传输数据
remote 10.4.7.61 1194 #openvpn服务器IP地址端口号(根据openvpn服务端IP地址修改)
resolv-retry infinite #断线自动重新连接,在网络不稳定的情况下非常有用
nobind #不绑定本地特定的端口号
ca ca.crt #指定CA证书的文件路径
cert client.crt #指定当前客户端的证书文件路径
key client.key #指定当前客户端的私钥文件路径
verb 3 #指定日志文件的记录详细级别,可选0-9,等级越高日志内容越详细
persist-key #通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys
persist-tun #检测超时后,重新启动VPN,一直保持tun是linkup的。否则网络会先linkdown然后再linkup
4.最终MAC OS的目录中配置文件如下
5.双击运行openvpn,然后连接即可。
Linux客户端
1.安装openvpn
[root@openvpn-client ~]# yum install openvpn -y
2.下载证书文件
[root@openvpn-client ~]# cd /etc/openvpn/
[root@openvpn-client openvpn]# scp root@172.16.1.61:/opt/easy-rsa/pki/ca.crt ./
[root@openvpn-client openvpn]# scp root@172.16.1.61:/opt/easy-rsa/pki/issued/client.crt ./
[root@openvpn-client openvpn]# scp root@172.16.1.61:/opt/easy-rsa/pki/private/client.key ./
3.配置客户端
[root@openvpn-client openvpn]# cat client.ovpn
client #指定当前VPN是客户端
dev tun #使用tun隧道传输协议
proto udp #使用udp协议传输数据
remote 10.0.0.61 1194 #openvpn服务器IP地址端口号
resolv-retry infinite #断线自动重新连接,在网络不稳定的情况下非常有用
nobind #不绑定本地特定的端口号
ca ca.crt #指定CA证书的文件路径
cert client.crt #指定当前客户端的证书文件路径
key client.key #指定当前客户端的私钥文件路径
verb 3 #指定日志文件的记录详细级别,可选0-9,等级越高日志内容越详细
persist-key #通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys
persist-tun #检测超时后,重新启动VPN,一直保持tun是linkup的。否则网络会先linkdown然后再linkup
4.启动Linux客户端的openvpn
[root@openvpn-client ~]# openvpn --daemon --cd /etc/openvpn --config client.ovpn --log-append /var/log/openvpn.log
# --daemon:openvpn以daemon方式启动。
# --cd dir:配置文件的目录,openvpn初始化前,先切换到此目录。
# --config file:客户端配置文件的路径。
# --log-append file:日志文件路径,如果文件不存在会自动创建。
加载全部内容