既然IPsec有隧道模式,为什么还有L2TP+IPsec这样的组合?

Ipsec有隧道模式,可以用ESP或者AH进行隧道传输,即使需求加密,ESP也可以提供,那么有几个问题想不明白: 1、为什么还有L2TP over I…
关注者
140
被浏览
178,584

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

L2TPLayer 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的用法。