
Linux ブリッジと VLAN フィルタリングを試していますが、いくつか問題があります。
私が持っているのは、ens19 に到着するトランク (タグ付きフレーム) を備えた VM です。私がやりたいのは、このポートを Linux ブリッジに接続し、このブリッジに、必要な VLAN にラベル付けされた「仮想」インターフェイスを配置し、その背後に完全な TCP/IP スタック (ホストのスタック) を配置することです。
私の実験では、VLAN 3 と 5 に限定していますが、拡張が容易になるはずです。ens19 のサブインターフェイスに置き換えることができるため、使用はそれほど大きくないと思われます。しかし、後で、ens19 ポートを gretap インターフェイスに接続して、トンネル上で複数の VLAN を循環させることに興味があります。
ダミー インターフェイスとタップ インターフェイスでテストを実行しましたが、これらのインターフェイスの性質を考えると機能しないようです。br0.3 サブインターフェイスでテストしましたが、クライアントは ARP 応答を受信しますが、PING は ICMP 応答を受信しません...
ip link add name br0 type bridge vlan_filtering 1
ip link set dev br0 up
ip link add link br0 name br0.3 type vlan id 3
ip link set dev ens19 master br0
ip link set ens19 up
ip link set dev br0 up
ip link set dev br0.3 up
ip addr add 10.3.0.106/22 dev br0.3
答え1
ダムブリッジ
現在の設定では、トラフィックは通過しません。デフォルトでは、すべてのポートとブリッジ自身のインターフェイスで VLAN 1 が使用されるため、すべてが VLAN 対応ブリッジによってフィルタリングされます。VLAN ID 3 のフレームが到着または送信されると、フィルターに一致しないため、ドロップされます。
現在の実験を機能させるには、ブリッジを「ダム」ブリッジとして設定し直すだけです。
ip link set dev br0 type bridge vlan_filtering 0
タグ付けされたトラフィックは(他の場所に転送されない限り)ens19
に到着し、タグ付けが解除されて到達します。br0
br0.3
ルーティングスタック(例:IPv4、ARP、またはIPv6タイプ)にタグが付けられていないトラフィックも、ルーティングスタックを介してbr0
。その他のVLANタグ付きトラフィックは、それを要求するものがないためドロップされます。ルーティングスタック自体は VLAN を理解しません。
ブリッジは、VLAN ID の意味を考慮せずに VLAN タグ付きフレームを転送します。そのため、複数の VLAN で同じ MAC アドレスが使用されている場合は問題が発生する可能性があります。これにより、ブリッジ上の転送データベースの処理が混乱したり、他の機器で重複やループが発生したりする可能性があります。
したがって、VLAN 対応ブリッジが推奨されます。
VLAN対応ブリッジ
ブリッジが中立的な役割を果たし、VLANごとに新しいポートを簡単に作成したり、さらに変化インターフェースを削除して再作成することなくポートにVLANを配置したい場合(VLANサブインターフェースで必要)は、VLAN対応ブリッジが便利です。この構成では、VLANサブインターフェースを上に使用することも可能ですがbr0
、それを避けることができます。代わりに、ベス各VLANにペアがあります。1つはブリッジポート、もう1つはルーティングスタックと通信するインターフェースです(これはベスネットワーク名前空間はまったく関係ありません)。
br0
自身はルーティングに使用する必要はありませんが、他の物理インターフェイス ( 以外) が利用できない場合に管理として使用する場合は例外です。以下のセットアップは、(すべてに対してデフォルトのポート VLAN ID 1 を取得するのではなく)も設定することにより、自身ens19
を含む追加されたすべてのポートを完全にロックダウンすることから始まります。これにより、デフォルトでは何も通過できないため、構成中にリークするリスクを冒すことなく、ブリッジ ポートをすぐに UP に設定することもできます。br0
vlan_default_pvid 0
VLAN対応ブリッジでVLANを設定するには、bridge vlan
新しいコマンドrtnetlink(7)
カーネルAPI。廃止されたbrctl
コマンドではこれができない。古いカーネルAPI(または/sys
) ではこの機能は提供されません。
OP のケースは、次の段階を経て進行します。
作成とトランクリンク
ブリッジには独自の(そしてユニークな)MACアドレスを割り当てる必要があります。ブリッジポートで利用可能な最小のMACアドレスをデフォルトで継承します。時間の経過とともに変化する可能性がある。ベス以下の方法では、新しいVLANが追加されると、ブリッジのMACアドレスが時間の経過とともに変更される可能性があります。これはこの方法では実際の問題ではありませんが、VLANサブインターフェース方法と併用すると影響する可能性があります。また、
br0
IPアドレス自体を持つ場合の使用にも影響する可能性があります。最近のsystemdベースのシステムでは、これはすでに完了システム関係するネットワーク マネージャーが何であれ、この動作が望ましくない場合でも、MAC アドレスを指定せずに作成された新しい仮想イーサネットのようなインターフェイスが検出された場合は、ip link add name br0 address 12:34:56:78:9a:bc up type bridge vlan_filtering 1 vlan_default_pvid 0 ip link set dev ens19 up master br0
オプション:管理などのために、
br0
VLAN 1 (タグなし) を (タグ付き) 経由で送信します。ens19
bridge vlan add vid 1 dev ens19 bridge vlan del vid 1 dev br0 self pvid untagged
ブリッジ インターフェイス自体
self
を設定する場合は、追加のキーワードが必要です。VLAN を追加します
ens19
(ここでは VLAN ID 3 と 5)。bridge vlan add vid 3 dev ens19 bridge vlan add vid 5 dev ens19
あるいはens19を考慮する場合のアップリンク トランク ポートに他のすべての VLAN を追加するだけです。
bridge vlan add vid 2-4094 dev ens19
そこに何が入っているかを表示するために使用します
-compressvlans
。そうしないと、単一のエントリが 4093 行表示されます。bridge -compressvlans vlan show dev ens19
これで、同じ全体的な結果が次のように達成できます。
br0
(ここではVLAN ID 3を使用)の上にあるVLANサブインターフェースのいずれかブリッジ インターフェイス (ここ) またはブリッジ ポート (次の箇条書き) に VLAN ID が追加されていない場合、ブリッジが VLAN 対応ブリッジとして設定されていると、そのようなトラフィックは通過しません。
VLAN ID は、タグ付けされたまま、次の場所に追加する必要があります
br0
。bridge vlan add vid 3 dev br0 self
上記のように、すべてを事前に一度だけ追加することができます。
bridge vlan add vid 2-4094 dev br0 self
次に、通常の VLAN サブインターフェースがその上に追加されます。
ip link add link br0 name br0.3 up type vlan id 3 ip addr add 10.3.0.106/22 dev br0.3
インターフェイスに関連付けられた VLAN ID (一般的な設定では IP LAN 10.3.0.0/22) を変更するには、サブインターフェイスを削除し、別の VLAN ID を持つ新しいサブインターフェイスを再作成する必要があります
type vlan
。インターフェイスは再構成できません。またはペアベスインターフェース(ここではVLAN ID 5を使用)
pvid untagged
VLAN サブインターフェースを使用する場合と同じ役割を果たします。ブリッジからポートへのタグ解除、ポートからブリッジへのタグの付与です。PVID として使用できる VLAN ID は 1 つだけです (ここでは単一の VLAN ID が使用されています)。ip link add name vlan5 up type veth peer name br0vlan5 ip link set br0vlan5 up master br0 bridge vlan add vid 5 dev br0vlan5 pvid untagged ip addr add 10.3.4.106/22 dev vlan5
例で選択された名前は VLAN ID を反映しているため、人間にとって混乱を招く可能性がありますが、関連付けられた VLAN ID は (ほぼ) オンザフライで変更できます (ここでは 5 から 6 に変更します)。
bridge vlan del vid 5 dev br0vlan5 bridge vlan add vid 6 dev br0vlan5 pvid untagged
ですべての VLAN をまだ設定していない場合は
ens19
、そこでも変更します。bridge vlan del vid 5 dev ens19 bridge vlan add vid 6 dev ens19