По мере освоения linux начинаешь все больше и больше понимать как и по какому принципу он работает. И осознаешь, что некоторые вещи можно улучшить, сделать более удобномы именно для себя. Мне почему то сразу не понравились системы готовые системы для соединения с провайдером: kppp HomePage и wvdial HomePage. Тут еще провайдер обновил оборудование и наступил критический момент wvdial перестал работать. Надо было менять либо провайдера, либо разбирать и улучшать систему дозвона до него. Я предпочел второй вариант по нескольким причинам: провайдер меня вполне устраивал, почтовый ящик менять не хотелось, а свою систему хотелось давно. По этому в руки лопаты работать, работать (как поется в одной очень хорошей песни :) ). В итоге получилась очень даже ничего вещь: полный контроль процесса соединения с провайдером, возможность правильной системы подсчета затраченного времени, ну и конечно 30 секундная закачка, хотя это пожалуй особенность провайдера, а не самой моей системы. :)
Что надо
Наличие Linux на машине. Учтите без этого ничего не заработает. :) В моем случае это ALTLinux Master 2.2 от ALTLinux
Один текстовый редактор. Лучше vim HomePage (для особо вдвинутых emacs )
Установленные пакеты ppp и ppp-extra.
И конечно не забудь закачать сами скрипты архив (выложить архив)
Все три скрипта ppp-onppp-off redialer помещаем в /etc/ppp, хотя любая другая папка тоже подойдет. Если папка отличается от /etc/ppp, не забудьте внести изменения в ppp-on.
ppp-on
Как ясно из названия, если кто англицкий язык конечно знает, этот скрипт отвечает за включение ppp-соединение. PPP расшифровывается как Point To Point протокол. За ppp соединение в linux отвечает программка pppd, но только за него. Дозвон и регистрацией в системе провайдера занимается другая программка chat. Эти программки входят в состав пакета ppp из дистрибутива.
Вот собственно и сам скрипт
Итак
DIALER_SCRIPT=/etc/ppp/redialer как я уже говорил, за дозвон и авторитизацию отвечает программка chat, вот redialer является скриптом, который передает нужные данные этой программке. Можно сказать, что этот скрипт отвечает дозвон.
/dev/modem это собственно мой модем в linux'е, то как система его воспринимает :)
debug Увеличить уровень отладки (то же что -d). Если эта опция есть, pppd будет записывать в журнал все прибывшие и отправленные пакеты в читабельной форме. Пакеты регистрируются в лог-файлах через syslog со средством daemon и уровнем отладки.
-chap Не соглашаться с аутентификацией CHAP.
+pap Требует, чтобы другая сторона назвала себя используя PAP.
115200 максимальная скорость передачи данных.
crtscts Использовать аппаратное управление потоком данных (напр., RTS/CTS), чтобы управлять потоком данных на последовательном порту
noauth Не требовать от удаленной стороны назвать себя перед тем как начнется обмен пакетами.
defaultroute Добавить маршрут по умолчанию в системную таблицу маршрутизации. Эта запись удаляется при завершении связи.
name username Установить имя локальной системы для аутентификационных целей в username.
mru <n> Установить значение MRU [Maximum Receive Unit] в <n> при договоренности. pppd запросит удаленную сторону отправлять пакеты не более, чем по <n> байт. Минимальное значение MRU 128. Значение MRU по умолчанию 1500. Для медленных линков рекомендуется 296 (40 байт для заголовка TCP/IP + 256 байт данных).
mtu <n> Установить значение MTU [Maximum Transmit Unit] в <n>. Пока другая сторона на попросит меньшее значение при договоре о MRU, pppd будет требовать у сетевого кода ядра отправлять пакеты данных не более, чем по n байт через сетевой интерфейс PPP.
idle <n> Время в секундах после истечения которого pppd положить трубку, если не пересылаются пакеты. Очень удобная опция, чтобы случайно не растратить все деньги со счета. :)
updetach pppd не будет уходить в background до тех пор, пока не будет раздан ip-адрес.
connect $DIALER_SCRIPT указывает программку дозвона
Примечания:
Конструкция типа применяется мной для ситуаций, когда DIALER_SCRIPT отработал, начинается установка ppp соединения, но на этом этапе происходит ошибка. При отсутсвии параметра updetach у pppd и конструкции выше, скрипт просто подвисает. Особенно это паршиво, если используется 30 секундная закачка ;)
НЕ забудьте добавить строку в /etc/ppp/pap-secrets:
redialer
Этот скрипт отвечает за обработку звонков.
Всю грязную работу выполняет программка chat, а я только должен обрабатывать результат. Я не объясняю синтексис chat, всегда можно найти эту информацию на соотвествующей man странице.
Объявлены две переменных SLEEP_DELAY (время задержки между перенабором номера) и PHONE (телефон вашего провайдера). Все остальное должно быть понятным.
ppp-off
Вот и выключатель всей этой эпопеи. Он очень простой, когда запускается pppd, то создается файл
/var/run/$DEVICE.pid, где DEVICE=ppp0, в нем указан PID процесса pppd. Все что надо, это убить pppd и убрать файл блокировки /var/run/$DEVICE.pid.