最近遇到一个问题,在接口上添加动态 NAT 会导致通过该接口的所有转换流量中断,并导致 RPF 失败。我们发现添加该命令会导致 NAT 反向路径过滤开始丢弃接口上的大部分流量,而之前 RPF 检查并未发生(或至少之前未显示在packet-tracer
结果中)。
该接口已经有数百个 NAT 豁免、静态和动态策略 NAT,但添加第一个动态 NAT(带有少量 /29 源限制,以及与 99% 中断的转换无关的目标接口)会触发失败。
以下是导致它崩溃的原因:
nat (Public) 33 172.16.14.0 255.255.255.248 outside tcp 0 0 udp 0
global (Voice) 33 10.0.8.180 netmask 255.255.255.255
RPF 失败中引用的规则是内部的主要 PAT 规则;添加的配置不应干扰该规则的成功逆转:
Phase: 9
Type: NAT
Subtype: rpf-check
Result: DROP
Config:
nat (public) 0 0.0.0.0 0.0.0.0 outside
nat-control
match ip Public any inside any
no translation group, implicit deny
policy_hits = 7274
Additional Information:
packet-tracer
添加 NAT 之前的完整结果:http://pastey.net/149630之后:http://pastey.net/149631
因此,问题是:NAT RPF 的行为方式真的是这样吗 - 仅在该接口连接了动态 NAT 后才对该接口进行过滤?为什么动态 NAT 会触发它,而动态策略 NAT(行为完全相同,但指定了源和目标,而不仅仅是源)却没有?还是它总是在发生,只是在接口上隐式允许,直到出现动态 NAT,然后如果没有匹配的规则,则变为隐式拒绝?
如果重要的话,5520 运行 8.2.2。
答案1
查看第一个数据包跟踪器结果,似乎您已启用 nat 控制。如果在启用 nat 控制的情况下向外部接口添加动态 nat,则到该接口的所有流量都必须与 nat 语句匹配。Cisco ASA 550 系列配置指南 - 配置 NAT 控制
这就是为什么一旦应用动态 nat,您就会看到行为发生变化。NAT 控制正在应用于外部,而您现有的外部 NAT 规则不适合这种情况。如果没有看到配置,很难更具体。最简单的解决方案是禁用 nat 控制(无 nat-control)。
答案2
您是否尝试从安全性较低的接口进行 NAT 到安全性较高的接口?如果是这样,您需要执行静态 NAT,因为据我所知,在这种情况下您不能使用动态 NAT。
答案3
如果您有多个 WAN 接口,NAT 可能会将您的数据包从错误的接口转发出去,而 uRPF 可能会因为地址不正确而丢弃它们(参考:思科)。您是否启用了 Cisco 快速转发?