HOWTO GPRS Megafon

Материал из Gentoo Linux Wiki

Перейти к: навигация, поиск


Содержание

[править] Зачем эта статья

Данная статья посвещена конкретно подключению к Мегафону, ввиду распростроненных проблем с подключением именно к этому провайдеру и отсутствия толковой документации. Несмотря на то что это Gentoo-wiki, большая (как минимум - первая) часть может быть использованна и в других дистрибутивах, с небольшой адаптацией под тамошнюю сетевую систему. В случае если вас интересует подключение к GPRS вообще, обратитесь к ссылкам внизу.

[править] О чем эта статья

Данная статья не содержит информации о подключении телефона по Bluetooth/GPRS/Com/USB и т.п. Также данная статья не рассматривает вопросы установки pppd, конфигурирования ядра и прочая. Эта информация доступна в большом количестве других источников, в том числе и на этом вики (см. Ссылки). Короче говоря, данная статья рассматривает только подключение к GPRS сети Megafon и ничего больше.

[править] Общие соображения

Данная статья предполагает, что читатель - человек любопытный и захочет самостоятельно дойти до конечного результата, используя данное руководство лишь как источник вдохновения =). Если это не так можете смело пропускать первую часть и переходить сразу к готовым настройкам, однако если у вас что-то не заработает - мы вас предупреждали.

[править] Часть 1. Низкоуровневая настройка.

[править] База

В этой части мы полностью абстрагируемся от дистрибутива (разве что пути отличатся могут), т.к. работать будем напрямую с pppd и его конфиг файлами. Это - единственный способ нормальной отладки - то, что pppd печатает в syslog может быть использованно только в плане - "есть коннект/нет коннекта", а реальнаю информацию о происходящем он выдает в stdout.

Стандартные настройки для Мегафона, если их кто не знает или не помнит:

Строка инициализации AT+CGDCONT=1,"IP","internet.nw" (вместо .nw поставьте код своего региона)
Телефон доступа (зависит от телефона) ATD*99#
Имя пользователя gdata
Пароль gdata

Теперь заполним главный файл /etc/ppp/options

Файл: /etc/ppp/options
connect 'chat -V -f /etc/ppp/megafon_gprs' # начальная строчка - указывает откуда читать данные с инициализацией
57600                        # Скорость коннекта
noipdefault                  # Без этой опции к мегафону не подключается если для имени хоста есть соответствие ip адреса 
debug                        # эта опция указывает pppd чтобы он вываливал всякую полезную информацию на вывод
nodetach                     # не отвоеденятся от консоли - чтобы инфу от debug можно было прочесть
nobsdcomp                    # не применять BSD компрессию
nodeflate                    # не применять deflate компрессию
nodefaultroute               # не проставлять дефолтный шлюз на полученный - для теста нам это е нужно
usepeerdns                   # получить от сервера данные dns
novj                         # не использовать vj сжатие
user gdata                   # профиль аутентификации - gdata
modem                        # использовать стандарные операции с модемом (см. man pppd)
lock                         # заблокировать устройство, дабы ничто не могло прервать вашу работу
crtscts                      # использовать хардверную защиту от переполения (хоть убейте не знаю, что это значит)

Как вы заметили - в /etc/ppp/options мы указали только user директиву, а пароль как-то потеряли. Но не даром я обозвал эту директиву - профиль аутентификации, ибо по факту по юзеру пароль берется из отдельного файла /etc/ppp/pap-secrets


Файл: /etc/ppp/pap-secrets
# Secrets for authentication using PAP
# client        server      secret                  IP addresses
# имя           имя сервер   пароль                   адрес сервера

gdata           *           gdata
# что означает - для любого сервера, у юзера "gdata" пароль "gdata".


Ну а теперь остался последний штрих - в файл /etc/ppp/megafon_gprs, который мы указали выше как источник комманд для модема, необходимо вписать строку инициализации, номер телефона и прочая. Синтаксис прост - до пробела - фраза модема, после пробела фраза pppd.

Файл: /etc/ppp/megafon_gprs
ABORT 'NO CARRIER'    #
ABORT 'NO DIALTONE'   # Обобщенный набор ответов на которые надо завершатся. Что точно это значит - понятия не имею.
ABORT BUSY            #
'' ATZ                # Начинаем с приветствия - не дожидаясь ответа модема посылаем ему модемный "Превед"
OK AT+CGDCONT=1,"IP","internet.<код региона>" # В ответ на ожидаемое OK послылаем строку инициализации
OK ATD*99#            # В ответ на OK посылаем телефон который надо набрать "ATD<номер телефона>"
TIMEOUT 120           # Ждать будем не больше 120 секунд
CONNECT ''            # Ждем коннекта
Примечание: Если будете копировать данный текст не забудте убрать комментарии - врядли ваш телефон настолько разумен, что отделит их от обычных комманд


ВАЖНО: Очень частая ошибка, распространенная во многих мануалах - точка доступа не "internet", а "internet.<код региона>" . Если вы получаете ошибку типа

PAP authentication succeeded
sent [IPCP ConfReq id=0x1 <addr 0.0.0.0> <ms-dns1 0.0.0.0> <ms-dns3 0.0.0.0>]
rcvd [IPCP ConfReq id=0x0 <addr 10.6.6.6>]
sent [IPCP ConfAck id=0x0 <addr 10.6.6.6>]
rcvd [LCP TermReq id=0x1]
LCP terminated by peer

То это с гарантией 90 процентов данный случай - проверьте сайт своего региона, там должна быть указана точная строка инициализации


Теперь протестируете соедение коммандой pppd <устройство модема>

[править] Дополнение

После того как вы получили работающий конфиг можно попробывать над ним немного поиздеватся. Например, если ваш телефон поддерживает EDGE, попытатся переписать настройки под него (насколько я знаю, он ничем принципиально не отличается).

Основной же интерес представляет разнообразная компрессия - трафик не резиновый, однако. Известно, что vj - компрессия (компрессия tcp/ip заголовков) не работает.

Protocol-Reject for 'Compression Control Protocol' (0x80fd) received
rcvd [IPCP ConfRej id=0x1 <compress VJ 0f 01>]

Также не работает BSD-компрессия. На deflate вроде не возмущается.

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

[править] Часть 2. Настройка высокоуровневая.

Собственно данная часть относится специфически к Gentoo, а именно к скриптам baselayout. Теперь мы сделаем так, чтобы ppp грузился при помощи стандартных интерфейса Gentoo.

Впрочем, если вы выполнили предыдущую часть для вас все просто - надо просто разложить содержимое файлов по соответствующим директивам в /etc/conf.d/net гармонично совместив их с взятыми из /etc/conf.d/net.example примерами.

Файл: /etc/conf.d/net
config_ppp0=( "ppp" )           # Указываем, что устройство ppp0 должно контролироватся модулем ppp
RC_NEED_ppp0="<сервис>"          # Если ваш мобильник подключен по какому-нибудь специфическому соединению, типа
                                # IrDA или Bluetooth, то сюда можно вписать сервис отвечающий за их работоспособность
                                # А можно и не вписывать =)

link_ppp0="<устройство модема>"   # Сюда впишите то устройство, которое указывали в качестве аргумента к pppd
username_ppp0="gdata"           # Логин, тот что мы в pap-secrets вносили
password_ppp0="gdata"           # Пароль, оттуда же.

pppd_ppp0=(
        "maxfail 10"            # Максимальное количество реконнектов при потере соедениния. 0 - бесконечность
#       "updetach"              # Установленная опция заставляет инит скрипт ждать пока pppd установит соединение
                                # В большинстве случаев это плохая идея - при какой либо ошибке в соединении он,
                                # По каким-то причинам не завершится никогда

        "defaultroute"          # Установить дефолтный гейтвей через этот интерфейс
        "usepeerdns"            # Использовать dns переданные провайдером
                                # Однако учтите, что данная опция будет постоянно норовить перезаписать ваш
                                # /etc/resolv.conf, так что может логичнее будет получить один раз днс и прописать
                                # его самостоятельно.

        "lcp-echo-interval 15"  # Посылать сигнал каждые n секунд, дабы сервер не решил что вы умерли
        "lcp-echo-failure 3"    # Считать коннект умершим после n подряд неудач послать сигнал серверу

        "lock"                  # Заблокировать устройство
        "115200"                # Скорость работы устройства/интерфейса
        "modem crtscts"         # Включить хардверное контролирование потока
        "novj"                  # НЕ использовать компрессию vj (компрессия tcp/ip заголовков)
        "deflate 15"            # Компрессия deflate (см man pppd)
        "persist"               # При ошибке - делать реконнект.
)

phone_number_ppp0=(             # Сюда можно вписать не один, а аж два телефона
        "*99#"                  # Волшебный номер активации GPRS для вашего телефона
)

chat_ppp0=(                                    # собственно разговор с модемом
        'ABORT' 'BUSY'                         #
        'ABORT' 'ERROR'                        #
        'ABORT' 'NO ANSWER'                    #
        'ABORT' 'NO CARRIER'                   # это всякая фигня из примера. Не знаю зачем нужна, видимо, чтобы
        'ABORT' 'NO DIALTONE'                  # pppd знал какие ответы модема считать ошибкой.
        'ABORT' 'Invalid Login'                #
        'ABORT' 'Login incorrect'              #
        'ABORT' 'Username/Password Incorrect'  #
        'TIMEOUT' '20'                         # Ждать ответа от модема максимум n секунд. Зависит от телефона
                                               # выставляйте так, чтобы при реконнекте модем успел очухатся
                                               # от предыдущего сеанса и сообразить что вы от него хотите
        '' ATZ                                 # Превед, модемчег!
        'OK' 'AT+CGDCONT=1,"IP","internet.nw"' # Замените код региона!
        'OK' 'ATDT\T'                          # Послать номер телефона из предыдущей директивы
        'TIMEOUT' '60'                         # ждем пока телефон установит соединение. Максимум n секунд
        'CONNECT' ''                           # Собственно - начать соединение.
        'TIMEOUT' '5'                          # Шаманство какое-то. Черт знает зачем.
        '~--' ''                               #
)


Осталось совсем немного - создать init-скрипт и протестировать его.

  1. cd /etc/inid.d/
  2. ln -s net.lo net.ppp0
  3. ./net.ppp0 start

В случае если вы не включили "updetach" вы получите что-то вроде этого:

Satellite ppp # /etc/init.d/net.ppp0 start
 * Starting ppp0
 *   Bringing up ppp0
 *     ppp
 *       Running pppd ...
 *       Backgrounding ...

Статус же соединения можно проверить в сислоге - tail -n 50 /var/log/everything/current

Если там нет никакой ругани, а что-то вроде

Nov 30 00:13:29 [pppd] Serial connection established.
Nov 30 00:13:29 [pppd] Using interface ppp0
Nov 30 00:13:29 [pppd] Connect: ppp0 <--> /dev/rfcomm0
Nov 30 00:13:32 [pppd] PAP authentication succeeded
Nov 30 00:13:33 [pppd] local  IP address 10.129.98.214
Nov 30 00:13:33 [pppd] remote IP address 10.6.6.6
Nov 30 00:13:33 [pppd] primary   DNS address 10.78.72.4
Nov 30 00:13:33 [pppd] secondary DNS address 10.78.72.12

То, ура!, соединение есть. ping www.google.ru - последняя инстанция тестирования

[править] Заключение

Когда я после двух дней попыток завести GPRS сел писать данную статью мне казалось, что было проделанна куча работы и настройка очень хитрая. И только повторяя свои действия для проверки я осознал, что вобщем-то все было очень просто. Достаточно было четко выполнять требования провайдера. Но судя по тому, что в интернете множество людей с проблемой подключения к Мегафону - многочисленные и разрозненные мануалы сбивают людей с толку. Будем надеятся, что данная статья внесет толику упорядоченности и посодействует замедлению роста энтропии интернета, и, кто знает, отдалит его "тепловую смерть" =).

[править] Региональная совместимость и специфика

Eсли в вашем регионе данные инструкции заработали, пожалуйста, впишите этот регион сюда. Если потребовались какие-то уточнения укажите их тоже.

[править] Мегафон Северо-Запад

База статьи. Уточнений не требуется.

[править] Ссылки

Настройка_GPRS_в_Linux - описание подключение телефона по USB + базовая настройка ppp/модулей ядра. Также имеется пример подключения к сети Beeline.

GPRS HOWTO, Bluetooth, ... - n-ный клон выше-представленной статьи. Ценность представляют аж два варианта настройки pppd при момощи baselayout, без использования сторонних звонилок.

FAQ по проблемам Linux систем Помогите с настройкой GPRS-соединения - собственно та ветка, что сдвинула дело с мертвой точки.

Вернуться в раздел руководства
Личные инструменты