안녕하세요, 저는 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-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