既然IPsec有隧道模式,为什么还有L2TP+IPsec这样的组合?
11 个回答
这个问题讨论的无论是IPsec,还是L2TP+IPsec 都是远程访问模式,这是前提条件。
什么是远程访问模式?
公司销售整天在外地出差,在客户那里需要一份数据,数据只有公司的服务器上有,服务器只接受内网的用户访问,销售可以远程访问公司服务器吗?
可以的!销售可以依赖一款IPsec VPN 软件来连接公司的VPN服务器,进而访问公司内部任何服务器。无论销售身在何处,都可以访问公司内网的服务器资源,仿佛置身于公司内网一样。由于销售是在遥远地方访问公司内网,故美其名曰:远程访问!
问题来了,内网服务器只接受内网用户访问自己,用什么条件判断是内网用户?
使用IP地址啊,通常公司给内网用户分配10.0.0.0/8的IP地址,如果IPsec VPN用户远程可以访问,第一个条件就是获得公司内网的IP。用户在获得IP时,需要先验证用户的身份,这是标准流程。
在公司内网做这一切非常简单,先用802.1x验证用户,域控制器验证成功之后,用户就可以通过DHCP动态获得IP地址,然后用户就可以上网了。
对于远程用户,如何先验证用户身份,再给用户分配内网的IP?
想必很多同学已经想到了这个协议,它就是PPP协议,可以完成这两个功能。
下一个问题,远程用户与公司服务器之间有Internet隔离,如何将用户的PPP Request消息运输到公司服务器,然后再把服务器PPP Response消息运输给远程用户?
这个很难吗?
一点也不难,用户有自己公网IP,服务器同样有自己的公网IP,用户电脑既然知道服务器的公网IP了,那就使用IP协议来传输吧!
IP/PPP
可以吗?当然可以,但是考虑远程用户电脑通常位于NAT设备后,而IP协议不便于穿越NAT设备,所以一般使用这样运输组合:
IP/UDP/L2TP/PPP
L2TP使用 UDP 1701端口,UDP协议是穿越NAT的利器。
L2TP
L2TP是 Layer 2 Tunnel Protocol的缩写,Layer 2这里指的是PPP协议,通俗地说,这个L2TP为了运输二层协议PPP而存在的!
问题来了,L2TP本身没有加密机制,如果不加密传输,那用户的数据在互联网上就是裸奔,这肯定无法接受。
很自然就会想到IPsec,因为IPsec可以加密,IPsec使用ESP协议来加密,ESP协议位于什么地方呢?
是 IP/ESP/UDP(1701)/L2TP/PPP 还是IP/UDP(4500)/ESP/UDP(1701)/L2TP/PPP ?
肯定是后者!
前者将UDP协议加密隐藏了起来,而后者将UDP明文暴露出来,可以轻松穿越NAT设备。
作为ESP运输的货物,是加密传输的,这里只是为了便于阐述协议封装,真实的封装格式则为:
IP/UDP/ESP/ESP Payload
看出来了吗? 明文的UDP/L2TP/PPP加密之后变为 ESP的货物了,即ESP Payload。
以上的讨论解决了PPP协议在远程用户与公司服务器之间来回穿梭的问题,而且安全得到保证。
接下来就是PPP协议的工作流程,关于这个作者前几天刚写过一个回答,有兴趣的读者前去阅读,这里不再阐述了。
当PPP完成了握手流程,接下来就是传输用户的IP报文了,逻辑很简单,如下所示:
IP/UDP(4500)/ESP/UDP(1701)/L2TP/PPP/IP/TCP/HTTP
想必很多同学可以看懂这辆小火车(协议封装)了吧?
如果一上来就写这辆小火车,估计很多同学都会很迷惑不解。。。
这辆小火车,真正运输时的样子是:
IP/UDP/ESP/ESP Payload
啰嗦了那么多,好像还没有回答读者的问题。其实读者的问题已经回答了80%,接下来回答剩余的20%。
第一个问题:为何有了IPsec VPN(Remote Access),还需要L2TP + IPsec ?
那是因为前者使用 xauth认证用户, 使用mode config分配用户IP,这些东西并不完全标准化。没有标准化,不同厂商之间的互联就容易出现问题。
为了克服这种兼容性问题,使用业界标准的PPP协议,兼容性问题迎刃而解。
第二个问题,是传输模式(Transport Mode) 而不是隧道模式(Tunnel Mode),这可以通过封装格式看得出。
更多内容,请参阅公众号同名文章:
L2TP协议,你可以认为是一种PPP OVER UDP形式的隧道,外层用的UDP,里面的载荷是PPP。PPP是一种链路层协议,这种协议最大的优势是可以支持用户名+密码方式的链路层认证。因此,如果希望接入VPN服务器的时候,可以针对不同的用户进行权限验证等需求,IPSEC是很难支持的。因此就出现了L2TP OVER IPSEC的用法。IPSEC一般用来在两个网络之间打隧道(比如公司的两个分支机构),L2TP用在出差员工接入公司的场景。
PPP主要就是用来做接入用户认证的,例如PPPOE就是PPP OVER ETH,用在用户的宽带接入场景。L2TP就是PPP OVER UDP,因此使用在用户接入VPN的场景。
------------------------------------------补充一点说明----------------------------------
1、PPP和eth都是链路层协议,我认为两者最核心的区别:PPP是为了点对点信道开发的,ETH是为了广播信道开发的。因此,PPP关心用户级别的验证、IP地址分配(PPP无需DHCP协议即可给根据用户名给对端分配IP、DNS)等,而ETH更需要关心冲突和寻址。
2、IKE本身是用来协商密钥的(协商DES、3DES这种块加密用的对称密钥),很明显如果密钥被窃取了,加密就没有安全性可言了,而IPSEC是用来对报文进行加密的,两者其实没有必然联系的。实际上IKE、IPSEC都是独立开发的协议,从协议栈的位置来看也是没有可比性的。只是IKE和IPSEC结合起来用的太普及了,IKE/IPSEC几乎就是一体的协议了。
3、IKE既然是用来协商密钥的,一定要支持身份认证的,当然了IKE的身份认证也很复杂,就不展开了。因此采用IKE的身份认证手段+IPSEC也是可以支持客户接入VPN场景的。
4、L2TP、IPSEC、IKE,这三个是完全独立的协议,每个协议都有其弱点和优点,以及不同的应用场景。在一些复杂的组网场景里面,采用不同的协议组合可以更好的实现一些场景,而无需修改已有的协议。因此出现了L2TP + IPSEC +IKE的用法。