複数のRaspberry Pi 3モデルBボードに、外部wifiアダプターが接続されています。私の目的は:
#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以外の)他のアプローチはありますか?
これを機能させるには、微調整が必要なものがいくつかあります。
まず、すべての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アダプターを接続することも可能です。
IP構成について何も言わなかったし、IP構成は問題#3に対処するために必要なものです。
ネットワーク全体に「一般的な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
を使用します。
RPisのwlan1
(publicインターフェース)がfixedIP 172.17.xxx.254
ここで、xxx
は0ではなく、すべてのRP間で一意です(上記を参照)。ネットマスクは255.255.255.0
です。
RPisのwlan0
(privateインターフェース)がfixedIP 172.17.0.xxx
ここで、xxx
は上記と同じです。ネットマスクは255.255.255.0
です。
すべての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/24
。 0
は私たち自身のために保持し、他のすべての番号をユーザーに提供します。次に、RPisに、他のコンピュータに向かうパケットを適切な「ゲートウェイ」RPiに転送するように指示します。
パブリックネットワークのDHCPサーバーとしてdnsmasqを使用していると思います。ユーザーデバイスを正しく設定するには、その設定を微調整する必要があります。
DHCPを設定して、ネットワークに適合した範囲のアドレスにサービスを提供します。 172.17.xxx.1
から172.17.xxx.253
へ。
Dnsmasq configのDHCP部分に静的ルートを追加します(ここでもxxx
を適切に置き換えます)。
dhcp-option=121,16.172.17.0.0,172.17.xxx.254
静的ルートを使用すると、クライアントのデフォルトゲートウェイの上書きを回避できます。このようにして、まだ別のネットワーク(つまり、イーサネットが接続されているラップトップ)に接続されている場合、問題は発生しません。
RPisの設定allをコミットする前に、これを1つまたは2つのPiと1つまたは2つのクライアントでテストしてください。