IP over Bluetooth 与 Raspbian 个系统

IP over Bluetooth with Raspbian systems

我有 2 个 Raspberry Pi,运行ning Raspbian,是最新的。每个 Pi 都有一个蓝牙 USB 加密狗。我可以让他们使用 this.

通过 RFCOMM 进行通信

现在,我想在蓝牙物理层上建立一个合适的 IP 层 link。据我所知,我必须使用 PAN(个人局域网),它应该创建一个我可以用 ifconfig 管理的网络接口。我正在尝试调整 this tutorial,但我遇到了 无效交换 错误。

在树莓派0上,我运行

$ sudo pand --nodetach --listen --master --role=NAP
pand[2313]: Bluetooth PAN daemon version 4.99

在 RPi1 上,我 运行

$ pand --nodetach --connect 00:1A:7D:DA:71:16
pand[2323]: Bluetooth PAN daemon version 4.99
pand[2323]: Connecting to 00:1A:7D:DA:71:16
pand[2323]: Connect to 00:1A:7D:DA:71:16 failed. Invalid exchange(52)

我找不到关于此错误代码的任何相关信息。知道我该如何解决这个问题吗?还是我弄错了,我应该用别的东西代替 PAN 吗?

提前致谢!

编辑: 在指定我要收听的蓝牙设备时,我收到另一条错误消息。它也没有任何意义,因为我没有 运行 任何其他蓝牙服务器。

$ sudo pand -i 00:1A:7D:DA:71:16 --nodetach --listen --role=NAP
pand[2582]: Bluetooth PAN daemon version 4.99
pand[2582]: Bind failed. Address already in use(98)

经过大量的努力,这就是我让它工作的方式。让我们希望它可以帮助别人。长话短说,编辑 /etc/bluetooth/main.conf 以包含此行:

DisablePlugins = network

重新启动蓝牙服务。

sudo service bluetooth restart

仅供参考,这是我对 "server" 的命令:

sudo pand -i 00:1A:7D:DA:71:14 --listen --master --role=NAP

对于"client":

sudo pand --nodetach --connect 00:1A:7D:DA:71:14

然后你就可以使用 ifconfig、ping、ssh...这些常用的东西了。你可能想看看here,对我很有用。

所以最近情况似乎发生了很大变化,Pi 在 2016 年配备了 Bluez 5.23。

仅仅花了两天时间,这些步骤已经为我的 pi 解决了这个问题,但可能对任何 Debian Jessie 安装都有帮助。但愿如此。刚刚在新的 pi 运行 jessie 上进行了全新安装测试。这将提供一个桥接到您的 eth0 网络的蓝牙 pan(从而使用您现有的 dhcp/dns 服务器等)。这是我的第一个 post,所以请原谅这里各种约定的愚蠢。我希望这对某人有所帮助并为您节省一点时间。

这可能不是最佳解决方案(我不是大师),我很想听听一些改进。

安装一些东西(python 东西对 scritps 有帮助): sudo apt-get install bridge-utils bluez python-dbus python-gobject

下载两个非常酷的 python 脚本,将它们放在 /usr/local/bin 中,然后 chmod 可能都设置为 755,具体取决于谁需要执行... blueagent5bt-pan。非常感谢和敬意他们各自的作者。天哪,这种事情可以节省很多时间和痛苦。

现在,我们需要一座桥。在 /etc/network/interfaces

末尾添加以下内容
auto pan0
iface pan0 inet dhcp
  bridge_stp off
  bridge_ports eth0

我大约在这个时候重新启动以确保一切正常。

sudo reboot

重新登录,我们发出

modprobe bnep
hciconfig hci0 lm master,accept
ip link set pan0 up

如果您不想要 pin 提示,请不要执行下一步。为确保我们收到 PIN 提示,请发出此...

hciconfig hci0 sspmode 0

使用 bt-pan 脚本中的特殊魔法启动 PAN。它没有return,所以在末尾添加一个符号。

bt-pan  server pan0 &

轻松自信地启动蓝牙安全代理。可选地设置一个引脚(默认为 0000)。

blueagent5 --pin 4321 &

好的,最后一件事。转发网络。这仅在 router/dhcp 没有花哨的身份验证时有效,如果有,您可能需要进一步查看以解决此问题。

sysctl -w net.ipv4.ip_forward=1

iptables -A INPUT -i pan0 -j ACCEPT
iptables -A FORWARD -i pan0 -j ACCEPT

完成后,您可能需要保存这些 iptables 设置并在每次系统启动时恢复它们。

小心翼翼地使用平板电脑或任何您尝试连接到互联网的设备。在您的设置中打开蓝牙。将 4321 作为密码配对,并连接到本地网络。

但你毕竟不需要踮起脚尖,我觉得这一切都很稳健。享受吧!

@cowswithguns

除了

,您的解决方案几乎完美无缺
bt-pan  server pan &

应该是

bt-pan  server pan0 &

适用于 rpi3 和 bluez5.X

唯一需要注意的是它仍然以某种方式使用 wifi。我正在尝试通过蓝牙 ssh 到 rpi3,而 rpi3 与一个设备相关联,该设备为 one-to-one 连接提供自己的 AP,这会切断蓝牙通信。仅当 rpi3 与 wifi AP 相关联时才有效。

bluez-tools 软件包在 raspbian 上可用,其功能与上述 python 脚本相同。 original answer

以下是在 Raspbian 上设置蓝牙平移的方法。

此答案使用 systemd/networkd,但如果需要,您可以对接口文件和 dnsmasq 执行类似的操作。

运行:

sudo apt-get install bluez-tools

创建以下文件:

/etc/systemd/network/pan0.netdev

[NetDev]
Name=pan0
Kind=bridge

/etc/systemd/network/pan0.网络

[Match]
Name=pan0

[Network]
Address=172.20.1.1/24
DHCPServer=yes

/etc/systemd/system/bt-agent.服务

[Unit]
Description=Bluetooth Auth Agent

[Service]
ExecStart=/usr/bin/bt-agent -c NoInputNoOutput
Type=simple

[Install]
WantedBy=multi-user.target

/etc/systemd/system/bt-network.服务

[Unit]
Description=Bluetooth NEP PAN
After=pan0.network

[Service]
ExecStart=/usr/bin/bt-network -s nap pan0
Type=simple

[Install]
WantedBy=multi-user.target

然后运行

sudo systemctl enable systemd-networkd
sudo systemctl enable bt-agent
sudo systemctl enable bt-network
sudo systemctl start systemd-networkd
sudo systemctl start bt-agent
sudo systemctl start bt-network

终于要配对了,运行:

sudo bt-adapter --set Discoverable 1

然后,在另一台设备上配对并连接网络。希望在那之后一切都能正常工作。