iperf3 与 Netplan VRF

iperf3 与 Netplan VRF

您好,我有 2 台 Ubuntu 22 机器,通过 netplan 配置了 3-3 个不同的 VRF。

当我执行“ping -I <source-interface> <destination-IP>一切正常”操作时,ICMP 流量将通过正确的 VRF 作为关联的源接口。

我想进行性能测试iperf3但我找不到指定源接口的方法,因此应用程序将使用正确的 VRF。有没有办法做到这一点?

答案1

选项--bind-dev加入为了您的特定目的:

enh:支持 SO_BINDTODEVICE (#1097)

这使得 iperf 能够更好地与多宿主计算机和 VRF 配合使用。

唉,这个选项在iperf3由 Ubuntu 22 LTS 提供。它可在下一个(尚未 EOL-ed)版本中使用乌班图23.04:

--bind-dev dev
       bind to the specified network interface.  This option uses SO_BINDTODEVICE, and may
       require root permissions.  (Available on Linux and possibly other systems.)

然后,该命令将用于客户端选择vrf-blue接口并到达 198.51.100.2 的服务器:

iperf3 --bind-dev vrf-blue -c 198.51.100.2

同时,您可以:

  • 使用ip vrf exec这是一个带通滤波器包装器/拦截器依赖cgroupv2。它将使应用程序自动使用SO_BINDTODEVICE

    在客户端上,命令如下:

    ip vrf exec vrf-blue iperf3 -c 198.51.100.2
    

    绑定到vrf-blue(并让它选择正确的源IP地址,否则也使用--bind)。

  • 如果先决条件不可用,您可以创建一个LD_PRELOAD包装器bind(2)以相同的方式改变行为。

    我已经在这个 Q/A 的答案中用 C 语言提供了这样的包装器:如何配置 podman 容器以仅使用我的wireguard 接口?

    包装器有点不太直观,需要绑定到一个地址并将其与环境变量匹配,以确认它将绑定到接口(使用其他环境变量)。如果绑定时使用的本地源地址vrf-blue是 192.0.2.2,则上面的等效内容将是(实际上是一行):

    LD_PRELOAD=./bindtodevicewrapper.so \
    WRAPPER_BINDTODEVICE=vrf-blue \
    WRAPPER_INET=192.0.2.2 \
    iperf3 --bind 192.0.2.2 -c 198.51.100.2
    

相关内容