【问题标题】:Bluetooth PAN connection - ARP not working蓝牙 PAN 连接 - ARP 不工作
【发布时间】:2016-08-25 12:05:20
【问题描述】:

我的设置是一个嵌入式设备,可以通过平板电脑访问(可以是基于 Android 或 iOS 的)。

设备通过蓝牙访问,并实现了 PAN 配置文件(NAP 角色),因此平板电脑将其视为可以访问互联网的设备。

我使用 DBus 向 Bluez 注册 NAP 服务器。这很好用,当平板电脑连接时,Bluez 会创建一个名为“bnep0”的网络接口。 我已经在 /etc/network/interfaces 中配置了 bnep0 接口:

iface bnep0 inet static
  address 10.254.239.1
  netmask 255.255.255.0
  post-up service isc-dhcp-server start
  pre-down service isc-dhcp-server stop

我使用 udev 使用 /etc/udev/rules.d/50-bnep.rules 中定义的规则启动/关闭接口:

ACTION=="add", KERNEL=="bnep0" SUBSYSTEM=="net", RUN+="/sbin/ifup bnep0"
ACTION=="remove", KERNEL=="bnep0", SUBSYSTEM=="net", RUN+="/sbin/ifdown bnep0"

如您所见,我使用接口启动/关闭事件来启动/停止为平板电脑提供 IP 地址的 DHCP 服务器。

我的 DHCP 服务器由 /etc/dhcp/dhcpd.conf 中的以下几行配置:

subnet 10.254.239.0 netmask 255.255.255.0 {
  range 10.254.239.2 10.254.239.254;
}

附带说明一下,我还在 /etc/network/interfaces 中创建了一个网桥 br0。这是 Bluez 注册 NAP 接口所必需的:

iface br0 inet manual
  bridge_ports none
  bridge_fd 0
  bridge_stp off

这一切都很好。平板电脑将与我的设备进行蓝牙配对并成功连接。我还可以观察到平板电脑查询我设备的 DHCP 服务器并分配了地址 10.254.239.2

在我的设备上,我从命令 'ip addr show' 获得输出:

4: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 5c:e0:c5:af:7b:f6 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::984d:cdff:fe4b:65be/64 scope link 
       valid_lft forever preferred_lft forever
9: bnep0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UNKNOWN group default qlen 1000
    link/ether 5c:e0:c5:af:7b:f6 brd ff:ff:ff:ff:ff:ff
    inet 10.254.239.1/24 brd 10.254.239.255 scope global bnep0
       valid_lft forever preferred_lft forever
    inet6 fe80::5ee0:c5ff:feaf:7bf6/64 scope link 
   valid_lft forever preferred_lft forever

然后我在我的嵌入式设备上启动一个应用程序,它在地址 10.254.239.1、端口 15137 上打开一个 TCP 服务器套接字。该应用程序侦听来自平板电脑的传入连接。

现在我尝试打开从平板电脑到 IP 地址 10.254.239.1 的 TCP 客户端套接字。我可以观察到(使用 wireshark)接口 bnep0 接收到 IP 地址 10.254.239.1 的 ARP 请求。但是我的设备没有产生任何 ARP 响应,并且平板电脑应用程序在尝试连接 TCP 套接字时会超时 :-(

同样,如果我尝试从我的嵌入式设备 ping 平板电脑,我发现我的设备发送了 10.254.239.2 的 ARP 请求,平板电脑正常响应。但是就好像设备没有收到ARP响应一样,因为它之后没有发送任何ping请求。

因此,症状是接口bnep0上的传入ARP数据包没有得到处理。

我真的无法理解我错过了什么。有谁能帮帮我吗?

【问题讨论】:

    标签: bluetooth tcp-ip arp


    【解决方案1】:

    事实证明,问题在于我自己对网桥的工作原理缺乏了解。

    我发现了非常有用的 HOWTO Persistently bridge traffic between two or more Ethernet interfaces (Debian),它明确指出一旦网络接口被添加到网桥,它就不能用作 IP 流量的端点。

    因此,我需要做的是在 /etc/network/interfaces 中更改我的网络接口设置,使网桥成为 IP 端点:

    iface br0 inet static
      address 10.254.239.1
      netmask 255.255.255.0
      bridge_ports none
      bridge_fd 0
      bridge_stp off
    

    请注意,bnep0 部分可以完全省略。

    也感谢ELinux - Bluetooth Network 的启发。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-17
      • 1970-01-01
      • 2018-01-18
      • 2011-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多