Volgograd

Волгоград Linux User Group

Организована 23 ноября 2002 года

Проект заморожен Птн Июл 6 02:11:14 MSD 2012


Вход:  Пароль:  

GrableVodstvo/articles/pppdScripts


Оглавление документа

Почему скрипты?

По мере освоения linux начинаешь все больше и больше понимать, как и по какому принципу он работает. И осознаешь, что некоторые вещи можно улучшить, сделать более удобнымы именно для себя. Мне почему-то сразу не понравились готовые системы для соединения с провайдером: Kppp и WvDial. Тут еще провайдер обновил оборудование и наступил критический момент — wvdial перестал работать. Надо было менять либо провайдера, либо разбирать и улучшать систему дозвона до него. Я предпочел второй вариант по нескольким причинам: провайдер меня вполне устраивал, почтовый ящик менять не хотелось, а свою систему хотелось давно. По этому в руки лопаты — работать, работать (как поется в одной очень хорошей песне :) ). В итоге получилась очень даже ничего вещь: полный контроль процесса соединения с провайдером, возможность правильной системы подсчета затраченного времени; ну, и конечно, 30 секундная закачка, хотя это, пожалуй, особенность провайдера, а не самой моей системы. :)


Что надо


  1. Наличие Linux на машине. Учтите, без этого ничего не заработает. :) В моем случае это ALTLinux Master 2.2 от ALTLinux
  2. Один текстовый редактор. Лучше vim (для особо вдвинутых emacs )
  3. Установленные пакеты ppp и ppp-extra.
  4. И конечно не забудь закачать сами скрипты архив (выложить архив)

Все три скрипта ppp-on ppp-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.



[ / Category Internet ]