在关于“创建基于路由器的VPN网关”的专题的前几篇文章中,我们已经学会了如何通过使用Cisco EzVPN网关来创建支持network-to-network IPsec拓扑。我们也探讨了支持EzVPN网关上的全加密窥视的硬件客户端配置。现在我们将转到半隧道客户端配置上来,这是一种更高效更安全的方法,但同时也更复杂些。 下图展示的场景可以看作是一个小型远程办公的主链路解决方案,或者已经有主要专用线或另一条VPN链路的办公网的第二或备份链路解决方案。
它使用半隧道来保证网络连接安全,而不是之前讨论的更简单的全加密解决方案。 半隧道是被认为比全加密VPN拓扑更高效的方法,但这种高效是有代……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
在关于“创建基于路由器的VPN网关”的专题的前几篇文章中,我们已经学会了如何通过使用Cisco EzVPN网关来创建支持network-to-network IPsec拓扑。我们也探讨了支持EzVPN网关上的全加密窥视的硬件客户端配置。现在我们将转到半隧道客户端配置上来,这是一种更高效更安全的方法,但同时也更复杂些。
下图展示的场景可以看作是一个小型远程办公的主链路解决方案,或者已经有主要专用线或另一条VPN链路的办公网的第二或备份链路解决方案。它使用半隧道来保证网络连接安全,而不是之前讨论的更简单的全加密解决方案。
半隧道是被认为比全加密VPN拓扑更高效的方法,但这种高效是有代价的。这是因为半隧道在与运行在网络扩展模式的Cisco EzVPN硬件客户端一起使用时不会像预期那样工作。通常,如果一个半隧道策略与软件或硬件客户端一起使用,指定要安全化的流量会被加密,“非安全”流量则通过公共接口直接或使用NAT转发出去。使用EZ-NEM,任何通过安全接口发送的流量都会由加密策略处理。如果流量被定义在策略中,那它就会被加密并转发;如果没有,它会被丢弃。所以当使用半隧道策略时,只有安全的流量会被处理,其余的都会被丢弃。那么需要被转发(通过NAT或PAT)但并不符合加密策略的流量必须通过另外的路由器接口处理。
这样就出现一个所有工程师在实现半隧道Network-to-Network VPN时都会遇到的现实问题:如果使用路由器实现 IPsec,你必须避免让路由器在同一个内部接口上同时处理安全和非安全流量。虽然这是可以做到的,但并不意味着应该这样做,而且这是很容易避免的。面对这种情况,你应该考虑下面三个网络拓扑:
这三种选择隐含的概念是给每一个包处理工具限制一个特定的功能,如路由、IPsec数据包处理和Internet数据包处理。这些模型在添加和删除硬件元素上都是很灵活的,但上面的图示抓住了这些不同方法的本质:
选择1是一种“一个任务,一个设备”的方法,它的每一个硬件设备都处理一个特定的任务。Internet路由器在本地网络和ISP之间提供边界安全性和过滤器/监控器功能。防火墙负责管理IPsec和用户Internet访问。这个解决方案通常与GRE隧道一起使用;远程路由器是作为本地和核心网络之间GRE隧道的终点。然后防火墙使用IPsec来保证流量安全。LAN路由交换机负责保存LAN、核心的和与核心相连的网络的可达性信息以及默认路由。这个方案的优点是它很适合网络和安全是在不同的组管理并且每一个功能元素都在不同的硬件上的网络环境。而缺点是它的花费很昂贵,并且不容易改动。
选择2是一个“折衷的”方法。其中路由器管理ISP边界、IPsec和防火墙公共访问,防火墙管理用户的Internet访问,LAN路由交换机管理IP路由选择。这个方法比第一个复杂很多,它将控制元素转移到路由接口而不是使用不同的硬件设备。然而,它仍然保持了使用有状态过滤设备来管理用户Internet流量的优点。它的好处是比第一种方法需要的硬件少很多。而缺点是它设计上更复杂,需要更周全的计划和精细的维护。
选择3是一种“越少越好的”方法。路由器负责管理边界和用户Internet访问。这个方法的优点在于它的成本不高。而缺点是像第二种方法一样,这个方法也很复杂。IOS支持以协议为中心和面向事务的有状态过滤模型,但这个功能和加密及数据包处理一样都由路由器处理完成。其中很重要的一点是你要指定路由器处理恰当的流量级别,否则你的网络性能会很差。
我们的配置例子将支持选择3。一个基于路由器的过滤解决方案适合于备份和小型远程办公连接,这类网络一般不需要用到单独的防火墙。我们的目标是提供对核心和核心相邻网络的安全访问,并利用本地链路来实现Internet访问,而不要使Internet访问影响核心网络的正常工作。对于核心VPN网关配置而言,需要一个额外的客户端策略。
你还需要创建一个流量修饰ACL来定义在VPN网关和远程硬件客户端之间安全化的IP流量模式。这种扩展的ACL模式是Source=Core Network-->Destination=Remote Network。这个ACL需求会稍微使用EzVPN客户端的动态灵活性,但根据访问的需求,可以用“any”来替代Remote Network字段值。同时,就像在全加密例子中,Reverse Route Injection (RRI)会使核心网络动态地通知远程客户端网络。PRI在客户端是不可用的,但我们可以在客户端路由器上实现一个替代方案。我们可以在远程客户端路由器上配置动态路由,并配置静态路由重分配来使用远程下一跳网关(与一些创造性的流量过滤配对)向核发网络通告静态路由。客户端路由器的配置类似于我们之前的配置例子,只是增加了支持NAT和有状态过滤的支持:
- DHCP/DNS服务器配置
- 硬件客户端配置
- NAT配置
- 接口配置
- IP路由选择配置
I.DHCP/DNS服务器配置
为这些元素的配置是与全加密硬件客户端例子的配置一样的。这个例子需要注意的一点是DNS查找是直接向Internet(没有核心DNS服务器)请求所有来自路由器外部接口的地址。这个通信需要在生成公共接口ACL时进行说明:
outlan-VPN-RTR(config)#ip dhcp pool vlan62 outlan-VPN-RTR(dhcp-config)#network 172.30.62.0 255.255.255.0 outlan-VPN-RTR(dhcp-config)#default-router 172.30.62.1 outlan-VPN-RTR(dhcp-config)#dns-server 1.1.1.1 outlan-VPN-RTR(dhcp-config)#exit outlan-VPN-RTR(config)#ip dhcp pool vlan89 outlan-VPN-RTR(dhcp-config)#network 172.30.89.0 255.255.255.0 outlan-VPN-RTR(dhcp-config)#default-router 172.30.89.1 outlan-VPN-RTR(dhcp-config)#dns-server 1.1.1.1 outlan-VPN-RTR(dhcp-config)#exit outlan-VPN-RTR(config)#ip domain name outlan.net outlan-VPN-RTR(config)#ip name-server 192.36.148.17 192.112.36.4 193.0. 14.129 198.32.64.12 outlan-VPN-RTR(config)#ip dns server |
II.硬件客户端配置
同样,这个步骤对于全加密例子非常简单。下面我们使用流量修饰器ACL来辨别发送和接收流量的相邻网络:
outlan-VPN-RTR(config)#ip access-list extended adj-subnets outlan-VPN-RTR(config-ext-nacl)# permit ip 172.30.62.0 0.0.0.255 any outlan-VPN-RTR(config-ext-nacl)# permit ip 172.30.89.0 0.0.0.255 any outlan-VPN-RTR(config-ext-nacl)#exit outlan-VPN-RTR(config)#crypto ipsec client ezvpn hard-client outlan-VPN-RTR(config-crypto-ezvpn)# peer 172.30.80.14 outlan-VPN-RTR(config-crypto-ezvpn)# connect auto outlan-VPN-RTR(config-crypto-ezvpn)# group hard-client key supersecret outlan-VPN-RTR(config-crypto-ezvpn)# mode network-extension outlan-VPN-RTR(config-crypto-ezvpn)# username outlan-rtr1 password outlan-rtr1 outlan-VPN-RTR(config-crypto-ezvpn)# xauth userid mode local outlan-VPN-RTR(config-crypto-ezvpn)# acl adj-subnets |
III.接口配置
这个例子的接口配置比全加密硬件客户端例子稍微复杂些,因为它多了反射的ACL以提供基于事务的有状态过滤。我们从公共入站ACL开始,配置发DHCP和IPsec服务的允许规则。然后我们必须增加对DNS解析、ICMP和反射列表评估规则的支持。接着我们创建公共的出站列表。Cisco反射访问列表通过一个ACL来匹配流量而工作的,然后使用一对出站/入站ACL动态地更新另一个列表。静态的允许或拒绝规则被插入到反身匹配和评估规则之前。当外部接口配置好后,剩下的工作就是配置NAT和EzVPN策略接口了。当EzVPN的内部和外部定义都配置好后,客户端将自动地建立与VPN网关的连接。
VPN连接建立后,我们仍需要做一些IP路由和NAT配置的工作。但在我们配置这些之前,我们必须实施一些保护措施以确保我们的安全流量不会在不经意间泄露到Internet上。我们将使用一个扩展的名为“安全捕捉(Security-Catch)”的ACL来实现这个保护措施。捕捉列表的工作是丢弃所有本应该到达VPN接口而来到NAT接口的流量。假如这个配置实现在另一个WAN链路的互连上,那么就要使用动态路由使LAN路由交换机知道去往核心网络的另一个路径。
LAN路由交换机必须也有一条默认路由。在我们的例子中,默认的路由将是客户端路由器的NAT接口。当去往核心网络的路由不在LAN交换机的路由表中时,LAN交换机应该能够转发这些路由到默认的网关上。捕捉过滤器将会阻止这些路由的继续转发,并提供给管理员一个可以过滤这些可用的Internet服务的方法。
outlan-VPN-RTR(config)#ip access-list extended VPN-IN outlan-VPN-RTR(config-ext-nacl)# remark permit DHCP client Traffic outlan-VPN-RTR(config-ext-nacl)# permit udp any any eq bootpc outlan-VPN-RTR(config-ext-nacl)# remark permit IPSEC Phase 1 Phase 2 traffic outlan-VPN-RTR(config-ext-nacl)# permit esp host 190.55.2.98 any outlan-VPN-RTR(config-ext-nacl)# permit udp host 190.55.2.98 any eq isakmp outlan-VPN-RTR(config-ext-nacl)# remark permit local DNS resolution outlan-VPN-RTR(config-ext-nacl)# permit udp any any gt 1024 outlan-VPN-RTR(config-ext-nacl)# permit udp any any eq domain outlan-VPN-RTR(config-ext-nacl)# remark allow ICMP outlan-VPN-RTR(config-ext-nacl)# permit icmp any any outlan-VPN-RTR(config-ext-nacl)# remark reflexive rules outlan-VPN-RTR(config-ext-nacl)# evaluate tcp-public-access-temp-list outlan-VPN-RTR(config-ext-nacl)# evaluate udp-public-access-temp-list outlan-VPN-RTR(config-ext-nacl)# exit outlan-VPN-RTR(config)# ip access-list extended VPN-OUT outlan-VPN-RTR(config-ext-nacl)# remark permit IPSEC Phase 1 Phase 2 traffic outlan-VPN-RTR(config-ext-nacl)# permit esp any host 190.55.2.98 outlan-VPN-RTR(config-ext-nacl)# permit udp any host 190.55.2.98 eq isakmp outlan-VPN-RTR(config-ext-nacl)#remark reflexive match rules outlan-VPN-RTR(config-ext-nacl)# permit tcp any any reflect tcp-public-access-temp-list outlan-VPN-RTR(config-ext-nacl)# permit udp any any reflect udp-public-access-temp-list outlan-VPN-RTR(config-ext-nacl)#exit outlan-VPN-RTR(config)# ip access-list extended Security-Catch outlan-VPN-RTR(config-ext-nacl)#deny ip any 172.30.40.0 0.0.0.255 outlan-VPN-RTR(config-ext-nacl)#deny ip any 172.30.50.0 0.0.0.255 outlan-VPN-RTR(config-ext-nacl)#deny ip any 172.30.60.0 0.0.0.255 outlan-VPN-RTR(config-ext-nacl)#deny ip any 172.30.131.0 0.0.0.255 outlan-VPN-RTR(config-ext-nacl)#deny ip any 172.30.132.0 0.0.0.255 outlan-VPN-RTR(config-ext-nacl)#permit ip any any eq 80 outlan-VPN-RTR(config-ext-nacl)#permit ip any any eq 443 outlan-VPN-RTR(config-ext-nacl)#permit ip any any eq ftp outlan-VPN-RTR(config-ext-nacl)#permit ip any any eq ftp-data outlan-VPN-RTR(config-ext-nacl)#permit ip any any estabished outlan-VPN-RTR(config)# interface FastEthernet0/0 outlan-VPN-RTR(config-if)#description EzVPN unsecured-public traffic interface outlan-VPN-RTR(config-if)#ip address dhcp outlan-VPN-RTR(config-if)#ip access-group VPN-IN in outlan-VPN-RTR(config-if)#ip access-group VPN-OUT out outlan-VPN-RTR(config-if)#crypto ipsec client ezvpn hard-client outlan-VPN-RTR(config-if)#exit outlan-VPN-RTR(config)# interface Vlan1 outlan-VPN-RTR(config-if)#description EzVPN secured-private traffic interface outlan-VPN-RTR(config-if)#ip address 172.30.100.1 255.255.255.0 outlan-VPN-RTR(config-if)#crypto ipsec client ezvpn hard-client inside outlan-VPN-RTR(config-if)#exit outlan-VPN-RTR(config)# interface FastEthernet0/1 outlan-VPN-RTR(config-if)#description NAT private traffic interface outlan-VPN-RTR(config-if)#ip address 172.30.120.1 255.255.255.0 outlan-VPN-RTR(config-if)#ip access-group Security-Catch in |
IV.IP路由选择配置
在我们上面的讨论中,这个例子的LAN路由交换为用户节点决定下一跳的路径。其中有两种方法可以提供这个路由数据。最简单的方法是在交换机上为核心网络配置静态IP路由,将硬件客户端路由器作为下一跳地址。如果硬件客户端路由器是唯一访问核心网络的网关时,这种方法是很好的。然而,如果方案是作为连接核心网络中除租用专线或另一个VPN链路外的第二链路,我们将需要实现动态路由。因为我们缺少对硬件客户端的PRI支持,我们需要作一下变通。为了将核心网络连接到LAN交换机,我们可以重新分配静态路由。然后保证这些路由在DSL链接失败时能加进来,我们可以将它们配置成使用一个远程下一跳(RNH)网关。
这是唯一的可能,因为如果客户端链路建立并且该链路在激活的Fa0/0上是独立于ISP连接,硬件客户端将只会转发安全的流量。IP路由实际上并不在这里起作用;我们仅仅需要保证应用安全化的流量能够到达内部接口,在内部接口上流量将被封装在一个ESP IPsec隧道中并被发送到VPN网关上。重要的是LAN交换机能够将流量发送到正确的接口,同时它也知道当配置作为备份路径使用时可用的任意路由路径。LAN交换机将选择主路由路径;只有当那些路由不可用时交换机才会通过RNH发送流量的。
配置静态路由来使用RNH非常简单。首先,定义RNH的路由,并把它与路由器的物理接口绑定。当RNH就绪后,所有后续的静态路由器使用RNH作为网关。然后当RNH出现问题不可用时,它绑定的静态路由也会失效并且也不可用于路由再分配。这是一个很好的技巧,它可以用在你需要做静态路由再分配的地方。
在静态路由分配好之后,我们必须配置动态路由协议。对于这个例子,我们将使用OSPF。虽然路由器和LAN交换机是通过两个不同的接口连接的,只有VPN接口需要包含在动态协议配置中。我们应用配置LAN交换机使用NAT接口作为它的静态默认网关。下面是我们的IP路由选择配置:
outlan-VPN-RTR(config)#ip route 190.55.2.98 255.255.255.255 FastEthernet0/0 outlan-VPN-RTR(config)#ip route 172.30.40.0 255.255.255.0 190.55.2.98 outlan-VPN-RTR(config)#ip route 172.30.50.0 255.255.255.0 190.55.2.98 outlan-VPN-RTR(config)#ip route 172.30.60.0 255.255.255.0 190.55.2.98 outlan-VPN-RTR(config)#ip route 172.30.131.0 255.255.255.0 190.55.2.98 outlan-VPN-RTR(config)#ip route 172.30.132.0 255.255.255.0 190.55.2.98 outlan-VPN-RTR(config)#router ospf 100 outlan-VPN-RTR(config-router)#log-adjacency-changes outlan-VPN-RTR(config-router)#redistribute static metric 100 subnets outlan-VPN-RTR(config-router)#network 172.30.100.0 0.0.0.255 area 0.0.0.0 outlan-VPN-RTR(config-router)#router-id 172.30.100.1 |
NAT也必须配置,而且它的配置并不复杂。你必须创建流量匹配列表,定义NAT过程,并配置NAT的内部和外部接口:
outlan-VPN-RTR(config)#access-list 2 permit 172.30.62.0 0.0.0.255 outlan-VPN-RTR(config)#access-list 2 permit 172.30.89.0 0.0.0.255 outlan-VPN-RTR(config)#access-list 2 permit 172.30.120.0 0.0.0.255 outlan-VPN-RTR(config)#ip nat inside source list 2 interface FastEthernet0/0 overload outlan-VPN-RTR(config)#interface FastEthernet0/1 outlan-VPN-RTR(config-if)#ip nat inside outlan-VPN-RTR(config-if)#exit outlan-VPN-RTR(config-if)#interface FastEthernet0/0 outlan-VPN-RTR(config-if)#ip nat outside outlan-VPN-RTR(config-if)#exit |
至此,客户端路由器应该能够通过正确的接口(在LAN路由交换机的帮助下)来处理安全流量和Internet流量。
故障修复
在这个配置过程中,你很可能会遇到问题。下面是一些可以让你检查EzVPN客户端连接以及ISAKMP(阶段1)和IPsec(阶段2)安全性联合的命令。对于EzVPN客户端连接的状态,可以使用EXEC命令:<show crypto ipsec client ezvpn>。这个命令提供了关于客户端连接VPN网关、备份网关(如果有)、连接状态(IPSEC_ACTIVE表示连接打开)和内部外部安全性接口的详细信息:
outlan-VPN-RTR# sh crypto ipsec client ezvpn Easy VPN Remote Phase: 6 Tunnel name : hard-client Inside interface list: Vlan1, Vlan2 Outside interface: FastEthernet0/0 Current State: IPSEC_ACTIVE Last Event: SOCKET_DOWN Using PFS Group: 2 Save Password: Allowed Current EzVPN Peer: 172.30.80.14 Backup gateways (0): 172.30.80.16 outlan-VPN-RTR# |
为了检查路由器所建立的阶段1 SA(或者已经坏掉的或马上要清除掉的SA),可以使用EXEC命令:<show crypto isakmp sa>。状态列中的“ACTIVE”表示ISAKMP SA是有效的:
outlan-VPN-RTR#sh crypto isakmp sa IPv4 Crypto ISAKMP SA dst src state conn-id slot status 172.30.80.14 172.30.80.225 QM_IDLE 1022 0 ACTIVE outlan-VPN-RTR# |
最后一个密码状态命令可以获取一些关于阶段2 SA的关键信息(如转换集、转换模式和加密/解密数据包的数量),这些SA是使用路由器加密图建立的。EXEC命令<show crypto ipsec SA>会列表所有的来源(本地)目标(远程)子网对,它们的安全性策略是路由器所协商的。下面是我们实现的VLAN 100的例子(注意目标网络是“0.0.0.0/0.0.0.0/0/0”,或者“any”):
interface: FastEthernet0/0 Crypto map tag: FastEthernet0/0-head-0, local addr 172.30.80.225 protected vrf: (none) local ident (addr/mask/prot/port): (172.30.100.1.0/255.255.255.0/0/0) remote ident (addr/mask/prot/port): (0.0.0.0/0.0.0.0/0/0) current_peer 172.30.80.14 port 500 PERMIT, flags={origin_is_acl,} #pkts encaps: 148833, #pkts encrypt: 148833, #pkts digest: 148833 #pkts decaps: 115407, #pkts decrypt: 115407, #pkts verify: 115407 #pkts compressed: 0, #pkts decompressed: 0 #pkts not compressed: 0, #pkts compr. failed: 0 #pkts not decompressed: 0, #pkts decompress failed: 0 #send errors 0, #recv errors 0 local crypto endpt.: 172.30.80.225, remote crypto endpt.: 172.30.80.14 path mtu 1500, ip mtu 1500, ip mtu idb FastEthernet0/0 current outbound spi: 0xDAD212FE(3671200510) inbound esp sas: spi: 0x3D740B43(1031015235) transform: esp-3des esp-md5-hmac , in use settings ={Tunnel, } conn id: 2261, flow_id: FPGA:261, crypto map: FastEthernet0/0-head-0 sa timing: remaining key lifetime (k/sec): (4536041/4248) IV size: 8 bytes replay detection support: Y Status: ACTIVE outbound esp sas: spi: 0xDAD212FE(3671200510) transform: esp-3des esp-md5-hmac , in use settings ={Tunnel, } conn id: 2262, flow_id: FPGA:262, crypto map: FastEthernet0/0-head-0 sa timing: remaining key lifetime (k/sec): (4536973/4248) IV size: 8 bytes replay detection support: Y Status: ACTIVE |
当实现IPsec解决方案时,><show crypto isakmp sa>和><show crypto ipsec sa>是重要的调试所建立节点的命令。如果你不能使两个节点成功地在阶段1协商,你可以使用调试命令:><debug crypto isakmp>。这个命令会产生大量关于IKE协商的数据,并会显示所有的问题和不兼容性。
至此,我们完成了Cisco EzVPN硬件解决方案的学习。
作者
Michael J. Martin作为网络和Unix信息管理员已经在信息技术领域工作了17多年。他早期在研究和ISP方面进行的设计、实现和支持MIS基础架构的经历,为他当前在大型因特网和安全架构的工作上提供了独特的视角。作为一个网络架构师,他已经为多家公司设计过高速、高可用的LAN/WAN网络,如ANS/AOL、Philips和Edgix Corporation等,它也给许多业务和区域ISP提供网络顾问服务。Michael也撰写了很多关于网络和安全问题的文章。
翻译
TechTarget中国特约技术编辑,某高校计算机科学专业教师和网络实验室负责人,曾任职某网络国际厂商,关注数据中心、开发运维、数据库及软件开发技术。有多本关于思科数据中心和虚拟化技术的译著,如《思科绿色数据中心建设与管理》和《基于IP的能源管理》等。
相关推荐
-
Cisco EzVPN的Network-to-Network VPN网关配置
本文中我们将检查Cisco EzVPN使用Cisco路由器作为VPN网关和Cisco路由器硬件客户端来支持Network-to-Network VPN拓扑。