【问题标题】:IP over Bluetooth with Raspbian systemsIP over Bluetooth 与 Raspbian 系统
【发布时间】:2015-04-02 23:00:39
【问题描述】:

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

现在,我想在蓝牙物理链路上建立一个适当的 IP 层。据我了解,我必须使用 PAN(个人局域网),它应该创建一个我可以使用 ifconfig 管理的网络接口。我正在尝试调整 this tutorial,但我遇到了 invalid exchange 错误。

在 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)

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

【问题讨论】:

  • 想知道 - 我可以同时使用蓝牙连接多个设备吗?假设我有 3 台只有蓝牙的平板电脑,我可以将所有 3 台都连接到 pi 然后同时上网吗?
  • 嗨!不知道,不幸的是。我已经有几年没有使用蓝牙了。也许您应该考虑打开一个全新的 Stack Overflow 问题?祝你好运。

标签: bluetooth raspberry-pi raspbian


【解决方案1】:

在 raspbian 上提供了一个 bluez-tools 包,其功能与上述 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.network

[Match]
Name=pan0

[Network]
Address=172.20.1.1/24
DHCPServer=yes

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

[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.service

[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

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

【讨论】:

    【解决方案2】:

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

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

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

    安装一些东西(python 的东西将有助于脚本): 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。它不会返回,所以在末尾添加一个 & 号。

    bt-pan  server pan0 &
    

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

    blueagent5 --pin 4321 &
    

    好的,最后一件事。转发网络。这仅在路由器/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 配对,并连接到本地网络。

    但毕竟你不需要踮起脚尖,这一切对我来说似乎都很强大。享受吧!

    【讨论】:

    • 虽然在这个 5 年前的答案中还没有尝试步骤,但作为一个清晰而详细的答案,赞成 - 但更重要的是,像 轻松自信地启动蓝牙安全代理这样的短语> 成就了我的一天 - 谢谢
    【解决方案3】:

    @cowswithguns

    您的解决方案几乎完美无缺,除了

    bt-pan  server pan &
    

    应该是

    bt-pan  server pan0 &
    

    适用于 rpi3 和 bluez5.X

    只是警告它仍然以某种方式使用 wifi。我正在尝试通过蓝牙 ssh 到 rpi3,而 rpi3 与提供自己的 AP 进行一对一连接的设备相关联,这会切断蓝牙通信。仅当 rpi3 与 wifi AP 关联时才有效。

    【讨论】:

      【解决方案4】:

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

      DisablePlugins = network
      

      重启蓝牙服务。

      sudo service bluetooth restart
      

      仅供参考,这是我对“服务器”的命令:

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

      对于“客户”:

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

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

      【讨论】:

      • 谢谢。你最近能让它工作吗? pand 不在我的发行版中,它似乎已从一般的 apt-get 中删除。
      • pand 在 BlueZ 5.X 中显然已被弃用,但在 4.x 中仍然有效。它在 bluez-compat 包中可用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-16
      • 2022-08-16
      • 1970-01-01
      • 2017-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多