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-скрипт и протестировать его.
- cd /etc/inid.d/
- ln -s net.lo net.ppp0
- ./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-соединения - собственно та ветка, что сдвинула дело с мертвой точки.
- Вернуться в раздел руководства
