Linuxネットワークバインディングを使用していくつかのテストを実行したいと思います。私はqemu仮想マシンを使用しており、それを静的にリンクされたバインディングに設定したカスタムカーネルで実行しています。モジュール(たとえば、miimon)をロードするときにバインディングパラメータを設定できることをドキュメントで見ました。しかし、静的に接続するときにこれらの値をどのように設定しますか?
答え1
バインディングインターフェイスを処理する2つのAPIがあります。また廃止されたコマンド(Linuxで)とをifconfig
使用するifenslave
と、新しいバインディングインターフェイスを作成できなくなる可能性があります(したがって、max_bonds
バインディングモジュールにゼロ以外の引数が必要です)。
カーネル(室温)ネットワークリンクAPI: ほとんどの最新のコマンドは以下で提供されます。IP ルート 2コマンドが含まれています
ip link
。コアシステムファイルシステム擬似ファイルによるAPI:通常
/sys/
。
「最近の」バージョンはifenslave
実際には次のように異なります。システムファイルシステムAPIと関連情報rtnetlinkAPIが合格しましたip link
。
デフォルトインターフェイスの1つまたは2つの代わりに0つのインターフェイスを生成するようにバインディングを設定する必要があります。これは、これら2つのAPIの出現で廃止された歴史的な機能です。これらのインターフェイスは後で動的に作成または削除できます。もちろん、非常に小さなシステムでは、それを維持したり、必要な量を生成するように設定することはまだオプションです。これをカーネルコマンドラインオプションに追加すると(通常はエントリにありますが、/etc/default/grub
正しくGRUB_CMDLINE_LINUX=
行うことはディストリビューションによって異なる場合があります)、次のトリックを実行する必要があります。
bonding.max_bonds=0
iproute2を使用してバインディングを手動で構成する(
ip link
):警告:リンクされた文書はやや不完全または古く、ほとんどの(すべてではありませんが)接着機能があります
ip link
。正しいコマンドを使用して、削除変更セットスレーブ
ip link
などを生成できます。type bond
特定のコマンドを指定する必要があるたびに、コマンドにキーワードを含める必要があります。リンクその後にオプションがあります。コマンド構文通知、詳細表示リンク設定:
ip link add type bond help
はい(インターフェイスは奴隷化される前にダウンする必要がありますが、以前の状態がわからない場合は同じ単一コマンドで設定できます):
ip link add dev mybond0 type bond mode active-backup miimon 100 ip link set dev eth0 down master mybond0 ip link set dev eth1 down master mybond0 ip link set dev mybond0 up ip link set dev eth0 up ip link set dev eth1 up
設定変更:
ip link set dev mybond0 type bond miimon 200
ifenslave
同じ:ip link set dev mybond0 type bond active_slave eth1
スレーブデバイスがある場合、一部の設定は変更できません。たとえば、キータイプをオーバーライドします。
# ip link set dev mybond0 type bond mode balance-rr RTNETLINK answers: Directory not empty
制御されるデバイスは、次の方法で解放できます。
ip link set dev eth0 nomaster
次のコマンドを使用して結合デバイスを削除できます。
ip link delete dev mybond0
特定に関する各種情報リンクデバイス(または奴隷奴隷デバイス)は追加オプションで確認できます
-details
。ある時点では、JSON出力を使用する方がスクリプトで簡単になります(たとえば、次のQ / A:iproute2:ネットワークデバイスの種類を表示するには?)。ip -detail link show dev mybond0 ip -detail link show dev eth0 ip -detail link show dev eth1
-
特定の機能が合格しない限り、今日このAPIの使用に大きな意味がないと思います
ip link
。おそらく以前に作成されたでしょう。IP ルート 2ツールはこれらすべてを処理できます。制限付き/組み込みシステムのツールがコマンドにアクセスできなくなった場合は、コマンドを読むことがまだ役に立つかもしれませんが、ip link
そうする可能性はほとんどありません。リンクされたドキュメントで述べたように、
/sys/class/net/bonding_masters
バインディングモジュール(ここでは組み込みモジュール)が存在する限り、表示されるバインディングインターフェイスを作成して削除できます。以下は上記と同じコマンドです。
echo ... > ...
ルートシェルで使用してください(またはリダイレクトの問題を解決するために使用する必要がありますsudo echo ... | tee ...
)。echo +mybond0 > /sys/class/net/bonding_masters echo active-backup > /sys/class/net/mybond0/bonding/mode echo 100 > /sys/class/net/mybond0/bonding/miimon
インターフェイスを設定する方法はありません。システムファイルシステムそれでも。安全を確保するには:
ip link set dev eth0 down ip link set dev eth1 down echo +eth0 > /sys/class/net/mybond0/bonding/slaves echo +eth1 > /sys/class/net/mybond0/bonding/slaves
繰り返しますが、他の方法はありません:
ip link set dev mybond0 up ip link set dev eth0 up ip link set dev eth1 up
次に、前の例のように続けます。
echo 200 > /sys/class/net/mybond0/bonding/miimon echo eth1 > /sys/class/net/mybond0/bonding/active_slave # echo balance-rr > /sys/class/net/mybond0/bonding/mode bash: echo: write error: Directory not empty echo -eth0 > /sys/class/net/mybond0/bonding/slaves echo -mybond0 > /sys/class/net/bonding_masters
特定ボンディング情報は以下から入手できます。
cat /sys/class/net/bonding_masters grep ^ /sys/class/net/mybond0/bonding/* grep ^ /sys/class/net/eth0/bonding_slave/* grep ^ /sys/class/net/eth1/bonding_slave/*