iperf3 및 Netplan VRF

iperf3 및 Netplan VRF

안녕하세요, 저는 netplan을 통해 구성된 3-3개의 서로 다른 VRF가 있는 2개의 Ubuntu 22 머신을 가지고 있습니다.

"모든 것이 작동합니다" 작업을 수행하면 ping -I <source-interface> <destination-IP>ICMP 트래픽이 연결된 소스 인터페이스로 올바른 VRF를 통과합니다.

성능 테스트를 수행하고 싶습니다.iperf3하지만 애플리케이션이 올바른 VRF를 사용하도록 소스 인터페이스를 지정하는 방법을 찾을 수 없습니다. 이를 수행할 수 있는 방법이 있습니까?

답변1

옵션--bind-dev가입하다특정 목적을 위해:

enh: SO_BINDTODEVICE 지원(#1097)

이를 통해 iperf는 멀티홈 머신 및 VRF에서 더 잘 작동할 수 있습니다.

아아 이 옵션은iperf3우분투 22 LTS에서 제공됩니다. 다음(아직 EOL되지 않은) 버전에서 사용할 수 있습니다.우분투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 주소를 선택하도록 하고, 그렇지 않으면 해당 IP 주소도 사용 --bind).

  • 전제조건을 사용할 수 없는 경우 LD_PRELOAD래퍼를 생성하여 bind(2)동일한 방식으로 동작을 변경할 수 있습니다.

    이 Q/A에 대한 답변으로 C에서 이러한 래퍼를 제공했습니다.내 Wireguard 인터페이스만 사용하도록 Podman 컨테이너를 어떻게 구성합니까?

    래퍼는 다소 덜 직관적이며 주소에 바인딩하고 이를 환경 변수와 일치시켜 인터페이스에 바인딩되는지 확인해야 합니다(다른 환경 변수 사용). 바인딩할 때 사용된 로컬 소스 주소가 vrf-blue192.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
    

관련 정보