複数の Linux TAP インターフェイスを作成し、単一の WIFI アダプターを介してパケットを送受信できるようにしたいと考えています。すべての目的において、TAP インターフェイスを本格的なネットワーク アダプターとして動作させたいと思っています。他のネットワーク アダプターと同様に、独自の DHCP アドレスを要求し、ローカル ネットワーク上で対話できる必要があります。
私はイーサネット アダプタを使ってこれを動作させることに成功しましたが、WiFi は別の話だと聞きました。正確な理由は思い出せませんが、「無線ブロードキャスト アドレスごとに 1 つの IP アドレス」と関係があるようです。
TAP インターフェイスを使用して、基本的に WiFi 接続を介してブリッジ ネットワークを行うことは可能ですか? networkmanager を使用して構成を行うことはできますか? 誰か記事を 1 つまたは 2 つリンクしてもらえますか? これに関する情報を見つけるのに苦労しています。
答え1
このネットワークエンジニアリングSEリンク802.11 フレーム ヘッダー内の 4 つのレイヤー 2 アドレスイーサネットと Wi-Fi の違いを非常にわかりやすく説明しています。
Wi-Fi では、通信のために追加の MAC アドレスが必要です。イーサネットの送信元および宛先 MAC と同じ送信元アドレス (SA) と宛先アドレス (DA) に加えて、Wi-Fi が機能するには送信元アドレス (TA) と受信者アドレス (RA) が必要です。これにより、合計 4 つの MAC アドレスになります。一般的なケースでは、クライアント (STA) が送信する場合は TA = SA、アクセス ポイント (AP) が STA に送信する場合は DA = RA であるため、通常は 3 つのアドレスのみが必要であり、AP は、使用可能な 4 つのアドレスのうち 3 つのアドレスのみを使用するように構成されます。
ブリッジモードのクライアントとは、TA != SA または DA != RA であり、4つのアドレスすべてが必要であることを意味しますが、APは3つのみに構成されています。そのため、一般的な構成ではWiFiをブリッジすることはできません。クライアントブリッジが機能するには、APとSTAの両方で4アドレスモードを有効にする必要があります。これは通常、次のように呼ばれます。ワイヤレス配信システム (WDS)ただし、互換性のない実装が複数存在する可能性があります。AP とすべての STA は互換性のある実装を使用する必要があります。
それで:
システムのブリッジが AP である場合、問題なく Wi-Fi をブリッジできます。これは、デフォルトの 3 アドレス モードを使用して、すべての AP が実行していることです。
ブリッジしようとしているシステムがシンプル クライアント (STA) の場合、ブリッジは機能しません。最近のドライバーでは、次のようなエラーが発生し、ワイヤレス インターフェイスをブリッジ ポートとして設定できなくなります。
# ip link set wlan0 master bridge0 Error: Device does not allow enslaving to a bridge.
設定できる場合両方AP と STA を互換性のある WDS に接続します。たとえば、すべてが mac80211 と互換性のあるドライバーを使用して Linux を実行している場合は、次のコマンドで STA でこれを有効にできます。
# iw dev wlan0 set 4addr on
そうすると、奴隷化される可能性がある。
# ip link set wlan0 master bridge0
# ip link show wlan0
3: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noqueue master bridge0 state DOWN mode DEFAULT group default qlen 1000
[...]
iw コマンドを使用した 4 アドレス モードに関するドキュメントは、Linux ワイヤレス wiki にあります。APとクライアントモードで4アドレスを使用する
APの設定はここでは説明しません。ホストapd有効にするための特定の設定があります:
# WDS (4-address frame) mode with per-station virtual interfaces # (only supported with driver=nl80211) # This mode allows associated stations to use 4-address frames to allow layer 2 # bridging to be used. #wds_sta=1
回避策として、単一のWifiデフォルトモード(3アドレスモード)接続で複数のコンテナまたはVMを別々のIPで同時に使用できるようにするが、1つMACアドレス(STAとして使用されるもの):通常DHCPと互換性がないデフォルトではMACアドレスに依存します(DHCPサーバーがDHCP クライアント識別子オプション)。 それは呼ばれていますipvlan(通常はコンテナ用)であり、TAPの対応物(通常はVM用)はIPVTAPL2 モードで使用すると、標準のイーサネット インターフェイスのように見えます。
(単純なIPネットワークネットワーク)コンテナは、ホスト上のインターフェイスを使用して、ゲートウェイ192.0.2.1を使用してIP LAN 192.0.2.0/24でWifi接続を確立した後、このように使用できます。無線LAN0:
# ip netns add testwifi
# ip link add link wlan0 name ipvl0 type ipvlan mode l2
# ip link set dev ipvl0 netns testwifi up
# ip -n testwifi address add 192.0.2.99/24 dev ipvl0
# ip -n testwifi route add default via 192.0.2.1
# ip netns exec testwifi ping -q -c1 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
--- 8.8.8.8 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 5.372/5.372/5.372/0.000 ms
NetworkManagerに4アドレスモードに関連するオプションがあるかどうかは疑問です。IP アドレスこれはコンテナ/仮想化アプリケーションによってサポートされている必要があります。ルクセンブルクまたは libvirt (IPVTAP をネイティブにサポートしていないようです) ですが、NetworkManager では実際にはサポートされていません。