Как стать автором
Обновить

Raspberry Pi PAN

Время на прочтение3 мин
Количество просмотров8.9K

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

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

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

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

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


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

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

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

Итак, начинаем настраивать 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 к компьютеру уже около года, сеть на удивление стабильная и быстрая.




Теги:
Хабы:
Всего голосов 15: ↑15 и ↓0+15
Комментарии5

Публикации