От точки А до точки Б... или что такое РРР 4

От точки А до точки Б.... или что такое РРР

Эпилог, начало в №№ 35, 36, 38

Отладка

Причин, по которым ррр соединение не будет работать с первой попытки, - множество. Это и помехи в телефонной линии, и ошибки в файлах скриптов ppp-on, и отсутствие поддержки работы ррр операционной системой. Информацию о причинах сбоев или ошибок в работе ррр можно найти в файле /var/log/messages.

Прежде всего, если Вы откомпиллировали новый кернел с поддержкой ррр, следует удостовериться, что именно он загружен. Это можно проверить командой uname -a, которая выводит на экран версию кернела, дату и время его создания.

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

Проверьте, какую версию ррр Вы используете. РРР-2.2 поддерживается кернелом версий 2.0.х. Если у Вас старая версия операционной системы, обновите ее или используйте ранние версии рррd.

Напоминаю, что запуск ррр разрешен только системному администратору - пользователю root, и все файлы в своих атрибутах должны иметь настройки на определенную группу пользователей.

Если в log-файле Вы увидите сообщение: "serial line is not 8 bit clean...", это значит, что последовательный порт принимает информацию в неверном формате. Чтобы понять причину возможных неисправностей, попробуем разобраться в том, что происходит на нашей линии в момент установки соединения.

Когда стартует программа pppd, она отправляет пакеты протокола LCP (Link Control Protocol) удаленному компьютеру. Если pppd получает правильный ответ, она переходит к следующему этапу, уже используя пакеты IPCP - контрольные пакеты протокола IP, и только когда переговоры на языке этого протокола завершатся успешно, по каналу ррр начинается передача IP пакетов данных. Если на удаленном компьютере не запущен ррр сервер, пакеты LCPбудут им восприниматься как процедура входа в систему (login). Так как пакеты LCP 8-битные, а сервер будет отвечать в 7-битном ASCII формате, отсутствие восьмого бита будет вызывать ошибку.

При завершении работы chat-скрипта, он запускает программу pppd на Вашем компьютере. Но если этот скрипт не запустил режим ррр на удаленной машине, мы увидим ту же самую ошибку.

Случается, что запуск процесса ррр на удаленном сервере происходит медленно. По умолчанию в ОС Linux pppd настроен на отправку 10 LCP пакетов с запросом на установку соединения. Если он не получит ни одного "положительного" ответа на свои запросы, программа прекращает свою работу. Исправить ситуацию можно двумя способами: изменить параметр lcp-max-configure в файле ppp-options с 10 на 30 и тем самым увеличить количество отправляемых запросов и время ожидания установки соединения, или можно сделать так: можно было заметить при отладке канала связи вручную, что первым символом в потоке "мусора", который мы видели на экране после запуска ррр, является символ тильда - "~", зная это, можно добавить еще одну строку в chat скрипт: мы ожидаем символ "~" и отправляем "пустую строку":

\~ ''

Обратите внимание на то, что перед тильдой нужно поставить "обратный слэш", так как символ тильды имеет особое значение для командного интерпретатора Linux.

Использование сервисов Интернет при динамическом распределении IP адресов

Если свой IP адрес Вы получаете динамически (многие провайдеры именно таким образом выделяют адреса своим клиентам, в противном случае Вам пришлось бы платить за свое подключение к Интернет значительно больше), то Вы сразу почувствуете некоторые ограничения в использовании своего канала связи. Прежде всего, все, что касается загрузки информации извне, будет работать прекрасно. Вы можете отправлять почту (если Вы правильно настроили программу sendmail), загружать файлы с FTP серверов, использовать такие службы, как Gopher, WWW и Telnet. Вы даже имеете возможность отвечать на почтовые сообщения, когда Ваш компьютер отключен от сети и РРР канал "спит". Исходящая электронная почта будет находиться в очереди на отправку до момента установки связи с Вашим провайдером.

Так как Ваш компьютер не подключен к сети Интернет 24 часа в сутки, при каждом следующем подключении он получает новый, отличный от прежнего, IP адрес. Поэтому Ваш компьютер не сможет принимать электронную почту и Вы не сможете организовать Веб или FTP сервер для доступа к нему извне. Ваша машина не существует в сети как уникальная и постоянная единица с выделенным сетевым адресом и именем (адреса, выделяемые провайдером динамически, используются десятками и сотнями компьютеров).

Если Вы установите WWW или любой другой сервер, он будет неизвестен другим пользователям сети, если только Вы не свяжетесь со своими друзьями после подключения и не сообщите, что именно в данную минуту Вы подключены к сети и используете конкретный IP адрес. Только по этому цифровому адресу (доменного имени Ваша машина иметь не будет) другие пользователи смогут осуществлять доступ к Вашему компьютеру.

Для большинства пользователей это не является проблемой - их полностью устраивает возможность загружать информацию из сети и получать и отправлять электронную почту (используя адрес, предоставленный провайдером на его сервере). Чтобы организовать свой собственный WWW- или FTP-сервер с возможностью доступа к нему из сети Интернет, необходим постоянный, статический IP адрес для Вашего компьютера.

Но, даже располагая динамическим IP адресом при подключении к сети Интернет, можно настроить программу sendmail на своем компьютере для отправки электронной почты. Настройка этой программы - задача не из простых, описанию этого процесса посвящено руководство толщиной в тысячу страниц. Издательство O'Reilly and Associates выпустило настоящую "библию". Но в нашем случае, при использовании динамического IP адреса, необходимо всего лишь описать в настройках этой программы сервер Вашего провайдера как "smart relay host" (поле DS в файле настроек sendmail.cf).

Для того чтобы исходящая почта, накапливаемая в очереди, была автоматически отправлена после установления соединения с провайдером, в файл /etc/ppp/ip-up (его описание см. ниже) нужно добавить команду, вызывающую программу sendmail:

sendmail -q &

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

- Вам необходим реальный адрес электронной почты (pop account), зарегистрированный на сервере Вашего провайдера.

- Настройте свою почтовую программу (в поле "reply to:") на этот адрес. Если можно, постарайтесь указать этот же адрес в поле "From:".

- Настройте почтовую программу на прием почты с сервера Вашего провайдера.

Хотя Вы можете спокойно использовать DNS сервер своего провайдера, для ускорения работы и повышения производительности канала связи при частом обращении к одним и тем же удаленным серверам во время сеанса связи можно установить свой, кэширующий (secondary) DNS сервер. Настройка такого сервера (строка "forwarders" в файле named.boot, указывающая на сервер Вашего провайдера) довольно-таки проста и хорошо описана в DNS-HOWTO и книге "DNS and Bind" от O'Reilly.

Если Вы используете ррр-подключение для соединения с сетью Интернет своей локальной сети (например, с использованием IP Masquerade), настройка своего DNS сервера заметно ускорит работу в сети за счет сокращения траффика и задержек при получении ответов на запросы к серверу DNS. Только одно условие: сетевой этикет призывает Вас спросить разрешения у своего провайдера паред настройкой кэширующего DNS сервера, работающего в его домене. Правильно сконфигурированный, Ваш DNSсервер не вызовет никаких проблем, но если Вы допустите ошибку в его настройках, это сразу станет заметно.

Объединение двух локальных сетей с использованием РРР

Не существует принципиального различия между подключением одного компьютера с ОС Linux к РРР-серверу или объдинением двух сетей через ррр канал связи. РРР - это протокол, соединяющий два сетевых интерфейса (peer - to - peer). Для того чтобы соединить две сети, Вы должны использовать различные сетевые адресные пространства для обеих сетей (или разбить одну сеть на две подсети). Можно использовать только постоянные IP адреса (или IP Masquerade).

Определите адреса, которые будут использоваться каждой стороной для ррр-интерфейса. Отредактируйте соответствующие файлы /etc/ppp/options[.ttyXX] с настройками на конкретный модем и последовательный порт. Внесите необходимые изменения в файлы /etc/ppp/options или создайте файлы options.ttyXX для каждого порта.

Вам нужно превратить свой компьютер в маршрутизатор (роутер) для передачи пакетов между локальной сетью и внешним каналом ррр. Это делается в два этапа.

Прежде всего установите маршрут от компьютера, который обслуживает ррр канал, к сети (или сетям) на другом конце этого канала. Если этот канал - подключение к Интернет, то данный маршрут обеспечивается маршрутом по умолчанию (defaultroute), который устанавливает программа pppd.

Если ррр канал только соединяет друг с другом две локальные сети, необходимо описать специальный маршрут для каждой из этих сетей. Это выполняет команда route для каждой подсети в файле-скрипте /etc/ppp/ip-up.

И второе, нужно сообщить всем компьютерам своей локальной сети, что Ваш компьютер является "воротами" (gateway) во внешний мир, доступный через ррр канал связи.

Разумеется, системный администратор второй сети должен сделать все то же самое!

Если Вы подключаете свою локальную сеть к сети Интернет с использованием РРР или просто объединяете две локальные сети, Вам нужно обязательно подумать о мерах безопасности. Я настоятельно рекомендую установить программное обеспечение firewall!

Есть контакт! - скрипт /etc/ppp/ip-up

Как только связь по ррр каналу установлена, программа pppd ищет файл-скрипт /etc/ppp/ip-up. Если этот скрипт существует и является выполнимым, РРРD запускает его. Это позволяет автоматически вызывать команды, изменяющие таблицы маршрутизации и создающие новые маршруты, необходимые для поддержки работы локальной сети через ррр канал, а также автоматизировать вызов других сетевых функций.

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

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

- С технической точки зрения /etc/ppp/ip-up - это программа. Она может выполняться и должна содержать волшебную фразу #!/bin/bash в своей первой строке. Она должна быть доступна для чтения и запуска пользователю root.

При помощи этого скрипта можно управлять маршрутизацией пакетов между двумя локальными сетями, соединенными через ррр канал связи, вставив в этот скрипт команду, подобную этой:

/sbin/route add -net 192.168.126.0 gw 192.168.126.1

Если Ваш сервер обслуживает несколько ррр каналов, то следует внимательно настроить маршруты для каждого сетевого интерфейса. В этот скрипт можно вставить вызов программы sendmail для обработки корреспонденции, находящейся в очереди, и отправки этой корреспонденции:

/usr/sbin/sendmail -q &

При запуске программы /etc/ppp/ip-up ей передаются следующие параметры в виде аргументов:

$1 - наименование сетевого интерфейса, используемого для ррр (например, ррр3 или ррр0);

$2 - наименование устройства tty (последовательного порта);

$3 - скорость последовательного порта;

$4 - локальный IP адрес;

$5 - IP адрес удаленного компьютера;

$6 - параметр, описанный в поле "ipparam" файла options.

В программе /etc/ppp/ip-up можно использовать структуры "case" и, в зависимости от значения любого параметра, передаваемого этой программе при запуске, настраивать те или иные маршруты передачи пакетов данных или вызывать определенные программы (например, даже программу-клиент электронной почты, настроенную на прием почтовых сообщений с сервера Вашего провайдера).

Можно написать еще одну программу-скрипт, которая будет вызываться после отключения рpр канала. Этот файл называется:

/etc/ppp/ip-down

Он также может содержать команды, управляющие таблицами маршрутизации, вызовы программ и приложений.

Настройка РРР сервера

Все требования к параметрам компилляции кернела, описанные выше для настройки ррр-клиента, остаются в силе и в применении к ррр-серверу. Сервер требует включения возможности "IP forwarding" в ядро операционной системы. Для использования любого мультипортового контроллера нужно установить необходимые драйвера.

Нам понадобится следующее программное обеспечение:

- ОС Linux с ядром, скомпиллированным соответствующим образом, с набором необходимых функций;

- Соответствующая версия программы pppd;

- Программа "getty", которая поддерживает модемную связь. Можно использовать программу mgetty, которая может использовать pap/chap протоколы для идентификации пользователей и автоматически вызывать рррd;

- Сервер доменных имен (DNS),доступный для использования Вашими пользователями, либо Вам придется установить собственный.

Вот пример настроек, общих для всех последовательных портов:

asyncmap 0

netmask 255.255.255.0

proxyarp

lock

crtscts

modem

Мы не задаем конкретного маршрута для пакетов данных, в частности, мы не указываем параметр defaultroute, так как все, что требуется делать нашему серверу, - это передавать пакеты, полученные от ррр-клиентов во внешнюю сеть и перенаправлять пакеты, предназначенные ррр-клиентам на соответствующий последовательный порт. Все, что нужно для такой маршрутизации, - это параметр "proxyarp" для нашего pppd.

Но мы не можем использовать такую настройку, если мы связываем две локальные сети при помощи ррр канала. В этом случае необходимо добавить новые, сетевые маршруты в таблицы маршрутизации (route add -net...).

Каждому последовательному порту мы должны присвоить его собственный IP адрес. Для каждого последовательного порта создадим файлы /etc/ppp/options.ttyXX, и в каждый из них добавим строчку с адресом нашего сервера и адреса, выделенного для этого порта:

my_server:client_1

Можно использовать имена компьютеров, вместо цифровых адресов, - имена проще запоминаются.

Если наш сервер не запускает pppd автоматически, запуск этой программы для пользователей можно упростить, создав общий альяс (или псевдоним команды) в файле /etc/bashrc:

alias ppp="exec /usr/sbin/pppd -detach"

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

- Прежде всего зарегистрироваться и получить "золотой ключик" для входа - пользовательское имя и пароль;

- При помощи своего модема набрать номер телефона для соединения с нашим модемом;

- Войти в систему, сообщив свое имя и пароль;

- В окне шелла выполнить команду ррр, чтобы запустить программу pppd на сервере;

- Запустить РРР на своем компьютере (под управлением Windows, DOS, Linux, MAC OS - любой операционной системы).

...Вот и все. Цель достигнута, обычная телефонная линия связала две компьютерные системы (или две компьютерные сети).

Игорь Грень, gren@isir.minsk.by - титульная страница



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

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