树莓派配置双网卡分别为AD HOC和AP模式
- 需求说明:为了实现分级网络管理,将多个无人机分簇,簇间使用AD HOC进行无中心自组织的网络,簇内使用AP-AC模式进行中心化网络。因此,需要配置一台设备,同时完成AD HOC+AP模式的网络配置。
- 配置说明:树莓派3B+,安装了64位官方操作系统,插上了一个USB网卡RTL8811CU。
- 预期效果
a. AD HOC可以ping通对方
b. AP模式可以连接
一、树莓派更新源
-
更新源
a. 首先使用uname -a
查看系统,结果如下
b. 依照该教程进行源的替换:树莓派官方32位和64位系统换源 -
更新和安装库
a. 更新
sudo apt-get update
sudo apt-get upgrade
b. 安装 dnsmasq
sudo apt update
sudo apt install dnsmasq
-
安装USB 网卡驱动
参考我的另外一个博客,进行安装。 -
查看网卡和支持类型
ifconfig
iwconfig
iw list
二、配置wlan0为AD HOC模式
- 在配置文件中进行调整:
sudo nano /etc/network/interfaces
使用如下内容来替换文件中的 wlan0 配置部分:
auto wlan0
iface wlan0 inet staticaddress 192.168.100.2netmask 255.255.255.0network 192.168.100.0broadcast 192.168.100.255wireless-channel 1wireless-essid CPS-IBSSwireless-mode ad-hoc
- 修改无线配置文件:编辑 /etc/wpa_supplicant/wpa_supplicant.conf,确保不包含任何与AP相关的配置。
- 使用以下命令重启无线服务:
sudo ifdown wlan0
sudo ifup wlan0
三、配置wlan1为AP模式
- 创建或编辑hostapd的配置文件
/etc/hostapd/hostapd.conf
,使用以下内容:
interface=wlan1
driver=nl80211
ssid=CPS-AP-A
hw_mode=g
channel=6
ieee80211n=1
wmm_enabled=1
ht_capab=[HT40][SHORT-GI-20][DSSS_CCK-40]macaddr_acl=0
ignore_broadcast_ssid=0
auth_algs=1
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_passphrase=CPS123456
wpa_pairwise=TKIP
rsn_pairwise=CCMP
- 编辑
/etc/default/hostapd
文件,指定配置文件位置:
DAEMON_CONF="/etc/hostapd/hostapd.conf"
- 编辑
/etc/dnsmasq.conf
,添加以下内容:
interface=wlan1
dhcp-range=192.168.101.10,192.168.101.100,255.255.255.0,24h
- 设置静态 IP 地址。编辑 /etc/dhcpcd.conf 文件,添加以下配置:
interface wlan1
static ip_address=192.168.101.1/24
nohook wpa_supplicant
- 启动和启用服务
a. 重启 dhcpcd
sudo service dhcpcd restart
b. 启动 hostapd 和 dnsmasq
sudo systemctl start hostapd
sudo systemctl enable hostapd
sudo systemctl restart dnsmasq
- 配置防火墙(如果需要)
如果树莓派连接到互联网,并且您希望分享互联网连接,可能需要设置NAT规则:
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
编辑 /etc/rc.local 文件,在“exit 0”之前添加以下行以恢复IPTABLES规则:
iptables-restore < /etc/iptables.ipv4.nat
四、测试结果
- 重启之后,有一定几率出现wlan0没有变为AD HOC模式,而是managed模式。
- 如果一切正常,则是AD HOC模式+AP模式。HOC之间可以互相ping通,AP模式也可以被其他设备连接并互相ping通。
问题
之前使用了三台设备组成AD HOC网络,可以正常ping通,但是有如下问题: - 必须3台设备同时在线,一台设备关闭ad hoc或者关机,另外两台就无法ping通。
- 尝试更换essid名字、ip,无法解决。
- 尝试使用动态ad hoc网络协议,不成功。
- 尝试清除路由缓存,不成功。
- 总之就是问题不知道出现在哪里,按理说AD HOC自组织网络,怎么断掉一个就不行了呢?
计划尝试解决 - 难道是至少三台设备?后续用4台设备,然后断开一台设备进行测试。
五、最终测试结果
- 对上述的猜测进行测试,果然是最少需要三台设备才能组成AD HOC网络。测试过程为,准备4台设备正常ping,去除任意一台也可以正常ping,但是同时去除2台就无法ping成功。