Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux 藍牙 PAN 個人區域網組建指南:bncp 協議、IP 配置與網路共享實戰

編輯:Linux 教學

前言

藍牙個人區域網 (PAN) 透過 BNEP (Bluetooth Network Encapsulation Protocol) 實現 IPv6/IPv4 封包在藍牙鏈路上傳輸,適合無 Wi-Fi 環境下設備間檔案傳輸、網路共享。本文記錄雙 Linux 系統建立 NAP (Network Access Point) / PANU 角色連線、IP 設定與 iptables 共享上網全流程。

一、軟體與核心模組準備

# 安裝藍牙協議棧工具 (Debian/Ubuntu)
sudo apt-get install bluez bluez-tools

# 載入 BNEP 核心模組
sudo modprobe bnep
# 開機自動載入
echo "bnep" | sudo tee /etc/modules-load.d/bnep.conf

二、雙端基礎配置 (主機 Server / 客戶端 Client 均需執行)

# 1. 啟用藍牙介面並設為可被發現/連接
sudo hciconfig hci0 up piscan

# 2. 確認介面狀態
hciconfig -a
# 應顯示 UP RUNNING PSCAN ISCAN

三、建立 PAN 連線

主機端 (NAP - Network Access Point)

# 監聽連線,扮演 NAP 角色
sudo pand --listen --role NAP --master

客戶端 (PANU - PAN User)

# 主動連線主機 MAC (以 00:11:67:46:4E:4E 為例)
sudo pand --connect 00:11:67:46:4E:4E --role PANU --service NAP

--service NAP 指定連接 NAP 服務 (預設即為 NAP)。

驗證連線

pand -l
# 輸出應包含:
# bnep0 00:11:67:46:4E:4E PANU
# 表示 bnep0 介面已建立,對端 MAC 為主機

四、IP 位址配置與連通性測試

主機端

sudo ifconfig bnep0 10.10.106.1 netmask 255.255.255.0 up

客戶端

sudo ifconfig bnep0 10.10.106.2 netmask 255.255.255.0 up

測試

# 客戶端 ping 主機
ping 10.10.106.1
# 主機 ping 客戶端
ping 10.10.106.2

五、網路共享上網 (主機為閘道)

1. 客戶端添加預設路由

sudo route add default gw 10.10.106.1

2. 主機啟用 IP 轉發與 NAT (iptables 腳本)

#!/bin/bash
# 保存為 /usr/local/bin/bt-nat.sh, chmod +x

IPTABLES=/usr/sbin/iptables
EXTIF=ppp0          # 主機連外網介面 (如 ppp0/eth0/wlan0)
INTIF=bnep0         # 藍牙 PAN 介面

# 1. 開啟核心 IP 轉發
echo 1 > /proc/sys/net/ipv4/ip_forward

# 2. 清空現有規則
$IPTABLES -F
$IPTABLES -X
$IPTABLES -t nat -F
$IPTABLES -t nat -X

# 3. NAT 偽裝 (MASQUERADE 適用動態 IP 介面)
$IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE

# 4. 轉發鏈:允許來自 bnep0 的新建立/已建立連線流向外網
$IPTABLES -A FORWARD -i $INTIF -o $EXTIF -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
# 允許回應流量返回
$IPTABLES -A FORWARD -i $EXTIF -o $INTIF -m state --state ESTABLISHED,RELATED -j ACCEPT

# 5. 選擇性開放主機服務 (SSH/HTTP)
$IPTABLES -A INPUT -p tcp --dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 80 -j ACCEPT

echo "Bluetooth PAN NAT enabled: $INTIF -> $EXTIF"

執行:sudo /usr/local/bin/bt-nat.sh

3. 驗證共享上網

# 客戶端
ping 8.8.8.8
curl https://www.google.com

六、藍牙 PAN 斷開與清理

# 客戶端斷開
sudo pand -K  # 終止所有 pand 連線

# 或針對特定介面
sudo ifconfig bnep0 down
sudo pand --disconnect 00:11:67:46:4E:4E

七、systemd 服務化 (開機自動組網)

主機端服務單元

# /etc/systemd/system/bluetooth-pan-nap@.service
[Unit]
Description=Bluetooth NAP for %i
After=bluetooth.service
Requires=bluetooth.service

[Service]
Type=simple
ExecStart=/usr/bin/pand --listen --role NAP --master -d
Restart=on-failure

[Install]
WantedBy=multi-user.target

啟用:sudo systemctl enable bluetooth-pan-nap@hci0

客戶端服務單元

# /etc/systemd/system/bluetooth-pan-panu@.service
[Unit]
Description=Bluetooth PANU to %i
After=bluetooth.service
Requires=bluetooth.service

[Service]
Type=simple
ExecStart=/usr/bin/pand --connect %i --role PANU --service NAP -d
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

啟用:sudo systemctl enable bluetooth-pan-panu@00:11:67:46:4E:4E

八、常見問題排查

現象原因對策
pand --connect 逾時主機未 piscan / 防火牆阻擋 L2CAP檢查 hciconfig hci0、開放 iptables -A INPUT -p l2cap -j ACCEPT
bnep0 無 IP / 無法 ping未手動配置 IP / DHCP 失敗靜態配置 ifconfig bnep0 ... 或啟用 dhclient bnep0
共享上網 DNS 失效客戶端 /etc/resolv.conf 無名稱伺服器手動添加 nameserver 8.8.8.8 或啟用 systemd-resolved
傳輸速度極慢 (~50KB/s)藍牙 2.0/2.1 EDR 理論上限 2.1Mbps升級藍牙 3.0+HS (AMP) 或 4.0/5.0 設備

結語

藍牙 PAN (BNEP) 提供無需 Wi-Fi 基建的輕量級 IP 互聯方案。掌握 pand 角色建立、bnep 介面 IP 配置與 iptables NAT 轉發,即可在嵌入式設備、筆電、手機熱點替代場景快速組建個人區域網。現代 bluez 5 已整合 bluetoothctl 統一管理介面,建議新專案優先使用 D-Bus API 程式化控制。

Copyright © Windows教程網 All Rights Reserved