F5 LTM 知识点和实验 7-使用SNATs处理流量
  GughpBNym0yJ 2023年11月02日 29 0

第七章:使用SNATs处理流量

SNATs:

传统的vs都是对目的地址和端口进行改变,而源地址没有改变,如果你需要对源地址和源端口进行更改,则需要使用SNAT能力,好处在于: 1、允许不可路由地址(网络内部)的设备获得可路由地址以进入网络外部。2、确保目标服务器通过BIG-IP系统返回响应,而不是直接发送到原始客户端IP地址。

image-20230319202327832

SNAT提供多个节点的映射,通常是内部设备与SNAT地址之间。与nat一样,SNAT地址需要外部可路由的,而节点地址一般不可路由。与nat不同,不能向SNAT地址发起连接。这就是snat比NATs更安全的原因。只有节点可以发起连接。 当BIG-IP系统看到来自SNAT关联节点的连接发起时,源地址将从该节点的实际地址转换为SNAT地址。当目的设备响应时,SNAT地址被转换回节点地址。 snat可以以多种方式配置,包括一对一映射、多对一映射或全对一映射。一对一映射允许单个主机通过BIG-IP系统发起连接。多对一映射允许指定的主机列表通过BIG-IP系统发起连接。all-to-one映射允许所有主机通过BIG-IP系统发起连接。BIG-IP系统中需要在该节点到达的VLAN上开启SNAT功能。缺省情况下,所有vlan在创建时都使能snat。缺省情况下,snat仅支持UDP和TCP协议。注意,源端口通常在连接建立过程中进行转换,以确保所有连接的端口和地址组合都是唯一的。

有三种类型的SNAT地址: 1、一个静态地址 2、SNAT地址池 3、自动地址(bigip自身的地址)

使用SNAT pool:

当SNAT使用Automap选项时,BIG-IP系统的自身ip地址充当SNAT的源地址池。使用SNAT Pool选项的SNAT有一个专门定义为特定SNAT源地址的IP地址池。与Automap相比,这个特性有三个明显的优势:

  • 所有使用Automap的snat共享相同的潜在源地址集。一旦源地址被转换,就不可能知道哪个SNAT处理流量,因此也不可能知道原始客户端的性质。对于SNAT池,转换后的源地址将是与已知SNAT关联的特定池的成员,该SNAT具有定义良好的客户端列表。
  • 虚拟服务器地址可以是SNAT池的成员。这有助于希望将虚拟服务器及其池与SNAT地址和允许的节点在逻辑上关联起来的站点,同时不会失去跨出口vlan负载平衡流量的能力。(比如多运营商出口,做统计)
  • SNAT池是可以被规则引用的独立对象。这将在下一节中讨论。

将SNAT作为监听器

请记住,SNAT比nat更安全,因此SNAT不允许通过BIG-IP系统发起到SNAT地址的流量。但是,与nat一样,从SNAT中配置的网络范围发起的流量将被允许通过BIG-IP系统,源地址也会被修改为SNAT地址。机器上可能没有配置虚拟服务器,但是如果配置了SNAT,那么BIG-IP系统将允许与SNAT中指定的源地址列表匹配的任何客户端通过流量。

对于下面配置的SNAT,此SNAT只会将172.16.0.0/16的源地址更改为207.10.2.102。192.168.x.x源地址包可能仍然被这个BIG-IP处理,但是它的源地址不会被这个特定的SNAT改变。

image-20230319221816820

SNAT特异性

就像虚拟服务器一样,多个snat可能匹配同一个数据包。因此,就像vs一样,在确定将使用哪个SNAT方面也有不同的具体标准。最优的是在vs中配置的SNAT。这意味着vs运行在snat之前。接下来,根据Origin字段中的网络掩码的具体程度应用snat。

image-20230319224144389

VIP反弹(vip bounceback)

当client和rs都在bigip的同一个vlan侧,则需要使用vip反弹能力。 image-20230319231455239

  • 普通VLAN客户端发起到虚拟服务器的连接。
  • 连接成功后,BIG-IP LTM系统会处理源IP地址,并将其从内部客户端修改为SNAT/NAT地址。
  • BIG-IP LTM系统处理目的IP地址,并将其从Virtual Server IP地址更改为池成员的IP地址。
  • 当节点回复连接时,它将回复SNAT/NAT地址(而不是原始源地址)。

SNAT的附加选项

SNAT是将一个或多个原始客户端IP地址映射到一个转换地址。你可以使用iRule实现这种类型的SNAT映射,而不是创建SNAT对象。对于这种类型的SNAT, LTM系统用于决定何时应用转换地址的标准基于您在irule中指定的任何数据,例如HTTP cookie或服务器端口。

创建步骤:1、创建一个snat pool。2、创建一个irule,匹配上snat pool。

示例1:

使用TCP::local_port属性去进行匹配,再将地址通过指定的snatpool进行转换。

rule my_iRule {
when CLIENT_ACCEPTED
 if { [TCP::local_port] euqals 531}{
 snatpool /Common/chat_snatpoll
 }
 elseif { [TCP::local_port] euqals 25}{
 snatpool /Common/smtp_snatpoll
 }
 else { 
 snatpool /Common/other_snatpoll
 }
 pool /Common/out_pool
}

当LTM系统检测到CLIENT_ACCEPTED状态时,irule中的if语句表示LTM系统测试客户端请求头中指定的服务器端口值(TCP::local_port = 531)。根据结果,LTM系统选择一个SNAT池,或者检查不同的服务器端口值并选择不同的SNAT池,或者直接选择第三个SNAT池。对于所有结果,irule还选择指定的负载平衡池。

示例2:

rule SwitchRule{
  when CLIENT_ACCEPTED{
  set MYPORT [TCP::local_port]
    switch $MYPORT{
        80{
        snatpool SNATPool_80
        pool /Common/http_pool
        }
        443 {
        snatpool SNATPool_443
        pool /Common/https_pool
        }
        default {
        snatpool /Common/SNATPool_Other
        reject
        }
    }
  }
}

回顾:

virtual server:vs是虚拟IP地址和虚拟服务的组合。一般情况下,报文从客户端出发时,目的地址为BIG-IP系统上的虚拟服务器地址,源地址为客户端地址。BIG-IP系统接收该目的地址并将其转换为池成员之一的IP地址。响应包将源地址和目标地址颠倒过来,因此现在需要将源地址转换回去。虚拟服务器有时被描述为一对多进程,发送到单个虚拟服务器地址的流量可以分配到多个目标设备。

SNATs:snat在连接进程启动时执行源地址转换。与其他BIG-IP进程一样,在处理响应报文时转换回真实ip。SNAT将只对指定的客户端执行此处理,不支持到SNAT地址的连接请求。SNAT参数定义了源地址转换到的地址、客户端从哪个VLAN到达以及支持的客户端地址。SNAT处理可以在入站和出站流量上进行,但通常用于出站流量。snat被描述为多对一过程;当使用SNAT时,许多客户端可以共享相同的源地址。

NATs:nat可以在连接建立时转换源地址或目标地址,然后将反向响应过程。与虚拟服务器和snat不同,nat是一对一的过程。其中一个地址,即NAT地址,将侦听连接尝试。如果流量发送到该地址,则目的地址转换为节点地址。反之,如果节点通过BIG-IP系统发起连接,则源地址将转换为NAT地址。

image-20230320230511428

过滤器(filter)、虚拟服务器(vs)、SNAT和NAT优先级

BIG-IP对报文的处理是有优先级的。顺序在下表中。然而,有两点需要注意。如果启用了筛选器,管理员可以选择筛选器是否影响现有连接。缺省情况下,已存在连接的流量不受过滤器影响。但是如果管理员选择影响现有连接,筛选器将优先于会话表。此外,每个虚拟服务器、SNAT和NAT可以在0个或多个vlan上启用。缺省情况下,以上对象能被使用在全部的vlan上。

监听器Listener 地址Address 示例
存在的会话
包过滤器
vs 指定ip:port 10.10.10.10:80
指定ip 10.10.10.10:*
网络地址和特定端口 10.10.10.10/24:80
网络地址 10.10.10.10/24:*
特定端口 0.0.0.0/0:80
默认地址 0.0.0.0/0:*
SNAT 指定地址 192.168.20.1
网段 192.168.20.0/24
默认地址 0.0.0.0/0
NAT 源地址匹配上客户端地址
目标地址匹配上nat地址

实验:

测试SNAT优先顺序:

Destination No Snat Auto Map on https_vs Snat with Origin Network Range All Address Snat
http_vs
https_vs
172.16.20.1

1、清除http_vs和https_vs的Source Address Transaction配置。

2、在https_vs中将Source Address Transaction配置成Auto Map。

3、配置一个SNAT

路径:Local Traffic ›› Address Translation : SNAT Pool List

  • Name:snat_pool
  • Member List:172.16.1.150

image-20230622154816311

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  jnZtF7Co41Wg   2023年12月11日   29   0   0 nginx客户端服务端
  jnZtF7Co41Wg   2023年12月09日   27   0   0 客户端服务端数据
  Yoru5qB4TSKM   2023年12月10日   39   0   0 服务器重启IP
  jnZtF7Co41Wg   2023年12月10日   22   0   0 nginx客户端服务端NFS
  aYmIB3fiUdn9   2023年12月08日   50   0   0 客户端IPNATlvs
GughpBNym0yJ