我正在尝试使用 Raspberry Pi 设备和嵌入式系统构建 6lowpan 网络。我在两个 Raspberry Pi 设备中都启用了 bluetooth_6lowpan(modprobe bluetooth_6lowpan
和echo 1 > /sys/kernel/debug/bluetooth/6lowpan_enable
),其中一个安装了 radvd 并配置为
interface bt0
{
AdvSendAdvert on;
prefix 2001:db8::/64
{
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr on;
};
};
我将其他 Raspberry Pi(Pi 4,内核版本 5.4.83-v7l+)和嵌入式设备连接到此路由器(Pi W 内核版本 5.4.79+)。我可以从两侧 ping 通设备和路由器,但无法通过路由器将一个 Raspberry Pi ping 通到另一个嵌入式设备。此外,我无法打开路由器和 Raspberry Pi 设备之间的套接字(我可以从嵌入式设备打开套接字,它可以发送数据但不能接收)。这似乎表明 Raspberry Pi 没有将任何数据包转发到 bt0 接口。
ip -6 route
来自两个 Raspberry Pi 的信息如下:
设备
::1 dev lo proto kernel metric 256 pref medium
2001:db8::/64 dev bt0 proto kernel metric 256 expires 86263sec pref medium
fe80::/64 dev bt0 proto kernel metric 256 pref medium
default via fe80::b827:ebff:fe0e:8ee dev bt0 proto ra metric 1024 expires 1663sec hoplimit 64 pref medium
路由器
::1 dev lo proto kernel metric 256 pref medium
2001:db8::/64 dev bt0 proto kernel metric 256 pref medium
fe80::/64 dev wlan0 proto kernel metric 256 pref medium
fe80::/64 dev bt0 proto kernel metric 256 pref medium
编辑1
与指南相比(https://jan.newmarch.name/IoT/LinuxJournal/Routing/,为什么我们需要一个 lowpan 接口!!),我发现默认路由(使用命令route -A inet6
)的下一个希望 [::]/0 是路由器的地址,教程中是 fe80::1,但在我的例子中,所有下一个希望都是 [::]。这是问题吗?我该如何解决这个问题?
我尝试了以下
sudo ip r a 2001:db8::/64 dev bt0
sudo ip r a default via 2100:db8::1
RTNETLINK answers: No route to host
路由 -A inet6 的输出没有任何变化,
Kernel IPv6 routing table Destination Next Hop Flag Met Ref Use If localhost/128 [::] U 256 1 0 lo
2001:db8::/64 [::] U 256 2 0 bt0
2001:db8::/64 [::] U 1024 1 0 bt0
fe80::/64 [::] U 256 2 0 wlan0
fe80::/64 [::] U 256 2 0 bt0
[::]/0 [::] !n -1 1 0 lo
localhost/128 [::] Un 0 3 0 lo
2001:db8::/128 [::] Un 0 3 0 bt0
2001:db8::1/128 [::] Un 0 4 0 bt0
fe80::/128 [::] Un 0 4 0 wlan0
fe80::/128 [::] Un 0 3 0 bt0
fe80::98d4:d9d4:4e46:dc6a/128 [::] Un 0 3 0 wlan0
fe80::b827:ebff:fe0e:8ee/128 [::] Un 0 3 0 bt0
ff00::/8 [::] U 256 4 0 wlan0
ff00::/8 [::] U 256 2 0 bt0
[::]/0 [::] !n -1 1 0 lo