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 主机上使用命令 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 调整最大 NDP 条目数:

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

Linux 下的 IGMP 成员资格

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

提高 IGMP 成员资格限制。

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

内核模块

在第 3 层模式下部署 cRPD 之前,您需要在主机上加载以下内核模块。这些模块通常包含在或kernel-modules-extra包中linux-modules-extra。运行以下命令以添加内核模块。

  • modprobe tun

  • modprobe fou

  • modprobe fou6

  • modprobe ipip

  • modprobe ip_tunnel

  • modprobe ip6_tunnel

  • modprobe mpls_gso

  • modprobe mpls_router

  • modprobe mpls_iptunnel

  • modprobe vrf

  • modprobe vxlan

配置 MPLS

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

  1. 使用modprobeinsmod将 MPLS 模块加载到容器中:

    root@crpd-ubuntu3:~# modprobe mpls_iptunnel

    root@crpd-ubuntu3:~# modprobe mpls_router

    root@crpd-ubuntu3:~# modprobe ip_tunnel

  2. 验证主机作系统中加载的 MPLS 模块。

Linux 上 ECMP 负载平衡的散列字段选择

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

IPv4 流量

  1. 默认情况下,Linux 内核使用 L3 哈希策略来均衡 IPv4 流量的负载。L3 散列使用以下信息:
    • 源 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. 运行 以下命令可对内部数据包标头使用 L3 散列(IPv4/IPv6 over IPv4 GRE)。

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

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

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

    IPv6 流量

  4. 默认情况下,Linux 内核使用 L3 哈希策略来均衡 IPv6 流量的负载。L3 散列策略根据以下信息对流量进行负载均衡:
    • 源 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. 运行 以下命令可对内部数据包标头使用 L3 散列(IPv4/IPv6 over IPv4 GRE)。

    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 对等方收到的路由。

  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::权重。

在 cRPD 上启用 SRv6

您可以使用以下 sysctl 命令在 cRPD 上启用 IPv6 SR 功能:

  1. 启用 SR。

    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