- PVSM.RU - https://www.pvsm.ru -

Raspberry Pi PAN

Пикосеть Bluetooth-PAN (Personal Area Network [1])

Поднимаем сеть через bluetooth на Raspberry Pi с поддержкой systemd.

Моя дружба с Raspberry Pi многолетняя, и все годы я бесконечно экспериментировал. Неужели Raspberry Pi подталкивает к авантюризму? Кроме всего прочего, я страстный фотограф, вовсю использую «малинку» как беспроводный пульт дистанционного управления фотоаппаратом с помощью программы gphoto2 [2].

В моей конфигурации миникомпьютер включает собственный веб-сервер для удаленного просмотра фотографий через wi-fi и работает в режиме точки доступа [3].

Но мне необходим еще один сетевой беспроводный интерфейс, и вот здесь начинается знакомство с пикосетью PAN (HOWTO-PAN [4]).

Raspberry Pi PAN - 1

Между прочим, корпорация Nikon тоже использует подобное решение: фотографии передаются через интерфейс wi-fi, но управление осуществляется через блютус. Программа называется SnapBridge для iOS и Android [5].

А еще с помощью PAN и ssh можно удаленно управлять «малинками», или даже сделать мост в интернет, например, чтобы смотреть через браузер новости или читать почту.

Еще несколько лет назад пикосеть настраивалась с помощью программы pand, сегодня устаревшая утилита pand уже не поддерживается, наступила эпоха systemd с «юнитами» загрузки. Рабочую конфигурацию юнитов я нашел на известном ресурсе stackoverflow [6], но стремительное развитие блютус опять-таки потребовало внести коррективы.

Итак, начинаем настраивать PAN в системе с поддержкой systemd.

После установки основных пакетов bluetooth Raspberry Pi OS, скачайте bluez-utils:
$ sudo apt-get install bluez-utils
Посмотрите, не заблокирован ли программно блютус:
$ rfkill (блютус должен быть включен)
Чтобы настроить сеть, необходимо узнать аппаратные адреса блютус на клиенте и сервере:
$ hcitool dev (записываем адреса MAC)

Также придется определить «доверенные устройства». Для этого в Linux есть утилита bluetoothctl.
Исчерпывающей документации по bluetoothctl много, поэтому приведу основные действия. На сервере и клиенте включите блютус, чтобы радиоинтерфейсы «светили», затем запустите интерактивную команду bluetoothctl, справка вызывается командой help. Сканируем доступные сети. Найдите  MAC адрес нужного устройства, сделайте «pair MAC» (автоматическое дополнение tab) и «trust MAC», «connect MAC».

Кажется, все самое неприятное позади. Но придется
создать четыре файла для работы systemd на стороне сервера.
Они создаются в директориях /etc/systemd/network и /etc/systemd/system.
Это следующие файлы: /etc/systemd/network/pan0.netdev, /etc/systemd/network/pan0.network, /etc/systemd/system/bt-agent.service, /etc/systemd/system/bt-network.service.

Ниже содержимое всех четырех файлов.

/etc/systemd/network/pan0.netdev

[NetDev]
Name=pan0
Kind=bridge

/etc/systemd/network/pan0.network

[Match]
Name=pan0

[Network]

«Внешний» адрес, по нему можно будет соединяться через ssh.

Address=192.168.5.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

Возможно, потребуется внести изменения в файл etc/bluetouch/main.conf

Я добавил всего две строки, чтобы сеть автоматически поднималась.

DiscoverableTimeout=60
AutoEnable=true

Запускаем сервисы systemd.

$ 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

На стороне сервера все сделано.
Теперь на стороне клиента надо всего лишь ввести в командной строке (или создать скрипт) простенькую команду, где вместо звездочек MAC адрес сервера.
$ sudo bt-network -c ******** nap

Примечание. Команда bt-network имеет обыкновение выгружаться с ошибкой «segmentation fault», если сервер недоступен. Если соединение установлено, вы увидите столь долгожданную надпись «network service is connected». Проверьте соединение и найдите интерфейс bnep0:
$ ip a | grep bnep

Затем, если соединение установлено, введите стандартную команду ssh. (Подразумевается, что имя сервера pi)
$ ssh pi@192.16.8.5.1

Сервер затребует пароль и… настройка завершена!
А с помощью ifconfig или более современной команды ip на стороне сервера можно будет посмотреть сетевые устройства pan0 и bnep0

PS Я подключаюсь через PAN к компьютеру уже около года, сеть на удивление стабильная и быстрая.

Автор:
renice

Источник [7]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/diy-ili-sdelaj-sam/372928

Ссылки в тексте:

[1] Personal Area Network: https://ru.wikipedia.org/wiki/%D0%9F%D0%B5%D1%80%D1%81%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%81%D0%B5%D1%82%D1%8C

[2] gphoto2: http://gphoto.org/

[3] точки доступа: https://www.raspberrypi.com/documentation/computers/configuration.html

[4] HOWTO-PAN: http://bluez.sourceforge.net/contrib/HOWTO-PAN

[5] SnapBridge для iOS и Android: https://www.nikon.ru/ru_RU/product/software/snapbridge

[6] stackoverflow: https://stackoverflow.com/questions/28304163/ip-over-bluetooth-with-raspbian-systems/53335337

[7] Источник: https://habr.com/ru/post/655289/?utm_source=habrahabr&utm_medium=rss&utm_campaign=655289