RNAT
在反向网络地址转换 (RNAT) 中,Citrix ADC 设备将服务器生成的数据包中的源 IP 地址替换为公有 NAT IP 地址。默认情况下,设备使用 SNIP 地址作为 NAT IP 地址。您还可以将设备配置为为每个子网使用唯一的 NAT IP 地址。您还可以使用访问控制列表 (ACL) 配置 RNAT。使用源 IP (USIP)、使用子网 IP (USNIP) 和链路负载平衡 (LLB) 模式会影响 RNAT 的操作。您可以显示统计信息来监视 RNAT。
注意: Citrix ADC 设备上 RNAT 的临时端口范围为 1024-65535。
您可以使用网络地址或扩展 ACL 作为 RNAT 条目的条件:
-
使用网络地址。使用网络地址时,将对来自指定网络的所有数据包执行 RNAT 处理。
-
使用扩展 ACL。使用 ACL 时,将对匹配 ACL 的所有数据包执行 RNAT 处理。要将 Citrix ADC 设备配置为使用与 ACL 匹配的流量的唯一 IP 地址,您必须执行以下三项任务:
- 配置 ACL。
- 配置 RNAT 以更改源 IP 地址和目标端口。
- 应用 ACL。
下图说明了使用 ACL 配置的 RNAT。
图 1. 具有 ACL 的 RNAT
对于 NAT IP 地址类型,您有以下基本选择:
-
使用 SNIP 作为 NAT IP 地址。使用 SNIP 作为 NAT IP 地址时,Citrix ADC 设备将服务器生成的数据包的源 IP 地址替换为 SNIP。因此,SNIP 地址必须是公有 IP 地址。如果启用了“使用子网 IP (USNIP)”模式,Citrix ADC 可以使用子网 IP 地址 (SNIP) 作为 NAT IP 地址。
-
使用唯一 IP 地址作为 NAT IP 地址。使用唯一 IP 地址作为 NAT IP 地址时,Citrix ADC 设备会将服务器生成的数据包的源 IP 地址替换为指定的唯一 IP 地址。唯一 IP 地址必须是 Citrix ADC 拥有的公有 IP 地址。如果为子网配置了多个 NAT IP 地址,则 NAT IP 选择将使用轮询算法。
此配置如下图所示。
图 2. 使用唯一 IP 地址作为 NAT IP 地址
开始之前的准备工作
在配置 RNAT 规则之前,请考虑以下几点:
-
如果在 Citrix ADC 设备上配置了 RNAT 和使用源 IP (USIP),则优先使用 RNAT。换句话说,数据包的源 IP 地址(与 RNAT 规则匹配)将根据 RNAT 规则中的设置进行替换。
-
在 Citrix ADC 设备对源自服务器的流量执行链路负载平衡 (LLB) 和 RNAT 的拓扑中,设备会根据路由器选择源 IP 地址。LLB 配置确定路由器的选择。有关 LLB 的更多信息,请参阅 链接负载平衡。
配置 RNAT
以下说明提供了用于创建使用不同条件和不同类型的 NAT IP 地址的 RNAT 条目的单独命令行过程。在 GUI 中,所有变体都可以在同一对话框中进行配置,因此 GUI 用户只有一个过程。
CLI 过程
要使用 CLI 创建 RNAT 规则,请执行以下操作:
在命令提示符下,要创建规则并验证配置,请键入:
add rnat <name> (<network> | (<aclname> [-redirectPort <port>]))
bind rnat <name> <natIP>@ …
show rnat
要使用 CLI 修改或删除 RNAT 规则,请执行以下操作:
-
要修改 RNAT 规则,请执行以下操作:
set rnat <name> (<aclname> [-redirectPort <port>])
-
要删除 RNAT 规则,请键入命令。
rm rnat <name>
使用以下命令验证配置:
show rnat
示例:
A network address as the condition and a SNIP address as the NAT IP address:
> add rnat RNAT-1 192.168.1.0 255.255.255.0
Done
A network address as the condition and a unique IP address as the NAT IP address:
> add rnat RNAT-2 192.168.1.0 255.255.255.0
Done
> bind rnat RNAT-2 -natip 10.102.29.50
Done
If instead of a single NAT IP address you specify a range, RNAT entries are created with all the Citrix ADC-owned IP addresses, except the NSIP, that fall within the range specified:
> add rnat RNAT-3 192.168.1.0 255.255.255.0
Done
> bind rnat RNAT-3 -natip 10.102.29.[50-110]
Done
An ACL as the condition and a SNIP address as the NAT IP address:
> add rnat RNAT-4 acl1
Done
An ACL as a condition and a unique IP address as the NAT IP address:
> add rnat RNAT-4 acl1
Done
> bind rnat RNAT-4 -natip 10.102.29.50
Done
If instead of a single NAT IP address you specify a range, RNAT entries are created with all the Citrix ADC-owned IP addresses, except the NSIP, that fall within the range specified:
> add rnat RNAT-5 acl1
Done
> bind rnat RNAT-5 -natip 10.102.29.[50-70]
Done
<!--NeedCopy-->
GUI 程序
要使用 GUI 创建 RNAT 条目,请执行以下操作:
导航到“系统”>“网络”>“NAT”选项卡,然后添加新的 RNAT 规则,或编辑现有规则。
监视器 RNAT
您可以显示 RNAT 统计信息,以解决与 IP 地址转换相关的问题。
下表描述了与 RNAT 和 RNAT IP 关联的统计信息。
统计数据 | 说明 |
---|---|
接收的字节数 | RNAT 会话期间接收的字节数 |
已发送的字节 | 在 RNAT 会话期间发送的字节 |
收到的数据包 | 在 RNAT 会话期间接收的数据包 |
已发送的数据包 | 在 RNAT 会话期间发送的数据包 |
錫恩派遣 | 在 RNAT 会话期间发送的连接请求 |
本届会议 | 当前活动的 RNAT 会话 |
要使用 CLI 查看 RNAT 统计信息,请执行以下操作:
在命令提示符下,键入:
- stat rnat
示例:
> stat rnat
RNAT summary
Rate (/s) Total
Bytes Received 0 0
Bytes Sent 0 0
Packets Received 0 0
Packets Sent 0 0
Syn Sent 0 0
Current RNAT sessions -- 0
Done
>
<!--NeedCopy-->
要使用 GUI 监视 RNAT,请执行以下操作:
导航到“系统”>“网络”>“NAT” 选项卡,然后单击“统计”。
配置 RNAT6
IPv6 数据包的反向网络地址转换 (RNAT) 规则称为 RNAT6。当服务器生成的 IPv6 数据包与 RNAT6 规则中指定的条件匹配时,设备将 IPv6 数据包的源 IPv6 地址替换为配置的 NAT IPv6 地址,然后再将其转发到目标。NAT IPv6 地址是 Citrix ADC 拥有的 SNIP6 或 VIP6 地址之一。
配置 RNAT6 规则时,您可以指定 IPv6 前缀或 ACL6 作为条件:
- 使用 IPv6 网络地址。使用 IPv6 前缀时,设备会对 IPv6 地址与前缀匹配的 IPv6 数据包执行 RNAT 处理。
- 使用 ACL6。使用 ACL6 时,设备会对与 ACL6 中指定的条件匹配的 IPv6 数据包执行 RNAT 处理。
您有以下选项之一来设置 NAT IP 地址:
-
为 RNAT6 规则指定一组 Citrix ADC 拥有的 SNIP6 和 VIP6 地址。Citrix ADC 设备使用此集中的任何一个 IPv6 地址作为每个会话的 NAT IP 地址。选择基于轮循环算法,并针对每个会话完成。
-
请勿为 RNAT6 规则指定任何 Citrix ADC 拥有的 SNIP6 或 VIP6 地址。Citrix ADC 设备使用任何一个 Citrix ADC 拥有的 SNIP6 地址或 VIP6 地址作为 NAT IP 地址。选择基于与 RNAT 规则匹配的 IPv6 数据包所要到的下一个跃点网络。
CLI 过程
要使用 CLI 创建 RNAT6 规则,请执行以下操作:
在命令提示符下,要创建规则并验证配置,请键入:
- 添加 rnat6 <name>(<network>| (<acl6name>[-重定向端口 ]<port>)
- bind rnat6 <name> <natIP6>@ …
- show rnat6
要使用 CLI 修改或删除 RNAT6 规则,请执行以下操作:
- 要修改条件为 ACL6 的 RNAT6 规则,请键入 set rnat6 <name> 命令,后跟 redirectPort 参数的新值。
- 要删除 RNAT6 规则,请键入 clear rnat6 <name> 命令。
GUI 程序
要使用 GUI 配置 RNAT6 规则,请执行以下操作:
导航到“系统”>“网络”>“NAT”,单击“RNAT6”选项卡,然后添加新的 RNAT6 规则,或编辑现有规则。
监视 RNAT6
您可以显示与 RNAT6 功能相关的统计信息,以监视性能或解决与 RNAT6 功能相关的问题。您可以显示 RNAT6 规则或特定 RNAT6 规则的统计信息摘要。统计计数器反映上次重新启动 Citrix ADC 设备后的事件。重新启动 Citrix ADC 设备时,所有这些计数器都将重置为 0。
以下 列出了与 RNAT6 功能关联的一些统计计数器:
- 接收的字节 数-RNAT6 会话期间接收的总字节数。
- 已发送的字节 数-在 RNAT6 会话期间发送的总字节数。
- 接收的数据包 -RNAT6 会话期间接收的数据包总数。
- 已发送 的数据包-RNAT6 会话期间发送的数据包总数。
- Syn 已发送 -RNAT6 会话期间发送的连接请求总数
- 当前会话 -当前处于活动状态的 RNAT6 会话
使用 CLI 显示所有 RNAT6 规则的汇总统计信息:
在命令提示符下,键入:
- stat rnat6
使用 CLI 显示指定 RNAT6 规则的统计信息:
在命令提示符下,键入:
- 统计 rnat6 []<rnat6 rule name>
要使用 GUI 显示 RNAT6 统计信息,请执行以下操作:
导航到 系统 > 网络 > NAT , 单击 RNAT6 选项卡,然后单击 统计信息 。
> stat rnat6
RNAT6 summary
Rate (/s) Total
Bytes Received 178 20644
Bytes Sent 178 20644
Packets Received 5 401
Packets Sent 5 401
Syn Sent 0 2
Current RNAT6 sessions -- 1
Done
<!--NeedCopy-->
RNAT 日志条目中的日志启动时间和连接关闭原因
为了诊断或排除与 RNAT 相关的问题,Citrix ADC 设备在关闭 RNAT 会话时记录 RNAT 会话。
RNAT 会话的日志消息包含以下信息:
- Citrix ADC 拥有的 IP 地址(NSIP 地址或 SNIP 地址),其中日志消息源自该地址
- 日志创建的时间戳
- RNAT 会议的议定书
- 源 IP 地址
- RNAT IP 地址
- 目标 IP 地址
- RNAT 会话的开始时间
- RNAT 会话的关闭时间
- Citrix ADC 设备为此 RNAT 会话发送的总字节数
- Citrix ADC 设备为此 RNAT 会话接收的总字节数
- 关闭 RNAT 会话的原因。Citrix ADC 设备记录不使用设备的 TCP 代理(禁用 TCP 代理)的 TCP RNAT 会话的关闭原因。以下是 TCP RNAT 会话记录的关闭原因的类型:
- TCP FIN。RNAT 会话由于源设备或目标设备发送的 TCP FIN 而关闭。
- TCP RST。由于源设备或目标设备发送的 TCP 重置,RNAT 会话已关闭。
- 超时。RNAT 会话超时。
下表显示了 RNAT 会话的一些示例日志条目。
输入类型 | 示例日志条目 |
---|---|
UDP RNAT 会话的示例日志条目 | Dec 1 15:28:12 |
TCP RNAT 会话的示例日志条目。日志条目显示会话由于 TCP 重置而关闭 | Dec 1 15:29:59 |
TCP RNAT 会话的示例日志条目。日志条目显示会话超时 | Dec 1 15:30:12 |
RNAT 的状态连接故障转移
连接故障转移有助于防止对分布式环境中部署的应用程序的访问中断。Citrix ADC 设备现在支持与 Citrix ADC 高可用性 (HA) 设置中的 RNAT 规则相关的连接的状态连接故障转移。在 HA 设置中,连接故障转移(或连接镜像)是指在发生故障转移时保持已建立的 TCP 或 UDP 连接处于活动状态的过程。
主设备向辅助设备发送消息,以同步有关 RNAT 连接的当前信息。辅助设备仅在发生故障转移时使用此连接信息。发生故障转移时,新的主 Citrix ADC 设备会提供有关故障转移之前建立的连接的信息,因此即使在故障转移之后也会继续为这些连接提供服务。从客户端的角度来看,此故障转移是透明的。在过渡期间,客户端和服务器可能会遇到短暂的中断和重新传输。
可以根据 RNAT 规则启用连接故障转移。要在 RNAT 规则上启用连接故障转移,请使用 CLI 或 GUI 启用该特定 RNAT 规则的 Conn故障转移(连接故障转移)参数。
使用 CLI 为 RNAT 规则启用连接故障转移:
在命令提示符下,键入:
set rnat <name> -connfailover (ENABLED | DISABLED)
show rnat
使用 GUI 启用 RNAT 规则的连接故障转移:
- 导航到 “ 系统 ” > “ 网络 ” > “N AT”,然后单击 “ RNAT ” 选项卡。
- 在添加新 RNAT 规则时或编辑现有规则时,选择 连接故障转移 。
为与服务器的 RNAT 连接保留源端口
对于点击具有一个或多个 RNAT IP 地址且禁用了使用代理端口参数的 RNAT 配置的请求,Citrix ADC 设备使用 RNAT IP 地址之一和 RNAT 请求的源端口来连接到服务器。在 13.0 47.x 版本之前,如果某些其他连接中已使用同一源端口,则与服务器的 RNAT 连接(使用 RNAT 客户端的源端口)将失败。
-
源端口小于 1024。默认情况下,Citrix ADC 设备保留任何 Citrix ADC 拥有的 IP 地址(包括 RNAT IP 地址)的前 1024 个端口。在 13.0 47.x 构建之前,如果 RNAT 请求的源端口小于或等于 1024,则与服务器的 RNAT 连接(使用 RNAT 客户端的源端口)将失败。使用 13.0 47.x 版本,即使 RNAT 请求的源端口小于或等于 1024,与服务器的 RNAT 连接(使用 RNAT 客户端的源端口)也会成功。
-
源端口大于 1024。在 13.0 47.x 版本之前,如果某些其他连接中已使用同一源端口,则与服务器的 RNAT 连接(使用 RNAT 客户端的源端口)将失败。借助 13.0 47.x 版本,您可以在
Retain Source Port range
(retainsourceportrange
) 参数中指定 RNAT 客户端源端口范围,作为 RNAT 配置的一部分。Citrix ADC 设备将这些 RNAT 客户端源端口保留在 RNAT IP 地址上,仅用于与服务器的 RNAT 连接。
删除 RNAT 会话
您可以从 Citrix ADC 设备中删除任何不需要或低效的 RNAT 会话。设备立即释放为这些会话分配的资源(例如 NAT IP 地址的端口和内存),从而使资源可用于新会话。设备还会删除与这些已删除会话相关的所有后续数据包。您可以从 Citrix ADC 设备中删除所有或选定的 RNAT 会话。
要使用 CLI 清除所有 RNAT 会话,请执行以下操作:
在命令提示符下,键入:
- 冲洗抢劫
要使用 CLI 清除选择性的 RNAT 会话,请执行以下操作:
在命令提示符下,键入:
- flush rnatsession ((-network <ip_addr> -netmask <netmask>) | -natIP <ip_addr> | -aclname <string>)
要使用 GUI 清除所有或选择性的 RNAT 会话,请执行以下操作:
- 导航到 “ 系统 ” > “ 网络 ” > “ NAT”, 然后单击 “ RNAT ” 选项卡。
- 在“操 作”菜单中,单击“刷新 RNAT 会话”以删除所有或选择性 RNAT 会话(例如,删除具有特定 RNAT IP 或属于特定网络或 ACL 基于 RNAT 规则的 RNAT 会话)。
示例配置:
Clear all RNAT sessions existing on a Citrix ADC appliance
> flush rnatsession
Done
Clear all RNAT sessions belonging to network based RNAT rules that has 203.0.113.0/24 network as the matching condition.
> flush rnatsession -network 203.0.113.0 -netmask 255.255.255.0
Done
Clear all RNAT sessions with RNAT IP 192.0.2.90.
> flush rnatsession -natIP 192.0.2.90
Done
Clear all RNAT sessions belonging to ACL based RNAT rules that has ACL-RNAT-1 as the matching condition.
> flush rnatsession -aclname ACL-RNAT-1
Done
<!--NeedCopy-->