Соединение компьютеров в сеть через bluetooth
Когда у меня завелась в доме парочка Bluetooth адаптеров, мне захотелось использовать их не только для обмена данными с мобильными телефонами, но и для организации сети, чтобы перемещаясь с ноутбуком по комнате не приходилось таскать за собой ethernet-овский кабель.
Все описания PAN (Personal area networking) которые мне удалось найти в сети (например это) какие-то фрагментарные. Поэтому я решил описать свой собственный опыт. Впрочем, вряд ли у меня получится лучше.
Постановка задачи
- Стационарный компьютер, подключенный к интернету.
- Локальная сеть подключенная к данному компьютеру (т.е задачи форвардига, маскарадинга etc уже решены, и на компьютере имеется работающй dhcp-сервер)
- Некоторое количество ноутбуков (N, N <7)
- Некоторое количество (N+1) USB Bluetooth адаптеров
Настройка точки доступа
- Чтобы компьютер принимал соединения
- Чтобы после установки соединения по dhcp отдавалась необходимая конфигурационная информация
В Debian для этого достаточно прописать две строчки в /etc/default/bluez-utils
PAND_ENABLED=1 PAND_OPTIONS="--listen --role NAP"
Решение второй задачи — более сложное и менее документированое. Видимо, большинство авторов хаутушек поднимали статические адреса на обоих концах линка и на этом успокаивались. Но у меня есть жена, а у жены — ноутбук. Поэтому приходится решать задачу в общем виде — с возможностью подключения более чем одного устройства.
Для того чтобы dhcp-сервер слушал на интерфейсе, интерфейс должен существовать в момент запуска dhcpd. Более того, pand создает для каждого bluetooth-соединения отдельный интерфейс. Замучаешься описывать и передергивать dhcpd по каждому соединению. Поэтому все HOWTO рекомендуют использовать bridging. Это такая функциональность в линуксовом ядре, позволяющая объединить несколько физических интерфейсов в один. Для работы с бриджингом нам понадобится пакет bridge-utils, в состав которого входит утилита brctl.
В PAN-HOWTO рекомендуется организовать бридж-интерфейс, в который будет добавлен эзернет-интерфейс локальной сети и будут автоматически добавляться bluetooth-интерфейсы по мере возникновения.
Никогда так не делайте. Дело в том что бридж он по своей природе вроде хаба — он проталкивает все пакеты, приходящие на один из включенных в него интерфейсов во все остальные. Соответственно, производительность бриджа равна производительности самого тормозного из включенных в него интерфейсов. Поэтому включив в один бридж 100-mb ethernet и bluetooth, вы посадите производительность ethernet-а до производительнсоти блютуза — т.е. до примерно одного мегабита. (На самом деле код бриджинга, конечно, гораздо умнее, и может работать как свитч, а не как хаб. Более того, можно его настроить так, чтобы можно было втыкать и вытыкать ethernet не прерывая работы, чтобы если есть кабель, пакеты автоматически бегали по нему, а если нет то через bluetooth. Но лучше не связываться.)
- Создаем и настраиваем бридже
- Не включаем ни одного физического интерфейса в этот бридж
- Напускаем на этот бридж dhcpd.
Эти возможности кода bridging в линуксовом ядре предназначены для ситуаций, когда сети объединяются более чем одним bridge и нужно принимать меры для того чтобы пакеты не бегали по кругу. В данной простой ситуации — топология «звезда», нам это не нужно, а задержки оно добавляет.
Сетевые интерфейсы в debian описываются в файле /etc/network/interfaces, документированном в man-странице interfaces(5). На первый взгляд, ничего касающегося бриджей там не обнаруживается. Но, оказывается, синтаксис этого файла расширяем с помощью скриптов, помещаемых в /etc/network/if*.d.
Пакет bridge-utils приносит с собой и устанавливает в /etc/network/if-pre-up.d скрипт bridge, который обрабатывает команды конфигурирования bridge. Дополнительные директивы конфигурации интерфейса, обрабатываемые этим скриптом, описаны в /usr/share/doc/bridge-utils/README.Debian.gz.
Поэтому добавляем в /etc/network/interfaces фрагмент следующего содержания:
auto pan0 iface pan0 inet static bridge_ports none bridge_fd 0 bridge_stp off address 10.0.0.1 netmask 255.255.255.0 brodcast 10.0.0.255
Наиболее важной в этой конструкции является директива bridge_ports none. Скрипт bridge вступает в работу именно при наличии директивы bridge_ports с непустым списком интерфейсов. Поскольку на самом деле мы не хотим добавлять какие-либо интерфейсы в список сразу (только по мере подключения bluetooth-клиентов) то используем зарезервированное слово none.
Две другие строки, начинающиеся с bridge соответствуют вышеприведенным командам конфигурации.
Теперь когда у нас есть интерфейс, мы можем прописать в /etc/dhcpd.conf соответствующую subnet и добавить имя этого интерфейса в строчку INTERFACES в /etc/default/dhcpd.
Приведу на всякий случай фрагмент из dhcpd.conf
# Это адрес сервера в ethernet-сети server-identifier 192.168.217.1; subnet 10.0.0.0 netmask 255.255.255.0
Осталось позаботиться о том, чтобы вновь появляющиеся bnep-интерфейсы включались в этот бридж и обслуживались dhcpd. Для этого пишем скрипт /etc/bluetooth/pan/dev-up следующего содержания:
#!/bin/sh brctl addif pan0 $1 ifconfig $1 0.0.0.0
Первая команда в этом скрипте добавляе интерфейс $1 (т.е. тот, который pand передал в качестве параметра скрипту) в бридж pan0. Вторая команда — поднимает интерфейс. Устанавливать осмысленный IP там не надо, об этом позаботится уровень бриджа. Вероятно, было бы достаточно прописать туда up вместо нулевого адреса.
Настройка клиента
Настройка клиента намного проще. Поскольку сервер аннорсирует себя по протоколу sdp, то на клиенте достаточно запустить
В /etc/network/interfaces прописываем
и теперь для того, чтобы всё заработало, достаточно чтобы кто-то после установления соединения дернул ifup bnep0
Я прописал это в /etc/bluetooth/pan/dev-up, хотя, вероятно, можно было просто пропистаь в /etc/network/interfaces для этого интерфейся mapping hotplug
Остался один-единственынй вопрос — а кто будет запускать pand с рутовыми правами при втыкании bluetooth-адаптера в ноутбук. Моя паранойя не позволяет разрешить это делать hotplug-у. Мало ли где я решил воспользоваться bluetooth для работы с мобильным телефоном, и мало ли какую сеть оно там найдет. Поэтому пишем в /usr/local/bin такой скрипт
#!/bin/sh case "$1" in on) sudo pand --search ;; off) sudo pand -K ;; # Здесь будет вариант работы ноутбука сервероа *) echo "use $0 on|off" >&2 exit 1 esac
Создать локальную сеть блютуз
Представим такую ситуацию. Мы купили ноутбук в котором есть блютуз адаптер, и до этого у нас в комнате стоял стационарный компьютер с usb блютуз адаптером. Или просто имеются два компьютера с блютуз адаптерами. И мы по средствам этого самого блютуза хотим эти компьютеры объеденить в сеть. Сейчас мы этим и займёмся.
Примечание: Приведённые ниже рисунки могут отличаться от ваших, но тем не менее сам процесс должен быть аналогичным.
- Для начала следует объеденить два компьютера в личную сеть PAN. Будем один из компьютеров называть Комп 1 , а второй Комп 2 . На
Компе 1 находим значёк Bluetooth в правом нижнем углу экрана (он обведён красным цветом на картинке ниже).
Нажимаем на значёк правой кнопкой мыши. Перед нами вылезет меню, как на картинке ниже (или подобное ему).
Выбираем пункт «Открыть параметры». - Далее перед нами появится окошко как на следующем рисунке.
Преходим на вкладку «Параметры» (подчёркнута Зелёным цветом на картинке выше)
В ней ставим галочку напротив пункта «Разрешить устройствам Bluetooth обнаруживать это устройство» (обведён красной рамкой на рисунке выше). И нажимаем ОК. - Теперь заходим в свойства компьютера. Если вы работатете в Windows 7, то находим пункт полное имя и запоминаем его.
А если вы работаете под Windows XP, перед вами вылезет несколько другое окно, в нём переходим на вкладку «Имя компьютера», и, так же, смотрим полное имя. - После всех этих действий пересаживаемся за Комп 2. Там, так же находим значёк блютуза в правом нижнем углу, нажимаем на нём правой кнопкой мыши. Но теперь уже выбираем пункт «Добавить устройство»(подчёркнут красным цветом на рисунке ниже).
- Перед нами появится окно как на рисунке чуть ниже. Компьютер немного подумает и отобразит в окне устройства которые в данный момент можно добавить. Там будет и наш Комп 1.
Выбираем Комп 1, он будет называться тем именем, которое мы смотрели в свойствах компьютера, и нажимаем «Далее». - Перед нами появится окно со специальным кодом. Здесь ничего не нажимаем, но запоминаем этот код.
- Теперь пересаживаемся за Комп 1. Там в правом нижнем углу повится сообщение, что с вами хочет соединиться другой компьютер.
кликаем на это сообщение. - После этого появится следущее окно.
Здесь вводим код, который появился в Компе 2 и нажимаем далее. - После этого оба компьютера подумают и оба покажут следующее окно:
На этом завершается добавление компьютера. В обоих окнах нажимаем кнопку «Закрыть» . - Теперь на Компе 1 на значке блютуз нажимаем правой кнопкой, и выбираем пункт «Присоединиться к личной сети (PAN)» (подчёркнут красным цветом на рисунке ниже).
- Компьютер начнёт искать устройства. Там он должен отобразить Комп 2. (имя компа 2 так же можно посмотреть в свойствах компьютера) Нажимаем правой кнопкой на Комп 2 и выбираем подключиться.
- После этого появится маленькое окно с надписью «Подключение», потом эта надпись изменится на «Соединение успешно установлено» (В случае если вы всё правильно сделали).
- Ну и теперь последний этап. Его я опишу отдельно для Windows XP и для Windows 7 (Windows Vista)
- Сначала рассмотрим процедуру для Windows 7(vista). Как только вы подключились к Компу 2 по блютузу, в правом нижнем углу экрана повится значёк компьютера. При наведении на него курсора мыши он будет писать: «Неопознанная сеть». Нажимаем на этот значёк компьютера правой кнопкой мыши и выбираем «Центр управления сетями и общим доступом».
- После этого перед нами откроется следующее окно:
С левой стороны нажимаем на пункт «Изменение параметров адаптера»(обведён красным цветом на картинке выше) . - После этого перед нами откроется окно в котором будут отображены все сетевые подключения имеющиеся в нашем компьютере.
Выбираем «Сетевое подключение Bluetooth» (обведено зелёным цветом на рисунке выше), нажимаем на нём правой кнопкой мыши и выбираем пункт «Свойства» (обведн красным цветом на рисунке выше) . - Потом перед нами откроется окно свойств подключения.
В нём мы убираем галочки со всех пунктов, кроме «Служба доступа к файлам и принтерам сетей Microsoft» и «Протокол интернета версии 4(TCP/IPv4)». Потом выделяем пункт «Протокол интернета версии 4(TCP/IPv4)» и нажимаем на кнопку «Свойства» (обведена красным цветом на рисунке выше). - Перед нами откроется следующее окно:
Ставим отметку на пункте «Использовать следующий IP-адрес» (обведён зелёным цветом на рисунке выше). Далее вписываем в поле IP-адрес следующее: 192.168.1.1, В поле Маска подсети 225.225.225.0. И нажимаем ок. - Теперь последние пять пунктов проделываем для Компа 2. Только в поле Ip-адрес вписываем 192.168.1.2, остальное всё так же. Сеть готова к работе.
- Сначала рассмотрим процедуру для Windows 7(vista). Как только вы подключились к Компу 2 по блютузу, в правом нижнем углу экрана повится значёк компьютера. При наведении на него курсора мыши он будет писать: «Неопознанная сеть». Нажимаем на этот значёк компьютера правой кнопкой мыши и выбираем «Центр управления сетями и общим доступом».
- Для Windows XP процедура немного проще.
- Как только мы подключились к Компу 2 по блютузу, в правом нижнем углу экрана повится значёк двух маленьких компьютериков с мигающими экранами.(обведены красным цветом на рисунке ниже).
При наведении на них курсора мыши, вылезет сообщение: «Сетевое подключение Bluetooth». Нажимаем на этот значёк левой кнопкой мыши. - Перед нами откроется следующее окно:
В этом окне нажимаем на кнопку «Свойства» (обведена красным цветом на рисунке выше). - После этого появится следующее окно:
Снимаем галочки со всех пунктов кроме «Служба доступа к файлам и принтерам сетей Microsoft» и «Протокол интернета(TCP/IP)». Потом выделяем пункт «Протокол интернета(TCP/IP)» (обведён зелёным цветом на рисунке выше) и нажимаем на кнопку «Свойства» (обведена красным цветом на рисунке выше). - Открывается окно свойств.
Ставим отметку на пункте «Использовать следующий IP-адрес» (обведён зелёным цветом на рисунке выше). Далее вписываем в поле IP-адрес следующее: 192.168.1.1, В поле Маска подсети 225.225.225.0. И нажимаем ок. - Теперь последние четыре пункта проделываем для Компа 2. Только в поле Ip-адрес вписываем 192.168.1.2, остальное всё так же. Сеть готова к работе.
- Как только мы подключились к Компу 2 по блютузу, в правом нижнем углу экрана повится значёк двух маленьких компьютериков с мигающими экранами.(обведены красным цветом на рисунке ниже).