Citrix 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-->

注意

上述示例是您在 Citrix ADC 命令行界面 (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"

请注意,Citrix ADC 设备收到 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 进入 Citrix ADC 的数字 ID。
client.vlan.id 返回当前数据包进入 Citrix ADC 的 VLAN 的数字 ID。
高级策略表达式:IP 和 MAC 地址、吞吐量、VLAN ID