web-dev-qa-db-ja.com

複数のRaspberry Piを使用してアクセスポイントの単一のネットワーク(メッシュ)を作成する方法

複数のRaspberry Pi 3モデルBボードに、外部wifiアダプターが接続されています。私の目的は:

  1. RSPデバイスのメッシュネットワークを作成します。
  2. 各RSPボードには独自のAPが必要で、クライアント(モバイル/ラップトップ)を接続できます。
  3. これらのAPのクライアントは、さまざまなRSPデバイスの範囲内を移動できますが、接続されているAP(単一のネットワークに接続されているなど)に関係なく、互いに通信できるはずです。

#1を修正するには、RSP3の内部wifiインターフェース(wlan0)でbatman-advを使用し、すべてのデバイスが仮想bat0インターフェースを介して相互にpingできるようになりました。

#2の場合:外部wifiアダプター(wlan1)を使用し、hostapdとdnsmasqの助けを借りて、各RSPボードでAP(すべてのAPで同じssidとチャネル)を実行できます。また、異なるAPのモバイルデバイスをいくつか接続しました。

私の主なブロッキングの問題は目的#3です。

これを解決するために、bridge-utilsツールを使用して、wlan0とwlan1インターフェースの間にブリッジを作成しようとしました。ただし、RSPでは、どちらのインターフェイスもWDSモジュールをサポートしていません。そのため、今までのところ、すべてのクライアントに対して単一のネットワークを作成することはできません。また、wlan0とwlan1の間でIP転送を使用しようとしましたが、他のRSPデバイスから接続されたクライアントにpingできません。

接続されているすべてのクライアントに対して単一のネットワークを作成する(WDS以外の)他のアプローチはありますか?

5
Mahesh Jena

これを機能させるには、微調整が必​​要なものがいくつかあります。

  • まず、すべてのRPIのwlan1 APが同じチャネル上にあるべきではありません。これらのAP間に重大な干渉が発生するためです。

  • また、WDSを使用する必要もありません。これについての詳細は この説明 を参照してください。各APのSSID、WiFiセキュリティタイプ、およびパスワードが同じであることを確認してください。

  • すべてのRPIでwlan0とwlan1の間にブリッジを作成する必要があるという点で、あなたは正しい考えを持っています。私はbridge-utilsに精通していませんが、batman-advのドキュメント here のブリッジを作成する手順に従うだけの方が良いでしょう。

もう1つ注意すべき点は、DHCPサービス用にdnsmasqを実行する必要がないことです。クライアントは、自動的に割り当てられたリンクローカルIPv6アドレスを使用して、この無線LAN経由で互いに通信することができます。

編集:私の間違い。 RPI3でwlanを使用して真のブリッジを作成することはサポートされていないようです。 NAT here )を使用した回避策の可能性があるようです。ブリッジ接続をサポートする2つの外部WiFiアダプターを接続することも可能です。

4
davekats

IP構成について何も言わなかったし、IP構成は問題#3に対処するために必要なものです。

IPプランを慎重に選択する

ネットワーク全体に「一般的なIPスキーム」があります。たとえば、多くのネットワークでは192.168.*.*を使用しています。

IPv4とIPv6の両方で任意のIPプライベートスペース を使用できます。ユーザーまたはRPisが接続されている可能性のある他のネットワークと衝突しないことを確認してください。

たとえば、グローバルネットワーク172.17.*.*を使用するとします。 「すべてゼロ」(172.17.*.0)と「すべて1」(172.17.*.255)のアドレスは、ネットワークとそのすべてのサブディビジョンで予約されている(つまり、使用できない)ことに注意してください。

この大きなネットワークを、すべてのRPiが独立して使用する小さなネットワークに分割する必要があります。サブネットワークの1つは、RPis間の通信に使用されます。そのため、172.17.0.*は自分で保持します。別の番号を使用することもできますが、0を使用すると、スクリプトでPiを簡単に構成できます。

ネットワークの「パブリック」部分はIP 172.17.xxx.*を使用します。ここで、xxxは各RPiに固有です。繰り返しになりますが、スクリプトを簡単にするために、1から始めて増分します。

RPisはbothネットワークでIPを必要とします。パブリックネットワークの場合、.254を使用することがベストプラクティスであるため、172.17.xxx.254になります。しかし、中央ネットワークはどうですか? RPiは、他のRPisによってネットワーク172.17.xxx.*へのゲートウェイとして使用されます。リレーされたネットワークにIPアドレスを一致させるのは論理的です:172.17.0.xxxを使用します。

Piを設定する

  1. RPisのwlan1publicインターフェース)がfixedIP 172.17.xxx.254ここで、xxxは0ではなく、すべてのRP間で一意です(上記を参照)。ネットマスクは255.255.255.0です。

  2. RPisのwlan0privateインターフェース)がfixedIP 172.17.0.xxxここで、xxxは上記と同じです。ネットマスクは255.255.255.0です。

  3. すべてのRPiで、$ENDを使用しているRPの数に置き換えた後、次のスクリプトを実行します。

    echo 1 > /proc/sys/net/ipv4/ip_forward
    for i in $(seq 1 $END); do route add -net 172.17.$i.0 netmask 255.255.255.0 gw 172.17.0.$i; done
    iptables -A FORWARD -s 172.17.0.0/16 -d 172.17.0.0/16 -j ACCEPT
    

TL; DR、私たちは次のことを行います:ここでは172.17.0.0/16という大きなネットワークを選択します。それを255個の小さなネットワークに分割します:172.17.xxx.0/240は私たち自身のために保持し、他のすべての番号をユーザーに提供します。次に、RPisに、他のコンピュータに向かうパケットを適切な「ゲートウェイ」RPiに転送するように指示します。

ユーザーのデバイスに適切な場所を見るように伝える

パブリックネットワークのDHCPサーバーとしてdnsmasqを使用していると思います。ユーザーデバイスを正しく設定するには、その設定を微調整する必要があります。

  1. DHCPを設定して、ネットワークに適合した範囲のアドレスにサービスを提供します。 172.17.xxx.1から172.17.xxx.253へ。

  2. Dnsmasq configのDHCP部分に静的ルートを追加します(ここでもxxxを適切に置き換えます)。

    dhcp-option=121,16.172.17.0.0,172.17.xxx.254
    

静的ルートを使用すると、クライアントのデフォルトゲートウェイの上書きを回避できます。このようにして、まだ別のネットワーク(つまり、イーサネットが接続されているラップトップ)に接続されている場合、問題は発生しません。

RPisの設定allをコミットする前に、これを1つまたは2つのPiと1つまたは2つのクライアントでテストしてください。