3G and GPRS modems with pppd (Русский)
Для подключения к Интернету с помощью 3G или GPRS модема не обязательно использовать Wvdial или подобные программы. Использовать их удобно, но они создают лишний "слой". Более простое, очевидно, является более надёжным, не так ли?
Contents
Требования
Единственное требование к программной части - установленный ppp.
Способ настройки и подключения, изложенный ниже, был проверен на нескольких модемах:
- Huawey EM770 MiniPCIe (внутренний модем Asus Eee PC 1000H Go);
- внешний модем Huawey E220;
- Nokia N73 (подключение по USB; в телефоне выбрано "PC Suite").
Настройка
Настройки модема
Первым делом, создайте файл /etc/ppp/options-mobile
. Pppd, следуя указанным настройкам, постарается удержать соединение активным, а в случае обрыва попытается восстановить его.
/etc/ppp/options-mobile
/dev/ttyUSBn 921600 defaultroute usepeerdns crtscts lock noauth local persist modem nopcomp novjccomp nobsdcomp nodeflate noaccomp ipcp-accept-local ipcp-accept-remote noipdefault
Обратите внимание на первую строчку: здесь должно быть имя вашего модема в /dev
. Подставьте вместо n номер устройства модема.
Настройки оператора
Если ваш оператор требует авторизации при установлении соединения с Интернетом, создайте файл /etc/ppp/peers/название-оператора
следующего содержания:
/etc/ppp/peers/название-оператора
file /etc/ppp/options-mobile user "логин" password "пароль" connect "/usr/sbin/chat -v -t15 -f /etc/ppp/chatscripts/название-оператора.chat"
Замените логин и пароль на предоставленные вашим оператором.
Если же авторизация не требуется, опустите строчки user...
и password...
Сценарии диалога
Чтобы подключиться к Интернету, вашему компьютеру необходимо отправить на модем команды, которые бы задали режим работы, номер телефона и прочие настройки, необходимые для установления соедиинения. Такие команды называются AT-командами, и pppd для "общения" с модемом использует программу /usr/sbin/chat
. Сейчас мы создадим "сценарий диалога", которые будет использовать chat
для общения с нашим модемом.
Создайте папку /etc/ppp/chatscripts
.
mkdir /etc/ppp/chatscripts
/etc/ppp/chatscripts/название-оператора.chat
ABORT 'BUSY' ABORT 'NO CARRIER' ABORT 'VOICE' ABORT 'NO DIALTONE' ABORT 'NO DIAL TONE' ABORT 'NO ANSWER' ABORT 'DELAYED' REPORT CONNECT TIMEOUT 6 '' 'ATQ0' 'OK-AT-OK' 'ATZ' TIMEOUT 3 'OK' 'AT+CPIN=0000' 'OK-AT-OK' 'ATI' 'OK' 'ATZ' 'OK' 'ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0' 'OK' 'AT\^SYSCFG=2,2,3fffffff,0,1' 'OK-AT-OK' 'AT+CGDCONT=1,"IP","internet.apn"' 'OK' 'ATDT*99***1#' TIMEOUT 30 CONNECT
Если вы используете проверку PIN кода, замените нули в первой выделенной строке ('OK' 'AT+CPIN=0000'
) на ваш PIN-код. В противном случае просто удалите строчку целиком.
3G модем может работать в четырёх режимах. Для задания того или иного режима вам нужно внести изменения во вторую выделенную строчку:
- Только 3G -
AT\^SYSCFG=14,2,3fffffff,0,1
- Предпочтительно 3G -
AT\^SYSCFG=2,2,3fffffff,0,1
- Только GPRS -
AT\^SYSCFG=13,1,3fffffff,0,0
- Предпочтительно GPRS -
AT\^SYSCFG=2,1,3fffffff,0,0
Задайте точку доступа в последней выделенной строке: замените internet.apn
на точку доступа, указанную вашим оператором.
Запуск
Чтобы подключиться к Интернету, наберите:
/etc/rc.d/ppp start
Для отключения выполните:
/etc/rc.d/ppp stop
Вы можете добавить pppd в список демонов файла /etc/rc.conf
, если хотите, чтобы pppd запускался автоматически.
Патч на доступность модема
Если вы запускаете pppd автоматически, может возникнуть такая проблема: к моменту запуска pppd модем ещё не существует. Pppd честно пытается запуститься, не находит нужного устройства и завершается с ошибкой.
Для того чтобы pppd немного подождал, пока появится модем, измените файл /etc/rc.d/ppp
:
case "$1" in start) stat_busy "Starting PPP daemon" /etc/ppp/wait-dialup-hardware [ -z "$PID" ] && /usr/bin/pon
Теперь, создайте файл /etc/ppp/wait-dialup-hardware
:
/etc/ppp/wait-dialup-hardware
#!/bin/bash INTERFACE="/dev/$(/usr/bin/head -1 /etc/ppp/options-mobile)" for ((retry=0; retry < 40; retry++)) do if [ -c ${INTERFACE} ]; then /usr/bin/logger "$0: OK existing required device ${INTERFACE} (in $((retry / 4)).$((100 * (retry % 4) / 4)) seconds)" break else /bin/sleep 0.25 fi done if [ ! -c ${INTERFACE} ]; then /usr/bin/logger "$0: ERROR timeout waiting for required device ${INTERFACE}" fi exit 0
Этот сценарий добавит в /var/log/messages
строчку:
Jun 1 22:52:08 parsec logger: /etc/ppp/wait-dialup-hardware: OK existing required device /dev/ttyUSB0 (in 1.25 seconds)
Устранение неполадок
Проблема с PIN кодом
Если PIN код задан неверно, модем может игнорировать строчку, задающую точку доступа. В /var/log/messages
это выглядит примерно так:
Jun 20 00:17:30 quark chat[3348]: send (AT+CGDCONT=1,"IP","ac.vodafone.es"^M) Jun 20 00:17:31 quark chat[3348]: expect (OK) Jun 20 00:17:31 quark chat[3348]: ^M Jun 20 00:17:31 quark chat[3348]: AT+CGDCONT=1,"IP","ac.vodafone.es"^M^M Jun 20 00:17:31 quark chat[3348]: ERROR^M Jun 20 00:17:34 quark chat[3348]: alarm Jun 20 00:17:34 quark chat[3348]: Failed
Если вы только что установили или изменили PIN код, перезагрузите телефон и первый раз пройдите проверку PIN кода на телефоне, и лишь затем переставляйте SIM карту в модем.
Возможно, подходящим решением будет отключить проверку PIN кода, это можно сделать в настройках безопасности вашего телефона.
Модем EM770
Если pppd часто перезапускается вручную, например, при проверке настроек, EM770 (прошивка 11.104.16.12.00) иногда зависает после ответа NO CARIER
(хотя исправно отвечал на AT
а соединение с сотовой сетью в порядке). Этой ошибки не происходит, если при потере соединения с интернетом, сценарий будет ждать некоторое время, прежде чем попытаться ещё раз установить соединение. Если же модем всё-таки "залип", включите и выключите компьютер, это помогает. Вероятно, это ошибка программного обеспечения модема.
Кроме того, если используется проверка PIN кода, этот модем отвечает NO CARRIER
при первой попытке соединения. В этом случае помогает большой интервал ожидания после отправки AT+CPIN
.
Справочник команд AT^SYSCFG для Huawei
Чтобы увидеть поддерживаемые значения, вы можете опросить свой модем, отправив на него команду AT^SYSCFG=?
.
AT^SYSCFG=$mode,$acqOrder,$band,$roam,$srvDomain $mode 2=Auto-Select 13=GSM only 14=WCDMA only 16=no Change $acqOrder 0=Automatic 1=GSM prefered 2=WCDMA prefered 3=no Change $band 3fffffff = All other (query list with "AT^SYSCFG=?") $roam 0=Not Supported 1=Supported 2=no Change $srvDomain 0=Circuit-Switched only 1=Packet-Switched only 2=Circuit- & Packet-Switched 3=Any 4=no Change