Использование 3G-модема в Linux без wvdial и network manager

()

Про использование GSM/3G-модемов в Linux написано уже много, но почти все руководства предполагают использование утилит wvdial или network manager для подключения. Эти утилиты позволяют существенно упростить процесс подключения, однако при их использовании невозможно полностью управлять опциями pppd, хотя это бывает необходимо (например при подключении нескольких модемов и/или когда надо "привязывать" подключения к конкретному ppp-интерфейсу).

Далее будет показано как можно настроить подключение к интернету с использованием GSM/3G-модема в дистрибутивах Debian/Ubutnu без использования вспомогательных утилит.

Начальные условия: сервер под управлением Ubuntu 12.04, модем Huawei E171 с симкой оператора "Мегафон", доступный в системе как "/dev/ttyUSB0".

Задача: подключиться к интернету используя только pppd и привязать соединение к интерфейсу ppp100.

Переходим к решению задачи. Обычно для дозвона пишут свой chat-скрипт, и почему-то не многие знают что в поставке pppd уже есть chat-скрипт для GSM/3G-модемов, доступный в большинстве дистрибутивов Linux как "/etc/chatscripts/gprs". Поэтому часть с написанием этого скрипта можно пропустить и сразу приступить к описанию подключения в pppd. Для этого создадим файл "/etc/ppp/peers/Megafon" следующего содержания:

# Используемое для подключения устройство
/dev/ttyUSB0

# chat-скрипт
# В параметре "-T" передаётся имя точки доступа
connect '/usr/sbin/chat -v -f /etc/chatscripts/gprs -T internet'

# Надо ли менять маршрут по умолчанию
# Закомментируйте если не надо
defaultroute

# Использовать ли DNS-сервера провайдера
# Закомментируйте если не надо
usepeerdns

# Номер ppp-интерфейса (в данном случае будет ppp100)
unit 100

# Подключаться в случае обрыва
persist

# Перепосылать пакеты авторизации каждые 60 секунд
# Позволяет избежать обрыва соединения при отсутствии трафика
chap-interval 60

# Идентификатор соединения, используемый для поиска паролей в соответствующих файлах,
# А так же передаваемый ip-up и ip-down-скриптам
ipparam Megafon

# Имя пользователя (пароль описывается в файле "/etc/ppp/chap-secrets")
user "gdata"

# Отключаем любое сжатие
nopcomp
novjccomp
nobsdcomp
nodeflate
noaccomp

# Правильная обработка обрывов соединения
lcp-echo-interval 2
lcp-echo-failure 3

# IP адрес мы будем получать от провайдера, а не назначать сами
noipdefault

Теперь вписываем в файл "/etc/ppp/chap-secrets" следующие строки

"gdata"         Megafon         "gdata"

И подключаемся командой:

pon Megafon

Соответственно отключиться можно командой:

poff Megafon

Чтобы соедиение устанавливалось автоматически при загрузке нужно добавить запись в файл "/etc/network/interfaces". Согласно документации она должна выглядеть вот так:

auto Megafon
iface Megafon inet ppp
        provider Megafon

Однако в утилите ifup есть баг, который приводит к тому, что сразу после успешного подключения pppd получает SIGHUP и соединение рвётся. Ошибка эта очень древняя и судя по сообщениям на форумах и баг-трэкерам дистрибутивов надеяться на её исправление в ближайшем будущем не стоит. Поэтому используем небольшой хак: опишем интерфейс не как ppp, а как manual:

auto Megafon
iface Megafon inet manual
       pre-up /usr/bin/pon Megafon
       pre-down /usr/bin/poff Megafon

На этом всё. Приятной работы!

Ключевые слова: 3g, pppd, e171, мегафон.

Комментарии:

morbo 2012-06-10 08:01:59 (#)

Странно. У меня всегда было так:
auto ufanet
iface ufanet inet ppp
provider ufanet
И всё нормально работает. Правда это не ppp через gprs-модем, а ppp через pptp-client. Но это, по моему, не существенно.

MooSE 2012-06-10 14:10:01 (#)

Цитата:

Странно. У меня всегда было так:
auto ufanet
iface ufanet inet ppp
provider ufanet
И всё нормально работает. Правда это не ppp через gprs-модем, а ppp через pptp-client. Но это, по моему, не существенно.


Оказалось существенно. У меня pptp тоже проблем не вызывает. И pppoe. А вот именно тут после получения SIGHUP pppd уже не может заново установить соединение. Можешь проверить:)

oermolaev 2012-06-22 18:04:47 (#)

Проделал всё это на своём проблемном Е352 - всё заработало, связь не рвётся. Спасибо!
Жаль что никакой индикации установления связи (кроме как на самом модеме) нет. Нельзя ли получить, каким то образом,сообщение "Связь установлена" или "ОК"?

MooSE 2012-06-23 00:39:05 (#)

Цитата:

Проделал всё это на своём проблемном Е352 - всё заработало, связь не рвётся. Спасибо!
Жаль что никакой индикации установления связи (кроме как на самом модеме) нет. Нельзя ли получить, каким то образом,сообщение "Связь установлена" или "ОК"?


А надо ли на самом деле?:) Ну вообще вывод
ifconfig ppp100
покажет жив ли интерфейс:)

oermolaev 2012-06-23 11:09:24 (#)

ну это понятно. есть множество других способов проверить установление коннекта.
для себя я сделал так:
sh -c "pon Megafon && sleep 20 && ifconfig ppp100"
но подозреваю, есть более изящный метод?

MooSE 2012-06-23 13:55:27 (#)

можно положить скрипт в /etc/ppp/ip-up.d/ примерно такого содержания:

#!/bin/sh

# Если это подключение к мегафону
if [ ${PPP_IPPARAM} = "Megafon" ]; then
    # Печатаем сообщение
    echo "Connection established"
fi

Anonymous 2012-09-10 20:26:28 (#)

pppd получает SIGHUP и соединение рвётся

maxfail n
в pon не пробовали использовать?

Anonymous 2012-10-06 13:25:24 (#)

Написал скрипт небольшой для управления с панели. Только для Ubuntu

MooSE 2012-10-06 15:34:27 (#)

Цитата:

Написал скрипт небольшой для управления с панели. Только для Ubuntu


Мы за тебя рады

Anonymous 2013-03-28 10:02:06 (#)

Тоже интернет ни подключался автоматом, ни переподключался. Теперь всё норм.
СПАСИБО!

Anonymous 2013-04-24 18:18:47 (#)

Возможно ли также сразу передавать в скрипт номер дозвона? Например как-то так?:
connect '/usr/sbin/chat -vf /etc/chatscripts/gprs -T internet -N *99***1#'

Что в таком случае указывать в файле etc/chatscripts/gprs ?
Спасибо.

MooSE 2013-04-26 02:45:57 (#)

Цитата:

Возможно ли также сразу передавать в скрипт номер дозвона? Например как-то так?:
connect '/usr/sbin/chat -vf /etc/chatscripts/gprs -T internet -N *99***1#'

Что в таком случае указывать в файле etc/chatscripts/gprs ?
Спасибо.

Судя по содержимому скрипта передавать вот так прямо нельзя. Можно сделать копию, поправить в ней номер и использовать её дальше.

Anonymous 2013-05-10 22:48:01 (#)

Идея классная, ну прям для меня. Пославил Xubuntu 12.04, Нетворк Медеджер не хочет нормально с 3G-модемом работать. Ну просто беда! То видит его, то не видит, больше не видит. Замучал уже, как в лотерее СпортЛото - ждёшь шарик с нужной цифрой, а вылетает большой кукиш. По вашему совету создал нужный файлик, другой чуть подправил, запускаю pon Megafon, за всё время интернет запустился таким образом один раз. Но!... Как ни странно Нетворк Менеджер с помощью этой команды чаще стал включаться в работу, в менюшке появляется таки пункт "мобильная сеть". Не всегда так срабатывает, но всё же. Это конечно извращение, но на другое я просто не способен, чайник однако. Хотелось бы настроить по-нормальному, поэтому задам вопросы: 1) чтобы заработал этот способ подключения нужно удалить Нетворк Менеджер или отключить его? 2) можнно ли прописать что-то в программе conky, чтобы шёл подсчёт трафика? 3) смотрел в свойствах, мой модем подключается по ttyUSB1 и ttyUSB2, а у вас написано ttyUSB0, может поэтому и нет подключения? Если ещё возможно мне помочь, то помогите. А если нет, то пошлите меня читать маны.

MooSE 2013-05-19 03:21:46 (#)

network manager никак не связан с содержимым /etc/ppp/peers. если то видит, то не видит то надо смотреть в вывод dmesg сразу после подключения модема и анализировать.

Anonymous 2013-05-20 22:34:46 (#)

Цитата:

network manager никак не связан с содержимым /etc/ppp/peers. если то видит, то не видит то надо смотреть в вывод dmesg сразу после подключения модема и анализировать.

Спасибо. Это для меня тоже полезная информация. Только интересно, если он никак не связан, почему network manager так реагирует на команду pon Megafon, в меню чудесным образом появляется пункт "мобильные соединения"? Ну да ладно, это уже не по теме.

Anonymous 2014-02-25 18:21:35 (#)

ubuntu 12.04.4, pppd не меняет маршрут по умолчанию, даже если в etc/ppp/peers/Megafon есть строка defaultroute.

Помогает создать файл /etc/ppp/ip-up.d/defaultroute следующего содержания:
#!/bin/sh
/sbin/route add default dev ppp100

Дать файлу права на исполнение, разумеется.
Решение косенькое, надо бы узнавать имя интерфейса еще, а не тупо ppp100 прописывать. Но дома потянет.

Anonymous 2014-05-08 11:31:36 (#)

а можно ли сделать паузу перед подключением модема? бывает что система не сразу определяет модем и авто подклю0?%Dение не происходит

Anonymous 2014-12-04 16:59:34 (#)

При upload соединение рвет, в wvdial такого не было

MooSE 2014-12-09 06:32:56 (#)

Цитата:

При upload соединение рвет, в wvdial такого не было

Смешно:) Ибо wvdial в итоге всё равно использует pppd и поднимает соединение с его помощью:)

Anonymous 2014-12-25 08:38:04 (#)

Ещё такой вопрос, бывает что при подключении модема не работает dns, можно ли его прописать для pppoe соединения?

MooSE 2014-12-29 04:03:08 (#)

Цитата:

Ещё такой вопрос, бывает что при подключении модема не работает dns, можно ли его прописать для pppoe соединения?

Вы не очень внимательно читали. Прямо в тексте статьи есть:

# Использовать ли DNS-сервера провайдера
# Закомментируйте если не надо
usepeerdns

Новый комментарий



© 2006-2016 Вадим Калинников aka MooSE

кухня в рассрочку от производителя;Аренда профессиональной фотостудии