Linux в Сети. Сага пятая

Linux в Сети. Сага пятая

В продолжение темы "Linux в Сети" наш рассказ о том, что такое SLIP и РРР и с чем их едят. Итак, Сага пятая, финальная.

В качестве альтернативы таким аппаратным сетевым соединениям, как Ethernet, можно воспользоваться модемом и телефонными линиями. Существуют два протокола, которые позволяют передавать IP-сообщения по телефонным линиям. Это протокол SLIP (Serial Line Internet Protocol — межсетевой протокол для последовательного канала) и протокол РРР (Point-to-Point Protocol — протокол "точка-точка"). SLIP — старый протокол, а РРР — более современный и очень стабильный. Применяется в соединениях, используемых многими интернет-провайдерами. Протоколы SLIP и РРР предназначены специально для тех пользователей, которые подключают свои системы к Internet через модем и телефонную линию. Как правило, соединение устанавливается с провайдером, который предоставляет для этого свой модемный пул.
Провайдер использует на конкретной линии либо протокол SLIP, либо РРР, поэтому сначала нужно выяснить, какой протокол используется.
Настройка SLIP- и РРР-соединения может оказаться сложной задачей. Почитать подробно про это можно в документах PPP-HOWTO и Net-2-HOWTO.

Чтобы установить соединение по протоколу SLIP или РРР, необходимо активизировать поддержку системой протокола TCP/IP и конфигурировать закольцовывающий интерфейс.
Провайдеры Internet обычно имеют в своем распоряжении серверы доменных имен, услугами которых можно воспользоваться. Необходимо выяснить IP-адреса этих серверов и ввести их в файл /etc/resolv.conf. Для ввода адресов можно воспользоваться утилитой netcfg. В любом случае следует просмотреть содержимое файла /etc/resolv.conf и проверить, внесены ли в него доменные имена серверов. Если их там нет, то ни один вводимый вами адрес не будет распознан.
Протокол "точка-точка" (РРР) — это более новый универсальный протокол, поэтому рассматривать будем его. Обеспечивает гораздо более стабильное соединение и может поддерживать работу целого ряда сетевых протоколов помимо IP. Основную часть работы РРР выполняет автоматически. В отличие от SLIP, здесь не нужно для каждой операции создавать сценарий с целым набором команд. РРР автоматически определяет удаленные IP-адреса — как статические, так и динамические.

РРР-соединение устанавливается с помощью программы pppd. Эта программа конфигурирует соединение, устанавливает лимиты MTU и получает IP-адреса. Однако, в отличие от dip, pppd не устанавливает предварительное соединение. Она не набирает через модем номер телефона провайдера и не предоставляет информацию о регистрационных именах и паролях. Чтобы использовать pppd, нужно сначала установить соединение с удаленной хост-системой. Это можно сделать с помощью программы chat, в которой используются свои опции и форматы. Сначала эта программа устанавливает соединение, а затем pppd конфигурирует его. Однако нет необходимости сначала вызывать chat, а затем pppd. Дело в том, что pppd в качестве аргумента использует имя программы, которая устанавливает соединение, в данном случае, chat. Это имя нужно просто указать вместе с опциями команды chat в командной строке pppd. По сути дела, вся операция установления соединения с помощью pppd выполняется в одной командной строке, в отличие от dip-сценария.
Программа pppd различает статические и динамические IP-адреса, проверяя, включил ли пользователь набор IP-адресов в качестве аргумента в командную строку, а также по наличию опции noipdefault. Если IР-адреса указаны, pppd считает, что это статическое соединение, и использует данные адреса как удаленный и локальный для установления статического соединения. Если адреса не указаны, pppd использует удаленный и локальный адреса, предусмотренные по умолчанию. Локальный адрес по умолчанию — это IP-адрес локальной системы, указанный в файле /etc/hostname. Удаленный адрес по умолчанию программа пытается определить из перечня адресов, указанного в файле /etc/hosts. Для того чтобы pppd считала, что используются динамические адреса, определяемые при установлении соединения, применяется опция noipdefault и адреса не указываются. Таким образом, опция noipdefault дает команде pppd возможность не использовать адреса, предусмотренные по умолчанию. Поскольку адреса не указаны, pppd считает, что динамические адреса будут получены от удаленной системы.

Локальный и удаленный статические адреса вводятся в строке рядом через двоеточие, при этом локальный адрес указывается первым.
Если используется динамический удаленный адрес, можно указать только локальный адрес с двоеточием. Программа pppd использует этот локальный адрес, а удаленный адрес получает от системы провайдера.
Поскольку локальный адрес, указанный в файле /etc/hostname, — это ваш локальный адрес по умолчанию, вводить его в командной строке не нужно. Просто введите команду pppd без адресов. Программа использует указанный в hostname адрес как локальный, а удаленный адрес получит от удаленной системы.
Большинство провайдеров Internet, которые пользуются динамическими адресами, выдают своим клиентам и локальные, и удаленные адреса. В этом случае не нужно вводить вообще никаких адресов. Необходимо лишь установить опцию noifdefault. Она не позволит программе использовать указанный в файле hostname адрес в качестве локального адреса по умолчанию. При отсутствии обоих адресов программа pppd получит их от удаленной системы.
Наиболее эффективный способ использования программы chat — вызов chat-сценария. Для установления соединения chat должна получить всю необходимую информацию о нем: номер телефона, регистрационное приглашение, идентификатор пользователя, приглашение для ввода пароля, пароль и строку инициализации модема. Всю эту информацию можно ввести в командной строке после команды chat, однако в результате команда станет очень длинной и сложной. Более удобный способ — создать файл с необходимой для работы chat информацией, а затем указать в команде chat опцию -f и имя этого файла. Такие файлы называются chat-сценариями.
Chat-сценарий состоит из одной строки (line), разбитой на сегменты, соответствующие этапам процедуры соединения. Каждый сегмент состоит из строковой пары "ожидание-ответ". Первая часть пары — это то, что вы ожидаете получить, а вторая — то, что вы посылаете. Если получать нечего, то вводится пустое строковое значение: " ". Первый сегмент может быть строкой инициализации модема. Поскольку на первом этапе от модема никакой информации не поступает, то сегмент начинается пустым строковым значением. Затем указываются коды инициализации модема. При вводе кодов в строку инициализации необходимо все коды, начинающиеся со знака &, предварить обратной косой чертой, поскольку в chat знак & означает прерывание и приводит к остановке процесса. В приведенном ниже примере обратная косая черта стоит перед строковым значением &F2.

"" ATUF2V1L0

В следующем сегменте сначала ожидается положительный ответ от модема (ОК), что означает отсутствие проблем с инициализацией. Затем можно набирать номер телефона.

OK ATDP8600100

В ответ, как правило, приходит строка подтверждения соединения. В разных системах эти строки отличаются. Более того, строки подтверждения соединения может не быть вообще. Во многих системах строкой подтверждения соединения является слово CONNECT, в некоторых это скорость передачи в бодах и т.д. В ответ на строку подтверждения соединения, как правило, ничего не посылается, но может быть послан символ новой строки. Как уже говорилось, отсутствие ответа обозначается пустым строковым значением, т.е. двумя двойными кавычками (" "). Новая строка (line) в chat-сценарии обозначается комбинацией символов \n (некоторые удаленные системы требуют DOS-версии символа новой строки, которая представляет собой последовательность символа возврата каретки и символа перехода на нову строку, \r\n). В указанном примере в ответ посылается символ новой строки:

57600 \n

После строки соединения удаленная система обычно посылает регистрационное приглашение. Часто это слово "login" с двоеточием. Вам нужны только последние несколько символов, "ogin:". Не забывайте про двоеточие. В ответ нужно послать свой идентификатор пользователя. В зависимости от того, с каким провайдером Internet вы работаете, возможно, придется добавлять к идентификатору символ новой строки, например, stranger\n. Провайдер может потребовать включения и других символов — допустим, начального знака $.

ogin: stranger

После регистрационного имени следует ожидать получения приглашения ввести пароль. Опять-таки нужны только последние несколько символов. В ответ нужно сообщить свой пароль. При необходимости добавьте символ \n.

word: hipass

Все это помещается в одной строке. Теперь у вас есть последовательность слов, обозначающих осуществляемые попеременно прием и передачу текста.

"" AT\&F2V1L0 OK ATDP8600100 CONNECT \n login: stranger word: hipass

Если вам не нужно инициализировать модем, можете попробовать немного измененный вариант:
"" ATDP8600100 CONNECT \n login: stranger word: hipass

Если ваш провайдер не требует, чтобы при получении слова CONNECT указывался символ новой строки, вы можете опустить его:

"" ATDP8600100 login: stranger word: hipass

В chat-сценарии пары приема-передачи разрешается разбивать на отдельные строки, по одной паре на строку. Записи каждой пары разделяются пробелами или знаками табуляции. При желании можно все поместить в самую первую строку. Имя файла сценария имеет расширение .chat. В следующем примере показан сценарий my.chat, в котором пары введены в отдельных строках.

my.chat
"" AT\&F2V1L0
OK ATDP8600100
CONNECT\n
ogin: stranger
word: hipass

Этот сценарий можно вызывать командой chat с опцией -f. Программа chat использует представленную в этом сценарии информацию для инициализации модема, набора номера телефона удаленной системы и регистрации с указанием вашего идентификатора пользователя и пароля.
Многие удаленные системы в случае возникновения проблем в процессе установления соединения посылают сообщения об ошибках. Для выявления такого сообщения можно воспользоваться специальной строкой прерывания, ABORT, с ключевым словом, характеризующим состояние соединения. В случае, если соединение характеризуется таким состоянием, chat отменяет процедуру установления соединения. Если вы пользуетесь только командной строкой, то можно вводить эти специальные строки прерывания либо там, где они должны были бы появляться в процессе установления соединения, либо в самом начале. В примере, показанном ниже, строки прерывания находятся в начале. В этом примере перед выдачей регистрационного приглашения проверяется наличие ответа NO CARRIER или BUSY. В любом из этих случаев начальное соединение не устанавливается, и chat отменяет все остальные операции. Обратите внимание на то, что ответ NO CARRIER заключен в кавычки, поскольку в нем есть пробел.

ABORT 'NO CARRIER'
ABORT BUSY
"" AT\&F2V1L0
OK ATDP8600100
CONNEXCT\n
ogin: stranger
word: hipass
Обращение к программе chat можно встроить в вызов команды ррpd; chat устанавливает соединение, а затем pppd конфигурирует его.
Демон протокола РРР (pppd) вызывается с несколькими опциями. Bот его стандартный синтаксис:

pppd опции имя_устройства скорость локальный:удаленный_адреса опции_ррр

Имя_устройства — это имя устройства для модема. Скорее всего, это /dev/ttyS0 или похожий, с номером обычно от 0 до 3, соответствующим порту, к которому модем подключен. Порту 1 соответствует ttyS0, порту 2 — ttySl и т.д. Скорость — это скорость передачи данных в бодах (бит в секунду). Максимальную скорость передачи можно узнать у провайдера и/или из документации на модем.
Опции команды pppd позволяют задать параметры конфигурации — например, величину максимального передаваемого блока данных (MTU) и наличие динамического IP-адреса. Опция connect дает команде указание установить соединение. В качестве аргумента команда pppd использует Linux-команду, которая реализует это практически (как правило, ею является команда chat). В данном случае вводится имя демона pppd, затем опции connect, команда chat с опцией -f и, наконец, имя файла chat-сценария. Команда chat с опцией -f и именем chat-файла заключается в кавычки, чтобы отличить ее от других опций pppd. В примере показано, как пользователь вызывает pppd с командой chat, пользуясь сhat-сценарием my.chat. Модем подключен к /dev/ttyS0, а скорость передачи данных составляет 57,6k.

pppd connect 'chat -f my.chat' /dev/ttyS0 57600

Для разрыва РРР-соединения необходимо вызвать команду pppd c опцией disconnect. Можно использовать chat-сценарий для подачи модему команд на разрыв соединения (например, Н0):

# pppd disconnect 'chat -f off.chat'
Содержимое файла off.chat:
-\d+++\d\c OK
ATH0 OK

Чтобы упростить процедуру разъединения, можно поместить команду pppd в сценарий аналогично тому, как это было сделано для процедуры соединения.
На этом цикл размышлений на тему Linux в Сети можно считать закрытым.

Подготовил X-Stranger, linux@hitech.by


Компьютерная газета. Статья была опубликована в номере 07 за 2003 год в рубрике soft :: linux

©1997-2024 Компьютерная газета