こんにちは、私は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でよりうまく機能します。
ああ、このオプションはiperf3Ubuntu 22 LTSで提供されています。次の(まだEOLなし)バージョンで利用可能です。Ubuntu23.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の場合、上記と同等の内容は次のとおりです(実際には1行)。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