GNU/Linux >> Linux の 問題 >  >> Linux

Linux マシンは、単一の物理 WLAN インターフェイスを使用して、ワイヤレス クライアントとアクセス ポイントの両方として同時に機能できますか?

個人的にこれを行ったことはありませんが、正しい方向に向かうための情報を以下に示します。

プロトコルの観点からは、単一の無線を AP とクライアント STA の両方として機能させることは間違いなく可能です。作成している AP とクライアントとして参加している AP が同じチャネル上にある場合は、最適に機能します (またはほぼ必須です)。無線カードがチャネルをサービス リクエストに切り替え続ける必要があると、フレームが失われ、パフォーマンスが低下します。

ソフトウェア的には、それが可能になりつつあります。 Linux 上のいくつかの 802.11 カード ドライバは、VAP (仮想 AP) の概念をサポートしています。これにより、単一のカードが同時に複数の AP (複数の SSID、BSSID も含む) として機能することができます。直感に反して、VAP という用語は、仮想インターフェイスが AP モードであるかどうかに関係なく、同じ 802.11 カード上のあらゆる種類の仮想インターフェイスを意味するようになりました。したがって、これらのカード/ドライバー コンボでは、2 つの VAP を作成できます -- STA モード VAP

Atheros ベースのカード用の MadWifi ドライバーは、VAP をサポートするドライバーです。 802.11 カードが Atheros チップセットを使用していて、適切なバージョンの MadWifi ドライバーをインストールしている場合、カードを次のような同時 STA + AP モード用に構成できる場合があります:

wlanconfig ath0 create wlandev wifi0 wlanmode sta
wlanconfig ath1 create wlandev wifi0 wlanmode ap

これらはすべてを設定するための完全な手順ではなく、開始するための試みにすぎないことに注意してください。

詳細については、「wifi vap」などを Google で検索することをお勧めします。ここから上記のコマンドをコピーしました。

ああ、そしていくつかの神話の崩壊:Atheros カードは、コンシューマ マシンでは珍しくありません。これらは、Broadcom、Marvell、Intel、および Ralink とともに、802.11 チップセットの主要なプレーヤーです。また、私が MadWifi/Atheros の例を使用したからといって、同様のことができる他の大手企業のチップ用の Linux ドライバーがないという意味ではありません。また、802.11s は違います これに必要です。これを行うために 802.11s を実行する必要があると言うのは、あるインターフェイスから別のインターフェイスにフレームを転送するためだけにスパニング ツリー プロトコルをサポートする必要があると言うようなものです.


ソースと詳細情報:

https://wiki.archlinux.org/index.php/Software_access_point

短い答え

sudo iw dev wlan0 interface add wlan0_ap type managed
sudo create_ap wlan0_ap wlan0 createap mypassword

Wi-Fi デバイスが AP モードをサポートしている必要があります

AP 動作モードをサポートする nl80211 互換ワイヤレス デバイスが必要です。これは、iw list コマンドを実行することで確認できます。サポートされているインターフェイス モード ブロックの下に AP がリストされているはずです:

...
    Supported interface modes:
         * IBSS
         * managed
         * AP
         * AP/VLAN
         * WDS
         * monitor
         * mesh point
...

単一の Wi-Fi デバイスを備えたワイヤレス クライアントとソフトウェア AP

ソフトウェア AP の作成は、独自のネットワーク接続 (イーサネット、ワイヤレスなど) から独立しています。多くのワイヤレス デバイスは、AP としてもワイヤレス「クライアント」としても同時動作をサポートしています。その機能を使用すると、単一のワイヤレス デバイスを使用して、既存のネットワークの「ワイヤレス リピータ」として機能するソフトウェア AP を作成できます。この機能は、iw list の出力の次のセクションに一覧表示されます:

有効なインターフェースの組み合わせ:

$ iw list
...
valid interface combinations:
     * #{ managed } <= 1, #{ AP, P2P-client, P2P-GO } <= 1, #{ P2P-device } <= 1,
       total <= 3, #channels <= 2
...

制約 #channels <=1 は、ソフトウェア AP が Wi-Fi クライアント接続と同じチャネルで動作する必要があることを意味します。以下の hostapd.conf のチャネル設定を参照してください。

おそらくイーサネット接続が利用できないために機能を使用したい場合は、それを使用するために 2 つの別個の仮想インターフェイスを作成する必要があります。物理デバイス wlan0 の仮想インターフェイスは次のように作成できます:一意の MAC アドレスを持つ仮想インターフェイスは、ネットワーク接続 (wlan0_sta) 自体とソフトウェア AP/hostapd "ワイヤレス リピーター" 用に作成されます:

# iw dev wlan0 interface add wlan0_sta type managed 
# iw dev wlan0 interface add wlan0_ap  type managed

構成

アクセス ポイントの設定は、次の 2 つの主要部分で構成されます。

<オール>
  • ワイヤレス クライアントがコンピュータのソフトウェア アクセス ポイントに関連付けられ、IP パケットを交換できるように、Wi-Fi リンク層を設定する
  • コンピューターのネットワーク構成を設定して、コンピューター自体のインターネット接続とワイヤレス クライアントの間で IP パケットを適切に中継する
  • ツール

    create_ap

    create_ap パッケージは、インターネット共有用のブリッジ アクセス ポイントまたは NAT アクセス ポイントを作成できるスクリプトを提供します。アクセスポイントが適切に機能するように、hostapd、dnsmasq、および iptables を組み合わせます。 NAT された仮想ネットワークを作成するための基本的な構文は次のとおりです。

    # create_ap wlan0 eth0 MyAccessPoint MyPassPhrase
    

    nl80211 ドライバーには、「管理された」インターフェイス モードと呼ばれるものがあります。次のように「iw」ユーティリティを使用して構成できます。

    <ブロック引用>

    iw phy phy0 インターフェイスに wlan1 タイプの管理を追加

    詳細については、https://wireless.wiki.kernel.org/en/users/documentation/iw を参照してください。 Phy0 は、/sys/class/ieee80211/ に表示されるものを指します。

    また、rPI3 が同様のことを行うのを見てきましたが、より怪しげな「__ap」インターフェイス モードを使用しています。このようにして、ユーザーは AP モードでのみ実行される 2 番目のインターフェースを作成し、最初のインターフェースをクライアント モードとして使用します。

    どのように認識しても (ドライバーは明らかにそれをサポートする必要があります)、(同じ物理デバイスからの) 2 つのインターフェイスが必要になります。 1 つのインターフェイスは wpa_supplicant をクライアント モードとして単純に実行でき、もう 1 つのインターフェイス (AP モード) は通常、hostapd を使用してアクセスポイントを再生します。

    [編集:]

    iw ツールのソース コードは、いかがわしい __ap モードについて多くのことを明らかにしています:

    ..
    } else if (strcmp(tpstr, "__ap") == 0) {
        *type = NL80211_IFTYPE_AP;
        return 0;
    } else if (strcmp(tpstr, "__ap_vlan") == 0) {
        *type = NL80211_IFTYPE_AP_VLAN;
        return 0;
    } else if (strcmp(tpstr, "wds") == 0) {
        *type = NL80211_IFTYPE_WDS;
        return 0;
    } else if (strcmp(tpstr, "managed") == 0 ||
           strcmp(tpstr, "mgd") == 0 ||
           strcmp(tpstr, "station") == 0) {
        *type = NL80211_IFTYPE_STATION;
        return 0;
    } 
    ..
    

    __ap モードは、ネットリンク タイプ NL80211_IFTYPE_AP に変換されます。私もこれをテストしましたが、これはうまくいきます。しかし、カーネルのドキュメント wiki がそれについて触れていないのは奇妙です。


    Linux
    1. Windows と Linux の両方のプラットフォームで DIRECTORY_SEPARATOR を定義するにはどうすればよいですか?

    2. Linux で kbhit() と getch() を使用する

    3. Mac と Linux の両方を使用した効率的なキー バインド

    1. Linux で find を使用して先読みと後読みの正規表現を使用するにはどうすればよいですか?

    2. Linuxでhostapdと同時にRTL8188CUS APおよびクライアントモード?

    3. Windows と Linux の両方で読み取りと書き込みのアクセス権を持つ外付けハード ドライブを暗号化する

    1. ワイヤレスアクセスポイントを作成し、Nmcliとインターネット接続を共有しますか?

    2. bash / 標準の Linux コマンドのみを使用して、文字列内の一重引用符と二重引用符を削除する

    3. Linux ユーザーにとって Magic SysRq キーはどのように危険なのですか?