第七章:使用SNATs处理流量
SNATs:
传统的vs都是对目的地址和端口进行改变,而源地址没有改变,如果你需要对源地址和源端口进行更改,则需要使用SNAT能力,好处在于: 1、允许不可路由地址(网络内部)的设备获得可路由地址以进入网络外部。2、确保目标服务器通过BIG-IP系统返回响应,而不是直接发送到原始客户端IP地址。
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改变。
SNAT特异性
就像虚拟服务器一样,多个snat可能匹配同一个数据包。因此,就像vs一样,在确定将使用哪个SNAT方面也有不同的具体标准。最优的是在vs中配置的SNAT。这意味着vs运行在snat之前。接下来,根据Origin字段中的网络掩码的具体程度应用snat。
VIP反弹(vip bounceback)
当client和rs都在bigip的同一个vlan侧,则需要使用vip反弹能力。
- 普通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地址。
过滤器(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