一、名词解释
OpenVPN 是一个基于 OpenSSL 库的应用层 VPN 实现,和传统 VPN 相比,它的优点是简单易用。
OpenVPN 介绍:
OpenVPN 是一个基于 OpenSSL库的应用层 VPN 实现。和传统 VPN 相比,它的优点是简单易用。vpn直译就是虚拟专用通道,是提供企业之间或者公司之间安全数据传输的隧道。OpenVPN是一个全特性的SSL VPN,它使用2层或3层的安全网络技术,使用的是工业标准的SSL/TLS协议。SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(TransportLayer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。OpenVPN支持灵活的客户端授权方式,支持证书、智能卡、用户名和密码,允许用户可以通过防火墙连接到VPN的虚拟接口,OpenVPN不是一个基于web代理的应用,也不是基于浏览器访问。
OpenVPN允许参与建立VPN的单点使用共享金钥,电子证书,或者用户名/密码来进行身份验证。它大量使用了OpenSSL加密库中的SSLv3/TLSv1 协议函式库。OpenVPN能在Solaris、Linux、OpenBSD、FreeBSD、NetBSD、Mac OS X与Windows 2000/XP/Vista上运行,并包含了许多安全性的功能。它并不是一个基于Web的VPN软件,也不与IPsec及其他VPN软件包兼容。
OpenVPN2.0后引入了用户名/口令组合的身份验证方式,它可以省略客户端证书,但是仍有一份服务器证书需要被用作加密。 OpenVPN所有的通信都基于一个单一的IP端口, 默认且推荐使用UDP协议通讯,同时TCP也被支持。OpenVPN连接能通过大多数的代理服务器,并且能够在NAT的环境中很好地工作。服务端具有向客 户端“推送”某些网络配置信息的功能,这些信息包括:IP地址、路由设置等。
OpenVPN提供了两种虚拟网络接口:通用Tun/Tap驱动,通过它们,可以建立三层IP隧道,或者虚拟二层以太网,后者可以传送任何类型的二层以太网络数据。传送的数据可通过LZO算法压缩。在选择协议时候,需要注意2个加密隧道之间的网络状况,如有高延迟或者丢包较多的情况下,请选择TCP协议作为底层协议,UDP协议由于存在无连接和重传机制,导致要隧道上层的协议进行重传,效率非常低下。
OpenVpn客户端配置链接:https://www.ikuai8.com/index.php?option=com_content&view=article&id=138:openvpn&catid=39&Itemid=241
二、如何使用
1.字段说明
【生成客户端配置】:
导出服务端的参数配置,包括CA证书等。
【显示日志】:
显示服务端日志信息,包括服务端启动时间,客户端拨号日志等。
【服务端口】:
openvpn服务进程使用的端口。IANA(Internet Assigned Numbers Authority)指定给OpenVPN的官方端口为1194。
【VPN网段】/【网段掩码】:
vpn所用地址池网段及所用IP地址范围
【认证方式】:分为账号认证和静态秘钥(tls-auth)、静态秘钥(tls-crypt)。静态秘钥认证方式在路由版本为3.5.3版本及以上支持使用。
静态秘钥使用教程:
静态秘钥(tls-auth):静态秘钥(tls-auth)
静态秘钥(tls-crypt):静态秘钥(tls-crypt)
【隧道协议】:
OpenVPN所有的通信都基于一个单一的IP端口,默认且推荐使用UDP协议通讯,同时TCP也被支持;
在选择协议时候,需要注意2个加密隧道之间的网络状况,如有高延迟或者丢包较多的情况下,请选择TCP协议作为底层协议
【隧道类型】:
OpenVPN提供了两种虚拟网络接口:通用Tun/Tap驱动,通过它们,可以建立三层IP隧道,或者虚拟二层以太网,后者可以传送任何类型的二层以太网络数据。
【加密算法】:
在传输前,对数据进行加密,可以保证在传输过程中,即使数据包遭截取,信息也无法被读。该特性在IPSec中为可选项,与IPSec策略的具体设置相关
【LZO压缩】:
传送的数据可通过LZO算法压缩;压缩节省带宽,但是会占用一定的CPU资源
【MTU】:
最大传输单元;建议填写大小为:链路MTU-100;默认1400。
【CA证书】:
用于签发服务器和客户端证书的证书;
【服务器证书】/【服务器私钥】:
本地证书的两部分,成对出现;
注意事项:
如果有想更改对应证书和密钥的,可以通过OPENVPNSSL生成;如果没有或不懂怎么生成的,使用默认的证书和密钥即可!
【推送路由】:
服务端告知客户端,访问哪些网段是需要走VPN拨号的线路;在3.7.16及以上版本支持对推送路由进行备注;
【附加配置】:
专业用户,如爱快的openvpn缺少部分配置,可由用户自主填写。
参考openvpn软件帮助,自定义原始OpenVPN配置项。
Open VPN IPv6使用教程:Open VPN IPv6
2.举例说明
网络结构如下:
需要实现客户端网络通过OPENVPN的方式拨号到服务端
同时实现客户端和服务端内网互访
相关步骤必须严格按照下面的步骤进行。
①服务端配置:
服务端需设置推送路由将本段的内网网段推送给客户端,客户端也需要接受推送路由即可实现客户端访问服务端内网
②创建VPN账号
在认证计费--认证账号管理--账号管理,里面添加VPN账号密码
添加账号时,设置固定IP为10.7.6.2
注意事项:
当爱快与爱快之间创建open vpn服务时,VPN的账号设置一定要是固定IP地址,并且设置的IP地址必须是默认IP地址池范围之内的IP,如果填写IP地址池范围之外的IP,会导致拨不上去号。
③静态路由设置
仅在服务端配置静态路由即可,实现服务端可通过VPN线路访问客户端内网
④客户端配置
设置完成,客户端和服务端内网可以实现正常互访。
注意事项:
客户端一定要开启服务器路由推送才可访问服务端推送的内网网段
【添加路由】:
告知客户端,哪些网段的地址需要走VPN线路。
注意事项:
客户端必须勾选允许服务端推送路由客户端才可以访问服务端的网段。
服务端拓扑类型选择NET30时,服务端无法访问客户端内网。
open VPN如何使用视频教程:Open VPN使用教程
三、知识扩展
原理
OpenVpn的技术核心是虚拟网卡,其次是SSL协议实现,由于SSL协议在其它的词条中介绍的比较清楚了,这里重点对虚拟网卡及其在OpenVpn的中的工作机理进行介绍:
虚拟网卡是使用网络底层编程技术实现的一个驱动软件,安装后在主机上多出现一个网卡,可以像其它网卡一样进行配置。服务程序可以在应用层打开虚拟网卡,如果应用软件(如IE)向虚拟网卡发送数据,则服务程序可以读取到该数据,如果服务程序写合适的数据到虚拟网卡,应用软件也可以接收得到。虚拟网卡在很多的操作系统下都有相应的实现,这也是OpenVpn能够跨平台一个很重要的理由。
在OpenVpn中,如果用户访问一个远程的虚拟地址(属于虚拟网卡配用的地址系列,区别于真实地址),则操作系统会通过路由机制将数据包(TUN模式)或数据帧(TAP模式)发送到虚拟网卡上,服务程序接收该数据并进行相应的处理后,通过SOCKET从外网上发送出去,远程服务程序通过SOCKET从外网上接收数据,并进行相应的处理后,发送给虚拟网卡,则应用软件可以接收到,完成了一个单向传输的过程,反之亦然。
加密
OpenVPN使用OpenSSL库加密数据与控制信息:它使用了OpenSSL的加密以及验证功能,意味着,它能够使用任何OpenSSL支持的算法。它提供了可选的数据包HMAC功能以提高连接的安全性。此外,OpenSSL的硬件加速也能提高它的性能。
验证
OpenVPN提供了多种身份验证方式,
用以确认参与连接双方的身份,包括:预享私钥,第三方证书以及用户名/密码组合。预享密钥最为简单,但同时它只能用于建立点对点的VPN;基于PKI的第三方证书提供了最完善的功能,但是需要额外的精力去维护一个PKI证书体系。[1] OpenVPN2.0后引入了用户名/口令组合的身份验证方式,它可以省略客户端证书,但是仍有一份服务器证书需要被用作加密。
网络
OpenVPN所有的通信都基于一个单一的IP端口,默认且推荐使用UDP协议通讯,同时TCP也被支持。OpenVPN连接能通过大多数的代理服务器,并且能够在NAT的环境中很好地工作。服务端具有向客户端“推送”某些网络配置信息的功能,这些信息包括:IP地址、路由设置等。OpenVPN提供了两种虚拟网络接口:通用Tun/Tap驱动,通过它们,可以建立三层IP隧道,或者虚拟二层以太网,后者可以传送任何类型的二层以太网络数据。传送的数据可通过LZO算法压缩。IANA(Internet Assigned Numbers Authority)指定给OpenVPN的官方端口为1194。OpenVPN 2.0以后版本每个进程可以同时管理数个并发的隧道。
OpenVPN使用通用网络协议(TCP与UDP)的特点使它成为IPsec等协议的理想替代,尤其是在ISP(Internet service provider)过滤某些特定VPN协议的情况下。
在选择协议时候,需要注意2个加密隧道之间的网络状况,如有高延迟或者丢包较多的情况下,请选择TCP协议作为底层协议,UDP协议由于存在无连接和重传机制,导致要隧道上层的协议进行重传,效率非常低下。
安全
OpenVPN与生俱来便具备了许多安全特性:它在用户空间运行,无须对内核及网络协议栈作修改;初始完毕后以chroot方式运行,放弃root权限;使用mlockall以防止敏感数据交换到磁盘。OpenVPN通过PKCS#11支持硬件加密标识,如智能卡。
对比
OpenSSH,能实现二/三层的基于隧道的VPN。stunnel,使用SSL向任何单一端口的TCP服务提供安全保护。
openvpn的这个拓扑类型选项,subnet和net30有什么区别呀?
解释:这个255.255.255.252子网掩码模式(叫做net30模式)就是为了使TUN模式兼容iOS、Windows等设备而使用的,我们在OpenVPN支持的所有模式中做了取舍 -- net30是兼容性最好的。
下面列一下各种模式的兼容情况:
1. net30 -- 即255.255.255.252子网掩码,兼容Linux(及爱快)、Windows、iOS、Android,缺点是无法以tun模式支持非Linux的固定IP;
2. p2p -- p2p接口类型,子网掩码是255.255.255.255,对固定IP的支持不限网段,但只兼容Linux;
3. subnet -- 直接使用用户配置的子网掩码,也就是楼主配置的255.255.255.0,兼容Linux、Windows、支持固定IP,其他系统均不兼容。
总结来说,由于OpenVPN是个非标准的VPN协议,在各种系统上的实现方法也不尽相同,导致无法以同一个服务器配置来支持所有的系统+所有的场景。我们能做到默认同一个服务器支持所有系统,但不保证所有的系统都能使用固定IP。
注意事项:
为了保证VPN的稳定,在3.5.5版本及以上建议带300个以内的VPN客户端,3.5.5版本以下建议带200个以内的VPN客户端。
四、常见问题
1、爱快OPENVPN不支持TLS验证,如对端有此验证,请取消。
2、VPN客户端和服务端内网无法互访排查方法
①当前路由表里面是否已经有打到对方网段的路由表,路由表内的网段是否有冲突
②使用ping测试,ping对端lan口网关是否可以通,如果可以,但是ping不通下面的设备,检查这个设备是否开启了防火墙、是否有设置了网关并可正常上网
③使用tracert功能看路径是否正确,在达到哪个网关的时候无法找寻到下一跳
3、OPENVPN连接后如服务端无法访问客户端需要严格按照一下顺序设置:
1、先在账号里面固定IP
2、在服务端设置静态路由
3、最后进行拨号
4、客户端数量超过官方推荐值如何设置:
可以在 OpenVPN服务端-附加配置选项填写自定义参数如:max-clients 100 (数字100为客户端的最大上限值)
注意:修改此参数后代表放弃对此功能的技术支持服务。