CCNP安全/CCSP技术交流QQ群:38793366简述当不同的远程网络通过Internet连接时,比如上海和北京的两个分公司通过Internet连接时,网络之间的互访将会出现一些局限性,如下拓朴所示:在上图中,由于上海和北京的两个分公司内部网络分别使用了私有IP网段10.1.1.0和192.168.1.0,而私有IP网段是不能传递到Internet上进行路由的,所以两个分公司无法直接通过私网地址10.1.1.0和192.168.1.0互访,如R2无法直接通过访问私网地址192.168.1.4来访问R4。在正常情况下,上图中两个分公司要互访,可以在连接Internet的边界路由器上配置NAT来将私网地址转换为公网地址,从而实现两个私有网络的互访。但是在某些特殊需求下,两个分公司需要直接通过对方私有地址来访问对方网络,而不希望通过NAT映射后的地址来访问,比如银行的业务系统,某银行在全国都有分行,而所有的分行都需要访问总行的业务主机系统,但这些业务主机地址并不希望被NAT转换成公网地址,因为银行的主机不可能愿意暴露在公网之中,所以分行都需要直接通过私网地址访问总行业务主机;在此类需求的网络环境中,我们就必须要解决跨越Internet的网络与网络之间直接通过私有地址互访的问题。请再看如下拓朴的网络环境:CCNP安全/CCSP技术交流QQ群:38793366在上图的网络环境中,上海与北京两个分公司网络通过路由器直接互连,虽然两个公司的网络都是私有网段,但是两个网络是直连的,比如上海分公司的数据从本地路由器发出后,数据包直接就丢到了北京分公司的路由器,中间并没有经过任何第三方网络和设备,所以两个分公司直接通过对方私有地址互访没有任何问题。由上图环境可知,只要两个网络直接互连而不经过任何第三方网络,那么互连的网络之间可以通过真实地址互访,而无论其真实地址是公网还是私网。例如上海与北京这样的远距离网络要直连从而实现直接通过私有地址互访,要在公司之间自行铺设网络电缆或光纤是完全不可能的,可以选择的替代方法就是向ISP申请租用线路,这样的租用线路称为专线,专线是ISP直接将两个公司连接起来的线路,完全是公司与公司的路由器直连,用户不会感觉到Internet的存在,所以通过租用ISP专线连接的网络之间可以直接通过对方私有地址进行互访。至于ISP的专线是如何实现的,您不必担忧,通常是使用二层技术实现的,但是专线的租用价格是相当昂贵的,有时是根据距离和带宽收费的,所以在某些时候,在公司之间通过租用ISP专线连接的成本可能无法承受,因此,人们尝试着使用网络技术让跨越Internet的网络模拟出专线连接的效果,这种技术,就是隧道技术(Tunnel),也是当前很常见的VPN(VirtualPrivateNetwork)技术,本文将全力解述VPN技术,需要强烈说明,如果不能实现隧道功能的VPN,不能称为VPN。返回目录隧道技术(Tunnel)由于在某些环境下,通过Internet连接的远程网络之间,双方需要直接使用对方私有IP地址来互访,而私有IP网段是不能传递到Internet上进行路由的,在数据包封装为私有IP发到Internet之后,由于Internet的路由器没有私有IP网段,所以最终数据包将全部被丢弃而不能到达真正目的地。如下图:上图中,上海分公司要访问北京分公司的R4,如果通过将数据包目的IP封装为192.168.1.4,该数据包到达Internet后是会被丢弃的,因为Internet没有192.168.1.0的路由,所以数据包也就不可能到达北京分公司的路由器;从图中我们不难发现,除非数据包的目的IP为200.1.1.1,才能到达北京分公司的路由器,否则别无它法,所以上海公司发出去的数据包的目标IP只有封装为200.1.1.1才能到达北京分公司的路由器R3,既然如此,我们就思考着想办法将数据包原来的私有IP地址先隐藏起来,在外部封装上公网IP,等数据包通过公网IP被路由到该IP的路由器后,再由该路由器剥除数据包外层的公网IP,从而发现数据包的私有IP后,再通过私有IP将数据包发到真正的目的地。可以肯定,完成数据包封装与解封装的路由器必须既能与Internet直接通信,也能与私有网络通信。在上图中,上海分公司的R2要想直接通过私有IP地址192.168.1.4与北京分公司的R4通信,在数据包的目标IP封装为192.168.1.4发到路由器R1之后,R1就必须将整个数据包当成数据,然后在该数据包的外层再次将北京分公司路由器R3的公网IP地址200.1.1.1写上,然后发到Internet,Internet根据数据包的公网IP地址200.1.1.1将数据包路由到R3,然后R3将数据包的公网IP剥除后,看见私有IP地址192.168.1.4,然后再根据该地址将数据包发到R4,最终实现了上海分公司通过私有IP地址192.168.1.4访问北京分公司网络的功能。CCNP安全/CCSP技术交流QQ群:38793366上个例子中,通过在目标IP为私有IP的数据包外面封装公网IP,从而实现远程网络之间使用私有IP通信的技术,称为隧道技术,由此可见,在隧道中传递的数据包至少包含着两个IP包头(两个IP地址),最外面的IP地址肯定是公网IP,以用作在Internet中路由该数据包,里面的IP应该是私有IP,就是目标主机的真实IP。通过隧道连接的两个远程网络就如同直连,隧道达到的效果,就是网络直连的效果。隧道就像一辆汽车,原本为私有IP的数据包就像是乘客,路途中只看汽车不看乘客,只要汽车能去哪个地方,汽车里的乘客就可以被送到哪个地方,在行驶过程中,车内的乘客不受干扰。被隧道再次封装公网IP的数据包协议称为乘客协议(Passengerprotocol),不是所有类型协议的数据包能被隧道封装,所以对于隧道来说,乘客协议(Passengerprotocol)是有范围限制的,但本文只谈IP协议。隧道中传输的数据包格式如下图:就隧道技术有多种实现方式,也就存在多种隧道协议,隧道可以实现远程网络之间通过私有IP地址互访,隧道技术,就是VPN技术,要实现VPN,就是实现隧道,不能实现隧道,就不叫VPN。下文将全力解述最有用的隧道技术与VPN技术。隧道协议目前共有:GRE(GenericRoutingEncapsulation)IPSecurity(IPsec)SecureSocketsLayer/TransportLayerSecurity(SSL/TLS)VPN(WebVPN)Point-to-PointTunnelingProtocol(PPTP)LayerTwoTunnelingProtocol(L2TP)返回目录GRE(GenericRoutingEncapsulation)概述GRE是一种最传统的隧道协议,其根本功能就是要实现隧道功能,通过隧道连接的两个远程网络就如同直连,GRE在两个远程网络之间模拟出直连链路,从而使网络间达到直连的效果,为此,GRE需要完成多次封装,总共有3次,换句话说,就是在GRE隧道中传输的数据包都有3个包头,因为我们只谈IP协议,所以GRE中的IP数据包是一层套一层,总共有3个IP地址。GRE在实现隧道时,需要创建虚拟直连链路,GRE实现的虚拟直连链路可以认为是隧道,隧道是模拟链路,所以隧道两端也有IP地址,但隧道需要在公网中找到起点和终点,所以隧道的源和终点分别都以公网IP地址结尾,该链路是通过GRE协议来完成的,隧道传递数据包的过程分为3步:CCNP安全/CCSP技术交流QQ群:387933661.接收原始IP数据包当作乘客协议,原始IP数据包包头的IP地址为私有IP地址。2.将原始IP数据包封装进GRE协议,GRE协议称为封装协议(EncapsulationProtocol),封装的包头IP地址为虚拟直连链路两端的IP地址。3.将整个GRE数据包当作数据,在外层封装公网IP包头,也就是隧道的起源和终点,从而路由到隧道终点。GRE隧道中传输的数据包格式如下:注:★其中公网IP包头部分也称为传输协议(TransportProtocol)★GRE会在原始IP数据包之外,额外多封装24字节或28字节,具体视GRE模式而定。以下图为例,解释GRE传输数据过程:CCNP安全/CCSP技术交流QQ群:38793366GRE要在远程路由器之间创建虚拟直连链路,也就是隧道(Tunnel),如果没有该隧道,GRE不能完成隧道功能,隧道是GRE最基本的功能,也是GRE所有功能;上图环境中,当上海分公司R2将数据包IP地址封装为192.168.1.4发往北京分公司的R4时,GRE操作过程如下:1.假设R1与R3的GRE虚拟直连链路(隧道)已经建立,隧道链路两端的地址分别为1.1.1.1和2.2.2.2,隧道两端的起源和终点分别为100.1.1.1和200.1.1.1。2.R1收到目标IP为192.168.1.4的数据包后,将原始数据包当作乘客数据包封装进GRE协议中,并且添加GRE包头,包头中源IP为隧道本端地址1.1.1.1,包头中目标IP为隧道对端地址1.1.1.2,从而完成GRE数据包的封装。3.在封装了GRE隧道地址的数据包外面封装GRE隧道起源IP地址,该IP地址为公网地址,即源IP为100.1.1.1,目标IP为隧道终点200.1.1.1,最后将数据包发出去。封装后的数据包如下:数据包被发到Internet之后,所有路由器只根据数据包最外面的公网IP进行转发,也就是只根据公网目标IP地址200.1.1.1来转发,直到数据包到达公网IP的真正目的地后,即到达R3(IP:200.1.1.1)之后,公网IP包头才会被剥开,当R3剥开数据包的公网IP包头后,发现GRE包头,发现目标IP为1.1.1.2,从而得知自己就是GRE隧道的终点,所以继续将GRE包头剥开,最后发现目标IP地址为192.168.1.4,然后将数据包发往192.168.1.4(路由器R4)。通过以上GRE过程,上海分公司R2直接通过私有IP地址192.168.1.4,最终成功与北京分公司R4通信。返回目录配置GRE在远程路由器之间配置GRE,总共分为三步:1.创建虚拟链路(隧道)接口,号码任意,两端可不相同。2.配置虚拟链路(隧道)接口地址,该地址是在GRE包头中被封装的地址。3.定义虚拟链路(隧道)的源和目的,因为数据包最终要在公网中传递,所以该地址就是在公网中指导路由器转发数据包的可路由公网IP,也是建立隧道两端路由器的真实公网IP。CCNP安全/CCSP技术交流QQ群:38793366注:★GRETunnel只支持路由器,不支持集中器和PIX以及ASA。★GRE支持的协议有IP,Decnet,IPX,Appletalk。★GRE可分为point-to-pointGRE和multipointGRE(mGRE)两种。★point-to-pointGRE只能在两台路由器之间建立。★multipointGRE(mGRE)也可以在两台以上的路由器之间建立。★point-to-pointGRE支持IP单播,组播,以及IGP动态路由协议和非IP协议。★multipointGRE(mGRE)只支持单播,组播以及动态IGP路由协议,不支持非IP协议。本小节只讨论point-to-pointGRE,而multipointGRE(mGRE)将在后续内容中讨论。GRE隧道接口没有OSI一层协议做检测,只要本端源地址有效,并且隧道终点地址有路由可达,那么GRE隧道接口就会up,而无论隧道对端是否已经配置隧道接口;如果GRE隧道的接口状态要down,只要达到如下3个情况中任意一个即可:1.没有去往隧道终点地址的路由。2.去往隧道终点地址的路由指向了隧道接口自己。3.隧道起源地址的接口状态为down。以下图为例,配置GRE说明:图中Internet使用路由器R5来模拟。1.配置基础网络环境(1)配置R1:r1(config)#intf0/0r1(config-if)#ipaddress10.1.