Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

在主机操作系统上配置设置

本章提供有关调整主机操作系统上的设置以启用高级功能或扩大 cRPD 功能规模的信息。

配置 ARP 扩展

最大 ARP 条目数由 Linux 主机内核控制。如果存在大量邻居,则可能需要调整 Linux 主机上的 ARP 条目限制。Linux 主机上的命令中 sysctl 有一些选项可用于调整 ARP 或 NDP 进入限制。

例如,要使用 IPv4 调整最大 ARP 条目数,请执行以下操作:

root@host:~# sysctl -w net.ipv4.neigh.default.gc_thresh1=4096

root@host:~# sysctl -w net.ipv4.neigh.default.gc_thresh2=8192

root@host:~# sysctl -w net.ipv4.neigh.default.gc_thresh3=8192

例如,要使用 IPv6 调整最大 ND 条目数:

root@host:~# sysctl -w net.ipv6.neigh.default.gc_thresh1=4096

root@host:~# sysctl -w net.ipv6.neigh.default.gc_thresh2=8192

root@host:~# sysctl -w net.ipv6.neigh.default.gc_thresh3=8192

在 cRPD 下调整 OSPF

要允许更多数量的 OSPFv2/v3 邻接与 cRPD,请增加 IGMP 成员资格限制:

增加 IGMP 成员资格限制。

root@host:~# sysctl -w net.ipv4.igmp_max_memberships=1000

配置 MPLS

要在 Linux 内核中配置 MPLS,请执行以下操作:

  1. 使用 或 将 modprobe insmod MPLS 模块加载到容器中:

    root@crpd-ubuntu3:~# modprobe mpls_iptunnel

    root@crpd-ubuntu3:~# modprobe mpls_router

    root@crpd-ubuntu3:~# modprobe ip_tunnel

  2. 验证主机操作系统中加载的 MPLS 模块。
  3. 主机上加载 后 mpls_router ,配置以下命令以在接口上激活 MPLS。

    root@host:~# sysctl -w net.mpls.platform_labels=1048575

添加 MPLS 路由

Netlink 消息用于与 Linux 内核通信(添加/学习)路由。MPLS 路由使用实用程序添加到 iproute2 内核中,该实用程序在内部使用 netlink 套接字来更新内核。要使用实用程序将 iproute2 MPLS 路由添加到主机:

  1. 在网络接口上启用 mpls。

    root@host:/# cli

    root@host> show interfaces routing

  2. 运行以下命令,将 mpls 路由添加到主机操作系统。

    root@host:~# ip -f mpls route add 100 as 200/300 via inet 172.20.0.2 dev br-a3a2fe3ae8e3

  3. 运行以下命令以查看 Linux 上的 MPLS fib 条目。

    root@host:~# ip -f mpls route show

添加带有 MPLS 标签的路由

要使用实用程序使用 iproute2 MPLS 标签封装数据包,从而将路由添加到主机:

  1. 运行以下命令以将数据包封装到主机操作系统。

    root@host:~# ip route add 172.20.0.0/30 encap mpls 200 via inet 172.20.0.2 dev br-a3a2fe3ae8e3

  2. 运行以下命令以查看 mpls 路由。

    root@host:~# ip route show

创建 VRF 设备

要实例化 VRF 设备并将其与表关联,请执行以下操作:

  1. 运行以下命令以创建 VRF 设备。

    root@host:~# ip link add dev test1 type vrf table 11

  2. 执行以下命令,查看已创建的VRF。

    root@host:~# ip [-d] link show type vrf

  3. 运行以下命令以查看主机操作系统中的 VRF 列表。

    root@host:~# ip vrf show

将网络接口分配给 VRF

通过将网络设备分配给 VRF 设备,将网络接口分配给 VRF。连接的路由和本地路由将自动移动到与 VRF 设备关联的表中。

要将网络接口分配给 VRF,请执行以下操作:

运行以下命令以分配接口。

root@host:~# ip link set dev <name> master <name>

root@host:~# ip link set dev eth1 vrf test

查看分配给 VRF 的设备

要查看设备:

运行以下命令以查看分配给 VRF 的设备。

root@host:~# ip link show vrf <name>

root@host:~# ip link show vrf red

查看 VRF 的邻居条目

要列出与 VRF 设备从属设备关联的邻居条目,请执行以下操作:

运行以下命令,将主要选项添加到 ip 命令:

root@host:~# ip -6 neigh show vrf <NAME>

root@host:~# ip neigh show vrf red

root@host:~# ip -6 neigh show vrf red

查看 VRF 的地址

要显示与 VRF 关联的接口的地址,请执行以下操作:

运行以下命令,将主要选项添加到 ip 命令:

root@host:~# ip addr show vrf <NAME>

root@host:~# ip addr show vrf red

查看 VRF 的路由

要查看 VRF 的路由,请执行以下操作:

  1. 运行以下命令,查看与VRF设备关联的IPv6路由表。

    root@host:~# ip -6 route show vrf NAME

    root@host:~# ip -6 route show table ID

  2. 运行以下命令以对 VRF 设备执行路由查找:

    root@host:~# ip -6 route get vrf <NAME> <ADDRESS>

    root@host:~# ip route get 192.0.2.1 vrf red

    root@host:~# ip -6 route get oif <NAME> <ADDRESS>

    root@host:~# ip -6 route get 2001:db8::32 vrf red

  3. 运行以下命令以查看 VRF 设备中的 IPv4 路由:

    root@host:~# ip route list table <table-id>

从 VRF 中删除网络接口

通过中断对 VRF 设备的从属,从 VRF 中删除网络接口

运行以下命令以删除网络接口:

root@host:~# ip link set dev NAME nomaster

删除网络接口后,连接的路由将移动到默认表,本地条目将移动到本地表。

Linux 上 ECMP 负载平衡的哈希字段选择

您可以为转发和本地生成的流量 (IPv4/IPv6) 选择 ECMP 哈希策略 (fib_multipath_hash_policy)。

IPv4 流量

  1. 默认情况下,Linux 内核使用第 3 层哈希策略对 IPv4 流量进行负载均衡。第 3 层散列使用以下信息:
    • 源 IP 地址
    • 目标 IP 地址

    root@host:~# sysctl -n net.ipv4.fib_multipath_hash_policy 0

  2. 运行以下命令,使用第 4 层哈希策略对 IPv4 流量进行负载均衡。第 4 层散列根据以下信息对流量进行均衡:
    • 源 IP 地址
    • 目标 IP 地址
    • 源端口号
    • 目标端口号
    • 协议

    root@host:~# sysctl -w net.ipv4.fib_multipath_hash_policy=1

    root@host:~# sysctl -n net.ipv4.fib_multipath_hash_policy 1

  3. 运行以下命令以对内部数据包标头(IPv4/IPv6 over IPv4 GRE)使用第 3 层散列

    root@host:~# sysctl -w net.ipv6.fib_multipath_hash_policy=2

    root@host:~# sysctl -n net.ipv6.fib_multipath_hash_policy 2

    该策略默认对转发的数据包进行第 3 层散列,如 IPv4 流量的默认方法中所述。

    IPv6 流量

  4. 默认情况下,Linux 内核使用第 3 层哈希策略来对 IPv6 流量进行负载平衡。第 3 层散列策略根据以下信息对流量进行负载均衡:
    • 源 IP 地址
    • 目标 IP 地址
    • 流标签
    • 下一个标头(协议)

    root@host:~# sysctl -n net.ipv6.fib_multipath_hash_policy 0

  5. 您可以使用第 4 层散列策略对 IPv6 流量进行负载平衡。第 4 层散列策略根据以下信息对流量进行负载均衡:
    • 源 IP 地址
    • 目标 IP 地址
    • 源端口号
    • 目标端口号
    • 下一个标头(协议)

    root@host:~# sysctl -w net.ipv6.fib_multipath_hash_policy=1

    root@host:~# sysctl -n net.ipv6.fib_multipath_hash_policy 1

  6. 运行以下命令以对内部数据包标头(IPv4/IPv6 over IPv4 GRE)使用第 3 层散列。

    root@host:~# sysctl -w net.ipv6.fib_multipath_hash_policy=2

    root@host:~# sysctl -n net.ipv6.fib_multipath_hash_policy 2

    Mpls

  7. Linux 内核可以使用以下参数选择多路径路由的下一跃点:
    • 标签堆叠达到 MAX_MP_SELECT_LABELS (4)
    • 源 IP 地址
    • 目标 IP 地址
    • 内部 IPv4/IPv6 报头的协议

    邻居检测

  8. 运行以下命令以查看邻接方条目的活动状态(失败/不完整/未解析),这有助于将数据包转发到下一跃点。

    root@host:~# sysctl -w net.ipv4.fib_multipath_use_neigh=1

    默认情况下,使用命令将 root@host:~# sysctl -n net.ipv4.fib_multipath_use_neigh 0 数据包转发到下一跃点。

在 Linux 上使用 BGP 的 wECMP

不等价负载平衡是一种在不同路径(包括多路径下一跃点)之间不平等分配流量的方法;当路径具有不同的带宽功能时。BGP 协议通过使用链路带宽扩展社区使用链路带宽标记每个路由/路径来实现此目的。相应链路的带宽可以编码为此链路带宽社区的一部分。RPD 使用每个路径的带宽信息,使用适当的 linux::weights 对多路径下一跃点进行编程。使用 linux::weight 的下一跃点允许 linux 内核以非对称方式对流量进行负载均衡。

BGP 形成多路径下一跃点,并使用各个路径的带宽值来找出构成 ECMP 下一跃点的每个下一跃点应接收的流量比例。链路带宽中指定的带宽值不必是接口的绝对带宽。这些值需要反映一条路径与另一条路径之间的相对带宽。有关详细信息,请参阅 了解如何定义 BGP 社区和扩展社区以及如何 在路由策略匹配条件中评估 BGP 社区和扩展社区

考虑一个网络,其中 R1 接收从 R2 和 R3 到目标 R4 的等价路径;如果要使用 wECMP 通过路径 R1-R2 发送 90% 的负载平衡流量,并通过路径 R1-R3 发送剩余 10% 的流量,则需要通过配置 policy-options来标记从两个 BGP 对等方收到的路由,并使用链路带宽公共组标记从两个 BGP 对等方收到的路由。

  1. 配置策略语句。

    root@host> show configuration policy-options

  2. RPD 使用带宽值来不均地平衡具有多路径下一跃点的流量。

    root@host> show route 100.100.100.100 detail

  3. Linux 内核通过为每个下一跃点分配 linux::weights 来支持不相等的负载平衡。

    root@host:/# ip route show 100.100.100.100

    linux::weights 被编程为 linux 作为整数 255(无符号字符的最大值)的除法。ECMP 下一跃点中的每个下一跃点都有一个与其带宽份额成比例的 linux::weight。

在 cRPD 上启用 SRv6

您可以使用以下 sysctl 命令在 cRPD 上启用 IPv6 分段路由功能:

  1. 启用分段路由。

    root@host:~# sysctl net.ipv6.conf.all.seg6_enabled=1

    root@host:~# sysctl net.ipv6.conf.all.forwarding=1

  2. 配置以下命令以在 eth0 接口上启用 SRv6。

    root@host:~# sysctl net.ipv6.conf.eth0.seg6_enabled=1

  3. 配置以下命令以设置 DT4 SID。

    root@host:~# sysctl -wq net.vrf.strict_mode=1