Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Пикосеть 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 к компьютеру уже около года, сеть на удивление стабильная и быстрая.