曾几何时,OpenVPN的server模式蒙蔽了人们的双眼,被视为是一个巨猛的革新,于是一个OpenVPN服务器可以支持多个OpenVPN客户端了,server模式下的c2c模式更是加剧了我们向server模式的靠拢,以至于到了现在,很多人已经遗忘了OpenVPN的p2p模式,而只记得server模式了。于是问题来了
1.OpeVPN的单进程问题
如今硬件们都已经是SMP的了,可是OpenVPN还是单进程的。启动一个server模式的OpenVPN服务器,N多个OpenVPN客户端连接过来,一个CPU利用率已经100%了,然而其它CPU还空闲着,于是你开始抱怨OpenVPN的scalable不好,于是想出了运行多个OpenVPN实例,然而又要面对复杂的负载均衡问题,绑不绑CPU本身也是一个问题。
事实上,这不是OpenVPN的错,而是你用错了它,使用p2p模式就可以了。运行多个p2p模式的OpenVPN,等同于构建了多条VPN隧道,靠内核自身的进程调度机制来优化性能,而不是麻烦你自己。
2.OpenVPN的push功能
OpenVPN可以将路由等信息push到对端,这个功能看似很不错,然而一旦误用就会引来很大的麻烦。如果在一台物理机器上启用多个server模式的OpenVPN进程,某些是客户端,剩下的是服务器,推送的路由以及自己配置的路由如何被应用于系统将会很复杂,特别是在c2c开启的时候,越是复杂的策略将越使事情难办。
不要抱怨OpenVPN,实际上仍然是你用错了它,使用p2p模式就好了。运行多个p2p模式的OpenVPN,等同于构建了多条VPN隧道,每条隧道只有自己和唯一的对端,路由只在这二者上配置,只对二者负责,应用多个配置文件将会比公用一个配置文件更加使问题条理化。
3.OpenVPN奇怪的组网模式
OpenVPN分为三层模式而二层以太网模式,这使得组网复杂了,另外又有一个internal route的概念使得访问控制更加不对称且难以控制。这仍不是OpenVPN的错,可能是你自己把问题复杂化了。
事实上,有一条真理需要提一下:你的问题和解决问题的方案必须阻抗匹配。就是说复杂的解决方案解决的是复杂的问题,这样当你面对复杂问题的时候,你就不会觉得方案复杂了。
4.OpenVPN不能和IPSec的网络拓扑相兼容
这个就不多说了,毕竟IPSecVPN的组网模式是对等的,而server模式下的OpenVPN是不对等的。面对“好用”的c2c,人们总是要问:难道不能在两个客户端之间直接建立隧道吗?得到的回答往往是:这是OpenVPN的机制决定的。而实际上只要使用p2p模式,这个问题便可以迎刃而解。
p2p模式的OpenVPN
这又是一个被人遗忘的角落,起码是被我遗忘了。使用p2p模式的OpenVPN的结果就是“它看起来和IPSecVPN的配置方式一样”。只要配置一个本端和对端即可,如果能抛弃push这种高级特性的话,效果就更好了,毕竟VPN只需要告诉系统哪些流量需要进入隧道即可,OpenVPN可以使用配置静态路由简单的做到这一点,配置如下:
本端:
到对端网络的流量路由到tap/tun
对端:
到本端网络的流量路由到tap/tun十分简单,剩余的事情就是维护上述配置和OpenVPN进程之间的对应即可。最简单的方式就是将其写入到每个OpenVPN进程对应的单独的配置文件中。使用p2p模式的OpenVPN最显著的效果是它可以自动解决SMP的利用问题,比如你在一台机器上启动了10个OpenVPN进程(p2p模式下虽然也有服务器端和客户端之分,然而这种区分只在连接建立时有意义),那么让内核自己来在N个CPU上调度这10个进程吧-如果你信任内核调度器的话-榨取SMP性能还得靠内核调度器自身,而不是靠自己去做几于偏执的复杂开发与配置(比如CPU绑定,tap/tun的网卡bonding,多OpenVPN进程共享虚拟网卡之类的),虽然这种工作确实能证明自己是一个还算优秀的研发人员。
随着软硬件越来越复杂,功能越来越全,性能越来越高,能把工作塞给它们的就不要自己来。但是永远不要把复杂的策略塞给它们,如果真的需要这样,那就好好的设计一个协议来完成这些,千万不要凭空的实现...这也是Cisco的做法,Cisco的很多高级功能是配置出来的,而不是它自动生成的,然而Cisco确实也实现了很多做这种本应该由人来完成的协议。
只需要记住,在真正的人工智能还没有之前,做事的只有计算机,权衡如何做事的只有人,人不要把策略交给计算机,也不要帮计算机完成重复的底层机制,因此有时候抛弃OpenVPN的server模式以及push功能并不能说明你在倒退,相反它是一种理性的回归,一种返璞归真的理性回归。特别是路由这种东西,要么你自己配出来,要么靠成熟的路由协议来配置出来,我觉着这才是一款高鲁棒性产品的根本,花哨的东西统统下课。
分享到:
相关推荐
网络系统管理赛项软件包(服务模块软件包、普通PC软件包、无线地勘系统等)
防火墙三种模式(路由模式、混合模式、VPN模式)配置实例.pdf
与原版open-build-master相比,我做了稍稍修改,已经包含Open虚拟专网2.5源代码和依赖项源代码,需要VS2019、ActivePerl、WDK10,可以直接按照我写的教程进行编译,100%可编译。
一个基于DELPHI的远程屏幕传输(差异截图)
Book Description Angular 2 introduces an entirely new paradigm of applications. It wholly embraces all the newest concepts that are built into the next generation of browsers, and it cuts away all the...
根据本人运维经验,结合openVPN社区相关案例,针对TAP-Windows-adapter安装失败“an error occured installing the TAP device driver”错误提示,提出五种解决方案
安装OpenVPN 保护OpenVPN 在局域网中安装Orthanc ? 先决条件 Ansible> 2.5 Ansible> 2.9(用于SSH-sec角色) 在客户端计算机和服务器计算机之间已正确配置SSH身份验证。 安装 克隆项目并安装角色: git clone...
应用控制网关有SecPath ACG盒式设备和SecBlade ACG插卡两种产品形态,ACG可针对P2P/IM、网络游戏、炒股、非法网站访问等行为,进行精细化识别和控制,有效解决带宽滥用、访问非法网站感染病毒等问题;安全管理平台有...
交叉编译器3.4.5,下载解压,按照交叉编译器安装过程安装。
或者您可以尝试make all为了为Linux,Windows和MacOS构建P2P跑步MacOS用户应安装并使用以下行创建config.yaml文件: iptool: /sbin/ifconfig Windows用户应从OpenVPN套件安装驱动程序p2p由守护程序管理,该守护程序...
win10mi版+Linux CentOS-7+苹果系统驱动加满的无敌合集
Angular 2 Cookbook Angular 2 Cookbook Angular 2 Cookbook
ARM9平台上的嵌入式Linux系统移植研究
野蛮模式IPSec的典型组网和配置.pdf
信息安全-中间人攻击的技术构成,以及Kali Linux的双工具.
网上收集来的,别问干什么用,我什么都不知道,给OPENWRT的GUI界面添加什么功能,配置某些功能方便点而已
嵌入式Linux在ARM9(TQ)上的移植.pdf
Atmel-SmartConnect APK for android!
pfSense Zabbix模板 ... 经过pfSense 2.4.x,Zabbix 4.0,Zabbix 5.0的测试 ...发现以用户身份验证模式连接到OpenVPN服务器的OpenVPN客户端 监视客户端参数(发送/接收的字节,连接时间...) 模板pfSense活动:IPse
Over 100 practical recipes to learn PrimeFaces 5.x – the most popular JSF component library on the planet