1.4 VPN设计
Cisco VPN完全配置指南
当您对VPN实施权衡了需要的VPN组件后,您需要看看您的VPN设计的布局:什么设备需要VPN功能(服务器、路由器、防火墙、PC等)、需要什么类型的VPN功能,以及需要什么样的连接。这些信息将会极大的帮助您挑选一种合适的VPN实施类型,并且在做出最终选择之前,有助于您考虑设计方面必须考虑的任何问题。
下面的小节讨论了某些VPN设计,以及在您的网络中使用VPN时,必须要考虑的问题。具体地说,这些小节涵盖了下面的内容:
连接类型;
考虑;
冗余。
1.4.1 连接类型
从设计的角度来看,本小节将会讨论VPN使用的不同的基本连接类型。这些连接包括点对点、星型拓扑(hub and spoke)和全网状(fully meshed)。
一、点对点
有两种基本类型的VPN点对点的连接:
设备对设备;
网络对网络。
1.设备对设备连接
设备对设备VPN连接就是一种用户对用户的VPN类型,在这里只有两台设备参与到VPN中。这种连接类型通常用于在两台设备之间只有某种特定类型的流量需要保护的时候。关于设备到设备连接的例子包括将Cisco路由器上的配置文件备份到TFTP服务器上,从一台被管理的设备上发送SNMPv2的流量,例如一台Catalyst交换机,给一台SNMP管理服务器发送流量,或者从一种PIX安全设备上将系统日志流量发送给一台系统日志服务器。
关于设备对设备连接的一种担心就是它对VPN端点设备带来了极大的负荷。例如,想象您有一台系统日志服务器,它需要处理来自200台设备的日志信息。在这种情况下,系统日志服务器不得不终结200台VPN的设备对设备连接,这对它可能是一种不可承载的压力。如图1-8的上部分所示。
2.网络对网络连接
网络对网络VPN连接可以被认为是L2L VPN类型的连接。使用网络对网络连接,两个VPN网关可以在两个或者更多个网络之间提供流量保护。这种点对点连接类型与设备对设备连接类型相比,其好处是从不止一台设备来的流量可以被相同的VPN连接保护。而且,您可以选择一台适当的VPN网关设备来控制VPN流量的开销和处理负荷,这就减轻了端点客户机的压力。图1-8的中间部分显示了一个网络对网络连接的类型。
我将会再次审视上面谈到的一种担忧,即200台设备正在向一台中心日志服务器发送系统日志消息,这次不是在系统日志服务器上面终结VPN的连接,相反,您可以在系统日志服务器的前面放置一台VPN的网关设备,并且对这个VPN网关建立远程访问连接,由它负责处理来自远端设备的VPN流量。这将是一个混合的点对点的连接,图1-8的底部显示了这一过程(设备对网络)。
二、全网状
全网状的VPN网络将每台VPN设备或者网络都连接到其他的VPN设备或者网络上。图1-9的左半边显示了一个全网状设计的例子,将多个网络彼此互连。
这种设计的一个好处是,每一台设备或者网络都可以直接通过VPN发送流量到远端的设备,而无需通过一个中介的VPN连接。然而,这种方案的主要缺点就是扩展性。例如,在图1-9中,当您增加更多的站点时,您在每一个站点的设备上就需要增加更多的VPN连接。这将增加VPN设备上的处理负荷而且扩展性很差。
三、部分网状
一个部分网状的VPN设计解决的是全网状VPN设计的缺点。在部分网状的设计中,并不是每一台设备都需要和其他的VPN设备有一台VPN的连接。这种设计的一个例子就是中星型拓扑的设计,如图1-9的右边所示。这在公司网络中是一台非常普遍的设计。中心点通常位于总部,而分支点通常位于远程办公室。这种设计在当分支点需要和位于总部的资源通信时工作的非常好;然而,这种设计当一个分支点向另外一个分支点发送数据时,工作得不是很好。在这种情况下,流量必须被保护两次,而且必须经过额外的一跳,这增加了流量的延迟,并对中心设备增加了额外的负荷。您可以在两个经常需要彼此通信的分支之间增加一个点对点的VPN连接来轻易地解决这个问题。
1.4.2 VPN考虑
当设计一个VPN解决方案时,为给您的网络建立一个合适的解决方案有许多因素需要考虑,其中一些因素如下所示:
被保护的流量与非保护的流量;
碎片;
应用程序的类型;
流量保护;
地址转换和防火墙。
下面的小节将会讨论这些因素。
一、被保护的流量与非保护的流量
您需要考虑的其中因素之一就是在两台设备之间当前已经建立一个VPN连接的情况下,它们之间发送的流量是否需要被保护。需要考虑的事情有需要被保护的流量的数量,以及是否有必要保护这些信息(信息的安全敏感性)
例如,假设您的VPN设备支持VPN的处理能力为5 Mbit/s。然而,发送到您设备的VPN流量为6 Mbit/s。不幸的是,在您的VPN设备上将存在很大的性能问题。为了解决这个问题,您可以建立一个称为“分离隧道”的特性,它会发送一些被保护的流量,和一些明文的流量。
在上述例子仅1 Mbit/s的性能差异中(5 Mbit/s是处理极限,但是6 Mbit/s是接收的流量),您必须重新评估什么样的流量真正需要被保护。也许2 Mbit/s的流量是Web流量,而且您决定没有必要保护这种流量。您应当建立一个分离隧道的策略,对于VPN连接,它会保护除Web流量以外的所有的流量。因此,您的VPN设备只需要保护4 Mbit/s的流量,对于您的设备5 Mbit/s的VPN性能来说,这是可以管理的。
提示: 为了确定什么流量需要保护,什么流量不需要保护,您需要重新检查您公司的安全策略。对于远程访问的客户来说,我强烈建议使用一个客户端的软件防火墙来防止与未保护流量相关的攻击。
二、碎片
当我查看和VPN实施相关的性能问题时,我要看的第一件事情就是碎片问题。管理员通常都会忘记将VPN添加到数据包中的开销这一因素,并且由于这种开销而导致了碎片的问题。
例如,假设您有一个数据库应用程序通过一个VPN连接发送数据。参与的设备使用的MTU的大小为1 500字节。通常来说,发送数据时最多使用这么大。在这之上,VPN添加了另外的80字节开销,这通常会导致必要的MTU大小将达到1 580字节。然而,VPN设备在它所连接的以太网段上支持的最大的大小为1 500字节。在这种情况下,VPN设备不得不将原来的数据包切割成两个数据包。
许多人可能认为这个过程将会给VPN设备引入一些开销,但不是很大。然而,在许多情况下,它会扼杀设备的性能,因为VPN设备现在不得不处理两倍的数据包。
因此,当了解一个您将使用的特定的VPN设计和VPN类型时,您需要考虑碎片的问题。为了防止碎片,您需要检查VPN的实施来查看它给数据包增加的开销量,并且要了解客户端设备原来正在使用的MTU的大小。您要么需要使用一个动态的MTU发现过程,例如路径MTU发现(PMTUD),它会动态的调整MTU的大小到一个适当的值来防止碎片,要么手动调整MTU的大小。例如,如果客户端的MTU的大小是1 500字节,而VPN设备的开销是80字节,您需要确保始发数据的客户端设备将它们的MTU大小减小为1 420字节。我会在第19章中更深入的讨论对碎片问题的故障诊断与排除。
令人吃惊的碎片
我曾经受雇于一家公司帮助他们解决当前的VPN实施。他们告诉我,当他们将VPN实施就位以后,其性能降低到一个不可接受的级别。当他们删除VPN的配置后,问题就消失了。他们认为安装在3620路由器上的VPN网络模块(NM)对于保护流量的处理能力削弱了3620路由器的能力。我了解到他们仅想保护2 Mbit/s的流量,而VPN-NM应当能很轻松的处理这个数量的流量。我的直接反应就是问题并不是出现在VPN保护功能上,而是碎片的问题。很明显,站点的客户端正在使用的MTU大小为1 500字节,而许多通过VPN传输的数据是相当大的,当您给这些数据添加VPN的开销时,大约60%的数据包被碎片分割了,这意味着3620路由器不仅要执行碎片和重组装,它还不得不去保护额外的碎片数据包的流量。当检查路由器的CPU的周期时,完全确定这一问题就是和碎片有关。我让管理员手动调整了客户端的MTU大小到一个小一点的值,因此清除了任何碎片的问题。这件事让管理员非常高兴,因为他们曾担心怎么向老板解释他们购买了一台性能差的路由器,还得花钱买一台性能更优的路由器。
三、应用程序的类型
我在前面已提到过“被保护的流量与非保护的流量”,基于您正在传输的流量数量,您可能不想保护某些类型的流量。像我前面提到的,您需要检查您的安全策略来决定您将要保护什么类型的流量。
某些应用程序类型通常并不需要保护,例如HTTPS和SSH。它们不需要保护,是因为保护功能已经内置在协议里面了。因此,保护这种流量只是再次增加了对VPN设备的额外处理负担。因为这一点,您可能想防止这种流量和其他被保护的流量穿过您的VPN。
另外一件需要考虑的事情就是您所选择的VPN实施是否能够真正地保护您需要保护的流量。例如,SSL VPN保护Web流量(HTTP)非常好,但是并没有设计用来保护其他类型的流量,例如SMTP、TFTP、FTP、Telnet等。SSL会在1.5节中讨论。当决定什么样的流量需要保护之后,您需要选择一种VPN实施来正确的保护流量。
四、流量保护
当您已经决定什么样的流量需要被保护之后,您需要决定它怎样被保护。该信息应当在您公司的安全策略中已定义了。例如,如果您公司的策略阐述了您应当对通过公网的敏感信息实施加密和数据包完整性检查,您需要决定您的VPN应当使用的加密算法和散列函数。在某些情况下,您实施的方案越安全,就越会给您的VPN设备增加更多的处理开销。与因VPN特性提高的安全性相比,必须更关注该特性增加的处理开销和处理延迟——总会有一个折衷。例如,对于延迟敏感的流量例如语音和视频,您可能需要花费一些时间来挑选和测试不同的VPN保护方法,以确保对您的多媒体流量不会造成连接性问题。对于保护类型的更多信息,参看第2章。
五、地址转换和防火墙
某些VPN实施在试图将信息通过地址转换或者防火墙设备传输时会出现问题。下面将讨论这两种情况,从地址转换开始。
1.地址转换问题
使用地址转换,地址转换设备可以将一个IP地址转换成另外一个地址,而且很可能会将一个端口号转换成另外一个端口号。将一个IP地址映射到另外一个IP地址通常被称为网络地址转换(NAT);将多个IP地址映射到一个IP地址,并且用不同的源端口号来区分它们通常被称为端口地址转换(PAT)或者地址超载。
我将使用IPSec来解释这个问题,即如果您的VPN流量必须穿过一台地址转换设备时可能遇到的问题。IPSec有两种协议可以用来将数据通过VPN设备进行传输:验证头(AH)和封装安全负载或者协议(ESP)。不要担心这些协议的实际细节,因为我会在第3章中进行讨论。这里,我只讨论这些协议和地址转换有关的部分。
AH只提供了数据包的完整性检查—它并不执行加密。使用数据包完整性检查,会基于IP数据包里几乎所有的字段,包括源和目标IP地址字段来产生一个散列值。想象该数据包通过一个有地址转换设备的网络,当地址转换设备对该数据包执行NAT或者PAT时,它会破坏含在这个包里的数据包完整性的签名。使用NAT,地址转换设备改变了IP报头中的地址,使用PAT,它改变了在TCP或者UDP段头里的端口号。因此,当任何类型的地址转换对AH的数据包执行转换时,AH都被破坏了。
ESP同时提供了加密和数据包完整性检查;然而,数据包完整性检查的计算方式和AH是不一样的。当对数据包完整性检查的值产生数字签名时,外部的IP报头是不参与计算的,因此该数据包可以被地址转换设备执行NAT的处理。但是,ESP和AH有一个相同的问题,这两种协议都是第3层的协议。对于执行PAT的地址转换设备来说,它需要将信息封装在TCP或者UDP的段头里,地址转换设备不能处理AH或者ESP的数据包(它们没有端口号!);因此,PAT转换对这两种协议也存在问题。
注意: 某些地址转换设备现在也有能力来对没有端口号的协议执行PAT的转换功能,例如ICMP和ESP。然而,这是厂商特定的功能,并不总是保证能够有效。
某些VPN实施通过将VPN的信息封装在一个TCP或者UDP的段里来处理这种地址转换问题。对于AH,还是依旧不能工作,这是因为AH数据包完整性检查值将在它的计算中包含这个信息;然而,对于ESP来说,这将解决NAT和PAT的地址转换问题。就像您在IPSec中看到的,Cisco支持这个过程的3种方法,虽然并不是所有的Cisco设备都支持这3种机制。这3种方法如下:
NAT穿越(NAT-T)封装在UDP段里的ESP IPSec数据包;这是在RFC 3947/3948里定义的一个开放的标准。
UDP上的IPSec将ESP IPSec的数据包封装在UDP的段里,这是Cisco私有的方法。
TCP上的IPSec将ESP IPSec的数据包封装在TCP的段里,这是Cisco私有的方法。
我将在第3章深入探讨这3种解决方案。记住VPN实施对于地址转换可能会有问题。
2.防火墙问题
VPN在穿越有状态过滤防火墙的时候也可能会出现问题。一个有状态防火墙会跟踪连接的状态,默认情况下,只允许外出连接的返回流量进入。有状态功能是基于跟踪设备之间的会话建立的。在许多情况下,这只包括TCP和UDP的会话。这是因为可以非常容易的通过检查源和目标IP地址,源和目标端口号来跟踪TCP和UDP的会话—如果这些值改变了,该变化就代表一个不同的连接。
然而,并不是所有类型的流量都使用一种传输层的协议。我还是用IPSec作为一个例子。当用IPSec传输数据时,使用AH或者ESP。就像TCP和UDP一样,这两种协议都是第3层协议,但是没有上层的信息,例如端口号。然而,AH和ESP,在它们的报头中确实有一个特殊的字段称为安全参数索引(SPI)。这个值用于独立的标识在一台设备上的VPN连接。一台防火墙,如果被厂商适当的作了编码,当实施一个有状态防火墙的功能时,是可以利用这个值来区分VPN连接的。
然而,实际跟踪不同的IPSec连接比我所描述的要困难得多。对IPSec来说,这是非常困难的,因为IPSec对数据并不使用双向连接;相反,它使用的是两个单向的连接:
一个从本地设备到远端设备;
一个从远端设备到本地设备。
记住一个有状态防火墙允许外出连接以及它们的返回流量,但是通常拒绝从外面始发的连接,例如外边访问内部设备的连接。防火墙厂商必须对特殊类型的检查进行编码来处理这种情况。因此,并不是每一个防火墙厂商都能够处理您想要使用的VPN实施方案。您需要仔细的审视您想要使用的VPN实施方案,并且决定对于VPN来说,是否地址转换或者防火墙设备会对它产生问题。
注意: 如果想了解有状态防火墙的更多信息,可以参阅我编写的图书Cisco Router Firewall Security(Cisco路由器防火墙安全性),由Cisco Press出版,或者是Cisco PIX Firewall(Cisco PIX防火墙),由McGraw-Hill出版。
1.4.3 冗余
另外VPN设计的一个重要的组成部分就是冗余。例如,如果您观察图1-9中的星型拓扑网络,您会注意到这个例子缺乏冗余性。例如,如果中心路由器失效了,那么每一个站点都将丢失与其他站点的连接性。因此,您需要认真地考虑您的网络,如果需要的话,实施一个有效的冗余的设计。
为了解决星型拓扑的冗余问题,您可能会使用类似图1-10所示的一些做法。在这个设计中,中心网络(站点A)有两台VPN路由器来做冗余,每一台分支路由器都和站点A有两个VPN连接—每一台中心路由器各一条连接。当然,这在每一台分支路由器上需要进行一
些特殊的配置。例如,您可能不想让所有的分支路由器都使用同一台中心路由器来做主要的VPN连接;否则,会导致主VPN路由器超负荷工作。或者您想从分支到中心,两条VPN连接都同时使用,这就需要您在中心和分支路由器上能正确的配置路由选择来执行负载均衡。
在此之上,您甚至可能需要在分支路由器上增加额外的冗余,需要双路由器。同样的,这会增加您设计的复杂性。需要认真地规划以确保您的设计功能和期望的是一样的。