タグ付けされていない受信パケットとタグ付き送信パケットを使用してLinux VLAN対応ブリッジを作成する方法

タグ付けされていない受信パケットとタグ付き送信パケットを使用してLinux VLAN対応ブリッジを作成する方法

実際のケースシナリオで観察されたスイッチ構成エラーに関連する特定の問題に対するあいまいな解決策を実装しようとしています。

以下を想定してください。

  • 私のシステムはCiscoスイッチを介してバックボーンリンクに接続されています。
  • 特定のVLAN(プライマリVLANではない)からタグ付きパケットを送信でき、そのパケットは正しいVLANに正しくルーティングされます。
  • トランクにあり、プライマリ以外のVLANからのものであっても、タグ付けされていないトラフィックで応答を受け取ります。
  • スイッチ構成を変更できません。

私がやろうとしているのは、Debianで単一のネットワークインターフェイスを使用してトラフィックを正しく送受信できるようにすることで、パケットにタグを付けて代わりにキャプチャする必要がありますが、必要なVLANにトラフィックを挿入できます。 。

たとえば、ICMP エコー要求を使用してリモートシステムに ping を送信できます。単純なeth0インターフェイスを使用しても効果がなく、ICMPエコー応答は表示されません。ただし、VLAN 10でICMPエコー要求にタグを付けると、タグ付けされていないICMPエコー応答が届きます。たとえば、DHCPで使用することもできます(リモートネットワークにはDHCPサーバーがあります)。タグ付きDHCP検索パケットを送信すると、そのトランザクションIDとともにタグ付けされていないDHCPオファーが届きます。

私はこれが正常な動作ではなく、最終的にパケットが誤ってルーティングされるか、VLANにあると誤って仮定される可能性があることを知っています。これはスイッチの設定が間違っているためです(どこかのローカルVLANの不一致に関連しているようです)。

VLANサブインターフェイス(ipリンク追加リンクタイプvlan ...)を使用している場合は、タグ付きトラフィックを送信しますが、トラフィックが再タグ付けされると予想されるため、応答はプライマリインターフェイスからサブインターフェイスに再ルーティングされません。

その後、VLAN対応ブリッジを見つけ、私の問題に対する正しい解決策のように見えました。ブリッジvlan addコマンド(pvid、vid、タグなし、vlanサブインターフェイスを使用する必要があるかどうか)を使用して成功しませんでしたが、正常に実行するにはこの操作? )。

一度に1つのVLANに対してのみこれを実行できます。タグが失われたため、パケットがどのVLANに送信されたかを確認できません。ただし、IPアドレス、STP、およびCDPトラフィックに基づいてこのVLANタグを推論できます。私は自動化されたタスクを実行したくないし、VLANを推測したくないので、タグ付けされていないトラフィックが一度に1つずつ選択されたVLANにあると見なされるように強制したいと思います。

ありがとうございます!

答え1

はじめに/初期設定

この回答は、以下で使用されるコマンドをネットワーク構成ツールに統合しようとしません。少なくとも、次のツールは追加のコマンドなしでこの目的のために機能すると予想されます。

VLAN対応ブリッジインターフェイスは、ポートVLAN ID(PVID)を使用して、このように誤って設定された個々のVLANを変更できます。単一のブリッジポートを使用しても、外部設定エラーをキャンセルするレイヤとしてのみ機能します。

構築のための初期設定が提供されていないため、VLAN 10の例とこのVLANで使用されるIPアドレス192.0.2.2/24を使用し、インターフェイスはイーサネット0。次の初期構成を検討してください。

ip link set dev eth0 up
ip link add link eth0 name eth0.10 up type vlan id 10
ip addr add dev eth0.10 192.0.2.2/24 # or use DHCP
ip route add default via 192.0.2.1 dev eth0.10

OPの現在の状況により、ネットワークスタックのために機能しません(例:イーサネット0予想すると無視されます。eth0.10)または他のコンポーネント(非リスニングインターフェイスから応答を受信するためにネイティブソケットを使用するDHCPクライアント)は、(外部エラーのため)同じインターフェイス(タグなし)ではないため、戻りトラフィックを無視します。イーサネット0、示されたものよりイーサネット0<=>表示されないeth0.10)。

代わりにVLAN対応ブリッジを使用してください。

できることは、VLANインターフェイスの使用を単一のブリッジポートを持つVLAN対応ブリッジに置き換えることです(イーサネット0)。これで、VLANインターフェイスを作成/削除しなくても、ブリッジでVLANタグとポートVLAN IDを動的に設定できるようになりました。正しい設定はリモート設定エラーを排除します。

  • 前の状態のクリーンアップ(警告:切断)

    ip link del dev eth0.10
    
  • VLAN 認識ブリッジの作成

    ip link add name br0 type bridge vlan_filtering 1 vlan_default_pvid 0
    

    上記の方法はvlan_filtering 1VLAN対応ブリッジを作成し、デフォルトvlan_default_pvid 0でVLANを無効にするため、どこでも使用していないVLANを最初に削除する必要はありません。物理ブリッジ通信を開始するには、VLANを明示的に追加する必要があります。

  • オプション:(同じアドレスを維持するためにMACベースのDHCPサーバー構成に主に使用されます)イーサネット0MACアドレスは次のとおりです。br0

    ...なぜならこの住所は最近どの住所にも見つかりません。システム環境。の助けを借りてjqコピーできるコマンドイーサネット0MACアドレスは次のとおりです。br0。設定する前にこれを行う必要があります。イーサネット0ブリッジポートへ。

    ip link set dev br0 address "$(ip -json link show dev eth0 | jq -r '.[].address')"
    
  • eth0 をブリッジポートに設定し、ブリッジを設定します。

    ip link set dev eth0 master br0
    ip link set br0 up
    
  • ルーティングスタックに接続されているブリッジの唯一の部分であるブリッジインターフェイス自体をタグなしでPVID 10として設定します。ルーティングスタックはVLANフレームを処理せず、IP(およびARP)フレームのみを処理するため、タグ付きフレームが放出されないことを確認してください。または予想されます。

    未使用のbrctlコマンドはVLAN対応ブリッジを処理できません。これが必要ですbridge vlan ...注文するすでにIP ルート 2母音。ブリッジポートではなくブリッジインターフェイス自体に関連する場合は、追加のキーワードが必要ですself

    bridge vlan add vid 10 dev br0 pvid untagged self
    
  • ブリッジポートの追加イーサネット0(タグ付き)VLAN 10として使用されますが、PVIDとしても使用されます。したがって、タグ付きフレームを送信し、2つのタグ付きフレーム(VLAN 10のみ)を許可し、タグなしフレームをVLAN 10フレームとして処理します。スイッチが正しく設定されていないかどうかにかかわらず動作します。

    bridge vlan add vid 10 dev eth0 pvid
    

    または、ブリッジでタグ付けされたすべてのVLANを最初に受け入れてから、VLAN 10の設定のみを変更するようにします。これは現在の設定では役に立ちませんが、他の場所のブリッジトラフィックに追加のブリッジポートを追加する場合に便利です。それは次のとおりです。

    bridge vlan add vid 2-4094 dev eth0
    bridge vlan add vid 10 dev eth0 pvid
    

    これは次のようになります。

    # bridge -compressvlans vlan show
    port              vlan-id  
    eth0              2-9
                      10 PVID
                      11-4094
    br0               10 PVID Egress Untagged
    

これで、誤った設定が解決され、通常の使用が可能になります。br0プライマリインターフェイスとして固定アドレスを設定することで通信が許可されると予想されます。

ip addr add 192.0.2.2/24 dev br0
ip route add default via 192.0.2.1

またはDHCPクライアントを実行してbr0それを構成します。

受信するVLANを変更するには(例:VLAN 10からVLAN 11へ):

  • ブリッジインターフェイスの再構成br0

    bridge vlan del vid 10 dev br0 self
    bridge vlan add vid 11 dev br0 pvid untagged self
    
  • ブリッジポートの再構成イーサネット0

    bridge vlan del vid 10 dev eth0
    bridge vlan add vid 11 dev eth0 pvid
    

    代わりにポートごとに1つのPVIDしかないため、すべてのVLANを受信する必要がある場合は、VLAN 10を削除せずにVLAN 11に切り替えます。

    bridge vlan add vid 11 dev eth0 pvid
    

ノート

  • この回答は、Linux VLAN対応ブリッジ(VLAN 10のシステム側ブリッジポート)を使用して誤って設定されたスイッチをシミュレートすることによってテストされました。しかし表示されない
  • ブリッジが新しくなってモジュールに問題がある場合は、問題が予想されますbr_netfilterロード済み:このシステムでDockerを実行するには、追加の回避策が必要な場合があります。

関連情報