Cisco ASA做AnyConnect服务器时的动态路由协议和NAT规则设置

从ASA的设计来看,AnyConnect隧道不像是一个传统的Point-to-Point或Site-to-Site VPN隧道,而更像是一个IPSec Transform规则。每个客户端建立起隧道以后,ASA会为其动态生成一条路由,该路由具有如下特征:

  • 类型为静态(STATIC)
  • CIDR为/32
  • 接口为用户连入流量的来源接口,例如用户从公网访问则为outsite
  • 网关地址为接口对应的网关

动态路由协议

ASA和另一台路由器之间有一个BGP会话,现在想让另一台路由器能访问ASA上的AnyConnect客户端。那么有两种实现方法:

为每一个客户端宣告一条路由

这样很简单,BGP重分发静态路由即可。但是经过实验,ASA对动态生成的静态路由的重分发并不是十分靠谱:延迟严重,有的时候甚至根本不向BGP邻居推送更新消息。所以不是很建议使用这种方法。

至于大量/32条目污染路由表的问题,可以用auto-summary来解决。

预先宣告整个AnyConnect IP池

创建一条metric为254的静态路由,然后加入BGP的宣告列表即可。(注意ASA的metric 255等效于blackhole)

route outside 192.168.1.1 255.255.255.0 8.8.8.8 254
router bgp 205610
 address-family ipv4 unicast
  network 100.102.11.0 mask 255.255.255.0

NAT规则

如果你的运营商出口(outside)需要做PAT(masquerade),并且你为了偷懒设置了一条nat (any,outsite) after-auto source dynamic any interface的话,那么恭喜你中招了。AynConnect用户的源接口和目标接口都是outside,于是它是无论如何都无法主动建立连接的。

解决方法是把NAT规则拆成inside->outside和outside->outside(仅AnyConnect客户端地址)。

nat (inside,outside) after-auto source dynamic any interface
nat (outside,outside) after-auto source dynamic AnyConnect_IP_RANGE interface

Packet Tracer

不要用活跃的AnyConnect客户端IP作为Packet Tracer测试的源或者目标IP。你会看到它莫名其妙被DROP。

Phase: 7
Type: WEBVPN-SVC
Subtype: in
Result: DROP
Config:
Additional Information:

Result:
input-interface: provider
input-status: up
input-line-status: up
output-interface: backbone
output-status: up
output-line-status: up
Action: drop
Drop-reason: (acl-drop) Flow is denied by configured rule

或者

Phase: 9
Type: VPN
Subtype: ipsec-tunnel-flow
Result: DROP
Config:
Additional Information:

Result:
input-interface: provider
input-status: up
input-line-status: up
output-interface: backbone
output-status: up
output-line-status: up
Action: drop
Drop-reason: (acl-drop) Flow is denied by configured rule

正确的方法是,使用AnyConnect地址池里面未被分配的IP。


参考:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据