Raspberry Pi ad-hoc网络

时间:2013-03-15 01:43:22

标签: linux networking wireless raspberry-pi adhoc

我想尝试一些使用Raspberry Pis的网络项目,我需要在一对pis之间发送数据包。我很高兴作为第一步,只能在ad-hoc模式下ping到Raspberry Pis。尽管在线查看了几个教程和示例,但我还没有成功完成这项工作。

我安装了Debian Wheezy OS的2x Raspberry Pis。我正在使用以下USB适配器,我在两个pis上安装了固件,并通过在托管模式下将它们连接到路由器来测试它们的工作方式: 总线001设备004:ID 050d:945a Belkin组件F7D1101 v1基本无线适配器[Realtek RTL8188SU]

以下是有关网络信息的一些打印件:

每个pi的

/ etc / network / interfaces:


pi1@raspberrypi ~ $ cat /etc/network/interfaces 
auto lo
iface lo inet loopback
iface eth0 inet dhcp
auto wlan0
iface wlan0 inet manual
    address 192.168.2.1
    netmask 255.255.255.0
    wireless-channel 4
    wireless-essid pi-ad-hoc
    wireless-mode ad-hoc
pi2@raspberrypi ~ $ cat /etc/network/interfaces 
auto lo
iface lo inet loopback
iface eth0 inet dhcp
auto wlan0
iface wlan0 inet manual
    address 192.168.2.2
    netmask 255.255.255.0
    wireless-channel 4
    wireless-essid pi-ad-hoc
    wireless-mode ad-hoc

每个pi的ifconfig:


pi1@raspberrypi ~ $ ifconfig wlan0
wlan0     Link encap:Ethernet  HWaddr ec:1a:59:46:8e:5a  
          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:26 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)
pi2@raspberrypi ~ $ ifconfig wlan0
wlan0     Link encap:Ethernet  HWaddr ec:1a:59:46:59:0a  
          inet addr:192.168.2.2  Bcast:192.168.2.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:6 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)

每个pi的iwconfig:


pi1@raspberrypi ~ $ iwconfig wlan0
wlan0     IEEE 802.11bg  ESSID:"pi-ad-hoc"  Nickname:"rtl_wifi"
          Mode:Ad-Hoc  Cell: 02:11:87:FA:4A:02   Bit Rate:54 Mb/s
Sensitivity:0/0
Retry:off RTS thr:off Fragment thr:off Power Management:off Link Quality:0 Signal level:0 Noise level:0 Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0 pi2@raspberrypi ~ $ iwconfig wlan0 wlan0 IEEE 802.11bg ESSID:"pi-ad-hoc" Nickname:"rtl_wifi" Mode:Ad-Hoc Cell: 02:11:87:C4:F2:01 Bit Rate:54 Mb/s
Sensitivity:0/0
Retry:off RTS thr:off Fragment thr:off Power Management:off Link Quality:0 Signal level:0 Noise level:0 Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0

在一个pi处路由(在其他pi上相同):


pi1@raspberrypi ~ $ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.1.1     0.0.0.0         UG    0      0        0 eth0
192.168.1.0     *               255.255.255.0   U     0      0        0 eth0
192.168.2.0     *               255.255.255.0   U     0      0        0 wlan0

在每个pi上进行iwlist扫描:


pi1@raspberrypi ~ $ sudo iwlist wlan0 scan
wlan0     Scan completed :
          Cell 01 - Address: 02:11:87:FA:4A:02
                    ESSID:"pi-ad-hoc"
                    Protocol:IEEE 802.11bg
                    Mode:Ad-Hoc
                    Frequency:2.427 GHz (Channel 4)
                    Encryption key:off
                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 6 Mb/s
                              9 Mb/s; 12 Mb/s; 18 Mb/s; 24 Mb/s; 36 Mb/s
                              48 Mb/s; 54 Mb/s
                    Quality:0  Signal level:0  Noise level:0
          Cell 04 - Address: 02:11:87:C4:F2:01
                    ESSID:"pi-ad-hoc"
                    Protocol:IEEE 802.11bg
                    Mode:Ad-Hoc
                    Frequency:2.427 GHz (Channel 4)
                    Encryption key:off
                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 6 Mb/s
                              9 Mb/s; 12 Mb/s; 18 Mb/s; 24 Mb/s; 36 Mb/s
                              48 Mb/s; 54 Mb/s
                    Signal level=100/100
pi2@raspberrypi ~ $ sudo iwlist wlan0 scan wlan0 Scan completed : Cell 01 - Address: 02:11:87:C4:F2:01 ESSID:"pi-ad-hoc" Protocol:IEEE 802.11bg Mode:Ad-Hoc Frequency:2.427 GHz (Channel 4) Encryption key:off Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 6 Mb/s 9 Mb/s; 12 Mb/s; 18 Mb/s; 24 Mb/s; 36 Mb/s 48 Mb/s; 54 Mb/s Quality:0 Signal level:0 Noise level:0 Cell 02 - Address: 02:11:87:FA:4A:02 ESSID:"pi-ad-hoc" Protocol:IEEE 802.11bg Mode:Ad-Hoc Frequency:2.427 GHz (Channel 4) Encryption key:off Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 6 Mb/s 9 Mb/s; 12 Mb/s; 18 Mb/s; 24 Mb/s; 36 Mb/s 48 Mb/s; 54 Mb/s Signal level=100/100

Ping不起作用,并且它们之间似乎没有联网。从iwconfig中,您可以看到它们各自具有不同的“Cell”地址(与iwlist扫描中的Cell不同),这是用于定义ad-hoc网络的伪基站ID(我最好的理解来自我读过的内容)。此外,从iwlist中,每个pi都可以看到自己的pi加上另一个pi的ad-hoc网络。我假设他们需要选择相同的Cell id进行通信,而我不确定如何让他们自动完成此操作。我尝试静态强制这些与每个pi的以下命令相同,但没有改变单元格id,因此不起作用:

sudo iwconfig wlan0 ap (some address)

我还尝试了一个在wpa_supplicant配置中使用ap_scan = 2的解决方案,这似乎没什么帮助。

任何人都知道我做错了什么?

谢谢, 安迪。

3 个答案:

答案 0 :(得分:6)

经过一番搜索,我发现我使用的Belkin USB适配器显然没有使用linux驱动程序的ad-hoc模式支持。我买了一些其他无线USB适配器,效果很好“Edimax EW-7811Un 150 Mbps无线11n Nano尺寸USB适配器”。它们更便宜,更小,并且他们在ad-hoc模式下工作,甚至不需要担心司机。如果您还想进行临时的覆盆子PI项目,我可以将我提供的详细信息用作指南。

答案 1 :(得分:3)

这适用于/ etc / network / interfaces:

auto wlan0
allow-hotplug wlan0
iface wlan0 inet static
wireless-essid "MYPINET"
wireless-channel 3
wireless-mode ad-hoc
wireless-ap 11:5F:02:38:5C:45
address 192.168.10.1
netmask 255.255.255.0

essid,channel和ap可以是任何有效值(在所有Pi上都相同)。确保在同一个子网上为不同的Pi分配不同的地址,你应该没问题。 ap定义了上面提到的小区ID。 FWIW我正在使用TP-link WN725N。它有RTL8188CUS芯片组,开箱即用,即使dmesg表示Pi将其视为RTL8192。

答案 2 :(得分:0)

我使用RTL8188CUS芯片组的任何适配器都没有成功。幸运的是,我有一些支持RT5370接口和ad-hoc模式的Ralink nl80211加密狗(来自this kit)。

我的解决方案涉及使用wpa_supplicant并配置了2个文件。确保已安装nl80211驱动程序:

sudo apt-get install libnl1

接下来,在每个Pi上创建名为wpa_supplicant的{​​{1}}配置文件:

/etc/wpa_supplicant-adhoc.conf

您可以在其中选择ctrl_interface=DIR=/run/wpa_supplicant GROUP=netdev update_config=1 ap_scan=2 network={ ssid="pihoc_wpa" mode=1 frequency=2462 proto=WPA key_mgmt=WPA-NONE pairwise=NONE group=TKIP psk="password" } ssid(查看有效值here)和frequency。使用命令

确保您是用户组psk的一部分
net-dev

如果没有,您可以使用

添加自己
getent group netdev

接下来,将以下块添加到每个Pi上的sudo usermod -a -G netdev userName 文件中:

/etc/network/interfaces

其中每个Pi都有一个以auto wlan0 allow-hotplug wlan0 iface wlan0 inet static address 10.10.2.1 netmask 255.255.255.0 pre-up wpa_supplicant -B -D nl80211 -i wlan0 -c /etc/wpa_supplicant-adhoc.conf 开头的不同address字段。此外,如果您的10.10.2.适配器使用RT5370以外的接口(例如wlan0wlan1等),请务必使用该接口名称。

此时,Pis应在重新启动时自动加入网络。通过ping或使用ssh测试连接,例如从IP地址为wlan2的代理运行以下命令:

10.10.2.1

访问IP地址为ssh 10.10.2.2 的代理。

此处列出的步骤改编自this Arch Linux wiki articlethis Raspberry Pi forum discussion