Интернет через Bluetooth
- Авторы:
- Андрей Власовских
- Вадим Цесько
Это небольшое HOWTO по использованию Bluetooth, в основном для подключения к Интернету через GPRS, что важно, когда ноут не дома.
Требуемый софт
Понадобятся следующие пакеты:
bluezppp
Включение передатчика
Встроенный передатчик включается способом, зависящим от харда и ACPI. На Eee PC
со специализированным ядром из пакета zen-eee901-1G и скриптами для этого
требуется:
$ echo 1 > /proc/acpi/asus/bluetooth
На IBM/Lenovo Thinkpad:
$ echo 1 > /proc/acpi/ibm/bluetooth
Стоит убедиться, что драйвер bluetooth действительно загрузился:
$ lsmod | grep ^bluetooth
Установка канала RFCOMM
RFCOMM — это эмуляция последовательного порта поверх Bluetooth (вроде бы используется протокол L2CAP, в своё время читал все спеки, но всё забыто).
Поверх этого виртуального порта устанавливается канал PPP. Модему телефона через
этот порт посылаются команды дозвона и специальные команды для активизации GPRS.
Затем, когда соединение установлено, начинается сеанс PPP, в рамках которого
перегоняют пакеты IP. Этим занимается ppp.
Для начала нужно запустить bluetoothd, демона HCI Bluetooth:
# /etc/rc.d/bluetooth start
Проверить наличие поднятого интерфейса Bluetooth можно так:
$ hciconfig hci0: Type: USB BD Address: 00:11:22:33:44:55 ACL MTU: 1021:8 SCO MTU: 64:1 UP RUNNING PSCAN ISCAN RX bytes:980 acl:0 sco:0 events:29 errors:0 TX bytes:612 acl:0 sco:0 commands:29 errors:0
Здесь вы видите MAC-адрес передачика вашего хоста. Примерно это же скажет команда:
$ hcitool dev
Обнаружить другие передатчики Bluetooth поблизости можно так:
$ hcitool scan
Будут находиться только «видимые всем» передатчики. В списке передатчиков вам нужно найти MAC-адрес передачика модема, удалённого узла Bluetooth, через который вы будете устанавливать соединение PPP.
Как найти устройства, поддерживающие сервис DUN:
$ sdptool search DUN
Возможно, Ваше устройство не поддерживает профиль DUN (как, например, некоторые телефоны Philips), тогда имеет смысл использовать профиль SP, обеспечивающий тот же сервис доступа к виртуальному модему через последовательный порт:
$ sdptool search SP
sdptool — это утилита для работы с прикладным протоколом Bluetooth для
обнаружения сервисов SDP.
В выводе sdptool нужно найти номер канала RFCOMM, используемого для работы с
сервисом DUN. Его нужно указывать при создании устройства командой rfcomm.
Ещё одной возможностью убедиться в наличии связи является пингование на уровне L2CAP по MAC-адресу удалённого узла:
# l2ping 00:11:22:33:44:55
Далее нужно создать виртуальный последовательный порт. Этим управляет утилита
rfcomm, конфигуратор RFCOMM в подсистеме Bluetooth ядра Linux. Создаётся порт
следующим образом (допустим, что sdptool search DUN показала канал 4):
# rfcomm bind 0 00:11:22:33:44:55 4
Получаем новое устройство /dev/rfcomm0. С ним теперь связан канал 4. Если Ваш
сервис висит на другом канале (см. использование sdptool), его нужно указать
ещё одним параметром.
Вместо ручного создания канала можно запускать rfcomm при старте подсистемы
Bluetooth, настроив канал в файле /etc/bluetooth/rfcomm.conf:
rfcomm0 { bind yes; device 00:11:22:33:44:55; channel 4; comment "My Bluetooth device; }
Этот файл зачитывается через стартовый скрипт /etc/rc.d/bluetooth утилитой
rfcomm. Чтобы в скрипте запускался rfcomm, нужно в конфиге
/etc/conf.d/bluetooth прописать:
RFCOMM_ENABLE="true"
Деинициализация
# rfcomm release 0 # /etc/rc.d/bluetooth stop $ echo 0 > /proc/acpi/asus/bluetooth
Установка соединения PPP
Для соединения PPP может понадобиться создавать устройство PPP:
# mknod /dev/ppp c 108 0
Наверное, это можно делать и автоматически, но пока так.
Для настройки соединения с провайдером ppp использует конфиги из /etc/peers.
Например, файл для моего провайдера /etc/peers/provider1:
/dev/rfcomm1 115200 noauth defaultroute noipdefault usepeerdns user "" connect "/usr/sbin/chat -t 30 -f /etc/ppp/chat-provider1"
Здесь строка connect указывает команду для установления соединения по
последовательному каналу, поверх которого будет запущен сеанс PPP.
Устройство,как можно заметить, указано в первой строке. Вот файл
/etc/ppp/chat-provider1 переговоров с модемом для установления канала:
ECHO ON "" ATZ OK ATZE1 OK AT+CGDCONT=1,"ip","internet" OK ATDT*99***1# CONNECT
Здесь инициализация GPRS (AT+CGDCONT=1 и т. д.) и номер дозвона зависят от
провайдера. Узнайте ваши параметры от своего провайдера.
Далее используются полезные утилиты pon и poff, входящие в пакет ppp. Эти
утилиты принимают в качестве аргумента имя файла конфига из /etc/ppp/peers. По
умолчанию они зачитывают файл provider. Вот так устанавливается соединение PPP
поверх существующего канала RFCOMM:
# pon provider1
Возможно, часть всех этих действий можно проводить не от root, заведя
отдельную группу и правильно расставив права. Пока я этим не занимался.
Ещё один момент. Мой провайдер использует DHCP. Для настройки DNS нужно в
/etc/ppp/ip-up добавить копирование настроек разрешения адреса, поскольку по
умолчанию ppp кладёт их к себе в каталог:
/bin/cp /etc/ppp/resolv.conf /etc/resolv.conf
Объединение двух устройств Bluetooth в пару
Для обмена данными два устройства должны быть объединены в пару. Это требуется
для взаимной аутентификации. Чтобы объединить устройства в пару, можно
воспользоваться программой bluez-simple-agent, идущей в составе bluez. Она
запускается от root и ожидает запросов на объединение в пару. Её нужно
запускать после старта демона bluetooth. При попытке создать канал связи
компьютер с bluez-simple-agent и телефон запросят PIN-код. На всякий случай,
файлы с созданными ключами хранятся в /var/lib/bluetooth/<MAC>/linkkeys.
После этого, если на телефоне добавить компьютер в список доверяемых устройств, весь процесс выхода в интернет можно сделать автоматическим.
