Linux ダミーインターフェースでの VLAN の使用

Linux ダミーインターフェースでの VLAN の使用

無線を含む複数の Linux (カーネル 4.14) インターフェイスからのすべてのパケットを消費するために、raw ソケットを使用するアプリケーションがあります。無関係なスクリプトを最小限に抑えるために、hostapd を使用して、無線および bss インターフェイスを、アプリケーションがリッスンするインターフェイスを持つブリッジにバインドしようとしています。また、特定の VLAN 上の無線からトラフィックを受信するアプリケーションが必要なユースケースもあります (ネイティブ VLAN の再マッピングのようなもの)。現在、私のセットアップは次のようになっています。

  • アプリケーションがバインドするためのダミーインターフェースが作成されます
ip link add dummy0 type dummy
ip link set dummy0 up 
  • 必要に応じて、ダミーインターフェース上にVLANインターフェースが作成される
ip link add link dummy0 name dummy0.100 type vlan id 100
ip link set dummy0.100 up
  • ブリッジはダミーをwlanに接続するために作成され、必要に応じてdummy0またはvlanを接続します。アプリケーションは引き続きdummy0のみをリッスンします。
brctl addbr br0
brctl addif br0 dummy0.100
ip link set br0 up
  • hostapdは、hostapd.confで定義されたブリッジにwlanまたはbssインターフェースを接続します。

VLAN が関係しない場合は、これはうまく機能します。VLAN インターフェイスの場合、トラフィックは一方向にしか流れません。dummy0 の tcpdump では、期待どおりにすべてのトラフィックが表示されます。dummy0.100 および br0 の tcpdump では、ワイヤレス インターフェイスからのトラフィックのみが表示され、戻りトラフィックは表示されません。

問題は、アプリケーションが VLAN タグ付きの生のフレームを dummy0.100 ではなく dummy0 に書き込んでいることにあると想定していますが、ダミー インターフェイス自体の使用に問題がある可能性もあると思います。dummy0 で生のソケットを使用し、VLAN タグ付きのフレームを書き込み、それらを dummy0.100 に正しく表示させる方法はありますか? より良い解決策も検討していますが、これには最小限の設定と監視インフラストラクチャが必要です。

答え1

@dirkt が指摘したように、RAW ソケットはルート デバイスにバインドされている場合、パケットを VLAN サブ インターフェイスに送信できない可能性があります。@dirkt が提案する合理的な解決策は、veth ペアを使用することです。

ip link add veth0-wifi type veth peer name veth0-app
ip link set veth0-wifi up
ip link set veth0-app up
ip link add link veth0-wifi name veth0-wifi.100 type vlan id 100
brctl addbr br0
brctl addif br0 veth0-wifi.100
ip link set br0 up

hostapd.confでbridge=br0を設定し、アプリケーションをveth0-appにバインドします。

@AB が提案した代替案は、技術的な理由により未検討ですが、アプリケーションでタップ デバイスを公開し、ほぼ同じ構成を可能にするというものです。

関連情報