PPP HOWTO часть 3

15. Автоматизация ваших соединений - Создание скриптов соединения

Хотя вы можете продолжать регистрироваться вручную как было показано выше,
гораздо лучше настроить некоторые скрипты, чтобы для вас это происходило
автоматически.

Набор скриптов автоматизирует процесс входа в систему и запускает PPP так что
все, что вы должны сделать (от root или как член группы PPP) - дать одну
команду запуска вашего соединения.

15.1. Скрипты соединения для аутентификации по имени/паролю пользователя

Если ваш ISP не требует использования PAP/CHAP, вам нужны именно эти скрипты!

Если пакет ppp установлен правильно, вы должны иметь два файла примеров. Для
PPP 2.1.2 они находятся в /usr/sbin, а для PPP 2.2 они находятся в
/etc/ppp/scripts. Они называются

для PPP-2. 1.2

ppp-on
ppp-off

а для PPP-2. 2

ppp-off
ppp-on
ppp-on-dialer

Теперь, если Вы используете PPP 2.1.2, я настойчиво прошу вас удалить файлы
примеров. С ними имеются потенциальные проблемы - и не сообщайте мне, что они
прекрасно работают - я использовал их очень долго (и даже рекомендовал их
в первой версии этого HOWTO)!

Для пользователя PPP 2.1.2 имеется ЛУЧШАя версия шаблона, взятая из дистрибутива
PPP 2.2 . Я предлагаю вам скопировать и использовать эти скрипты вместо
старого скрипта PPP-2.1.2 .

15.2. Скрипт ppp-on

Это первый из ПАРЫ скриптов, которые фактически запускают соединение.

  ______________________________________________________________________
  #!/bin/sh
  #
  # Скрипт для инициации соединения PPP. Это первая часть из пары скриптов.
  # Это не секретные скрипты, так как коды видны командой ps.
  # Однако это пример.
  #
  # Это параметры. Измените их как нужно.
  TELEPHONE=555-1212      # Телефонный номер соединения
  ACCOUNT=george          # Имя пользователя для входа ('George Burns')
  PASSWORD=gracie         # Пароль для этого аккаунта (и 'Gracie Allen')
  LOCAL_IP=0.0.0.0        # Локальный IP адрес, если известен. Динамический = 0.0.0.0
  REMOTE_IP=0.0.0.0       # Удаленный IP адрес, если желателен. Обычно 0.0.0.0
  NETMASK=255.255.255.0   # Соответствующая сетевая маска, если нужна
  #
  # Экспортируем их, чтобы они были доступны в 'ppp-on-dialer'
  export TELEPHONE ACCOUNT PASSWORD
  #
  # Это расположение скрипта, который звонит по телефону и регистрируется в
  # системе. Пожалуйста, используйте абсолютное имя файла, так как опция connect
  # не использует переменную $PATH. (Если это сделать, то 'root' аккаунт будет
  # дырой в защите, так что не просите.)
  #
  DIALER_SCRIPT=/etc/ppp/ppp-on-dialer
  #
  # Инициация соединения
  #
  #
  exec /usr/sbin/pppd debug /dev/ttySx 38400 \
          $LOCAL_IP:$REMOTE_IP \
          connect $DIALER_SCRIPT
  ______________________________________________________________________

Это скрипт ppp-on-dialer:

  ______________________________________________________________________
  #!/bin/sh
  #
  # Это вторая часть скрипта ppp-on. Она выполняет установку желаемого
  # соединения.
  #
  /usr/sbin/chat -v                                                 \
          TIMEOUT         3                               \
          ABORT           '\nBUSY\r'                      \
          ABORT           '\nNO ANSWER\r'                 \
          ABORT           '\nRINGING\r\n\r\nRINGING\r'    \
          ''              \rAT                            \
          'OK-+++\c-OK'   ATH0                            \
          TIMEOUT         30                              \
          OK              ATDT$TELEPHONE                  \
          CONNECT         ''                              \
          ogin:--ogin:    $ACCOUNT                        \
          assword:        $PASSWORD
  ______________________________________________________________________

Для PPP-2.2, сценарий ppp-off примерно такой:

  ______________________________________________________________________
  #!/bin/sh
  ######################################################################
  #
  # Определить прерываемое устройство.
  #
  if [ "$1" = "" ]; then
          DEVICE=ppp0
  else
          DEVICE=$1
  fi

  ######################################################################
  #
  # Если pid файл ppp0 есть, тогда программа работает. Остановить ее.
  if [ -r /var/run/$DEVICE.pid ]; then
          kill -INT `cat /var/run/$DEVICE.pid`
  #
  # Если kill не работает, тогда нет процесса, запущенного под этим pid.
  # Это может также означать, что существует посторонний lock файл.
  # Возможно, вы захотите удалить его.
          if [ ! "$?" = "0" ]; then
                  rm -f /var/run/$DEVICE.pid
                  echo "ERROR: Removed stale pid file"
                  exit 1
          fi
  #
  # Отлично. Пусть pppd поправит свой собственный недочет.
          echo "PPP link to $DEVICE terminated."
          exit 0
  fi
  #
  # ppp процесс не запущен для ppp0
  echo "ERROR: PPP link is not active on $DEVICE"
  exit 1
  ______________________________________________________________________

15.3. Редактирование скриптов запуска PPP

Поскольку новые скрипты приходят двумя частями, мы в свою очередь отредактируем
их.

15.3.1. Скрипт ppp-on

Вы должны будете отредактировать скрипт чтобы вставить ВАШЕ имя пользователя на
вашем ISP, ВАШ пароль на вашем ISP, номер телефона вашего ISP.

Каждая из строк типа TELEPHONE= - это фактически установленные переменные shell,
которые содержат информацию справа от = (исключая комментарии, конечно).
Отредактируйте каждую из этих строк так, чтобы они соответствовали вашему ISP и
соединению.

Также, поскольку вы устанавливаете IP адрес (если вам это нужно) в файле
/etc/ppp/options, УДАЛИТЕ строку, которая говорит

______________________________________________________________________

$LOCAL_IP:$REMOTE_IP \
______________________________________________________________________

Также, удостоверьтесь, что переменная оболочки DIALER_SCRIPT указывает на полный
путь и имя скрипта для дозвона, который вы фактически собираетесь использовать.
Так что, если вы переместили его или переименовали скрипт, удостоверьтесь, что
вы отредактировали эту строку правильно в скрипте ppp-on!

15.3.2. Сценарий ppp-on-dialer

Это - второй скрипт, который фактически поднимает нашу ppp связь.

Обратите внимание: chat скрипт обычно однострочный. Наклонные черты влево
используются, чтобы разместить строки на нескольких физических строках
(для удобочитаемости человеком) и не формировать часть скрипта самому.

Однако, очень полезно рассмотреть это подробно так, чтобы мы поняли, что же
фактически (предположительно) происходит!

15.4. Что означает скрипт chat...

Скрипт chat - последовательность пар "ожидаемая строка" "посылаемая строка".
В частности обратите внимание, что мы ВСЕГДА ожидаем что-нибудь перед тем, как
пошлем что-либо.

Если мы должны послать что-то БЕЗ того, чтобы сначала получить что-нибудь, мы
должны использовать пустую строку ожидания (обозначаемую "") и аналогично для
ожидания чего-либо без того, чтобы посылания чего-нибудь! Также, если строка
состоит из нескольких слов, (например, NO CARRIER), вы должны взять строку в
кавычки, чтобы chat вопринял ее как одно целое.

Строка chat в нашем шаблоне:

______________________________________________________________________

exec /usr/sbin/chat -v
______________________________________________________________________

В вызове chat опция -v говорит, чтобы chat копировал ВЕСЬ ввод/вывод в систеный
лог (обычно /var/log/messages). Как только вы убедитесь, что скрипт chat
работает надежно, отредактируйте эту строку, чтобы удалить -v, чтобы не хранить
ненужную информацию в вашем syslog.

______________________________________________________________________

TIMEOUT         3
______________________________________________________________________

Это устанавливает паузу для получения ожидаемого ввода в 3 секунды. Вы можете
увеличить это значение до 5 или 10 секунд, если вы используете медленный модем!

______________________________________________________________________

ABORT           '\nBUSY\r'
______________________________________________________________________

Если получена строка BUSY, то операция аварийно прекращается.

______________________________________________________________________

ABORT           '\nNO ANSWER\r'
______________________________________________________________________

Если получена строка NO ANSWER, то операция аварийно прекращается.

______________________________________________________________________

ABORT           '\nRINGING\r\n\r\nRINGING\r'
______________________________________________________________________

Если (повторимся) получена строка RINGING, то операция аварийно прекращается.

Это потому, что кто-то сидит на вашей телефонной линии!

______________________________________________________________________

"              \rAT
______________________________________________________________________

Не ожидаем ничего от модема, и послаем строку в него.

______________________________________________________________________

OK-+++\c-OK   ATH0
______________________________________________________________________

Это немного более сложно, поскольку использует некоторые из возможностей
восстановления при ошибках chat.

What is says is...Ожидаем OK, если он не получен (потому что модем не в
командном режиме), затем посылаем +++ (стандартная строка для Hayes-совместимых
модемов, которая возвращает модем в командный режим) и ожидаем OK.

Затем посылаем ATH0 (строка для завершения связи модема). Это позволяет вашему
скрипту справляться с вашим модемом, зависшим во время сеанса связи!

______________________________________________________________________

TIMEOUT         30
______________________________________________________________________

Установим паузу по времени в 30 секунд для оставшихся команд скрипта. Если вы
испытываете проблемы со скриптом chat, прерывающимся из-за пауз, увеличьте
это значение до 45 секунд или больше.

______________________________________________________________________

OK              ATDT$TELEPHONE
______________________________________________________________________

Ожидаем OK (ответ модема на команду ATH0) и набираем номер, на который мы
хотим позвонить.

______________________________________________________________________

CONNECT         ''
______________________________________________________________________

Дожидаемся строки CONNECT (которую наш модем посылает, когда удаленные модем
отвечает) и не посылаем в ответ ничего.

______________________________________________________________________

ogin:--ogin:    $ACCOUNT
______________________________________________________________________

Снова, здесь мы вставляем кое-какое исправление ошибок. Ожидаем подсказку
входа в систему (... ogin:), но если мы не получаем ее по истечении паузы, то
посылаем возврат каретки и затем ищем подсказку входа в систему снова. Когда
подсказка получена, посылаем username (сохраненное в переменной shell $ACCOUNT).

______________________________________________________________________

assword:        $PASSWORD
______________________________________________________________________

Ожидаем запроса пароля и посылаем наш пароль (аналогично сохраненный в
переменной shell).

Этот скрипт chat имеет приемлемую возможность исправления ошибок. chat имеет
значительно большее количество возможностей, чем показано здесь. Для подробной
информации проконсультируйтесь с man chat (man 8 chat).

15.4.1. Запуск PPP на серверной стороне моединения

Хотя скрипт ppp-on-dialer отлично подходит для серверов, которые автоматически
запускают pppd на серверной стороне как только вы зарегистрировалися, некоторые
серверы требуют, чтобы вы явно дали команду запуска PPP на сервере.

Если вы должны дать команду, чтобы запустить PPP на сервере, вы должны
отредактировать скрипт ppp-on-dialer.

В КОНЦЕ сценария (после строки пароля) добавьте дополнительную пару
ожидаемой-посылаемой строк - которая искала бы вашу подсказку регистрации в
системе (отличая символы, которые имеют специальное значение в оболочке Bourne -
типа $ и [ или ] (открытые и закрытые квадратные скобки).

Как только программа chat нашла командную строку оболочки, она должна выдать
команду запуска ppp, требуемую для PPP сервера вашего ISP.

В моем случае, мой PPP сервер использует стандартную подсказку bash Linux.

______________________________________________________________________

[hartr@kepler hartr]$
______________________________________________________________________

и требует, чтобы я напечатал

______________________________________________________________________

ppp
______________________________________________________________________

чтобы запустить PPP на сервере.

Хорошо бы учесть здесь некоторые ошибки, так например в моем случае я использую

______________________________________________________________________

hartr--hartr    ppp
______________________________________________________________________

Это значит, что если мы не получили подсказку в течении заданной паузы, то
посылаем возврат каретки и ищем подсказку снова.

Как только подсказка получена, посылаем строку ppp.

Обратите внимание: не забудьте добавить \ к концу предыдущей строки, так что бы
chat думал, что весь сценарий chat состоит из одной строки!

К сожалению, на некоторых серверах набор подсказок часто меняется!

Возможно вам понадобится несколько раз зарегистрироваться, используя minicom,
чтобы понять, что происходит, и найти устойчивую "ожидаемую" строку.

15.5. Сценарий chat для соединения PAP/CHAP

Если ваш ISP использует PAP/CHAP, то ваш сценарий chat намного более простой.

Весь ваш сценарий chat должен делать вот что - звонить по номеру телефона,
ждать соединения и затем позволить pppd обработать регистрацию в системе!

  ______________________________________________________________________
  #!/bin/sh
  #
  # This is part 2 of the ppp-on script. It will perform the connection
  # protocol for the desired connection.
  #
  exec /usr/sbin/chat -v                                  \
          TIMEOUT         3                               \
          ABORT           '\nBUSY\r'                      \
          ABORT           '\nNO ANSWER\r'                 \
          ABORT           '\nRINGING\r\n\r\nRINGING\r'    \
          ''              \rAT                            \
          'OK-+++\c-OK'   ATH0                            \
          TIMEOUT         30                              \
          OK              ATDT$TELEPHONE                  \
          CONNECT         ''                              \
  ______________________________________________________________________

15.6. Отладка pppd и опция file option_file

Как мы уже видели, вы можете включить отладочную информацию опцией -d в pppd.
Опция 'debug' эквивалентна ей.

Поскольку мы устанавливаем новое соединение с новым скриптом, сейчас поставьте
опцию отладки. (Предупреждение: если у вас мало дискового пространства, то логи
pppd могут быстро увеличить ваш файл syslog и создать вам проблему - but to do
this you must fail to connect and keep on trying for quite a few minutes).

Как только вы обрадуетесь, что все работает правильно, можете удалить эту опцию.

Если вы назвали ваш ppp файл опций как-нибудь иначе, чем /etc/ppp/options, или
/etc/ppp/options.ttySx, определите имя файла опцией file в pppd - например

______________________________________________________________________

exec /usr/sbin/pppd debug file options.myserver /dev/ttyS0 38400 \
______________________________________________________________________

16. Тестирование вашего сценария соединения

Откройте новый root Xterm (если вы находитесь в X) или откройте новую
виртуальную консоль и войдите в систему как пользователь root.

В этом новом сеансе, выдайте команду

tail -f /var/log/messages

(или какой-то другой файл вашего системного лога ).

В первом окне (или виртуальной консоли) выдайте команду

ppp-on &

(или как вы там назвали вашу отредактированную версию /usr/sbin/ppp-on).
Если вы не перевели запущенный скрипт в фоновый режим, поместив в конце команды,
&, то вы не получите назад приглашение командной строки до тех пор, пока ppp
не закончит работу (пока связь не завершится).

Теперь переключитесь обратно на окно, которое отслеживает ваш системный файл
регистрации.

Вы увидите что-то вроде следующего (при условии что вы указали -v для chat
и -d для pppd) .... это - сценарий chat и ответы, регистрируемые в системном
логе, и следующей далее информацией от pppd:

  ______________________________________________________________________
  Oct 21 16:09:58 hwin chat[19868]: abort on (NO CARRIER)
  Oct 21 16:09:59 hwin chat[19868]: abort on (BUSY)
  Oct 21 16:09:59 hwin chat[19868]: send (ATZ^M)
  Oct 21 16:09:59 hwin chat[19868]: expect (OK)
  Oct 21 16:10:00 hwin chat[19868]: ATZ^M^M
  Oct 21 16:10:00 hwin chat[19868]: OK -- got it
  Oct 21 16:10:00 hwin chat[19868]: send (ATDT722298^M)
  Oct 21 16:10:00 hwin chat[19868]: expect (CONNECT)
  Oct 21 16:10:00 hwin chat[19868]: ^M
  Oct 21 16:10:22 hwin chat[19868]: ATDT722298^M^M
  Oct 21 16:10:22 hwin chat[19868]: CONNECT -- got it
  Oct 21 16:10:22 hwin chat[19868]: send (^M)
  Oct 21 16:10:22 hwin chat[19868]: expect (ogin:)
  Oct 21 16:10:23 hwin chat[19868]: kepler login: -- got it
  Oct 21 16:10:23 hwin chat[19868]: send (hartr^M)
  Oct 21 16:10:23 hwin chat[19868]: expect (ssword:)
  Oct 21 16:10:23 hwin chat[19868]:  hartr^M
  Oct 21 16:10:23 hwin chat[19868]: Password: -- got it
  Oct 21 16:10:23 hwin chat[19868]: send (??????^M)
  Oct 21 16:10:23 hwin chat[19868]: expect (hartr)
  Oct 21 16:10:24 hwin chat[19868]: [hartr -- got it
  Oct 21 16:10:24 hwin chat[19868]: send (ppp^M)
  Oct 21 16:10:27 hwin pppd[19872]: pppd 2.1.2 started by root, uid 0
  Oct 21 16:10:27 hwin pppd[19873]: Using interface ppp0
  Oct 21 16:10:27 hwin pppd[19873]: Connect: ppp0 <--> /dev/cua1
  Oct 21 16:10:27 hwin pppd[19873]: fsm_sdata(LCP): Sent code 1, id 1.
  Oct 21 16:10:27 hwin pppd[19873]: LCP: sending Configure-Request, id 1
  Oct 21 16:10:27 hwin pppd[19873]: fsm_rconfreq(LCP): Rcvd id 1.
  Oct 21 16:10:27 hwin pppd[19873]: lcp_reqci: rcvd MRU
  Oct 21 16:10:27 hwin pppd[19873]: (1500)
  Oct 21 16:10:27 hwin pppd[19873]:  (ACK)
  Oct 21 16:10:27 hwin pppd[19873]: lcp_reqci: rcvd ASYNCMAP
  Oct 21 16:10:27 hwin pppd[19873]: (0)
  Oct 21 16:10:27 hwin pppd[19873]:  (ACK)
  Oct 21 16:10:27 hwin pppd[19873]: lcp_reqci: rcvd MAGICNUMBER
  Oct 21 16:10:27 hwin pppd[19873]: (a098b898)
  Oct 21 16:10:27 hwin pppd[19873]:  (ACK)
  Oct 21 16:10:27 hwin pppd[19873]: lcp_reqci: rcvd PCOMPRESSION
  Oct 21 16:10:27 hwin pppd[19873]:  (ACK)
  Oct 21 16:10:27 hwin pppd[19873]: lcp_reqci: rcvd ACCOMPRESSION
  Oct 21 16:10:27 hwin pppd[19873]:  (ACK)
  Oct 21 16:10:27 hwin pppd[19873]: lcp_reqci: returning CONFACK.
  Oct 21 16:10:27 hwin pppd[19873]: fsm_sdata(LCP): Sent code 2, id 1.
  Oct 21 16:10:27 hwin pppd[19873]: fsm_rconfack(LCP): Rcvd id 1.
  Oct 21 16:10:27 hwin pppd[19873]: fsm_sdata(IPCP): Sent code 1, id 1.
  Oct 21 16:10:27 hwin pppd[19873]: IPCP: sending Configure-Request, id 1
  Oct 21 16:10:27 hwin pppd[19873]: fsm_rconfreq(IPCP): Rcvd id 1.
  Oct 21 16:10:27 hwin pppd[19873]: ipcp: received ADDR
  Oct 21 16:10:27 hwin pppd[19873]: (10.144.153.51)
  Oct 21 16:10:27 hwin pppd[19873]:  (ACK)
  Oct 21 16:10:27 hwin pppd[19873]: ipcp: received COMPRESSTYPE
  Oct 21 16:10:27 hwin pppd[19873]: (45)
  Oct 21 16:10:27 hwin pppd[19873]:  (ACK)
  Oct 21 16:10:27 hwin pppd[19873]: ipcp: returning Configure-ACK
  Oct 21 16:10:28 hwin pppd[19873]: fsm_sdata(IPCP): Sent code 2, id 1.
  Oct 21 16:10:30 hwin pppd[19873]: fsm_sdata(IPCP): Sent code 1, id 1.
  Oct 21 16:10:30 hwin pppd[19873]: IPCP: sending Configure-Request, id 1
  Oct 21 16:10:30 hwin pppd[19873]: fsm_rconfreq(IPCP): Rcvd id 255.
  Oct 21 16:10:31 hwin pppd[19873]: ipcp: received ADDR
  Oct 21 16:10:31 hwin pppd[19873]: (10.144.153.51)
  Oct 21 16:10:31 hwin pppd[19873]:  (ACK)
  Oct 21 16:10:31 hwin pppd[19873]: ipcp: received COMPRESSTYPE
  Oct 21 16:10:31 hwin pppd[19873]: (45)
  Oct 21 16:10:31 hwin pppd[19873]:  (ACK)
  Oct 21 16:10:31 hwin pppd[19873]: ipcp: returning Configure-ACK
  Oct 21 16:10:31 hwin pppd[19873]: fsm_sdata(IPCP): Sent code 2, id 255.
  Oct 21 16:10:31 hwin pppd[19873]: fsm_rconfack(IPCP): Rcvd id 1.
  Oct 21 16:10:31 hwin pppd[19873]: ipcp: up
  Oct 21 16:10:31 hwin pppd[19873]: local  IP address 10.144.153.104
  Oct 21 16:10:31 hwin pppd[19873]: remote IP address 10.144.153.51
  ______________________________________________________________________

(Примечание - я использую СТАТИЧЕСКИЕ IP адреса - следовательно моя машина,
отправила это PPP серверу - вы не увидеть это, если используете ДИНАМИЧЕСКИЕ
IP адреса.) Также, этот сервер требует дать команду для запуска ppp.

Как будто все впорядке - протестируем соединение как и прежде, пингуя IP
адреса и имена машин.

Запустите ваш веб браузер или еще что-нибудь и скользите по сети - вы
подключены!

17. Закрытие PPP связи

Для завершения связи PPP используйте стандартную команду ppp-off, чтобы
закрыть его (помните - вы должны быть root'ом или членом группы PPP!).

В вашем системном логе вы увидите что-то вроде:

  ______________________________________________________________________
  Oct 21 16:10:45 hwin pppd[19873]: Interrupt received: terminating link
  Oct 21 16:10:45 hwin pppd[19873]: ipcp: down
  Oct 21 16:10:45 hwin pppd[19873]: default route ioctl(SIOCDELRT): Bad address
  Oct 21 16:10:45 hwin pppd[19873]: fsm_sdata(LCP): Sent code 5, id 2.
  Oct 21 16:10:46 hwin pppd[19873]: fsm_rtermack(LCP).
  Oct 21 16:10:46 hwin pppd[19873]: Connection terminated.
  Oct 21 16:10:46 hwin pppd[19873]: Exit.
  ______________________________________________________________________

Не волнуйтесь о SIOCDELRT - это только замечание pppd о том, что он
завершает работу и незачем волноваться.

18. Отладка

Есть множество причин, по которым ваше соединение не будет работать, chat не
сумел завершиться правильно, неправильная строчка и т.д. Проверьте записи в
вашем syslog.

18.1. Я вкомпилировал поддержку PPP в ядро, но ...

Самая общая проблема состоит в том, что люди компилируют поддержку PPP в ядро и
тем не менее, когда они пытаются выполнить pppd, ядро жалуется, что оно не
поддерживает ppp! Имеется ряд причин, посему это может происходить.

18.1.1. Хотя вы пересобрали ваше ядро с поддержкой ppp, вы не загрузили новое
ядро. Это может случиться, если вы не модифицировали /etc/lilo.conf и не
перезапустили lilo. Вы загружаете правильное ядро?

Хорошая проверка для ядра - команда uname -a, которая должна вывести

______________________________________________________________________

Linux archenland 2.0.28 #2 Thu Feb 13 12:31:37 EST 1997 i586
______________________________________________________________________

Выведены версия ядра и дата, когда это ядро компилировалось - этого должно быть
достаточно, чтобы разобраться с данным вопросом.

18.1.2. Вы вкомпилировали поддержку ppp в ядре как модуль?

Вы можете получить такую ошибку, если вы вкомпилировали поддержку ppp в ваше
ядро как модуль, но сам модуль не построили и не установили. Посмотрите
Kernel-HOWTO и файл README в /usr/src/linux!

Другая версия, относящаяся к проблеме с модулем, состоит в том, что вы ожидаете,
что требуемые модули будут автоматически загружены, но не запустили демон
kerneld (который на лету автоматически загружает и выгружает модули).

Проверьте kerneld mini-HOWTO для информации по настройке kerneld.

18.1.3. Вы используете правильную версию PPP для вашего ядра?

Вы должны использовать ppp-2.2 с ядром версии 2.0.x. Вы можете использовать
ppp-2.2 с ядром версии 1.2.x (если вы отпатчилиядро) иначе вы должны
использовать  ppp-2.1.2.

18.1.4. Вы запусткаете pppd от root?

Если вы не запускаете pppd от пользователя root (и pppd - не suid для root),
то вы может получить это сообщение.

18.2. Мой модем соединяется, но ppp не запускается

На это может иметься бесконечное множество причин (см. comp.os.linux...).

САМАЯ основная ошибка - вы имеете опечатки в ваших скриптах.
Единственое, что здесь можно сделать - это удостовериться, в правильной работе
сценария chat, пролистав ваш syslog (/var/log/messages) строчка за строчкой.

Можно попробовать попытаться соединиться с PPP сервером вручную, чтобы
проверить не изменились ли условия регистрации в системе.

Вы должны очень тщательно проверить лог-файл и посмотреть там реально
выдаваемые подсказки и имейте в виду, что мы - люди часто заменяем в своем
воображении фактически написанный текст на тот, который нам показался
написаным на этом месте!

18.3. Syslog говорит "serial line is not 8 bit clean..."

в этом случае также возможны варианты - например последовательная линия looped
обратно и т.д., и происходить это может по ряду причин.

Чтобы понять, что происходит, необходимо немного углубиться в процессы,
происходящие в pppd непосредственно.

Когда pppd запускается, он посылает LCP (протокол управления связи) пакеты
удаленной машине. Если он получает приемлемый ответ, то переходит в следующую
стадию (используя IPCP пакеты) и только когда эти переговоры завершаются -
начинает действовать IP уровень так, чтобы вы могли использовать связь PPP.

Если на удаленном конце линии нет ppp сервера, то когда ваш PC посылает lcp
пакеты, они возвращаются искаженными процессом login на удаленномй конце.
Поскольку эти пакеты используют 8 битов, а вернувшиеся пакеты приходят с
отрезанным 8-ым битом (вспомните, что ASCII - 7 разрядный код), то PPP видит
это и соответственно жалуется.

Имеется несколько причин такого отражения сигналов.

18.3.1. Вы неправильно регистрируетесь на сервере

Когда ваш сценарий chat завершается, на вашем PC запускается pppd. Однако,
если вы не завершили процесс входа в систему на сервере (включая посылку
команды, требуемой для запуска PPP на сервере), то PPP не запустится.

Так lcp пакеты отражаются, и вы получаете эту ошибку.

Вы должны тщательно проверить и исправить (в случае необходимости) ваш сценарий
chat (см. выше).

18.3.2. Вы не запустили PPP на сервере

Некоторые PPP серверы требуют, чтобы вы ввели команду и/или нажали return после
завершения процесса регистрации, чтобы на удаленном конце стартовал ppp.

Проверьте ваш сценарий chat (см. выше).

Если вы регистрируетесь вручную и обнаруживаете, что после этого вы должны
послать return, чтобы запустить PPP, то просто добавьте пустую пару "ожидаемое-
посылаемое" в конец вашего сценария chat (пустая "посылаемая" строка
фактически посылает return).

18.3.3. Удаленный PPP процесс медленно запускается

This one is a bit tricksy!

По умолчанию, ваш Linux pppd скомпилирован для посылки максимум 10 lcp запросов
конфигурации. Если сервер медленно отвечает, то все 10 таких запросов могут
передаться до того, как удаленный PPP будет готов получить их.

На вашей машине pppd видит, что все 10 запросов отражены обратно (с 8-ым
отрезанным битом) и завершается.

Имеются два способа обойти это:

Добавьте lcp-max-configure 30 в ваши опции ppp. Таким образом увеличивается
максимальное число посылаемых lcp пакетов выбора конфигурации.
Для действительно медленных серверов вам может понадобиться указать
еще большее количество таких пакетов.

В качестве альтернативы вы можете get a bit tricksy in return. Вы, возможно,
заметили, что, когда вы регистрировались вручную на PPP сервере, и PPP  там
запускался, то первый символ ppp мусора был всегда символ тильды (~).

Это наблюдение можно использовать таким образом - мы можем добавить новую пару
"ожидаемое-посылаемое" в конец вашего сценария chat, которая будет ожидать
тильду и не посылать ничего. Это можно сделать, например, так:

______________________________________________________________________

\~      ''
______________________________________________________________________

Обратите внимание: поскольку символ тильды имеет специальное значение в
shell, то нужно его за'escape'ить (и, следовательно, перед ним поставить
наклонную черту влево).

18.4. Заданный по умолчанию маршрут не установлен

Если pppd отказывается установить маршрут заданный по умолчанию, то, поэтому
он (совершенно правильно) отказывается удалять/заменять существующий
заданный по умолчанию маршрут.

Обычная причина состоит в том, что некоторые дистрибутивы заданный по умолчанию
маршрут устанавливают через ethernet-адаптер, а не через сеть.

См. NAG Linux и Net2/3 HOWTOS для информации о правильной установке вашей
платы ethernet и связанных c нею маршрутов.

Также возможно, что ваша LAN уже использует шлюз/маршрутизатор и в вашей таблице
маршрутизации на него был установлен маршрут по умолчанию.

Исправление этой последней ситуации может требовать некоторых знаний IP сетей
и лежит не охватывается этим HOWTO. Предлагаю вам обратиться к экспертам
(в группы новостей).

18.5. Другие проблемы

Имеется много причин, кроме перечисленных, по которым ppp будет не в состоянии
соединиться и/или функционировать правильно.

Смотрите PPP FAQ (который является набором вопросов и ответов).
Это - очень всесторонний документ, и ответы там ЕСТЬ! Из моего собственного
(грустного) опыта, если там нет ответа на ваши вопросы, то проблема - НЕ
в ppp! В моем случае я использовал ELF ядро, которое я не нарастил до
возможностей, соответствующих ядерным модулям.

Я потратил впустую около 2 дней (и часть ночи), ругая прекрасно работающий
PPP сервер, пока меня не осенило!

19. Получение помощи, когда не знаете, что еще можно сделать

Если вы не можете настроить связь PPP, вернитесь в начало документа и проверьте
все - в особенности информацию, выводимую "chat -v ..." и "pppd -d" в вашем
системном логе.

Также проконсультируйтесь с документацией по PPP и FAQ плюс другими упоминаемыми
здесь документами!

Если и это не помогает, попробуйте попросить помощи у людей в группах новостей
comp.os.linux.misc и comp.os.linux.networking или в comp.protocols.ppp

Вы можете попробовать пслать мне персональную почту, но я у меня есть своя
работа (и личная жизнь), и я не гарантирую, что отвечу быстро (если вообще смогу
ответить), поскольку это зависит от моей текущей загрузки и состояния моей
личной жизни!

В частности - НЕ НАДО ОТПРАВЛЯТЬ КУЧУ ОТЛАДОЧНОЙ ИНФОРМАЦИИ НИ В ГРУППЫ
НОВОСТЕЙ, НИ МНЕ НА EMAIL - все это будет отправлено в /dev/null (если я не
просил специально сделать это).