一、何为OpenVPN

OpenVPN是一个用于创建虚拟专用网络加密通道的软件包,最早由James Yonan编写。OpenVPN可以使用公开密钥、电子证书、或者用户名/密码来进行身份验证。它大量使用了OpenSSL加密库中的SSLv3/TLSv1协议函数库。
OpenVPN可以在Solaris、Linux、OpenBSD、FreeBSD、NetBSD、Mac OS X以及Windows、Android和ios上运行。
OpenVPN不是一个基于Web的VPN软件,也不与IPsec及其它VPN软件包兼容。

OpenVPN与L2TP、PPTP的对比:

OpenVPN的技术原理主要包括:虚拟网卡、加密(SSL协议的实现)、身份验证、功能与端口。

虚拟网卡

虚拟网卡是使用网络底层编程技术实现的一个驱动软件,安装此类程序后主机上会增加一个非真实的网卡,它可以像其它网卡一样进行配置。服务程序可以在应用层打开虚拟网卡,如果应用软件 (如网络浏览器)向虚拟网卡发送数据,则服务程序可以读取到该数据,如果服务程序写合适的数据到虚拟网卡,应用软件也可以接收 得到。很多系统都可以安装虚拟网卡,所以OpenVPN的跨平台使用变得容易。
在OpenVPN中,如果用户访问一个远程的虚拟地址(属于虚拟网卡配置的地址系列,区别于真实地址),则操作系统会通过路由机制将数据包(TUN模式)或数据帧(TAP模式)发送到虚拟网卡上,服务程序接收该数据并进行相应的处理后,会通过socket从外网上发送出去。这完成了一个单向传输的过程,反过来也是一样。当远程服务程序通过SOCKET从外网上接收到数据,并进行相应的处理后,又会发送回给虚拟网卡,则相应应用软件就会接收到。

加密

OpenVPN使用OpenSSL库来加密数据与控制信息,所以它可以使用任何OpenSSL支持的算法,它可以使用HMAC功能来进一步提高连接的安全性,OpenSSL的硬件加速也能提高它的性能。

身份验证

OpenVPN支持的身份验证方式:

  • 预享私钥
    最为简单,但它也只能用于创建点对点的VPN。
  • 第三方证书(PKI)
    提供最完善的功能,但需要额外维护一个PKI证书系统。
  • 用户名和密码组合
    可以省略掉客户端证书但同样需要服务端证书用作加密。(OpenVPN 2.0+)

功能与端口

OpenVPN所有的通信都基于一个单一的IP端口,使用通用的网络协议,默认且推荐使用UDP协议,它也支持TCP。IANA指定给OpenVPN的官方端口为1194。

OpenVPN 2.0以后的版本每个进程可以同时管理数个并发的隧道。

OpenVPN可以通过大多数的代理服务器,并且能够在NAT环境中很好地工作。

服务端具有向客户端推送某些网络配置信息的功能,这些信息包括:IP地址、路由设置。

OpenVPN提供了两种虚拟网络接口:通用Tun/Tap驱动,通过它们,可以创建三层IP隧道,或者虚拟二层以太网,后者可以传送任何类型的二层以太网数据。

传送的数据可以通过LZO算法压缩。

二、为何OpenVPN

  1. 跨平台,跨系统
  2. 稳定性,也难以被封锁

三、CentOS 7配置OpenVPN服务端

1、系统环境准备

centos7,内核4.16.3,VPS

安装依赖的软件包:

yum -y install openssl openssl-devel pam pam-devel

2、安装OpenVPN

yum -y install openvpn

3、制作证书

yum -y install easy-rsa

制作根证书:

(注意将easyrsa替换为绝对路径如:/usr/share/easy-rsa/3.0.3/easyrsa)

cd /etc/openvpn/server
easyrsa init-pki
easyrsa build-ca nopass
easyrsa gen-dh

制作服务端证书:

easyrsa build-server-full server nopass
# server是服务端证书名称,可以用其它名称

制作客户端证书:

easyrsa build-client-full client nopass
# barry是客户端证书名称,可以用其它名称

4、服务端配置

修改服务端配置文件/etc/openvpn/server/server.conf内容如下:

local a.b.c.d # 填服务器真实IP
port 1194
proto tcp
dev tun
ca /etc/openvpn/server/pki/ca.crt
cert /etc/openvpn/server/pki/issued/server.crt
key /etc/openvpn/server/pki/private/server.key
dh /etc/openvpn/server/pki/dh.pem
server 10.8.0.0 255.255.255.0 # 给客户端分配的IP段
ifconfig-pool-persist ipp.txt # 记录客户端和虚拟ip的映射关系,当客户端重新连接时依然被分配断开之前的IP地址
#push "redirect-gateway def1 bypass-dhcp" # 不重定向客户端网关
#push "dhcp-option DNS 8.8.8.8" # 选择一个DNS
client-to-client
keepalive 10 120
compress lz4-v2
push "compress lz4-v2"
user nobody
group nobody
persist-key
persist-tun
status /var/log/openvpn-status.log
log /var/log/openvpn.log
verb 3 # 日志等级


开启路由转发支持,用 vi 编辑/etc/sysctl.conf文件,修改以下参数
net.ipv4.ip_forward = 1
执行下面命令使sysctl.conf配置文件生效

vim /etc/sysctl.conf
net.ipv4.ip_forward = 1  #将默认的0改成1
sysctl -p   #使修改的参数生效

要使用OpenVPN Server访问同网段的其它服务器,在tun模式下需要用到nat功能,所以必须启用防火墙服务。

firewalld防火墙具体配置过程如下:

systemctl status firewalld.service
systemctl start firewalld.service
firewall-cmd --list-services   #查看防火墙已经允许哪些服务通过  
firewall-cmd --add-service openvpn #添加openvpn服务且立即生效
firewall-cmd --permanent --add-service openvpn  #添加openvpn服务只有重启后生效且是永久的
firewall-cmd  --add-masquerade   #添加地址伪装服务且立即生效
firewall-cmd --permanent --add-masquerade #添加地址伪装服务只有重启后生效且是永久的
firewall-cmd --query-masquerade  #查询是否添加成功

iptables防火墙配置如下:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE
iptables-save > /etc/sysconfig/iptables #保存配置

开发1194端口:

ufw allow 1194

启动OpenVPN服务

openvpn --config /etc/openvpn/server/server.conf &

四、Windows下配置OpenVPN客户端

下载OpenVPN GUI客户端:
http://build.openvpn.net/downloads/releases/
下载好后按默认设置安装即可。

将以下3个文件下载下来并放到C:\Program Files\OpenVPN\config目录下
/etc/openvpn/server/pki/private/client.key
/etc/openvpn/server/pki/issued/client.crt
/etc/openvpn/server/pki/ca.crt

新建客户端配置文件C:\Program Files\OpenVPN\config\client.ovpn,写入如下内容:
client
dev tun
proto tcp
remote a.b.c.d 1194 # 填服务器真实IP
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
verb 3 # 日志等级

五、Linux下配置OpenVPN客户端

1、安装openvpn

2、复制下面三个文件

/etc/openvpn/server/pki/private/client.key
/etc/openvpn/server/pki/issued/client.crt
/etc/openvpn/server/pki/ca.crt

3、 新建客户端配置文件~/openvpn_client/client.ovpn,写入如下内容:
client
dev tun
proto tcp
remote a.b.c.d 1194 # 填服务器真实IP
persist-key
persist-tun
ca /path/to/ca.crt
cert /path/to/ client.crt
key /path/to/ client.key
verb 3 # 日志等级

4、运行

openvpn --config ~/openvpn_client/client.ovpn

遇到问题看日志!!! /var/log/openvpn.log

参考资料:

OpenVPN原理及其搭建

Linux CentOS安装配置OpenVPN 2.4.0最新版教程

分类: InternetIoT

0 条评论

发表评论