ADC

高级策略表达式:IP 和 MAC 地址、吞吐量、VLAN ID

您可以使用高级策略表达式前缀来返回 IPv4 和 IPv6 地址、MAC 地址、IP 子网、有用的客户端和服务器数据,例如接口端口(Rx、Tx 和 RxTx)的吞吐率以及接收数据包所通过的 VLAN 的 ID。然后,您可以使用各种运算符来计算这些表达式前缀返回的数据。

IP 地址和 IP 子网的表达式

您可以使用高级策略表达式来评估采用 Internet 协议版本 4 (IPv4) 或 Internet 协议版本 6 (IPv6) 格式的地址和子网。IPv6 地址和子网的表达式前缀在前缀中包含 IPv6。IPv4 地址和子网的表达式前缀在前缀中包含 IP。以下是标识请求是否来自特定 IPv4 子网的表达式示例。

client.ip.src.in_subnet(147.1.0.0/16)
<!--NeedCopy-->

以下是两个重写策略示例,它们检查从中接收数据包的子网并对主机报头执行重写操作。配置了这两个策略后,执行的重写操作取决于请求中的子网。这两个策略评估 IPv4 地址格式的 IP 地址。

- add rewrite action URL1-rewrite-action replace "http.req.header("Host")" ""www.mycompany1.com""
- add rewrite policy URL1-rewrite-policy "http.req.header("Host").contains("www.test1.com") && client.ip.src.in_subnet(147.1.0.0/16)" URL1-rewrite-action
- add rewrite action URL2-rewrite-action replace "http.req.header("Host")" ""www.mycompany2.com""
- add rewrite policy URL2-rewrite-policy "http.req.header("Host").contains("www.test2.com") && client.ip.src.in_subnet(10.202.0.0/16)" URL2-rewrite-action
<!--NeedCopy-->

注意

前面的示例是您在 NetScaler 命令行界面 (CLI) 中键入的命令,因此,每个引号前面必须有反斜杠 (\)。 有关详细信息,请参阅在策略中配置高级策略表达式。“

IPV4 地址和 IP 子网的前缀

下表介绍了返回 IPv4 地址和子网以及 IPv4 地址段的前缀。您可以使用这些前缀特定于 IPv4 地址的数字运算符和运算符。有关数字运算的更多信息,请参阅“表达式前缀的基本操作”和“数字的复合运算”。“

表 1. 评估 IP 和 MAC 地址的前缀

前缀 说明
CLIENT.IP.SRC 以 IP 地址或数字形式返回当前数据包的源 IP。
CLIENT.IP.DST 以 IP 地址或数字形式返回当前数据包的目标 IP。
SERVER.IP.SRC 以 IP 地址或数字形式返回当前数据包的源 IP。
SERVER.IP.DST 以 IP 地址或数字形式返回当前数据包的目标 IP。

IPV4 地址的操作

IPV4 操作的前缀 表描述了可以与返回 IPv4 地址的前缀一起使用的运算符。

关于 IPv6 表达式

与旧的 IPv4 格式相比,IPv6 地址格式具有更大的灵活性。IPv6 地址采用十六进制格式 (RFC 2373)。在以下示例中,示例 1 是 IPv6 地址,示例 2 是包含 IPv6 地址的 URL,示例 3 包含 IPv6 地址和端口号。

示例 1:

9901:0ab1:22a2:88a3:3333:4a4b:5555:6666
<!--NeedCopy-->

示例 2:

http://[9901:0ab1:22a2:88a3:3333:4a4b:5555:6666]/
<!--NeedCopy-->

示例 3:

https://[9901:0ab1:22a2:88a3:3333:4a4b:5555:6666]:8080/
<!--NeedCopy-->

在示例 3 中,括号将 IP 地址与端口号 (8080) 分隔开来。

请注意,只能使用 ‘+’ 运算符将 IPv6 表达式与其他表达式组合起来。输出是从各个表达式返回的字符串值的串联。不能将任何其他算术运算符与 IPv6 表达式结合使用。以下语法是一个示例:

client.ipv6.src + server.ip.dst
<!--NeedCopy-->

例如,如果客户端源 IPv6 地址为 ABCD:1234::ABCD,而服务器目标 IPv4 地址为 10.100.10.100,则前面的表达式将返回 "ABCD:1234::ABCD10.100.10.100"

请注意,NetScaler 设备收到 IPv6 数据包时,它会从未使用的 IPv4 地址范围分配一个临时 IPv4 地址,并将数据包的源地址更改为此临时地址。在响应时,传出数据包的源地址将替换为原始 IPv6 地址。

注意

除了生成布尔结果的表达式之外,您可以将 IPv6 表达式与任何其他表达式结合使用。

IPv6 地址的表达式前缀

下表中的表达式前缀返回的 IPv6 地址可以视为文本数据。例如,前缀 client.ipv6.dst 将目标 IPv6 地址作为字符串返回,该字符串可以作为文本进行评估。

下表介绍了返回 IPv6 地址的表达式前缀。

表 3. 返回文本的 IPv6 表达式前缀

前缀 说明
CLIENT.IPV6 在当前数据包中的 IPv6 地址上运行。
CLIENT.IPV6.DST 返回 IP 报头的目标字段中的 IPv6 地址。
CLIENT.IPV6.SRC 返回 IP 报头的源字段中的 IPv6 地址。以下是示例: client.ipv6.src.in_subnet(2007::2008/64) client.ipv6.src.get1.le(2008)
SERVER.IPV6 在当前数据包中的 IPv6 地址上运行。
SERVER.IPV6.DST 返回 IP 报头的目标字段中的 IPv6 地址。
SERVER.IPV6.SRC 返回 IP 报头的源字段中的 IPv6 地址。以下是示例: server.ipv6.src.in_subnet(2007::2008/64) server.ipv6.src.get1.le(2008)

IPv6 前缀的操作

下表介绍了可与返回 IPv6 地址的前缀一起使用的运算符:

表 4. 评估 IPv6 地址的操作

IPv6 操作 说明
<ipv6>.EQ(<IPv6_address> 如果 IP 地址值与参数相同,则返回布尔值 TR <IPv6_address> UE。以下是一个示例: client.ipv6.dst.eq(ABCD:1234::ABCD)
<ipv6>.GET1. . .GET8 以数字形式返回 IPv6 地址的一段。以下示例表达式从 ipv6 地址 1000:1001:CD 10:0000:0000:89 AB: 4567: CDE: 检索数据段 client.ipv6.dst.get5 extracts 0000,这是地址中的第五组位。client.ipv6.dst.get6 extracts 89AB. client.ipv6.dst.get7 extracts 4567. 您可以对这些区段执行数字运算。请注意,当您检索整个 IPv6 地址时,不能执行数字操作。这是因为返回完整 IPv6 地址的表达式(例如 CLIENT.IPV6.SRC)以文本格式返回地址。
<ipv6>.IN_SUBNET(<subnet>) 如果 IPv6 地址值位于 <subnet> 参数指定的子网中,则返回布尔值 TRUE。以下是一个示例: client.ipv6.dst.eq(1000:1001:CD10:0000:0000:89AB:4567:CDEF/60)
<ipv6>.IS_IPV4 如果这是 IPv4 客户端,则返回布尔值 TRUE;如果不是,则返回布尔值 FALSE。
<ipv6>.SUBNET(<n>) 应用作为参数指定的子网掩码后返回 IPv6 地址。子网掩码的值可以介于 0 到 128 之间。例如: CLIENT.IPV6.SRC.SUBNET(24)

MAC 地址的表达式

MAC 地址由格式为 ##:##:##:##:##:## 的冒号分隔的十六进制值组成,其中每个“#”表示 0 到 9 之间的数字或 A 到 F 之间的字母。dAdvanced 策略表达式前缀和运算符可用于评估源和目标 MAC 地址。

MAC 地址的前缀

下表介绍了返回 MAC 地址的前缀。

表 5. 评估 MAC 地址的前缀

前缀 说明
client.ether.dstmac 返回以太网报头的目标字段中的 MAC 地址。
client.ether.srcmac 返回以太网报头的源字段中的 MAC 地址。

MAC 地址的操作

下表介绍了可与返回 MAC 地址的前缀一起使用的运算符。

表 6. MAC 地址上的操作

前缀 说明
<mac address>.EQ(<address>) 如果 MAC 地址值与 <address> 参数相同,则返回布尔值 TRUE。
<mac address>.GET1. . .GET4 返回从 GET 操作中指定的 MAC 地址段中提取的数值。例如,如果 MAC 地址是 12:34:56:78:9 a: bc,则以下内容返回 34: client.ether.dstmac.get2

数字客户端和服务器数据的表达式

下表介绍了用于处理数字客户端和服务器数据的前缀,包括吞吐量、端口号和 VLAN ID。

表 7. 用于评估数字客户端和服务器数据的前缀

前缀 说明
client.interface.rxthroughput 返回一个整数,表示过去七秒内接收的原始流量吞吐量(以千字节/秒 (KBps) 为单位)。
client.interface.txthroughput 返回一个整数,表示过去七秒内的原始传输流量吞吐量(以 KBps 为单位)。
client.interface.rxtxthroughput 返回一个整数,表示过去七秒内接收和传输的原始流量吞吐量(以 KBps 为单位)。
server.interface.rxthroughput 返回一个整数,表示过去七秒内接收的原始流量吞吐量(以 KBps 为单位)。
server.interface.txthroughput 返回一个整数,表示过去七秒内的原始传输流量吞吐量(以 KBps 为单位)。
server.interface.rxtxthroughput 返回一个整数,表示过去七秒内接收和传输的原始流量吞吐量(以 KBps 为单位)。
server.vlan.id 返回当前数据包通过该 VLAN 进入 NetScaler 的数字 ID。
client.vlan.id 返回当前数据包进入 NetScaler 的 VLAN 的数字 ID。
高级策略表达式:IP 和 MAC 地址、吞吐量、VLAN ID