重写 MPLS 和 IPv4 数据包标头
您可以同时对 MPLS 和 IPv4 数据包标头应用重写规则。这允许您在 LSP 入口处初始化 MPLS、EXP 和 IP 优先级位。您可以根据流量是 VPN 还是非 VPN 来配置不同的重写规则。
运行 Junos OS 演化版的设备不支持对 VPN 和非 VPN 流量使用不同的重写规则。
表 1 显示了默认的 MPLS EXP 重写规则。
转发类 |
丢失优先级 |
MPLS EXP 重写值 |
---|---|---|
|
|
000 |
|
|
001 |
|
|
010 |
|
|
011 |
|
|
100 |
|
|
101 |
|
|
110 |
|
|
111 |
默认情况下,IP 优先级重写规则会更改服务类型 (ToS) 字节的前三位,而保留最后三位不变。此默认行为仅适用于在提供商边缘 (PE) 路由器上为具有 IPv4 有效负载的 MPLS 数据包配置的重写规则。在中转路由器 (P) 上,在外部 MPLS 报头中设置 EXP 位时,我们不会更改内部 IPv4 报头和有效负载。
要覆盖默认 MPLS EXP 重写表并同时重写 MPLS 和 IPv4 数据包标头,请在[edit class-of-service interfaces interface-name unit logical-unit-number rewrite-rules exp rewrite-rule-name]
层级包含以下protocol
语句:
[edit class-of-service interfaces interface-name unit logical-unit-number rewrite-rules exp rewrite-rule-name] protocol protocol-types;
该 protocol
语句定义应用指定重写规则的 MPLS 数据包类型和数据包标头。MPLS 数据包可以是标准 MPLS 数据包,也可以是带有 IPv4 有效负载的 MPLS 数据包。使用以下选项指定 MPLS 数据包的类型:
-
mpls-any
- 将重写规则应用于 MPLS 数据包,并将 CoS 值写入 MPLS 报头。 -
mpls-inet-both
- 将 CoS 值应用于提供商边缘 (PE) 路由器上 VPN 数据包的 MPLS 和 IPv4 报头。在核心路由器上,此选项仅重写 MPLS 标头,不会重写内部 IPv4 有效负载中的 CoS 位。 -
mpls-inet-both-non-vpn
- 将重写规则应用于具有 IPv4 有效负载的非 VPN MPLS 数据包。将 CoS 值应用于提供商边缘 (PE) 路由器上非 VPN 数据包的 MPLS 和 IPv4 报头。在核心路由器上,此选项仅重写 MPLS 标头,不会重写内部 IPv4 有效负载中的 CoS 位。
Junos OS 演化版仅支持选项 mpls-any
。运行 Junos OS 演化版的设备不支持对 VPN 和非 VPN 流量使用不同的重写规则。
在 MX 系列路由器上,通过将独立的 DSCP 或 IPv4 优先级重写规则和 EXP 重写规则附加到同一核心接口,可以同时执行 DSCP 和 EXP 重写。因此,当 MPLS 核心上的入口提供商边缘 (PE) 路由器接收数据包时,您可以重写这两个代码点(DSCP 和 EXP)。
使用重写规则映射覆盖默认值的替代方法是配置默认数据包标头重写映射,如 应用默认重写规则中所述。
默认情况下,IP 优先级重写规则会更改 ToS 字节的前三位,而保留最后三位不变。此默认行为不可配置。默认行为适用于通过在[edit class-of-service rewrite-rules]
层次结构级别包含inet-precedence
语句来配置的规则。默认行为也适用于为具有 IPv4 有效负载的 MPLS 数据包配置的重写规则。您可以通过在[edit class-of-service interfaces interface-name unit logical-unit-number rewrite-rules exp rewrite-rule-name protocol]
层次结构级别包含mpls-inet-both
或 mpls-inet-both-non-vpn
选项来配置这些类型的重写规则。
示例:重写 MPLS 和 IPv4 数据包标头
配置重写表并以各种方式应用它们以实现以下结果:
-
对于接口
et-3/1/0
,根据有效负载的协议,将三个 EXP 重写表应用于数据包:-
在接口
et-3/1/0
上进入 LSP 的 IPv4 数据包 (VPN) 将使用 rewrite tableexp-inet-table
中的值进行初始化。如果此路由器仅充当提供商边缘路由器,则会将相同的 3 位值写入 IP 优先级和 MPLS EXP 位字段。对于过渡路由器,3 位值仅写入 MPLS EXP 位。 -
在接口
et-3/1/0
上进入 LSP 的 IPv4 数据包(非 VPN)将使用 rewrite tablerule-non-vpn
中的值进行初始化。如果此路由器仅充当提供商边缘路由器,则会将相同的 3 位值写入 IP 优先级和 MPLS EXP 位字段。对于过渡路由器,3 位值仅写入 MPLS EXP 位。 -
在接口
et-3/1/0
上进入 LSP 的非 IPv4 数据包将使用 rewrite 表rule1
中的值进行初始化,并仅写入 MPLS EXP 报头字段。该语句exp rule1
的结果与exp rule1 protocol mpls
。
-
-
对于接口
et-3/1/0
,通过非 LSP 层传输的 IPv4 数据包将使用 IP 优先级重写表rule2
中的值进行初始化。 -
对于接口
et-3/1/1
,进入 LSP 的 IPv4 数据包将使用 EXP 重写表exp-inet-table
中的值进行初始化。如果此路由器仅充当提供商边缘路由器,则会将相同的 3 位值写入 IP 优先级和 MPLS EXP 位字段。对于过渡路由器,3 位值仅写入 MPLS EXP 位。 -
对于接口
et-3/1/1
,IPv4 第 3 层类型以外的 MPLS 数据包也使用表exp-inet-table
中的值进行初始化。对于带有 IPv4 有效负载的 VPN MPLS 数据包,CoS 值将写入 MPLS 和 IPv4 报头。对于不带 IPv4 有效负载的 VPN MPLS 数据包,CoS 值仅写入 MPLS 报头。请注意,仅当路由器充当提供商边缘路由器时,才会重写 IPv4 标头。[edit class-of-service] rewrite-rules { exp exp-inet-table { forwarding-class best-effort { loss-priority low code-point 000; loss-priority high code-point 001; } forwarding-class assured-forwarding { loss-priority low code-point 010; loss-priority high code-point 011; } forwarding-class expedited-forwarding { loss-priority low code-point 111; loss-priority high code-point 110; } forwarding-class network-control { loss-priority low code-point 100; loss-priority high code-point 101; } } exp rule1 { ... } inet-precedence rule2 { ... } } exp rule_non_vpn { ... } interfaces { et-3/1/0 { unit 0 { rewrite-rules { exp rule1; inet-precedence rule2; exp exp-inet-table protocol mpls-inet-both; # For all VPN traffic. exp rule_non_vpn protocol mpls-inet-both-non-vpn; # For all non-VPN # traffic. } } } et-3/1/1 { unit 0 { rewrite-rules { exp exp-inet-table protocol [mpls mpls-inet-both]; } } } }
示例:同时 DSCP 和 EXP 重写
同时配置 DSCP 和 EXP 重写规则,如下所示:
-
配置 CoS。
[edit] user@host# edit class-of-service
-
在接口上配置 EXP 重写规则。
[edit class-of-service] user@host# set interfaces ge-2/0/3 unit 0 rewrite-rule exp rule1
-
在接口上配置 IPv4 重写规则。
[edit class-of-service] user@host# set interfaces ge-2/0/3 unit 0 rewrite-rule inet-precedence rule2
-
在接口上配置 IPv4 重写规则,并将其应用于进入 MPLS 隧道的数据包。
[edit class-of-service] user@host# set interfaces ge-2/0/3 unit 0 rewrite-rule inet-precedence rule3 protocol mpls
-
使用
show interfaces
命令验证配置。[edit class-of-service] user@host# show interfaces ge-2/0/3 unit 0 rewrite-rules { exp rule1; inet-precedence rule2; inet-precedence rule3 protocol mpls; }
在上面的示例中,有两种不同的 IPv4 优先级重写规则: rule2
和 rule3
。 rule2
会影响 IPv4 到 IPv4 的流量,并 rule3
影响 IPv4 到 MPLS 的流量。