web-dev-qa-db-ja.com

Centos 6でKVMゲスト用に結合ブリッジをセットアップする正しい方法は何ですか?

Centos 6でKVMゲスト用に結合ブリッジをセットアップする正しい方法は何ですか?

私は現在、それぞれが複数のゲストをホストする2つのKVMホストのセットアップで遊んでいます。 2つのHP DL380:があり、それぞれに4つのNICがあります。フェイルオーバーの理由から、アクティブバックアップ(mode = 1)ボンドで2つのNIC(eth0、eth1)をインターネットに接続して使用したいと思います。次に、他の2つのNIC(eth2、eth3)もアクティブ/バックアップボンドに入れ、管理/バックネットに向かいたいと思います。

ボンドの上に、KVMゲストがフロントまたはバックネットワークにアクセスするために使用するブリッジが必要です。

Interwebzで、これを構成するさまざまな方法を見つけました。結合について言及している人もいれば、橋渡しをしている人もいれば、それを組み合わせるために努力している人もいます。多くのホストでフロントネットとバックネットを使用するとどうなるかについては触れていません。

私の問題/質問のいくつかはあります。

  • 私は正しい設定ファイル、つまり、実際に機能する設定ファイルだけでなく、開発者がそうあるべきだと思っていた方法を理解しました。
  • 「kernel:bond0:自分のアドレスを送信元アドレスとして受信したパケット」というエラーが発生しました。 bond0とbond1の両方。
  • トラフィックはバックネットからフロントネットに自動的に転送されますか?転送トラフィックを無効にするには、ebtables/iptablesなどを使用する必要がありますか?
  • スパニングツリープロトコル(STP)を使用する必要がありますか?
  • 特定のルートが必要ですか?

これは、環境がどのように見えるかを示す素晴らしい画像です(少なくともその一部です)。

Network schema

これが私の関連する設定ファイルです。

/ etc/sysconfig/network

NETWORKING=yes
HOSTNAME=Host1
GATEWAYDEV=br0
NETWORKING_IPV6=no

/ etc/sysconfig/network-scripts/ifcfg-eth0-ifcfg-eth3

DEVICE="ethX"
NM_CONTROLLED="no"
ONBOOT=yes
HWADDR=xx:xx:xx:xx:xx:xx
SLAVE=yes
MASTER=bondX
HOTPLUG=no
BOOTPROTO=none

/ etc/sysconfig/network-scripts/ifcfg-bond0-ifcfg-bond1

DEVICE=bondX
BONDING_OPTS="miimon=100 mode=1"
ONPARENT=yes
BOOTPROTO=none
BRIDGE=brX

/ etc/sysconfig/network-scripts/ifcfg-br0

DEVICE=br0
TYPE=Bridge
ONBOOT=yes
DELAY=0
BOOTPROTO=none

/ etc/sysconfig/network-scripts/ifcfg-br1

DEVICE=br1
TYPE=Bridge
ONBOOT=yes
DELAY=0
BOOTPROTO=static
IPADDR=10.0.1.100
NETMASK=255.255.255.0

更新1

  • /etc/sysctl.confを追加
  • Ifcfg-br0からIPを削除しました。ホストは、管理ネットからのみアクセスでき、インターネットからはアクセスできません。

*アップデート2 *

  • /etc/sysctl.confへの変更を削除しました。 iptablesを有効にする必要はありません。
4
Arlukin

CentOS 6については不明ですが、Fedoraではデフォルトで結合モジュールがLinuxカーネルに追加されないため、ファイル/ etc/modprobe.d/bonding.confを作成する必要があります

alias bond0 bonding

再起動すると、起動中に結合モジュールが読み込まれるはずです。

結合されたインターフェースが2つあるため、bond1にも別のエイリアス行を追加する必要がある場合があります。しかし、私はそれを試したことはありません。

1つを動作させ、2つ目の設定について心配することを提案します。

ブリッジに関して提起したその他の問題、その他の注意点、これらの構成はnetworkデーモンで動作しますが、NetworkManagerで動作するとは思わない。ネットワークまたはNetworkManagerデーモンを実行していますか?

そして最後に、ブリッジドインターフェイスを処理するようにnetfilterを構成する方法はいくつかあります。少なくともFedora 12以降では、デフォルトでブリッジのnetfilterが無効になっています。ただし、これは/ etc/sysctl.confを編集して設定することで変更できます

net.bridge.bridge-nf-call-iptables=1

Arpとipv6についても同じことを行い、このファイルで設定する必要があります。

net.ipv4.ip_forward=1

FORWARDチェーンをフラッシュし、iptablesルールに置き換えます

iptables -A FORWARD -m physdev --physdev-is-bridged -j ACCEPT
2
interoperate
  1. iptablesへの転送は機能しますが、何のためですか?これは間違いなく余分なオーバーヘッドを作成します
  2. ネットワークスキーマは正しいようですが、ハードウェアで1ではなくモード4を使用して安全性を確保し、トラフィックも集約するようにします。
  3. br0とbr1にIPアドレスがない場合、ホストにアクセスできる他のNICがありますか?自分をロックアウトしたくない(もちろんiLOも持っている場合を除く)
  4. 投稿したカーネルメッセージは、通常、ブリッジングと互換性のない結合モード(0および6)の使用に関連しています。あなたが実際にモード1(/ proc/net/bonding/...)にいることを確認できますか?
  5. サブネット間の転送は、特定の構成なしでは発生しないはずですが、ホストのカーネルは、br0とbr1が異なるサブネット上にある宛先のパケットを判別できる必要があるため、VM on br0 br0ネットワークで通信できるはずです。また、br1でも通信できるようにしたい場合は、別の仮想NICを追加してそこに接続します
2
dyasny