之前很多网友说按照我写的方法连不上,确实我当时没当回事,大概是运气好吧,我这用的机器全都是符合条件的,所以我这配置都是一次成功……
最近不是折腾出售VPN呢,已经搞了两三周了,算是把PPTP和L2TP over IPSec(本文中简称L2TP)研究的比较多了,目前我这实际部署的系统包括Windows Server 2003 / 2008 R2 / 2016以及Linux的 uBuntu 16.04 LTS / Debian 8,写一下经验和备注吧。
成功架设的前提条件:
1,Linux(KVM)的L2TP,Linux必须将公网IP配置在自身网卡上,可以配置静态,也可以由DHCP分配,并不影响什么
2,Linux(OpenVZ)的L2TP还需要宿主机开通好几个内核模块,而且成功率很低,我暂时也没成功过,宿主机不支持,我没招
3,Linux(KVM/OpenVZ)的PPTP只需要在控制面板开通tun和tap(大概是这俩名,也可能我记错)就可以成功,否则可以找客服捣鼓一下,一般都给帮忙的
4,Linux(KVM/OpenVZ)和Windows的PPTP可以自身私有IP,由网关进行公网IP映射
5,Windows的L2tp是否必须由自身配置静态IP,我没有测试,可能和Linux一样也是必须条件,估计如此
6,特别补充一条经验,我今天遇到个特奇葩的情况,有个机器是Windows Server 2003系统,正常来说,Intel的网卡比Reltek的桌面网卡多了一个tcp校验分载(这也是服务器网卡和服务器CPU比桌面产品多出来的功能之一,所以有人说服务器CPU和桌面的完全一样,无非是体质好,这纯属门外汉的说辞),所以我把网卡改为Intel Pro 1000了,然后那个机器我反复配置了五六次,整了几个小时愣是没办法连通L2TP,我操,我直接放弃了。后来把别的事情搞完了再回头慢慢折腾这个,又花了几个小时才证实原来是网卡的问题,看来虚拟的网卡还是低端的好……
如果你需要架设的VPN类型与上述相同,但是你的虚拟机运行环境与上述情况不同,那么你大概不需要再找原因了,也不需要求助别人,因为根本行不通滴,老老实实来我这买个吧,哈哈哈哈哈。
这段时间我得出的结论:
综合上述几条经验及条件,如果要建立VPN服务器并且达到成功率较高,则在虚拟机运行环境方面必须符合:
PPTP:这个其实没什么限制,有独立公网IP即可,有没有绑定到自身都可以,但是OpenVZ的需要宿主机支持;而KVM和XEN这种因为是全虚拟,所以不存在这种问题
L2TP:KVM+公网IP+自身绑定,这是必须条件,不具备这个条件的就不用试了,行不通的。
然后呢,按照这些条件来讲,需要L2TP的话,所有的云服务器都是不行滴。
个人建议:
1,要在Linux上架设L2TP形式的VPN,如果你没有足够的排错和调试能力,我建议你放弃这条路,L2TP实际上是两次封装,所以遇到问题是很难定位故障点的,我在这 tail -F /var/log/syslog 盯着日志都感觉没多大用,建立一次L2TP连接需要交互很多次,日志里面涉及到网络栈、NAT映射、认证、数据加密等等等等内容,那日志看的我头晕眼花,还不如不看,最单纯的排错思路反而比看日志来得快。
2,之前我的文章里有不严谨的地方,实际上PPTP也是强加密类型的,不过存在一个例外情况:如果Windows自身作为认证服务器(NPS)的话,会强行要求加密连接,否则直接踢掉客户端;但是如果像我这样用了Radius进行远程认证的话,则与Linux不同,Linux的接入服务器(PPTPD)可以强制加密,否则踢,而Windows没有这个设置,这时候就需要Radius服务器来干这个活,而Radius服务器的这个设置是“一种功能”,而启用这个功能需要对照rfc文档去反复调试,真tmd麻烦。
那么,也就是说在默认设置下,用Windows作为接入服务器而且用的是远程认证,则客户端是可以人为拒绝加密的,那么结果就是:实际上这样的连接是明文的。处理这个问题花了我4天时间,操!!!
加密这个事我还是有资格说几句的,我一位老师是国际密码学No.1,当年的RSA算法就是他只用了30秒时间,口述算法就破了,不过这个事应该没几个人知道,他人也过世了,唉……总之呢,50位的加密和500位的加密,对普通人、企业、大型企业来说,其实都是一回事,有那功夫破解还不如直接把你绑了省事。
3,如果自己用,那最好是PPTP,兼容性最高,几乎所有能买到的VPS、云主机什么的全都支持,几乎所有桌面和移动设备全都支持,而且是原生支持,连软件/app都不用装。说到这要批ios了,他大概是第一个主动放弃PPTP支持的厂商了,sb一个,真把自己当回事了,哈哈。google引导大家从明文传输转向https传输,这个属于本质区别,apple这是从一种加密到另一种加密,2b一个,纯属刷存在感的。
4,网上众说纷纭的gfw封闭或者干扰vpn连接的这个事情,至少我自己这些年没遇到,本身vpn建立连接就很麻烦,中间丢包了多连几次或者失败很正常的,反正是没有以讹传讹的那么离谱。不过有http劫持是真的,我遇到不少次。
5,尽量用Windows 架设VPN服务器,原因很简单,首先他可以压缩数据流,这意味着传输速度更快且节省流量;然后嘛,配置真的好简单……
6,尽最大可能不要用Windows 2003作为VPN服务器,高于2003的系统虽然会被警告,但还是很方便的可以在开通VPN的同时开启防火墙,而2003做不到,VPN和防火墙直接冲突,只能二选一,再加上微软已经放弃这系统了,所以用2003开VPN还要在公网上裸奔,这个有点玄乎。
首先十分感谢作者的慷慨分享技术指导和心得。然后,本文中说的L2TP理论上在所有虚拟服务器上都行不通,这个跟我的操作结果相反。我严格无脑按照作者的《Windows Server 2003/2008/2008 R2配置VPN服务器的方法》和《Windows Server 2003/2008/2008 R2配置L2TP+PPTP VPN服务器的方法》两篇文章,在vultr的乞丐版VPS($2.5)上配置成功了L2TP,反而是一开始的PPTP似乎不能连接。我手机端和PC端都可以用L2TP方式连上VPN。反馈此事希望对作者有参考价值。如果还能得到作者的回复乃至能和作者取得联系,那将是本人的荣幸。
谢谢。但我不是这个意思,vultr的公网IP是绑在虚拟机自身网卡的,这样的形式呢,和物理服务器是没有区别的,也就是说所有类型的vpn都可以正常运行。
我说不行的是阿里云那种,他的虚拟机网卡只有一个私有IP,而公网IP是通过他的网关设备映射的,这种就不能运行l2tp。
至于你说pptp的问题,这个并非技术层面问题,你长时间重复连接试一下,连续拨号几十次是肯定能连上的,运气好的话三五次也就连上了,运气不好的时候次日应该至少能连上一次,我统计的大概是这个情况。这种属于“被墙”或者被干扰状态,并非不行,而是太难用。