如何在 IOS 8.3+ 中实现 NAT Hairpin

如何在 IOS 8.3+ 中实现 NAT Hairpin

正如我所问这里并重复这里看来 NAT Hairpinning 就是我正在寻找的答案,它允许内部服务器通过 ASA 环回以访问外部 IP(无需使用 DNS 修复)。但是,这些帖子和此处提供的说明,http://www.cisco.com/en/US/products/ps6120/products_configuration_example09186a00807968d1.shtml#solution2似乎没有涵盖 IOS 8.3+ 上的 NAT Hairpinning(我正在运行 9.1)9.1 甚至不再有静态命令(本身)。

如何在 IOS 8.3+(特别是 Cisco ASA 5505 上的 9.1(2))中进行 NAT Hairpin。

谢谢!

更新:

这是我发布到思科支持网站的内容...也许附加信息可以让我的情况更加清楚

我似乎无法使 nat hairpinning 正常工作... 互联网上的大多数说明都表明如何使用 8.3 之前可用的命令来执行此操作。

我尝试了以下方法:

same-security-traffic permit intra-interface

asa-box(config-network-object)# object network my-inside-address-obj
asa-box(config-network-object)# nat (inside,inside) static my-outside-address-obj

但没用。

然后我补充道:

access-list hairpin_allow extended permit tcp object Internal_NAT_Range object External_NAT_Range

access-group hairpin_allow in interface inside

这也不起作用(试图在此表现出尽职调查......)。

然后我尝试:

nat (inside,inside) source static Internal_NAT_Range Internal_NAT_Range destination static External_NAT_Range External_NAT_Range

还是不行。

最后,我执行了以下步骤(如图所示这里):“9. 为了避免由于内部发生的路由不对称性而导致数据包丢失,我们需要 ASA 绕过针对此特定流量的状态检查。为此,我们需要配置以下内容:

ASA(config)#access-list tcp_bypass extended permit tcp object Internal_NAT_Range object External_NAT_Range !--- 配置访问列表以指定需要绕过检查以提高性能的 TCP 流量!

!--- 配置类映射,并为 !--- 类映射指定匹配参数以匹配有趣的流量。

ASA(config)#class-map tcp_bypass ASA(config-cmap)#description "绕过状态防火墙的 TCP 流量" ASA(config-cmap)#match access-list tcp_bypass

!--- 配置策略映射并指定类映射 !--- 在此策略映射里面为类映射。

ASA (config-cmap)#policy-map tcp_bypass_policy ASA (config-pmap)#class tcp_bypass

!--- 使用 set connection advanced-options tcp-state-bypass !--- 命令来启用 TCP 状态旁路功能。

ASA(config-pmap-c)#设置连接高级选项tcp状态旁路

!--- 在全局配置模式下使用 service-policy policymap_name [ global | interface intf ] !--- 命令以便在所有接口或目标接口上全局激活策略映射 !---。

ASA(config-pmap-c)#服务策略 tcp_bypass_policy inside”

再一次,什么也没有……

我的配置(干净/在上述任何配置之前)如下...

...
object network External_NAT_Range
 range x.x.56.3 x.x.59.255
object network Internal_NAT_Range
 range 172.17.56.3 172.17.59.255
object network InternalIPs
 subnet 172.17.56.0 255.255.248.0
object network VpnIPs
 subnet 172.17.63.0 255.255.255.0
object network InternalIPs_OutOnly
 range 172.17.60.1 172.17.62.254
...

nat (inside,outside) source static InternalIPs InternalIPs destination static VpnIPs VpnIPs no-proxy-arp route-lookup description Un-Nats VPN IPs
nat (inside,outside) source dynamic InternalIPs_OutOnly interface description Allows remaining interior network to access the Internet
!
object network Internal_NAT_Range
 nat (inside,outside) static External_NAT_Range net-to-net
access-group outside_access_in in interface outside
route outside 0.0.0.0 0.0.0.0 x.x.56.1 1
...

我只是希望能够访问外部资源,比如http://xx56.5来自内部 IP,例如 172.17.56.8

我尝试使用 DNS 修复。配置简单得多,而且有效,但当 PTR 请求来自互联网时,DNS 修复似乎还会转换出站响应以反映我的内部 IP,这显然是错误的……

如果思科专业人士能提供任何帮助,我们将不胜感激!

谢谢!

答案1

作为一名过时的前 PIX/ASA 管理员,我当然觉得这个不可抗拒。我没有设备(只有一台运行 6.3 的旧 PIX 506E)可以试用,所以这有点太糟糕了。但这是我在 9.1 的在线文档中以及通过一些随机的谷歌搜索找到的。参考链接在帖子底部提供。所以祈祷好运吧……

假设所有其他配置(如路由、访问列表等)都正确,您仍然需要使用该命令

same-security-traffic permit intra-interface

以便使从内部客户端到外部映射地址的流量能够重新转换为内部服务器地址,即对其进行“发夹式”处理。

要将内部地址 iiii 端口映射到外部地址 xxxx,在 8.3 之前,您需要使用以下命令

static (inside,inside) x.x.x.x i.i.i.i

以便允许使用从 DNS 获得的外部地址将内部主机 nat 发夹连接到内部服务器。这与常规的“非发夹”语法不同,后者

static (inside,outside) x.x.x.x i.i.i.i

并且自然也会存在,以允许外部客户端使用公共 IP 调用服务器。

在版本 8.3 及更高版本中,此语法已被重写,并且当输入时,相应的 ASA 发夹端口映射指令将如下所示:

asa-box(config)# object network my-outside-address-obj
asa-box(config-network-object)# host x.x.x.x
asa-box(config-network-object)# object network my-inside-address-obj
asa-box(config-network-object)# host i.i.i.i
asa-box(config-network-object)# nat (inside,inside) static my-outside-address-obj

这也将与常规的“非发夹弯”指令相补充。

这似乎是我能找到的唯一真正的区别,但我当然非常好奇它在实践中是如何运作的。

我在这里找到了端口地址转换的9.1命令语法(即对应于旧的静态命令): http://www.cisco.com/en/US/docs/security/asa/asa91/configuration/firewall/nat_objects.html#wp1106703

我发现了一个绝对出色的发夹语法历史指南,其中展示了与在不同版本中配置的相同的示例设计: http://nat0.net/cisco-asa-hairpinning/

祝你好运!

相关内容