要为网络对象配置 NAT,请在对象网络配置模式下使用 nat 命令。要删除 NAT 配置,请使用此命 no 令的形式。
对于动态 NAT 和 PAT:
nat[( real_ifc ,mapped_ifc)] dynamic{ mapped_inline_host_ip[ interface[ ipv6]]| [ mapped_obj] [ pat-poolmapped_obj[ round-robin] [ extended] [ flat[ include-reserve]] [ block-allocation]] [ interface[ ipv6]]} [ dns]
no nat[( real_ifc ,mapped_ifc)] dynamic{ mapped_inline_host_ip[ interface[ ipv6]]| [ mapped_obj] [ pat-poolmapped_obj[ round-robin] [ extended] [ flat[ include-reserve]] [ block-allocation]] [ interface[ ipv6]]} [ dns]
对于静态 NAT 和带端口转换的静态 NAT:
nat[( real_ifc ,mapped_ifc)] static{ mapped_inline_host_ip| mapped_obj| interface[ ipv6]}[ net-to-net] [ dns| service{ tcp| udp| sctp} real_port mapped_port] [ no-proxy-arp] [ route-lookup]
no nat[( real_ifc ,mapped_ifc)] static{ mapped_inline_host_ip| mapped_obj| interface[ ipv6]}[ net-to-net] [ dns| service{ tcp| udp| sctp} real_port mapped_port] [ no-proxy-arp] [ route-lookup]
Syntax Description
( real_ifc , mapped_ifc )
|
(可选)对于静态 NAT,指定实际接口和映射接口。如果您未指定真实接口和映射接口,则使用所有接口。您还可以 any 为一个或两个接口指定关键字。确保在命令中包含括号。对于桥接组成员接口(在透明或路由模式下),必须指定实际接口和映射接口;则不能使用 any 。
|
block-allocation
|
启用端口块分配。对于运营商级或大规模 PAT,可以为每个主机分配一个端口块,而非由 NAT 每次分配一个端口转换。如果分配端口块,来自该主机的后续连接将使用该块中随机选定的新端口。如果主机将所有端口的活动连接置于基元块中,可根据需要分配更多块。只能在
1024-65535 范围内分配端口块。端口块分配与兼容 round-robin ,但不能使用 extended 或 flat [include-reserve ] 选项。也无法使用接口 PAT 回退。
|
dns
|
(可选)转换 DNS 应答。确保 DNS 检查 (inspectdns ) 已启用(默认启用)。如果指定了 service 关键字(用于静态 NAT),则此选项不可用。请勿将此选项与 PAT 规则一起使用。有关详细信息,请参阅《CLI 配置指南》。
|
dynamic
|
配置动态 NAT 或 PAT。
|
extended
|
(可选)为 PAT 池启用扩展 PAT。扩展 PAT 通过在转换信息中包含目标地址和端 口 ,为每个服务(而不是每个 IP 地址)使用 65535 个端口。通常,创建 PAT 转换时,不考虑目的地端口和地址,因此限制为每个 PAT 地址 65535 个端口。例如,通过扩展 PAT,您可以创建在访问 192.168.1.7:23 时转到
10.1.1.1:1027 的转换,以及在访问 192.168.1.7:80 时转到 10.1.1.1:1027 的转换。
|
flat [include-reserve ]
include-reserve
|
(可选,9.15 之前版本)分配端口时允许使用整个 1024 到 65535 端口范围。当选择要转换的映射端口号时,ASA 将使用实际源端口号(如果可用)。然而,如果不使用此选项,则当实际端口不可用时,将默认从与实际端口号相同的端口范围选择映射端口:1 到 511、512 到 1023 以及 1024 到 65535。为了避免用尽低端口号范围的端口,请配置此设置。要使用 1 到 65535 的完整范围,另请指定 include-reserve 关键字。
(9.15+) 从 9.15 开始,平面是 PAT 池的默认且不可配置的行为。 include-reserve 关键字独立于平面关键字,因此您仍然可以选择在 PAT 池中包含保留端口 1-1023。
|
interface [ipv6 ]
|
(可选)对于动态 NAT,如果您在 interface 关键字后指定映射 IP 地址、对象或组,则仅在所有其他映射地址均已分配时才会使用映射接口的 IP 地址。
对于动态 PAT,如果您指定 interface 关键字而不是映射 IP 地址、对象或组,则要将接口 IP 地址用于映射 IP 地址。要使用接口 IP 地址时,必须使用此关键字;不能内联输入或作为对象输入。
如果指定ipv6 ,则稍后使用该接口的 IPv6 地址。
对于支持端口转换的静态 NAT,如果另外配置了 service ] 关键字,则可以指定 interface 关键字。
对于此选项,您必须为 mapped_ifc 配置一个特定的接口。
不能在透明模式下指定 interface 。在路由模式下,如果目标接口为桥接组成员,则不能使用此选项。
|
mapped_inline_host_ip
|
如果指定 dynamic ,则使用主机 IP 地址来配置动态 PAT。如果指定 static ,则映射网络的网络掩码或范围与真实网络的网络掩码或范围相同。比如真实网络里有一个主机,那么这个地址就会被当做主机地址。对于范围或子网,映射地址包含的地址数量与实际范围或子网相同。例如,如果实际地址定义为 10.1.1.1 到 10.1.1.6
的范围,并且将 172.20.1.1 指定为映射地址,则映射范围将包括 172.20.1.1 到 172.20.1.6。如果需要多对一映射(我们不建议使用此映射),请使用主机网络对象而非内联地址。
|
mapped_obj
|
将映射 IP 地址指定为网络对象 (objectnetwork ) 或对象组 (object-groupnetwork )。不能使用同时包含 IPv4 和 IPv6 地址的对象组,对象组只能包括一种类型的地址。
对于动态 NAT,对象或组不能包含子网。如果需要,可以在不同的动态 NAT 规则之间共享此映射对象。有关不允许的映射 IP 地址的信息,请参阅“映射地址指南”。
对于静态 NAT,通常配置与真实地址相同数量的映射地址,以实现一对一映射。然而,地址数量可以不匹配。有关详细信息,请参阅《CLI 配置指南》。
|
mapped_port
|
(可选)指定映射的 TCP/UDP/SCTP 端口。可以通过文字名称或 0 至 65535 范围内的数字指定端口。
|
net-to-net
|
(可选)对于 NAT 46,指 net-to-net 定将第一个 IPv4 地址转换为第一个 IPv6 地址,将第二个转换为第二个,依此类推。如不使用此选项,则将使用 IPv4 嵌入式方法。对于一对一转换,必须使用此关键字。
|
no-proxy-arp
|
(可选)对于静态 NAT,禁用发往映射 IP 地址的传入数据包的代理 ARP。
|
pat-pool mapped_obj
|
(可选)启用地址 PAT 池;对象中的所有地址均用作 PAT 地址。对于动态 NAT,可以将 PAT 池配置为回退方法。不能使用同时包含 IPv4 和 IPv6 地址的对象组,对象组只能包括一种类型的地址。
|
real_port
|
(可选)对于静态 NAT,指定实际 TCP/UDP/SCTP 端口。可以通过文字名称或 0 至 65535 范围内的数字指定端口。
|
round-robin
|
(可选)为 PAT 池启用循环地址分配。默认情况下,在使用下一个 PAT 地址之前,将分配 PAT 地址的所有端口。轮询方法分配来自池中每个 PAT 地址的地址/端口,然后才返回再次使用第一个地址,接着是第二个地址,以此类推。
|
route-lookup
|
(可选)对于路由模式下的身份 NAT,使用路由查找而不是使用 NAT 命令中指定的接口来确定出口接口。如果不在 NAT 命令中指定接口,默认情况下将使用路由查找。
|
service {tcp |udp | sctp }
|
(可选)对于支持端口转换的静态 NAT,指定用于端口转换的协议:TCP、UDP、SCTP。
|
static
|
配置静态 NAT 或带端口转换的静态 NAT。
|
Command Default
-
real_ifc 和 mapped_ifc 的默认值为 any ,表示将规则应用于所有接口。
-
(8.3(1)、8.3(2) 和 8.4(1))用于身份 NAT 的默认行为已禁用代理 ARP。无法配置此设置。(8.4(2) 及更高版本)用于身份 NAT 的默认行为已启用代理 ARP,匹配其他静态 NAT 规则。如果需要,可以禁用代理 ARP。
-
如果指定可选接口,则 ASA 使用 NAT 配置来确定出口接口。(8.3(1) 到 8.4(1))唯一的例外是面向身份 NAT,其中该身份 NAT 始终使用路由查询,无论 NAT 配置如何。(8.4(2) 及更高版本)对于身份 NAT,默认行为是使用
NAT 配置,但可以选择始终使用路由查找。
Command Modes
下表展示可输入命令的模式:
命令模式
|
防火墙模式
|
安全情景
|
路由
|
透明
|
一个
|
多个
|
情景
|
系统
|
对象网络配置
|
|
|
|
|
—
|
Command History
版本
|
修改
|
8.3(1)
|
添加了此命令。
|
8.4(2)/8.5(1)
|
添加 no-proxy-arp 了、、、 route-lookup pat-pool 和关round-robin 键字。
身份 NAT 的默认行为已更改为启用代理 ARP,以匹配其他静态 NAT 规则。
从 8.3(1)、8.3(2) 和 8.4(1) 升级至 8.4(2) 时,所有身份 NAT 配置此时都将包含 no-proxy-arp 和 route-lookup 关键字,以便维持现有功能。
|
8.4(3)
|
添加 extended 了 flat 、和关 include-reserve 键字。
组合使用 PAT 池与轮询分配时,如果主机拥有现有连接,且有端口可用,则来自该主机的后续连接将使用相同的 PAT IP 地址。
此功能在 8.5(1) 中不可用。
|
9.0(1)
|
NAT 现在支持 IPv6 流量,以及 IPv4 和 IPv6 之间的转换。在透明模式下,不支持 IPv4 和 IPv6 之间的转换。添加了 interfaceipv6 选项和 net-to-net 选项。
|
9.5(1)
|
添加了 block-allocation 关键字。
|
9.5(2)
|
已添加关 servicesctp 键字。
|
9.15(1)
|
已删除 flat 关键字,并且 include-reserve 关键字不再是平面的子参数。现在,所有 PAT 池都使用平面端口范围 1024-65535,并且您可以选择包含保留的端口 1-1023。
|
Usage Guidelines
当数据包进入 ASA 时,将根据网络对象 NAT 规则检查源 IP 地址和目标 IP 地址。如果进行独立匹配,可根据独立规则转换数据包中的源地址和目标地址。这些规则互不牵连,可以根据流量使用不同的规则组合。
因为 规则从未配对,所以不能指定源地址在前往目标 X 时应转换为 A,但在前往目标 Y 时应转换为 B。对此类功能使用两次 NAT(两次 NAT 可让您识别将源和目标地址放在一起)。
有关两次 NAT 和网络对象 NAT 之间差异的详细信息,请参阅《CLI 配置指南》。
网络对象 NAT 规则将添加到 NAT 规则表的第 2 部分。有关 NAT 排序的更多信息,请参阅 CLI 配置指南。
根据配置,可以根据需要内联配置映射地址,也可以为映射地址创建网络对象或网络对象组(使用 objectnetwork 或 object-groupnetwork 命令)。在使用不连续的 IP 地址范围、多个主机或子网创建映射地址池时,网络对象组特别有用。不能使用同时包含 IPv4 和 IPv6 地址的对象组,对象组只能包括一种类型的地址。
NAT 中使用的对象和对象组不能是未定义的,它们必须包含 IP 地址。
您只能为给定对象定义一条 NAT 规则;如果要配置多条 NAT 规则,则需要创建多个指定相同 IP 地址的对象 objectnetworkobj-10.10.10.1-01 , objectnetworkobj-10.10.10.1-02 例如,等等。
清除会话转换
如果您更改 NAT 配置,并且不想等待现有转换超时后再使用新的 NAT 信息,则可以使用 clear xlate 命令清除转换表。但是,清除转换表会断开所有当前连接。
PAT 池指南
-
DNS 重写不适用于 PAT,因为多条 PAT 规则适用于每个 A 记录,而且要使用的 PAT 规则不确定。
-
(9.15 之前)如果可用,则使用真实源端口号作为映射端口。然而,如果实际端口不可用,将默认从与实际端口号相同的端口范围选择映射端口:0 至 511、512 至 1023 以及 1024 至 65535。因此,低于 1024 的端口仅拥有很小的可用 PAT 池。(8.4(3) 及更高版本,不包括 8.5(1) 或 8.6(1))如果有大量流量使用较低的端口范围,您现在可以指定要使用的固定端口范围,而不是三个大小不等的层级:1024
到 65535,或 1 到 65535。
-
(9.15+)端口映射到 1024 到 65535 范围内的可用端口。您可以选择包含保留的端口,即 1024 以下的端口,以便让整个端口范围可用于转换。
在集群中运行时,每个地址的 512 个端口块会被分配给集群成员,并在这些端口块内进行映射。如果还启用块分配,则会根据块分配大小(其默认值也是 512)来分配端口。
如果将包含主机地址的对象组用于动态 NAT 映射 IP 地址,启用 PAT 池则可以将这些主机地址的使用从 PAT 回退更改为动态 NAT。
PAT 池指南的扩展 PAT
-
许多应用检测不支持扩展 PAT。请参阅配置指南以获取不受支持的检查的完整列表。
-
如果为动态 PAT 规则启用扩展 PAT,则您不能将 PAT 池中的地址用作单独的静态 NAT 带端口转换规则中的 PAT 地址。例如,如果 PAT 池包括 10.1.1.1,则无法将 10.1.1.1 作为 PAT 地址创建带端口转换规则的静态
NAT。
-
如使用 PAT 池,并为回退指定接口,则无法指定扩展 PAT。
-
对于使用 ICE 或 TURN 的 VoIP 部署,请勿使用扩展 PAT。ICE 和 TURN 依赖于 PAT 绑定才能对所有目标均保持相同。
-
您不能在集群中的设备上使用扩展 PAT。
PAT 池的轮询准则
-
(8.4(3) 及更高版本,不包括 8.5(1) 或 8.6(1))如果主机已存在连接,则如果有可用端口,来自该主机的后续连接将使用相同的 PAT IP 地址。:Note 这种“粘性”在故障转移后无法继续存在。如果 ASA 发生故障转移,则来自主机的后续连接可能不会使用初始 IP 地址。
-
(8.4(2)、8.5(1) 和 8.6(1))如果主机具有现有连接,则由于轮询分配,来自该主机的后续连接可能对每个连接使用 不同的 PAT 地址。在这种情况下,当您访问交换主机信息的两个网站(例如电子商务网站和支付网站)时可能会遇到问题。当这些站点发现本应是单个主机的两个不同 IP 地址时,事务可能会失败。
-
轮询可能会消耗大量的内存,在与扩展 PAT 组合使用时尤其如此。
NAT 和 IPv6
可以使用 NAT 在 IPv6 网络之间转换,以及在 IPv4 和 IPv6 网络之间转换(仅路由模式)。我们推荐以下最佳实践。请注意,当接口是同一网桥组的成员时,不能执行 NAT64/46。
-
NAT66(IPv6 对 IPv6)- 我们建议使用静态 NAT。尽管可以使用 NAT 或 PAT,但由于 IPv6 地址大量供应,因此不必使用动态 NAT。如果不想允许返回流量,可以使静态 NAT 规则成为单向的(仅两次 NAT)
-
NAT46(IPv4 对 IPv6)- 我们建议使用静态 NAT。因为 IPv6 地址空间远远大于 IPv4 地址空间,所以可以轻松满足静态转换需求。如果不想允许返回流量,可以使静态 NAT 规则成为单向的(仅两次 NAT)当转换为 IPv6
子网(/96 或更低)时,生成的映射地址是 IPv4 嵌入的 IPv6 地址,其中 IPv4 地址的 32 位嵌入在 IPv6 前缀之后。例如,如果 IPv6 前缀为 /96 前缀,则 IPv4 地址附在最后的 32 位地址中。例如,如果将 192.168.1.0/24
映射到 201b::0/96,则 192.168.1.4 将被映射到 201b::0.192.168.1.4(通过混合表示法显示)。如果前缀较小(例如 /64),则 IPv4 地址附在前缀的后面,后缀 0 附在 IPv4 地址后面。
-
NAT64(IPv6 到 IPv4)- 可能没有足够的 IPv4 地址来容纳大量的 IPv6 地址。我们建议使用动态 PAT 池提供大量的 IPv4 转换。
Examples
以下示例配置动态 NAT,将 192.168.2.0 网络隐藏在外部地址范围 2.2.2.1-2.2.2.10 之后:
ciscoasa(config)# object network my-range-obj
ciscoasa(config-network-object)# range 2.2.2.1 2.2.2.10
ciscoasa(config)# object network my-inside-net
ciscoasa(config-network-object)# subnet 192.168.2.0 255.255.255.0
ciscoasa(config-network-object)# nat (inside,outside) dynamic my-range-obj
以下示例使用动态 PAT 备份配置 动态 NAT。内部网络 10.76.11.0 中的主机首先映射到 nat-range 1 池 (10.10.10.10-10.10.10.20)。分配 nat-range1 池中的所有地址之后,使用 pat-ip1
地址 (10.10.10.21) 执行动态 PAT。在不太可能发生 PAT 转换也用完的情况下,使用外部接口地址执行动态 PAT。
ciscoasa(config)# object network nat-range1
ciscoasa(config-network-object)# range 10.10.10.10 10.10.10.20
ciscoasa(config-network-object)# object network pat-ip1
ciscoasa(config-network-object)# host 10.10.10.21
ciscoasa(config-network-object)# object-group network nat-pat-grp
ciscoasa(config-network-object)# network-object object nat-range1
ciscoasa(config-network-object)# network-object object pat-ip1
ciscoasa(config-network-object)# object network my_net_obj5
ciscoasa(config-network-object)# subnet 10.76.11.0 255.255.255.0
ciscoasa(config-network-object)# nat (inside,outside) dynamic nat-pat-grp interface
以下示例使用动态 PAT 备份配置动态 NAT,将 IPv6 主机转换为 IPv4 主机。内部网络 2001:DB8::/96 上的主机首先映射到 IPv4_NAT_RANGE 池(209.165.201.1 到 209.165.201.30)。分配
IPv4_NAT_RANGE 池中的所有地址之后,使用 IPv4_PAT 地址 (209.165.201.31) 执行动态 PAT。在 PAT 转换也被用完的情况下, 使用外部接口地址执行动态 PAT。
ciscoasa(config)# object network IPv4_NAT_RANGE
ciscoasa(config-network-object)# range 209.165.201.1 209.165.201.30
ciscoasa(config-network-object)# object network IPv4_PAT
ciscoasa(config-network-object)# host 209.165.201.31
ciscoasa(config-network-object)# object-group network IPv4_GROUP
ciscoasa(config-network-object)# network-object object IPv4_NAT_RANGE
ciscoasa(config-network-object)# network-object object IPv4_PAT
ciscoasa(config-network-object)# object network my_net_obj5
ciscoasa(config-network-object)# subnet 2001:DB8::/96
ciscoasa(config-network-object)# nat (inside,outside) dynamic IPv4_GROUP interface
Examples
以下示例配置动态 PAT,将 192.168.2.0 网络隐藏在地址 2.2.2.2 后面:
ciscoasa(config)# object network my-inside-net
ciscoasa(config-network-object)# subnet 192.168.2.0 255.255.255.0
ciscoasa(config-network-object)# nat (inside,outside) dynamic 2.2.2.2
以下示例配置动态 PAT,将 192.168.2.0 网络隐藏在外部接口地址后面:
ciscoasa(config)# object network my-inside-net
ciscoasa(config-network-object)# subnet 192.168.2.0 255.255.255.0
ciscoasa(config-network-object)# nat (inside,outside) dynamic interface
以下示例配置动态 PAT,使用 PAT 池将内部 IPv6 网络转换为外部 IPv4 网络:
ciscoasa(config)# object network IPv4_POOL
ciscoasa(config-network-object)# range 203.0.113.1 203.0.113.254
ciscoasa(config)# object network IPv6_INSIDE
ciscoasa(config-network-object)# subnet 2001:DB8::/96
ciscoasa(config-network-object)# nat (inside,outside) dynamic pat-pool IPv4_POOL
Examples
以下示例配置静态 NAT,将内部的真实主机 1.1.1.1 配置为外部的 2.2.2.2,并启用 DNS 重写。
ciscoasa(config)# object network my-host-obj1
ciscoasa(config-network-object)# host 1.1.1.1
ciscoasa(config-network-object)# nat (inside,outside) static 2.2.2.2 dns
以下示例使用映射对象为内部的真实主机 1.1.1.1 配置到外部的 2.2.2.2 的静态 NAT。
ciscoasa(config)# object network my-mapped-obj
ciscoasa(config-network-object)# host 2.2.2.2
ciscoasa(config-network-object)# object network my-host-obj1
ciscoasa(config-network-object)# host 1.1.1.1
ciscoasa(config-network-object)# nat (inside,outside) static my-mapped-obj
以下示例配置静态 NAT,将 TCP 端口 21 处的 1.1.1.1 转换为端口 2121 处的外部接口。
ciscoasa(config)# object network my-ftp-server
ciscoasa(config-network-object)# host 1.1.1.1
ciscoasa(config-network-object)# nat (inside,outside) static interface service tcp 21 2121
以下示例将内部 IPv4 网络映射到外部 IPv6 网络。
ciscoasa(config)# object network inside_v4_v6
ciscoasa(config-network-object)# subnet 10.1.1.0 255.255.255.0
ciscoasa(config-network-object)# nat (inside,outside) static 2001:DB8::/96
以下示例将内部 IPv6 网络映射到外部 IPv6 网络。
ciscoasa(config)# object network inside_v6
ciscoasa(config-network-object)# subnet 2001:DB8:AAAA::/96
ciscoasa(config-network-object)# nat (inside,outside) static 2001:DB8:BBBB::/96
Examples
以下示例使用内联映射地址将主机地址映射到它本身:
ciscoasa(config)# object network my-host-obj1
ciscoasa(config-network-object)# host 10.1.1.1
ciscoasa(config-network-object)# nat (inside,outside) static 10.1.1.1
以下示例使用网络对象 将主机地址映射到它本身:
ciscoasa(config)# object network my-host-obj1-identity
ciscoasa(config-network-object)# host 10.1.1.1
ciscoasa(config-network-object)# object network my-host-obj1
ciscoasa(config-network-object)# host 10.1.1.1
ciscoasa(config-network-object)# nat (inside,outside) static my-host-obj1-identity