Тема: Подключение таблетки к интернету используя Bluetooth PAN на Linux
Всем доброго времени суток
После недавней перепрошивки на diablo решил я настроить себе дома интернет на таблетке через Bluetooth. Но так как нормального руководства не нашел то просидел почти целый день собираю отовсюду по кусочкам. Дело долгое и муторное - поэтому хочу поделиться тем до чего я дошел - может быть кому-нить пригодиться. Машинка Nokia N800, операционка - 5.2008.43-7.
Модераторам - прошу Вас - Дополните учебник на Wiki этой инфой (или ее частью) так как то что там сейчас лежит очень куцее и неполное (IMHO: а также путающее - типа ссылки http://bluez.sourceforge.net/contrib/HOWTO-PAN)
1) Настройка серверной части PAN на настольном компьютере с ОС Linux. Я настраивал на Debian Etch i386 R3, но думаю что данное руководство верно и для всех остальных debian производных (типа Ubuntu, Knopix и тд). В качестве источника Bluetooth я использовал Bluetooth USB adapter китайского производства(даже не знаю его модели- но думаю что это неважно). Документации к нему также не было. Итак начинаем на PC:
- Прежде всего установим пакет bluez-utils (Bluetooth tools and daemons - так говоритться в его описании).
alex@hc-deb-al:~$ sudo aptitude install bluez-utilsЗатем проверяем включен ли в ядре модуль отвечающий за Bluetooth subsystem (в ядре 2.6.18-6-k7 которое идет с Debian Etch по умолчанию он включен)
alex@hc-deb-al:~$ sudo modprobe bnep
alex@hc-deb-al:~$Ошибок никаких не выдало - значит все нормально.Следующим шагом втыкаем Bluetooth USB adapter в usb порт. Проверяем определился ли он системой:
alex@hc-deb-al:~$ lsusb
Bus 006 Device 001: ID 0000:0000
Bus 002 Device 007: ID 1310:0001 Roper Class 1 Bluetooth Dongle
Bus 002 Device 001: ID 0000:0000
Bus 001 Device 001: ID 0000:0000
Bus 005 Device 001: ID 0000:0000
Bus 003 Device 001: ID 0000:0000
Bus 004 Device 001: ID 0000:0000
alex@hc-deb-al:~$Также в /var/log/daemon.log получаем такие строки
Jan 8 12:31:36 hc-deb-al hcid[3141]: HCI dev 0 registered
Jan 8 12:31:36 hc-deb-al hcid[3141]: Register path:/org/bluez/hci0 fallback:0
Jan 8 12:31:36 hc-deb-al hcid[3141]: HCI dev 0 up
Jan 8 12:31:36 hc-deb-al hcid[3141]: Device hci0 has been added
Jan 8 12:31:36 hc-deb-al hcid[3141]: Starting security manager 0
Jan 8 12:31:36 hc-deb-al hcid[3141]: Device hci0 has been activatedВидим что что-то такое определилось. Теперь узнаем его аппаратный адрес:
alex@hc-deb-al:~$ hciconfig
hci0: Type: USB
BD Address: 00:0B:0D:0A:3E:63 ACL MTU: 120:20 SCO MTU: 0:0
UP RUNNING PSCAN ISCAN
RX bytes:709970 acl:6367 sco:0 events:35976 errors:0
TX bytes:9587113 acl:80812 sco:0 commands:80 errors:0
alex@hc-deb-al:~$Видим что нужный нам адрес - 00:0B:0D:0A:3E:63 . Запишем его куда-нить - он нам еще понадобиться.
- Теперь настраиваем собственно сервер.В статье на WIKI http://wiki.internet-tablet.com/index.p
etooth_PAN дана такая ссылка на руководство по настройке - http://bluez.sourceforge.net/contrib/HOWTO-PAN .НО!!! - тут меня поджидала первая трудность - данное руководство верно только для версии 3.32 или младше а сейчас даже в Debian stable который уже считается старым включена версия 3.7-1 и соответственно при попытке запустить сервис pand таким способом
alex@hc-deb-al:~$ sudo pand --listen --role GN --masterполучаем в /var/log/daemon.log такие строки
Jan 8 12:27:40 hc-deb-al pand[4264]: Bluetooth PAN daemon version 3.7
Jan 8 12:27:40 hc-deb-al pand[4264]: Bind failed. Address already in use(98)После непродолжительного гугления находим такую инфу - То, что раньше делалось с pand -s -r GN/NAP (т.е. создание точки доступа для создания bt-сети), теперь делается через вызовы dbus. Таким образом, чтобы управиться с этим хозяйством, нужно либо программировать dbus напрямую (см. http://wiki.bluez.org/wiki/HOWTO/NetworkConnections ), либо использовать GUI.(взято с http://lists.altlinux.org/pipermail/gno
364.html). В программировании через Dbus долго разбираться, а настраивать через gui - it`s not true debian way, поэтому мы пойдем другим путем. После изучения файла /etc/init.d/bluetooth я пришел к выводу что сервис pand уже собственно запущен - проверим эмпирически:
alex@hc-deb-al:~$ ps -ae | grep pand
5414 ? 00:00:00 pand
alex@hc-deb-al:~$Точно запущен - так давайте его убьем и запустим свой
:
alex@hc-deb-al:~$ ps -ae | grep pand
5414 ? 00:00:00 pand
alex@hc-deb-al:~$ sudo kill 5414
alex@hc-deb-al:~$ sudo pand --listen --role GN --masterВот теперь и в логе все нормально
Jan 8 13:31:21 hc-deb-al pand[5414]: Bluetooth PAN daemon version 3.7Итак сервис точки доступа для bt-сети запустился.
Небольшое дополнение - в процессе поиска правильного пути я редактировал файл /etc/bluetooth/hcid.conf - что точно делал уже не помню, поэтому привожу свой файл - на всякий случай
alex@hc-deb-al:~$ cat /etc/bluetooth/hcid.conf
#
# HCI daemon configuration file.
#
# HCId options
options {
# Automatically initialize new devices
autoinit yes;
# Security Manager mode
# none - Security manager disabled
# auto - Use local PIN for incoming connections
# user - Always ask user for a PIN
#
security auto;
# Pairing mode
# none - Pairing disabled
# multi - Allow pairing with already paired devices
# once - Pair once and deny successive attempts
pairing multi;
# Default PIN code for incoming connections
passkey "4321";
}
# Default settings for HCI devices
device {
# Local device name
# %d - device id
# %h - host name
name "Blum %h-%d";
# Local device class
class 0x3e0100;
# Default packet type
#pkt_type DH1,DM1,HV1;
# Inquiry and Page scan
iscan enable; pscan enable;
# Default link mode
# none - no specific policy
# accept - always accept incoming connections
# master - become master on incoming connections,
# deny role switch on outgoing connections
# lm accept;
lm accept, master;
# Default link policy
# none - no specific policy
# rswitch - allow role switch
# hold - allow hold mode
# sniff - allow sniff mode
# park - allow park mode
lp rswitch,hold,sniff,park;
}
alex@hc-deb-al:~$2)Теперь переходим к таблеточной части. К данному сообщению прикреплен файл скрипта - качаем его. Изменяем в нем bluetooth адрес PC (это тот самый аппаратный адрес адаптера что мы записывали чуть выше - у меня он 00:0B:0D:0A:3E:63), IP таблетки и PC (конечно же они должны быть в одной подсети ), DNS:
# real script follows
#BT MAC of PC/phone
#BTADDR='00:0D:88:F2:C1:44'
BTADDR='00:0B:0D:0A:3E:63'
#bluetooth name of PC/phone, not important, just for infoprints
BTNAME="PC"
#desired IP address of your tablet
IP=192.168.2.2
#default gateway - IP address of PC/phone
GW=192.168.2.1
#DNS server
#NS=212.129.96.13
NS=192.168.0.1
# remote PAN role, one of NAP, GN
PAN_ROLE=GNТакже хочу обратить внимание на переменную PAN_ROLE - ее значение должно совпадать с типом запущенного вами сервиса (вот этим - pand --role GN), так как я долго получал от скрипта феерические сообщения типа Error org.bluez.Error.NotSupported: Not supported, пока не обнаружил что эти параметры у меня различные на PC и на таблетке.
Еще один момент - не стоит редактировать этот скрипт в Windows т к файл будет испорчен. Проще всего отредактировать его в редакторе vi непосредственно на таблетке (небольшое руководство - http://www.nixp.ru/articles/viguide ).
Следующим шагом качаем пакет libicd-network-dummy отсюда - http://catalogue.tableteer.nokia.com/ce
_armel.deb , копируем его на таблетку и устанавливаем. Через диспетчер приложений он у меня устанавливаться отказался - но через dpkg нормально ставиться. Также можно поставить через apt-get.
/home/user # dpkg -i /media/mmc2/libicd-network-dummy_0.12_armel.deb
Selecting previously deselected package libicd-network-dummy.
(Reading database ... 15931 files and directories currently installed.)
Unpacking libicd-network-dummy (from .../libicd-network-dummy_0.12_armel.deb) ...
Setting up libicd-network-dummy (0.12) ...
Attached schema `/schemas/system/osso/connectivity/network_type/DUMMY/network_modules' to key `/system/osso/connectivity/network_type/DUMMY/network_modules'
Installed schema `/schemas/system/osso/connectivity/network_type/DUMMY/network_modules' for locale `C'
Add a dummy network with:
gconftool-2 -s -t string /system/osso/connectivity/IAP/DUMMY/type DUMMY
gconftool-2 -s -t string /system/osso/connectivity/IAP/DUMMY/name 'Dummy network'
Make ICd2 autoconnect possible with:
gconftool-2 -s -t boolean /system/osso/connectivity/IAP/DUMMY/autoconnect true
/home/user #Обращаю ваше вримание что путь к пакету у вас может отличаться от моего(/media/mmc2/). Далее выполняем указания пакета по созданию dummy соединения:
/home/user # gconftool-2 -s -t string /system/osso/connectivity/IAP/DUMMY/type DUMMY
/home/user # gconftool-2 -s -t string /system/osso/connectivity/IAP/DUMMY/name 'Dummy Network'
/home/user # gconftool-2 -s -t boolean /system/osso/connectivity/IAP/DUMMY/autoconnect true
/home/user #Теперь соединение Dummy Network создано и появилось в соединениях. У кого есть необходимость настроить прокси-сервер (как у меня) идут в Панель Управления -> Соединения -> кнопка Соединения снизу -> Dummy Network -> Изменить и в соответствующих полях вводят настройки своего прокси-сервера (у меня это так: HTTP-прокси: 192.168.0.1 , Номер порта: 3128).
Возвращаемся к нашему скрипту - файл отредактирован, скопирован куда нужно (у меня в /home/user) - теперь еще один момент с которы новички столкнуться обязательно - чтобы запустить этот файл нужно сделать его исполняемым (что-то типа chmod +x ./Bt_pan2.sh ) или указать явно что мы хотим его запустить(что проще):
/home/user # sh ./Bt_pan2.sh start(если написать просто - Bt_pan2.sh start то нам напишут - Permission denied).
Вот скрипт стартует и пишет нам
/home/user # sh ./Bt_pan2.sh start
Searching for 00:0B:0D:0A:3E:63 ...
connection /org/bluez/network/connection0
connected to bnep0
method return sender=:1.32 -> dest=:1.85
string "DUMMY"
/home/user #Проверяем командой ifconfig и видим что на таблетке появилось соединение bnep0 c адресом 192.168.2.2.
/home/user # ifconfig
bnep0 Link encap:Ethernet HWaddr 00:19:4F:A5:0D:E7
inet addr:192.168.2.2 Bcast:192.168.2.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:1640 errors:0 dropped:0 overruns:0 frame:0
TX packets:1640 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:110560 (107.9 KiB) TX bytes:110560 (107.9 KiB)
/home/user #также замечаем что подключилось соединение Dummy Network в менеджере соединений.На этом настройка на таблетке на этом закончена. Отключить всю эту красоту можно так:
/home/user # sh ./Bt_pan2.sh stop
Searching for 00:0B:0D:0A:3E:63 ...
connection /org/bluez/network/connection0
OK, bringing down
/home/user #3)Возвращаемся за наш PC и донастраиваем соединение там:
alex@hc-deb-al:~$ ifconfig -a
bnep0 Link encap:Ethernet HWaddr 00:0B:0D:0A:3E:63
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
...(я выкинул инфу про остальные соединения)...
alex@hc-deb-al:~$ sudo ifconfig bnep0 192.168.2.1
alex@hc-deb-al:~$ sudo ifconfig bnep0 up
alex@hc-deb-al:~$ ping 192.168.2.2
PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data.
64 bytes from 192.168.2.2: icmp_seq=1 ttl=64 time=34.2 ms
64 bytes from 192.168.2.2: icmp_seq=2 ttl=64 time=220 ms
64 bytes from 192.168.2.2: icmp_seq=3 ttl=64 time=216 ms
--- 192.168.2.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2008ms
rtt min/avg/max/mdev = 34.228/157.180/220.680/86.955 ms
alex@hc-deb-al:~$Соединение между PC и таблеткой мы настроили и даже ping идет. Но наша задача настроить не его а интернет на таблетке, поэтому подолжаем. У меня интернет на PC идет через соединение eth0 - поэтому настраиваем маскарадинг:
alex@hc-deb-al:~$ su -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
Password:
alex@hc-deb-al:~$ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
alex@hc-deb-al:~$Хочу обратить ваше внимание что если у вас уже как-то настроен файрвол(скорее всего iptables) то необходимо еще и написать соответствующие правила разрешающие пересылку пакетов с таблетки (эту тему я не буду затрагивать в данном треде - у себя для этого эксперимента я все открыл).
Возвращаемся к таблетке - пингуем с таблетки какой нить хост за вашим PC (у меня это днс-сервер 192.168.0.1) - все работает.
Вот такой вот способ - он конечно кривоват (в частности можно было сделать наверно красивее с демном pand) и не расказывает что делать если на машине стоит Windows, но я надеюсь в дальнейшем дополнить его. Также этот способ не претендует на уникальность.
Замечания и дополнения приветствуются
PS Уважаемые модераторы - если я создал данную тему не в той ветке - пожалуйста переместите ее
Отредактировано alex2ndr (09-01-2010 11:33:43)









