
我有多個樹莓派 3 B 型板,並附有外部 wifi 適配器。我的目的是:
- 建立 RSP 設備的網狀網路。
- 每個 RSP 板應該有自己的 AP,並且客戶端(行動/筆記型電腦)可以連接到它。
- 這些 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 除外)為所有連接的用戶端建立單一網路?
答案1
有一些事情需要調整才能使其發揮作用。
首先,您不應該讓每個 RPI 的 wlan1 AP 都位於同一頻道上,因為這會在它們之間造成嚴重干擾。
您也不應該需要使用 WDS。看這個解釋有關此的更多資訊。只需確保每個 AP 具有相同的 SSID、WiFi 安全類型和相同的密碼即可。
您的想法是正確的,您需要在每個 RPI 上建立 wlan0 和 wlan1 之間的橋接。我不熟悉bridge-utils,但最好按照 batman-adv 文件中有關製作橋的說明進行操作這裡。
另一件需要注意的事情是,您可能不需要為 DHCP 服務執行 dnsmasq。您的用戶端只需使用自動指派的連結本機 IPv6 位址即可透過此無線 LAN 相互通訊。
編輯:我的錯。聽起來好像不支援在 RPI3 上使用 wlan 建立真正的網橋。看起來有一個使用 NAT 的潛在解決方法這裡。如果您連接兩個支援橋接連接的外部 WiFi 適配器,也可能實現這一點。
答案2
您還沒有提到任何有關 IP 配置的內容,而 IP 配置正是您解決問題 #3 所需要的。
仔細選擇您的 IP 計劃
你的整個網路將有一個「通用IP方案」。例如,許多網路使用192.168.*.*
.
您可以使用任何 IP 私有空間,包括 IPv4 和 IPv6。確保它不會與您的用戶的任何其他網路發生衝突或RP可能連接到。
例如,假設我們將使用全球網路172.17.*.*
。請注意,「全零」( 172.17.*.0
) 和「全一」( 172.17.*.255
) 位址在網路及其所有細分中保留(即不可用)。
我們必須將這個大網路細分為每個 RPi 都可以獨立使用的較小的網路。其中一個子網路將用於 RP 之間的通信,我們將保留該子網路172.17.0.*
。我們可以使用其他數字,但使用 0 可以輕鬆地使用腳本配置 Pi。
網路的「公共」部分將使用每個 RPi 唯一的172.17.xxx.*
IP 。xxx
同樣,為了使腳本變得簡單,我們從 1 開始,然後遞增。
RP 需要一個 IP兩個都網路。對於公共網絡,最好的做法是使用.254
,所以會的172.17.xxx.254
。但是中央網路呢? RPi 將被172.17.xxx.*
其他 RP用作網路網關。將 IP 位址與中繼網路相符才符合邏輯:我們將使用172.17.0.xxx
.
設定 Pi
設定您的 RP
wlan1
(民眾接口)來使用固定的IP172.17.xxx.254
在xxx
您的所有 RP 中是唯一的,而不是 0(見上文)。網路遮罩是255.255.255.0
.設定您的 RP
wlan0
(私人的接口)來使用固定的IP172.17.0.xxx
所在位置xxx
與上面相同。網路遮罩是255.255.255.0
.在每個 RPi 上,執行以下腳本,替換
$END
為您正在使用的 RPi 數量: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
自己的號碼,並將所有其他號碼提供給用戶。然後,我們告訴 RPi 將發送到其他電腦的資料包傳輸到適當的「網關」RPi。
告訴使用者的裝置尋找正確的位置
我假設您使用 dnsmasq 作為公共網路的 DHCP 伺服器。為了正確配置使用者設備,您需要調整其設定。
設定 DHCP,使其在適合網路的範圍內提供位址,即 IE
172.17.xxx.1
到172.17.xxx.253
。在 dnsmasq 配置的 DHCP 部分新增靜態路由(再次
xxx
適當替換):dhcp-option=121,16.172.17.0.0,172.17.xxx.254
使用靜態路由可以避免覆蓋客戶端的預設網關。這樣,如果它們仍然連接到另一個網路(即插入乙太網路的筆記型電腦),則應該不會有任何問題。
確保在提交設定之前使用 1 或 2 個 Pi 以及 1 或 2 個用戶端對此進行測試全部你的RP。