Bluetooth 使用Raspbian系统的蓝牙IP

Bluetooth 使用Raspbian系统的蓝牙IP,bluetooth,raspberry-pi,raspbian,Bluetooth,Raspberry Pi,Raspbian,我有两个Raspberry Pis,运行Raspbian,最新。每个Pi只有一个蓝牙USB加密狗。我可以让他们通过RFCOMM使用 现在,我想在蓝牙物理链路上建立一个合适的IP层。据我所知,我必须使用PAN(个人区域网络),这将创建一个可以使用ifconfig管理的网络接口。我正在尝试适应,但遇到了一个无效的交换错误 在RPi0上,我运行 $ sudo pand --nodetach --listen --master --role=NAP pand[2313]: Bluetooth PAN d

我有两个Raspberry Pis,运行Raspbian,最新。每个Pi只有一个蓝牙USB加密狗。我可以让他们通过RFCOMM使用

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

在RPi0上,我运行

$ 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)
我找不到有关此错误代码的任何相关信息。你知道我该怎么解决这个问题吗?还是我弄错了,我应该用别的东西而不是锅

提前谢谢

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

$ 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
仅供参考,以下是我对“服务器”的命令:

对于“客户”:


然后你可以使用ifconfig,ping,ssh。。。平常的东西。您可能想看一看,它对我很有用。

所以最近情况似乎发生了很大变化,2016年Bluez 5.23推出了Pi

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

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

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

下载两个非常酷的python脚本,将它们放在/usr/local/bin和chmod中,根据谁需要访问权限来执行它们,它们可能都是755。。。 和。非常感谢和尊敬他们各自的作者。天哪,这种事情节省了这么多时间和痛苦

现在,我们需要一座桥。将以下内容添加到/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。它不会返回,因此在末尾添加一个符号

bt-pan  server pan0 &
轻松自信地启动蓝牙安全代理。(可选)设置pin(默认为0000)

好的,最后一件事。转发网络。只有在路由器/dhcp上没有奇特的身份验证时,这才有效。如果有,您可能需要进一步研究以解决此问题

sysctl -w net.ipv4.ip_forward=1

iptables -A INPUT -i pan0 -j ACCEPT
iptables -A FORWARD -i pan0 -j ACCEPT
完成后,您可能需要保存这些iptables设置,并在每次系统引导时恢复它们

踮起脚尖走到你的平板电脑或任何你想连接到互联网的东西上。在您的设置中打开蓝牙。将4321作为pin配对,然后连接到本地网络

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

你的解决方案几乎完美无瑕,除了

bt-pan  server pan &
应该是

bt-pan  server pan0 &
与rpi3和bluez5.X配合使用非常好


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

raspbian上提供了bluez工具包,其功能与前面提到的python脚本相同

以下是如何在Raspbian上设置蓝牙pan

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

运行:

sudo-apt-get-install-bluez-tools

创建以下文件:

/etc/systemd/network/pan0.netdev

/etc/systemd/network/pan0.network

/etc/systemd/system/bt-agent.service

/etc/systemd/system/bt-network.service

然后跑

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适配器--设置可发现1


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

谢谢。你最近能让它工作吗
pand
不在我的发行版中,它似乎已从apt get中删除。在BlueZ 5.X中,pand显然不受欢迎,但在4.X中仍然有效。它在bluez compat软件包中提供。我想知道-我可以同时使用蓝牙连接多个设备吗?假设我有3台只有蓝牙功能的平板电脑,我可以将它们全部连接到pi,然后同时上网吗?嗨!不幸的是,不知道。我已经有几年没有使用蓝牙了。也许你应该考虑打开一个全新的堆栈溢出问题?祝你好运。
bt-pan  server pan &
bt-pan  server pan0 &
[NetDev]
Name=pan0
Kind=bridge
[Match]
Name=pan0

[Network]
Address=172.20.1.1/24
DHCPServer=yes
[Unit]
Description=Bluetooth Auth Agent

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

[Install]
WantedBy=multi-user.target
[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