NAT 和 SNAT 简介
用户可以将 BIG-IP ®系统配置为转换通过系统的数据包中的 IP 地址。用户可以为网络地址转换 (NAT) 和源网络地址转换 (SNAT) 配置对象。
NAT 和 SNAT 的比较
SNAT 类似于 NAT,除了此表中列出的差异。
NAT | SNAT |
---|---|
用户只能将一个原始地址映射到转换地址。 | 用户可以将多个原始地址映射到一个转换地址。用户甚至可以将网络上的所有节点地址映射到单个 SNAT 对象中的单个公共 IP 地址。 |
内部节点上的所有端口都是开放的。 | 默认情况下,SNAT 仅支持 UDP 和 TCP。这使得 SNAT 比 NAT 更安全。 |
本地流量管理器不跟踪 NAT 连接。 | 本地流量管理器跟踪 SNAT 连接,这反过来又允许 SNAT 和虚拟服务器使用相同的公共 IP 地址。 |
用户必须在内部节点的流量到达 BIG-IP 系统的内部 VLAN 上显式启用 NAT。 | 默认情况下,用户创建的 SNAT 在所有 VLAN 上启用。 |
关于 NAT
在某些情况下,用户可能希望允许外部网络上的客户端直接向特定的内部节点发送请求(从而绕过正常的负载平衡服务器选择)。要将请求直接发送到内部服务器,客户端通常需要知道内部节点的 IP 地址,通常是私有类 IP 地址。因为私有类 IP 地址是不可路由的,所以用户可以改为创建网络转换地址 (NAT)。一种 NAT 是 BIG-IP 本地流量管理器的一项功能,它提供可路由的 IP 地址,外部节点可以使用该地址向内部节点发送流量或从内部节点接收流量。
更具体地说,NAT 是一种地址转换对象,它指示本地流量管理器 (LTM) 将数据包标头中的一个 IP 地址转换为另一个 IP 地址。NAT 由公共 IP 地址到内部私有类 IP 地址的一对一映射组成。
用户可以通过两种不同的方式使用 NAT:
将私有类目标地址转换为公共地址
当外部节点将流量发送到 NAT 中定义的公共 IP 地址时,本地流量管理器会自动将该目标地址转换为关联的私有类 IP 地址,该地址代表内部网络上的特定节点。这种翻译对发送流量的外部节点是隐藏的。
将私有类源地址转换为公共地址
用户还可以使用 NAT 将内部节点的私有类源 IP 地址转换为公共 IP 地址。这种翻译对接收流量的外部节点是隐藏的。
总而言之,NAT 提供了一个可路由的地址,用于向具有私有类 IP 地址的节点发送数据包或从该节点发送数据包。
创建 NAT 时,用户只能将一个私有类 IP 地址映射到特定的公共 IP 地址。也就是说,NAT 始终表示私有类 IP 地址和公共 IP 地址之间的一对一映射。如果要将多个私有类 IP 地址(即多个内部节点)映射到单个公共 IP 地址,则可以创建一个 SNAT。
NAT 不支持端口转换,并且不适用于在数据包中嵌入 IP 地址的协议,例如 FTP。
当 用户 使用 NAT 提供对内部节点的访问时,该内部节点上的所有端口都是打开的。要降低此安全风险,请考虑改用 SNAT。
本地流量管理器可以将 NAT 应用于入站或出站连接。
入站连接的 NAT
关于 NAT,一个 入站 连接是由外部网络上的节点发起并进入 BIG-IP ®系统到内部网络上的节点的连接。
Without a NAT
通常,进入 BIG-IP 系统的流量会根据为该池配置的负载平衡方法,通过以下方式将负载平衡到池中的服务器:
- 外部网络上的客户端通常将流量发送到 BIG-IP 系统上的虚拟服务器。在这种情况下,目标 IP 地址是虚拟服务器地址。
- 收到数据包后,虚拟服务器通常将该目标 IP 地址转换为池成员的 IP 地址,以实现对该数据包的负载平衡。
- 然后池成员使用服务器节点路由表中指定的路由(理想情况下,分配给内部 VLAN 的浮动 IP 地址)通过 BIG-IP 系统发回其响应。收到响应后,本地流量管理器执行反向转换;也就是说,系统将池成员的实际源地址转换为虚拟服务器地址。这导致对客户端的响应中的源地址是虚拟服务器地址,这是客户端期望看到的源地址。
这种典型的负载平衡方案确保对于负载平衡的流量,客户端系统永远不会看到内部节点的内部私有类 IP 地址。
使用 NAT
如果客户端系统想要绕过负载平衡机制将数据包直接发送到内部网络上的特定节点,则客户端需要一个可路由的 IP 地址用于将数据包发送到该服务器节点。
NAT 通过提供一个可路由的地址来解决这个问题,客户端可以使用该地址直接向内部服务器发出请求。通过这种方式,NAT 执行的地址转换类型与虚拟服务器在对池成员的连接进行负载平衡时执行的类型相同。然而,在 NAT 的情况下,不会发生负载平衡,因为客户端正在向特定节点发送请求。NAT 将请求中的公共目标 IP 地址转换为内部节点的私有类 IP 地址。
当服务器节点发送响应时,本地流量管理器执行反向转换,其行为方式与虚拟服务器相同。
本地流量管理器不跟踪 NAT 连接。因此, 用户 在 NAT 中定义的公共 IP 地址不能与虚拟地址或 SNAT 地址相同。
例如,假设内部网络上的一个节点(如负载均衡服务器)的私有类 IP 地址为 172.16.20.3 . 用户可以创建一个旨在转换用户选择的公共目标地址的 NAT(例如 207.10.1.103 ) 到私有类地址 172.16.20.3 . 因此,每当外部网络上的节点启动到该地址的连接时 207.10.1.103 , 本地流量管理器将该公共目标地址转换为私有类地址 172.16.20.3 .
在此示例中,NAT 为外部节点提供可路由地址以启动与内部节点的连接。
创建 NAT 时,用户必须定义两个设置:NAT 地址和源地址。在我们的示例中:
- NAT 地址为207.10.1.103, 源地址为 172.16.20.3
- 该连接是入站连接,这意味着该连接是从外部网络通过 BIG-IP 系统启动到内部网络的。
- 本地流量管理器将 NAT 地址转换为源地址。
- NAT 地址和源地址是目的地址。
用于出站连接的 NAT
上一节总结了 BIG-IP ®系统通常如何对传入流量进行负载平衡,并将响应中的源 IP 地址转换回虚拟地址。
然而,有时内部节点需要启动连接,而不是简单地响应请求。当内部网络上的一个节点发起一个连接时,该连接被认为是一个 出境 联系。在这种情况下,由于传出的数据包不代表对负载平衡请求的响应,因此数据包不会通过虚拟服务器,因此系统不会执行通常的源 IP 地址转换。
如果没有 NAT,源 IP 地址是不可路由的地址。但是,使用 NAT,本地流量管理器将内部节点的私有类 IP 地址转换为公共 IP 地址,然后外部节点可以将其响应路由到该地址。
例如,假设一个内部节点(如邮件服务器)的私有类 IP 地址为172.16.20.1. 用户可以创建一个旨在转换私有类地址的 NAT172.16.20.1到用户选择的公共源地址(例如207.10.1.101)。因此,每当内部节点 172.16.20.1发起一个以外部网络节点为目的地的连接,系统将转换该节点的源地址 172.16.20.1到其公共地址(207.10.1.101)。
在此示例中,NAT 为内部节点提供了一种方式来启动与外部网络上的节点的连接,而无需将私有类 IP 地址显示为源地址。
NAT 有两种设置;NAT 地址和来源地址. 在这个例子中:
- NAT 地址为207.10.1.101 , 源地址为
172.16.20.1
- 该连接是出站连接,这意味着该连接是从内部网络通过本地流量管理器启动到外部网络的。
- 本地流量管理器将源地址转换为 NAT 地址。
- 源地址和 NAT 地址是源地址。
NAT 始终表示公共地址和私有类地址之间的一对一映射。但是,如果用户想将多个内部节点映射到一个公共地址,用户可以使用安全网络转换地址 (SNAT) 来代替 NAT。用户只能将 SNAT 用于出站连接。
关于 SNAT
当用户需要确保服务器响应始终通过 BIG-IP ®系统返回时,或者当用户想要隐藏来自外部设备的服务器发起请求的源地址时,用户可以实施 SNAT。
一种安全网络地址转换 (SNAT)
对于入站连接,即由客户端节点发起的连接,SNAT 确保服务器节点始终通过 BIG-IP 系统发送响应,而服务器的默认路由通常不会这样做。因为 SNAT 导致服务器通过 BIG-IP 系统发回响应,客户端看到响应来自客户端发送请求的地址,因此接受响应。
是 BIG-IP 本地流量管理器功能,可将连接中的源 IP 地址转换为用户定义的 BIG-IP 系统 IP 地址。然后,目标节点在响应请求时使用该新源地址作为其目标地址。
对于出站连接,即由服务器节点发起的连接,SNAT 确保服务器节点的内部 IP 地址在服务器发起与该主机的连接时对外部主机保持隐藏。
客户端发起(入站)连接的 SNAT
在最常见的客户端-服务器网络配置中,Local Traffic Manager 标准地址转换机制确保服务器响应通过 BIG-IP ®系统返回到客户端,从而反转原始目标 IP 地址转换。这种典型的网络配置如下:
- 服务器节点与 BIG-IP 系统位于同一子网上。
- 客户端节点与服务器节点位于不同的子网上。
- BIG-IP 系统是服务器子网的默认网关。
但是,在一些非典型网络配置中,标准 BIG-IP 系统地址转换序列本身并不能确保服务器响应使用所需的返回路径。这些非典型配置的示例是:
当客户端和服务器在同一个网络上时
如果要将请求负载平衡到与客户端节点位于同一网络上的服务器节点,则可以创建一个 SNAT,以便通过虚拟服务器将服务器响应发送回,而不是直接从服务器节点发送到客户端节点。否则,可能会出现问题,例如客户端拒绝响应,因为响应的源与请求的目标不匹配。被称为 虚拟服务器反弹,此 SNAT 配置使响应的源与请求的目标匹配,从而确保客户端节点接受响应。当 用户希望将来自 Web 服务器的请求负载平衡到同一网络上的应用程序服务器时,可以使用这种配置。
当服务器节点的默认网关不是 BIG-IP 系统时
由于各种原因,不能总是将服务器节点的默认路由定义为通过 BIG-IP 系统返回的路由。同样,这可能会导致客户端拒绝响应等问题,因为响应的源与请求的目标不匹配。解决方案是创建一个 SNAT。当本地流量管理器随后将请求中客户端节点的源 IP 地址转换为 SNAT 地址时,这会导致服务器节点在发送响应时使用该 SNAT 地址作为其目标地址。这反过来又迫使响应通过 BIG-IP 系统而不是通过服务器节点的默认网关返回到客户端节点。
使用 OneConnect 功能时
Local Traffic Manager OneConnect ™功能允许客户端请求重新使用空闲的服务器端连接。如果没有 SNAT,服务器端连接中的源 IP 地址仍然是最初建立连接的客户端节点的地址,而不管其他哪些客户端节点重新使用该连接。尽管这不是流量路由的问题,但在检查各种类型的系统输出时, 用户可能会感到困惑。SNAT 解决了这个问题。
将 SNAT 用于入站连接可能会影响临时端口的可用性。这可能导致 SNAT 在某些源端口可用之前无法处理其他连接。
此图显示了当本地流量管理器未定义为服务器的默认网关并且用户尚未为入站流量配置 SNAT 时客户端发起的连接的典型问题。
为了防止这些问题,用户可以配置入站 SNAT。一个 入站 SNAT 将请求中的原始客户端源 IP 地址转换为 BIG-IP 系统虚拟服务器或 BIG-IP 系统自身 IP 地址,强制后续服务器响应直接返回到本地流量管理器。当系统上配置了入站 SNAT 时,本地流量管理器不仅会转换请求中的目标 IP 地址(使用标准地址转换机制),还会转换请求中的源 IP 地址(使用 SNAT)。
下图显示,通过配置 SNAT,用户可以确保响应通过 BIG-IP 系统返回,而不是通过默认网关返回,从而确保客户端可以接受服务器响应。
由于目标和源 IP 地址匹配,客户端接受响应
服务器发起(出站)连接的 SNAT
当内部服务器启动与外部主机的连接时,SNAT 可以将传出连接中的一个或多个服务器的私有源 IP 地址转换为单个可公开路由的地址。然后,外部目标主机可以在发送响应时将此公共地址用作目标地址。这样,内部节点的私有类 IP 地址对外部主机保持隐藏。
更具体地说,用于传出连接的 SNAT 以下列方式工作:
- 本地流量管理器从原始 IP 地址(即具有私有 IP 地址的内部服务器)接收数据包,并检查该源地址是否在 SNAT 中定义。
- 如果在 SNAT 中定义了原始 IP 地址,则本地流量管理器将该源 IP 地址更改为在 SNAT 中定义的转换地址。
- 本地流量管理器然后将 SNAT 转换地址作为源地址的数据包发送到目标主机。
在此传出 SNAT 示例中,本地流量管理器会导致三个内部节点,其 IP 地址 172.16.20.4 , 172.16.20.5 , 和 172.16.20.6 , 通告公共 IP 地址 207.10.1.102 作为三个传出连接中的源 IP 地址。
多个传出连接的示例 SNAT
SNAT 类型
用户可以创建的 SNAT 类型有:
标准 SNAT
标准 SNAT 是用户使用 BIG-IP 配置实用程序创建的对象,它指定一个或多个原始 IP 地址到转换地址的映射。对于这种类型的 SNAT,BIG-IP ™系统用来决定何时应用转换地址的标准严格基于原始 IP 地址。也就是说,如果数据包从用户在 SNAT 中指定的原始 IP 地址到达,则 BIG-IP 系统将该地址转换为指定的转换地址。用户可以创建三种类型的标准 SNAT:
- 用户指定特定转换地址的 SNAT
- 使用自动映射功能的 SNAT
- 一个 SNAT,用户在其中指定一个 SNAT 池作为用户的转换地址
分配为虚拟服务器资源的 SNAT 池
这种类型的 SNAT 仅包含一个 SNAT 池,用户可以将其作为资源直接分配给虚拟服务器。当 用户实现这种类型的 SNAT 时,用户只创建了一个 SNAT 池;用户不需要创建 SNAT 对象或 iRule。
智能 SNAT
与标准 SNAT 一样,智能 SNAT 是将一个或多个原始 IP 地址映射到转换地址。但是,用户可以在 iRule 中实现这种类型的 SNAT 映射,而不是通过创建 SNAT 对象。对于这种类型的 SNAT,本地流量管理器用于决定何时应用转换地址的标准基于用户在 iRule 中指定的任何数据,例如 HTTP cookie 或服务器端口。
关于转换地址
用户可以指定要映射到原始 IP 地址的转换地址。翻译地址可以有以下三种形式:
IP 地址
创建 SNAT 时,用户可以指定希望 SNAT 用作转换地址的特定 IP 地址。
SNAT 池
指定此值允许用户指定要将原始 IP 地址映射到的现有 SNAT 池。
SNAT 自动映射
与 SNAT 池类似,SNAT 自动映射功能允许用户将一个或多个原始 IP 地址映射到转换地址池。使用 SNAT 自动映射功能,用户无需创建池。相反,本地流量管理器有效地为用户创建一个池,使用自己的 IP 地址作为池的转换地址。
原始 IP 地址
用户可以指定要映射到转换地址的原始 IP 地址。用户可以指定一个 IP 地址或多个 IP 地址。
VLAN 流量
用户可以指定要应用 SNAT 的一个或多个 VLAN。
关于临时端口耗尽
当用户对客户端发起的(入站)连接使用安全网络地址转换 (SNAT) 时,临时端口的可用性可能会降低并可能耗尽,导致 SNAT 无法处理其他连接,直到源端口再次可用。用户可以将 BIG-IP 系统配置为累积实时临时端口统计信息,并在使用量超过指定阈值级别时记录错误并提供简单网络管理协议 (SNMP) 警报通知,从而使用户能够评估即将耗尽临时端口并做出相应的响应。
配置临时端口耗尽功能时,用户可以启用端口耗尽阈值,指定阈值触发级别,并指定以秒为单位的超时持续时间。以下命令应用默认值。
代码语言:javascript复制# tmsh modify ltm global-settings traffic-control port-find-threshold-warning enabled
# tmsh modify ltm global-settings traffic-control port-find-threshold-trigger 8
# tmsh modify ltm global-settings traffic-control port-find-阈值超时 30
.
.