【问题标题】:Raspberry Pi ad-hoc networking树莓派 ad-hoc 网络
【发布时间】:2013-03-03 15:09:25
【问题描述】:

我想用树莓派尝试一些网络项目,我只需要在一对树莓派之间发送数据包。作为第一步,我很高兴能够以临时模式在 Raspberry Pi 之间进行 ping 操作。尽管在网上查看了一些教程和示例,但我还没有成功地做到这一点。

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

这里是一些关于网络信息的打印输出:

/etc/network/interfaces 在每个 pi:


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 的 ad-hoc 网络。我假设他们需要选择相同的 Cell id 进行通信,但我不确定如何让他们自动执行此操作。我尝试在每个 pi 上静态强制这些与以下命令相同,该命令没有更改单元格 ID,因此不起作用:

sudo iwconfig wlan0 ap (some address)

我还尝试了在 wpa_supplicant 配置中使用 ap_scan=2 的解决方案,但似乎没有帮助。

有人知道我做错了什么吗?

谢谢, 安迪。

【问题讨论】:

  • 有没有想过这个问题?
  • 值得将此作为答案添加吗?
  • 我删除了该评论,并按照您建议的 Fixee 将其作为答案。

标签: linux networking wireless raspberry-pi adhoc


【解决方案1】:

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

【讨论】:

  • 插话。我选择了 EW-7811Un 适配器,因为我四处搜索,发现有几个人在 ad hoc 模式下使用它。我按照 batman-adv wiki 上的说明配置它,它在命令行上使用 iwconfig。这样做,细胞永远不会变得相同,盒子也看不到彼此。在 /etc/network/interfaces 中使用 andys 方法效果很好。谢谢。
  • 您是否可以发布最终使用 EW-7811Un 的 /etc/network/interfaces 文件?
  • 另外,您说您不需要担心驱动程序,但是dmesg 报告EW-7911Un 使用的是什么驱动程序?我有一个,它dmesg 报告正在使用 rtl8192cu,我似乎无法 ping 另一个 pi。
【解决方案2】:

这在 /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,也可以开箱即用。

【讨论】:

  • dmesg 是否表明 rtl8192cu 被用作驱动程序?
【解决方案3】:

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

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

sudo apt-get install libnl1

接下来,在每个 Pi 上创建名为 /etc/wpa_supplicant-adhoc.conf 的以下 wpa_supplicant 配置文件:

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"
} 

您可以在其中选择ssidfrequency(查看here 以获取有效值)和psk。确保您是用户组net-dev 的一部分,使用命令

getent group netdev

如果没有,您可以使用

添加自己
sudo usermod -a -G netdev userName

接下来,将以下块添加到每个 Pi 上的 /etc/network/interfaces 文件中:

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

每个 Pi 都有一个不同的 address 字段,以 10.10.2. 开头。此外,如果您的RT5370 适配器使用的是wlan0 以外的接口(例如wlan1wlan2 等),请务必改用该接口名称。

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

ssh 10.10.2.2

访问 IP 地址为10.10.2.2 的代理。

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

【讨论】:

    猜你喜欢
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    • 2015-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多