在树莓派上使用batman-adv协议进行无线网状网络的搭建

5

我正在尝试使用树莓派、Edimax EW-7811Un WLAN适配器和batman-adv协议建立无线网状网络。

我已经尝试按照以下基本设置指南进行操作:

很不幸,在我需要从一个节点ping另一个节点的时候,我收到了“目标主机不可达”的错误信息。
运行“batctl o”命令会显示“范围内没有蝙蝠侠节点”的消息。
然而,当运行“iwconfig”命令时,两个节点都似乎已经与我设置的网络关联起来,当运行“iwlist wlan0 scan”命令时,我设置的网络在两个节点上都显示为单元格。
现在我不知道该如何继续了。我已经阅读了一些有关Linux WLAN适配器驱动程序的ad-hoc支持问题的文章。我的适配器正在使用RTL8192CU驱动程序。这可能是问题的原因吗?
附注:我查看了以下帖子的内容,但不幸的是没有得到帮助。
编辑:/etc/network/interfaces的内容如下:
当前设置的两个节点具有相同的内容:
auto lo

iface lo inet loopback
iface eth0 inet dhcp

allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

编辑:/etc/wpa_supplicant/wpa_supplicant.conf的内容,对于两个节点都是如此:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

编辑:ifconfigiwconfig和路由器配置,包括两个节点:

节点1

ifconfig

wlan0    Link encap: Ethernet  HWaddr 80:1f:02:9b:bc:6c
         inet addr:192.168.2.1  Bcast:192.168.2.255  Mask:255.255.255.0
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:0  errors:0  dropped:1  overruns:0  frame:0
         TX packets:0  errors:0  dropped:0  overruns:0  carrier:0
         collisions:0  txqueuelen:1000
         RX bytes:0  (0.0 B)  TX bytes: 0  (0.0 B)

iwconfig

wlan0    IEEE 802.11bg  ESSID:"pi-ad-hoc" Nickname:"<WIFI@REALTEK>"
         Mode:Ad-Hoc  Frequency:2.412 GHz  Cell: 02:11:87:A1:CD:FF
         Bit Rate:54 Mb/s   Sensitivity:0/0
         Retry:off    RTS thr:off    Fragment thr:off
         Encryption key:off
         Power Management:off
         Link Quality=2/100  Signal level=2/100  Noise level=0/100
         Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
         Tx excessive retries:0  Invalid misc:0  Missed beacon:0

route

Kernel IP routing table
Destination    Gateway        Genmask        Flags  Metric  Ref    Use  Iface
192.168.2.0    *              255.255.255.0  U      0       0        0  wlan0

节点2

ifconfig

wlan0    Link encap:Ethernet  HWaddr 80:1f:02:da:2e:ee
         inet addr:192.168.2.3  Bcast:192.168.2.255  Mask:255.255.255.0
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:0  errors:0  dropped:0  overruns:0  frame:0
         TX packets:6  errors:0  dropped:0  overruns:0  carrier:0
         collisions:0  txqueuelen:1000
         RX bytes:0  (0.0 B)  TX bytes:0  (0.0 B)

iwconfig

wlan0    IEEE 802.11bg ESSID:"pi-ad-hoc"  Nickname:"<WIFI@REALTEK>"
         Mode:Ad-Hoc  Frequency:2.412 GHz  Cell: 02:11:87:2F:D6:FF
         Bit Rate:54 Mb/s   Sensitivity:0/0
         Retry:off  RTS thr:off  Fragment thr:off
         Encryption key:off
         Power Management:off
         Link Quality=2/100  Signal level=2/100  Noise level=0/100
         Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
         Tx excessive retries:0  Invalid misc:0  Missed beacon:0

route

Kernel IP routing table
Destination    Gateway        Genmask        Flags  Metric  Ref     Use   Iface
192.168.2.0    *              255.255.255.0  U      0       0         0   wlan0

“sudo ifconfig” 是告诉你什么?你是否获取了你的网络的有效IP地址? - tswaehn
根据我阅读您上面提到的文档,两个 WLAN 接口都应该有一个 IP 地址。因为 Batman 基于 adhoc 网络,其中 Batman 负责通过多个节点从 bat 到 bat 的路由。因此,如所描述的那样,在成功建立 adhoc 连接后,您应该能够从 bat 到 bat 进行 ping 测试。如果这不起作用,我们应该更深入地了解 adhoc 网络的设置。 - tswaehn
有什么想法从哪里开始吗?如上所述,如果我执行“batctl o”,它会告诉我范围内没有蝙蝠侠节点,所以如果看不到它们,我怀疑我能否ping到其中一个? - Rich
请问您能否添加/发布“/etc/network/interface”设置? - tswaehn
我看到你使用了wpa_supplicant。你能提供它的配置吗? - tswaehn
显示剩余2条评论
6个回答

6
我可以确认,这是最新的rtl8192cu驱动程序存在的问题。 我曾经使用过旧版本的该驱动程序来连接edimax无线适配器并使用batman(几乎)正常。但是我发现,在某些情况下(负载较重),连接会失败。 然后我升级到了最新版本的该驱动程序(日期:2013年9月11日),但发现batman不再工作(与旧驱动程序完全相同的配置)。症状与您在帖子中描述的完全一样。
编辑:我的帖子被删除,说我没有回答问题。我不同意:这是对原帖的回答。原帖中唯一的问题是:“我的适配器正在使用RTL8192CU驱动程序。这可能是问题的原因吗?”
再次强调:我可以确认使用此(最新)驱动程序会导致问题。该驱动程序与batman不兼容。该问题与配置文件无关。尝试寻找旧版本的驱动程序或更好地使用具有不同芯片组的无线适配器。

3
您尝试设置adhoc网络,但我建议从更简单的方式开始——使用Wifi接入点,然后再切换到adhoc网络。在我看来,将树莓派连接到无线接入点更容易,因为接入点会通过DHCP分配IP地址。而在adhoc模式下,您必须自己处理IP地址(据我所知)。因此,基于接入点的解决方案的配置如下:/etc/network/interfaces。
auto lo

iface lo inet loopback
iface eth0 inet dhcp

allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

(顺便提一句,这跟你的差不多)
然后是连接到WPA2接入点的/etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
        ssid="KBBL"
        psk=af2a9daa6cadd3434ad96db48173a04acddb04e6a8c5adf52ae78ef13XXXX
        key_mgmt=WPA-PSK
        scan_ssid=1
        proto=RSN
        pairwise=CCMP
        group=CCMP
}

请注意,psk密钥需要由相关方生成。
$wpa_passphrase "KBBL" "YOUR_KEY"

这将导致类似以下的结果:
network={
        ssid="KBBL"
        #psk="YOUR_KEY"
        psk=29af596e046ad450eeddd6752432d5dbd26575960b9024e5cbb99e945cdafa4e
}

只需复制并粘贴psk

然后重新启动!我有时会在更改网络wifi设置时遇到麻烦。但是重新启动后一切都正常了。此外,wifi网络需要一些时间。在我的地方,大约需要20-40秒。

顺便说一句,当尝试设置没有加密或者WEP加密的wifi时,我也遇到了麻烦,因此建议使用WPA2或WPA。还请注意,wpa_supplicant的WPA配置与WPA2的配置大不相同。因此,您可能需要使用上面的WPA2示例。


谢谢您的回复。不幸的是,我认为这并不能让我们更进一步。使用wpa_supplicant GUI,无线网卡连接到我的宽带路由器没有任何问题。 可能是wpa_supplicant出了问题吗?它是否妨碍了什么? - Rich
所以,如果您已经测试了接入点连接,那么我们应该关注adhoc。我在想驱动程序/适配器是否存在一般连接问题。 - tswaehn

2
由于您的访问点与wifi连接正常,我们认为驱动程序和硬件都正常。现在让我们尝试通过Wifi ad-hoc连接。

我在这里找到了一些非常有前途的配置,而不使用wpa_supplicant。如上所述,我们必须使用固定的IP地址。因此,在两个树莓派上它们需要不同。请注意,我必须将“manual”更改为“static”。现在在我的地方也可以工作(重启后)。以下是示例:

/etc/network/interfaces

auto lo
iface lo inet loopback
iface eth0 inet dhcp
auto wlan0
iface wlan0 inet static
    address 192.168.2.10
    netmask 255.255.255.0
    wireless-channel 4
    wireless-essid pi-ad-hoc
    wireless-mode ad-hoc

请注意:所选的IP地址不应该在您有线网络(eth0)子网中。
同时,请确保sudo ifconfig wlan0 显示的IP地址是正确的。
pi@raspberrypi ~ $ sudo ifconfig wlan0
wlan0     Link encap:Ethernet  HWaddr 80:1f:02:87:77:81  
          inet addr:192.168.2.10  Bcast:192.168.2.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:53 errors:0 dropped:29 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:6007 (5.8 KiB)  TX bytes:1042 (1.0 KiB)

这是 sudo iwconfig wlan0
pi@raspberrypi ~ $ sudo iwconfig wlan0
wlan0     IEEE 802.11bg  ESSID:"pi-ad-hoc"  Nickname:"<WIFI@REALTEK>"
          Mode:Ad-Hoc  Frequency:2.412 GHz  Cell: 02:11:87:DF:AB:FF   
          Bit Rate:54 Mb/s   Sensitivity:0/0  
          Retry:off   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off
          Link Quality=2/100  Signal level=2/100  Noise level=0/100
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

好的,我按照那个链接中的设置进行了操作,虽然我之前已经看过了,但我还是想再试一次,但这仍然不起作用。当我尝试ping时,会出现“网络不可达”的错误。 在运行“iwlist wlan0 scan”时,两个节点都将“pi-ad-hoc”网络视为第01个单元,并且iwconfig显示适配器已与该网络关联。如果我执行“route”,则两个节点都不会显示任何内容。 - Rich
至少我们取得了进展 :-) -- 网络是可访问的。也许你应该首先把你的树莓放得更近一些。我的测试距离是80厘米。 - tswaehn
@user3597805 我和你遇到了完全相同的问题。我只是想知道你是否已经解决了它? - Mr Cold
一切都取决于拥有正确的WiFi适配器和合适的驱动程序。 - tswaehn
你使用的是哪个WiFi适配器? - tswaehn
显示剩余6条评论

1
我在Raspberry Pi A+和Edimax EW-7811Un的组合中遇到了问题,几分钟后它变得不响应。 Apache和SSH无法访问,ping也无法连接。
iwconfig程序显示:"Power Management:off",但仍进入空闲模式。
我在树莓派论坛上从MrEngman那里找到了解决方案:http://www.raspberrypi.org/forums/viewtopic.php?f=28&t=61665 这可能可以解决问题:
使用命令在/etc/modprobe.d/目录中创建一个名为8192cu.conf的文件:
    sudo nano /etc/modprobe.d/8192cu.conf

add these lines:

    # Disable power management
    options 8192cu rtw_power_mgnt=0 rtw_enusbss=0

这是一个非常好的提示,尽管作者没有提到通信中断的问题。他写道,他无法运行Batman所需的接入点模式。wifi适配器使用的驱动程序默认情况下不能运行接入点模式。它可以进行编译以实现该功能,但最初不支持。 - tswaehn

1
我刚刚使用两个树莓派和相同的Wifi适配器(Edimax EW-7811Un)在Raspbian上检查了您的配置。长话短说:我的结果与您一样。
我的发现如下:
  1. 按照描述设置一个树莓派作为adhoc,并从iPad或笔记本电脑连接…正常工作
  2. 在笔记本上创建adhoc连接并让一个树莓派加入…正常工作
  3. 将一个树莓派设置为接入点并从iPad或笔记本电脑连接…正常工作
  4. 但是,当设置两个树莓派为adhoc模式或接入点模式时,它们彼此之间无法连接…不起作用!
  5. 正如您通过这里的链接所发现的那样,这些适配器(rtl8192cu)的可用模式不清楚。
  6. 其他来源使用类似的设置和其他wifi适配器轻松创建adhoc连接。
看起来这些适配器驱动程序不允许此连接。
请注意:使用这些适配器设置访问点需要一个特殊编译的hostapd:点击此处了解详情

0

抱歉我目前没有地方进行测试,所以无法提供截图。

如果你仍然感兴趣,并且已经使用batman-adv和catwoman设置了几个mesh网络并遇到类似问题(我曾经尝试过混合设备,例如安卓手机、foneras、openwrt设备等等),请继续阅读。

使用batman-adv时,第一件要检查的事情是兼容版本,在加载batman-adv模块时,请查看您的dmesg输出,确定每个节点使用的版本是否匹配,否则它们将无法相互发现,即使两者都正确设置!(过去这给我带来过很多困扰,呵呵)

如果节点仍然无法相互发现,您需要检查在更改为ad-hoc模式时是否存在任何问题。

现在,一旦节点彼此相互发现,请记住batman-adv工作在第2层,batctl有一个ping工具可以在这个层上进行ping,即使节点无法相互发现。

我不太确定为什么你在这里使用了wpa-supplicant,mesh网络不需要它。要设置你的mesh,只需选择一个信道和一个ESSID;所有节点应该具有相同的参数,然后将wifi接口设置为ad-hoc模式,并在batctl中将接口添加到bat0接口。

bat0接口?那是实际的mesh接口,不是wlan0。你确实在wlan0接口上放了一个ip,但那样行不通,你需要给bat0分配一个ip地址,这是mesh将要使用的。根据记忆,命令应该是:batctl ifadd wlan0,但为了保险起见,请检查一下batctl帮助文档 :)

如果你想共享互联网连接,你需要按照以下步骤进行操作:首先,在连接到互联网的节点上创建一个桥接,将bat0和具有互联网接口的接口连接起来(记得让wlan0或任何使用mesh的接口保持独立),最后在该节点上进入batctl并打开gw(网关)模式(batctl gw on,我想是这样)。然后你可以在所有节点上运行dhcp over bat0,它应该能够正常工作。

以防万一,请确保已加载batman-adv模块哈哈

我认为我已经涵盖了设置batman-adv mesh的所有方面。如果你有任何疑问,我会尽力帮助:D

最好的问候,希望你的mesh能够正常工作!:)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接