Подключение GPRS в Linux

GPRS и EDGE — технологии передачи данных в сетях сотовой связи стандарта TDMA и GSM. Они могут использоваться для подключения к интернету в местах, где другие способы подключения не доступны (в дороге, на даче).

Статья описывает настройку доступа для компьютера с операционной системой GNU/Linux и мобильного телефона, поддерживающего технологии Bluetooth и EDGE.

Оборудование и программное обеспечение

править

Использованное оборудование:

  • ноутбук Roverbook Navigator E510L
  • Bluetooth-брелок Supercom EP-9221-R (USB)
  • мобильный телефон Nokia 6021 (с поддержкой GPRS/EDGE и Bluetooth)
  • сотовая сеть оператора Мегафон-Москва

Использованное программное обеспечение:

  • операционная система Debian GNU/Linux (testing/etch), ядро 2.6.12-1-686
  • пакеты и версии: bluez-hcidump (1.28-1), bluez-pin (0.26-1), bluez-utils (2.19-1), kernel-patch-2.6-bluez (20050328-1), libbluetooth1 (2.24-1), libbluetooth1-dev (2.24-1), ppp (2.4.4b1-1)

С высокой вероятностью всё написанное ниже будет справедливо и для другого оборудования и для других версий программного обеспечения.

Настройка телефона

править

Следует убедиться, что услуга передачи данных GPRS/EDGE подключена для Вашего тарифного плана. После этого настроить в телефоне точку доступа (APN) для пакетной передачи данных.

В случае контрактного тарифа Мегафон-Москва, услуга скорее всего уже подключена. В телефоне Nokia 6021:

  • Настройки -> Настройки конфигурации -> Стд параметры конфигурации: Персон. конфиг.
  • Настройки -> Настройки конфигурации -> Настройки персональной конфиг. -> Варианты -> Добавить нов. -> Точка доступа
  • Настройки точки доступа: пакетные данные, настройка канала: Точка доступа пакетных данных: internet.msk, тип аутентификации: обычное, имя пользователя: gdata, пароль: gdata
  • Настройки -> Настройки конфигурации -> Предпочтительн. точка доступа: выбрать созданную точку доступа.

В других телефонах может быть немного иначе. Для других операторов следует использовать другую точку доступа, имя пользователя и пароль (internet.ltmsk, gdata, gdata для предоплаченных тарифов Мегафон-Москва, internet.mts.ru, mts, mts для МТС, internet.beeline.ru, beeline, beeline для Билайн).

Эти настройки можно потом внести и на компьютере, но при таком подходе эти же настройки точки доступа можно использовать и для интернет-доступа в телефоне.

В телефоне включить Bluetooth. Для Nokia: Настройки -> Подключение устройств -> Bluetooth: Включить. При необходимости в настройках Bluetooth включить режим видимости.

Настройка компьютера

править

Настройка Bluetooth-соединения

править

1) Вставить Bluetooth-модуль в USB-разъём, подгрузить необходимые модули ядра:

 # modprobe hci_usb

2) Редактировать файл /etc/bluetooth/hcid.conf. В моем случае я оставил файл практически без изменений, указав лишь свой pin_helper (об этом ниже):

 options {
         autoinit yes;
         security auto;
         pairing multi;
         pin_helper /usr/local/bin/bluepin.helper
 }
 device {
         name "%h-%d";
         class 0x3e0100;
         iscan enable; pscan enable;
         lm accept;
         lp rswitch,hold,sniff,park;
         auth enable;
         encrypt enable;
 }

bluepin.helper должен быть программой, печатающей строку вида "PIN:0000", где "0000" -- пароль доступа к компьютеру по Bluetooth. Для этих целей подойдет крохотный скрипт:

 #!/bin/bash
 echo PIN:0000

Не забудьте вместо нулей вписать нормальный пароль и установить права на исполнение bluepin.helper.

Примечание: в новых версиях bluez-utils механизм ввода пароля изменён. Теперь пользователь Bluetooth должен использовать отдельную программу для подтверждения пароля, а общесистемные настройки пароля стали недействительны. Данное верно как минимум для bluez-utils версии 3.7, а возможно и для более ранних версий. В этом случае рекомендуется установить bluez-passkey-gnome (иконка Bluetooth появится в системном лотке после запуска программы bt-applet). В качестве альтернативы можно использовать программу passkey-agent. При попытке спарить телефон и компьютер, требуется ввести одинаковые пароли на телефоне и в появившемся окне ввода пароля.

3) После этого можно запускать службу Bluetooth (в других дистрибутивах Linux это может выглядеть немного иначе):

 # /etc/init.d/bluez-utils start

За ошибками на этом этапе можно следить через /var/log/syslog.

В более поздних версиях bluez-utils служба Bluetooth в Debian перезапускается так:

 # /etc/init.d/bluetooth restart

4) Проверить работу устройства можно, например, так:

 # hciconfig
 hci0:   Type: USB
         BD Address: 00:11:F6:04:FB:BF ACL MTU: 120:20 SCO MTU: 64:0
         UP RUNNING PSCAN ISCAN
         RX bytes:965327 acl:6408 sco:0 events:2522 errors:0
         TX bytes:294442 acl:3841 sco:0 commands:17 errors:0

5) Теперь необходимо найти телефон. Для этого убеждаемся, что Bluetooth на телефоне включен, и активирован режим видимости.

 # hcitool scan
 Scanning ...
         00:16:BC:CD:64:D2      Nokia 6021

Был обнаружен только что настроенный телефон. Все в порядке. Его "мак-адрес" запоминаем (выделяем-копируем), он еще пригодится.

6) Редактируем файл /etc/bluetooth/rfcomm.conf и вносим туда "мак-адрес" телефона:

 rfcomm0 {
         bind yes;
         device 00:16:BC:CD:64:D2;
         channel 1;
         comment "Dial-up networking gateway";
 }

Могут быть доступны другие каналы Bluetooth (профили), например, профили синхронизации или обмена файлами. Однако для доступа в интернет они не нужны. Список поддерживаемых телефоном профилей можно просмотреть с помощью

 # sdptool browse <мак-адрес-телефона>

или

 #sdptool records <мак-адрес-телефона>

Для пользователей телефонов на базе Windows Mobile 6:
В шестой версии винмобайла нет профиля DUN, для таких случаев надо использовать соединение через "Bluetooth NAP Service".
Для пользователей телефонов на базе Windows Mobile 5 Smartphone:

Остерегайтесь телефонов, не поддерживающих Dialup Networking по Bluetooth. Например SonyEriccson T280.

Стек, встроенный в ОС, не возвращает информации о профилях на запрос sdptool browse. Экспериментальным путём было обнаружено, что профиль "Dial-up networking gateway" находится на пятом канале. В этом случае запись в /etc/bluetooth/rfcomm.conf выглядит так:

rfcomm0 {
         bind yes;
         device 00:11:22:33:44:55;
         channel 5;
         comment "Dial-up networking gateway on WM5 Smartphone";
 }

00:11:22:33:44:55 - "мак-адрес" вашего телефона.

7) Остановите и перестартуйте службу Bluetooth (возможно, это и необязательно делать, я не знаю, -- прим. автора)

 # /etc/init.d/bluez-utils stop
 # /etc/init.d/bluez-utils start

8) Теперь необходимо провести первое "сопряжение" устройств. Это можно сделать так:

 # echo ATZ > /dev/rfcomm0

или так:

 #rfcomm connect 0 00:11:22:33:44:55 1

где 0 - номер устройства rfcomm, 1 - номер канала

и ввести пароль (выдаваемый bluepin.helper) на телефоне. После этого на телефоне в списке сопряжённых устройств для устройства-компьютера установить опцию "Автоподключение без подтверждения", тогда телефон больше не будет спрашивать пароля при каждом соединении.

Примечание: после перезагрузки системы при сопряжении может возникнуть ошибка invalid exchange, при этом телефон даже не пингуется, это вызвано тем что не может выполниться скрипт выводящий пин, у меня это было из-за того что не стояли права на его выполнение, лечится

 # chmod +x /usr/local/bin/bluepin.helper

Если эта ошибка возникает с самого начала, то возможно вы не правильно указали путь к скрипту в hcid.conf

На этом настройка Bluetooth-соединения закончена.

Настройка соединения GPRS (EDGE)

править

Эта часть настройки практически неизменна и в случае, если телефон подключен к компьютеру с помощью кабеля или через инфракрасный порт. В этом случае будет необходимо заменить имя устройства (/dev/rfcomm0 в примерах).

Итак, есть настроенное соединение между компьютером и телефоном, в телефоне настроена точка доступа пакетных данных (GPRS/EDGE). Теперь можно настроить GPRS/EDGE-доступ, используя мобильный телефон в качестве модема. "Дозваниваться" будем с помощью программы pppd.

1) В каталоге /etc/ppp/peers/ создаем файл с настройками нового соединения: /etc/ppp/peers/megaedge

 /dev/rfcomm0 115200
 # отключаем сжатие данных
 nobsdcomp
 nodeflate
 # команда для установки соединения  
 connect '/usr/sbin/chat -v -f /etc/ppp/chat-megaedge'
 noauth
 # автоматическое получение сетевых настроек
 noipdefault
 usepeerdns
 defaultroute
 # необязательно
 debug
 nodetach

2) Создаем диалоговый файл /etc/ppp/chat-megaedge

 
  TIMEOUT         5
  ECHO            ON
  ABORT           '\nBUSY\r'
  ABORT           '\nERROR\r'
  ABORT           '\nNO ANSWER\r'
  ABORT           '\nNO CARRIER\r'
  ABORT           '\nNO DIALTONE\r'
  ABORT           '\nRINGING\r\n\r\nRINGING\r'
  ''              \rAT
  TIMEOUT         12
  OK              ATE1
  OK              'AT+cgdcont=1,"IP","internet"'
  OK              ATD*99#
  

Примечание: Если вы видите 'serial line is looped back', то в конце чат-скрипта не хватает строчки: CONNECT ''

Это настройки для Мегафон-Москва. Для других сотовых операторов строку "internet" нужно будет изменить (например, на "internet.mts.ru" или "internet.beeline.ru"). Возможно, некоторые модели сотовых телефонов потребуют изменить номер дозвона: вместо "*99#" попробуйте тогда "*99***1#".

в данном случае имеет значение числовой идентификатор профиля, его можно найти в свойствах профиля соединения телефона, если у вас один профиль, то его номер будет "1" иначе там может быть другое числовое значение

3) Устанавливаем соединение:

 # pppd call megaedge
 AT
 OK
 ATE1
 OK
 AT+cgdcont=1,"IP","internet"
 OK
 Serial connection established.
 using channel 2
 Using interface ppp0
 Connect: ppp0 <--> /dev/rfcomm0
 ... (много всего опускаю)
 local  IP address 10.206.131.173
 remote IP address 10.6.6.6
 primary   DNS address 10.22.10.20
 secondary DNS address 10.22.10.21
 Script /etc/ppp/ip-up started (pid 6203)
 Script /etc/ppp/ip-up finished (pid 6203), status = 0x0

Соединение установлено, на телефоне Nokia в левом верхнем углу экрана загорается буква "G" в рамочке. Если в терминале нажать ^C или дать команду "killall pppd" -- соединение будет разорвано.

Если при дозвоне появляется сообщение об отсутствии /dev/rfcomm0 можно воспользоваться командой

 #rfcomm bind 0 00:16:BC:CD:64:D2 1

в вашем случае ip 00:16:BC:CD:64:D2 может быть другим см.выше

4) Посмотреть параметры соединения (и количество переданных данных) можно так:

 # ifconfig ppp0
 ppp0      Link encap:Point-to-Point Protocol
           inet addr:10.206.131.173  P-t-P:10.6.6.6  Mask:255.255.255.255
           UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
           RX packets:1495 errors:1 dropped:0 overruns:0 frame:0
           TX packets:1467 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:3
           RX bytes:981144 (958.1 KiB)  TX bytes:339713 (331.7 KiB)

Количество переданных за время подключения данных указано в последней строчке. Следует однако учитывать, что сотовые операторы при подсчете GPRS/EDGE трафика используют свои методики подсчета. Так, Мегафон-Москва округляет объём переданных данных в большую сторону с точностью до 8 килобайт через каждые три минуты соединения.

Другие руководства

править

При настройке использовался опыт предшественников: http://www.teaparty.net/technotes/blue-gprs.html (на англ.) и http://gentoo.ru/node/517#comment-2185. Подключение с использованием инфракрасного порта описано по-русски в http://www.opennet.ru/base/net/gprs_linux.txt.html. При использовании кабеля, будет отличаться название устройства.