Рейтинг@Mail.ru
[Войти] [Зарегистрироваться]

Наши друзья и партнеры

UnixForum


Lines Club

Ищем достойных соперников.




Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Next: Про этот документ Up: Linux Installation and Getting Previous: 5 The X Window Оглавление: Оглавление.

6 Работа в сети

 

В этой главе обсуждается работа в сетях: как конфигурировать подключение, как использовать протоколы TCP/IP, SLIP и PPP.

6.1 Работа в сетях с TCP/IP.

    

Linux полностью поддерживает протокол TCP/IP (Transport Control Protocol/Internet Protocol). Протокол TCP/IP оказался наиболее успешным средством объединения компьютеров всего мира в единую сеть. Имея компьютер с системой Linux и адаптер Ethernet, можно подключить компьютер к локальной сети или (при наличии соответствующего подключения сети) к сети Интернет, являющейся всемирной сетью с протоколом TCP/IP.

Собрать небольшую локальную сеть из компьютеров с системой UNIX просто. Каждому компьютеру потребуется адаптер Ethernet, а кроме этого соответствующие кабели и другое аппаратное обеспечение. Если же некоторая фирма или университет предоставляют доступ в Интернет, то компьютер с системой Linux может быть легко подключен к этой сети.

     Современная реализация протокола TCP/IP и связанных с ним протоколов для системы Linux называется ``NET-3'', ей предшествовала ``NET-2''. Это не имеет никакого отношения к так называемой версии NET-2 системы BSD UNIX; в действительности, ``NET-3'' в этом контексте означает вторую реализацию протокола TCP/IP для системы Linux.

      Реализация NET-3 для системы Linux также поддерживает протоколы SLIP (Serial Line Internet Protocol: протокол последовательного подключения к Интернету) и PPP (Point-to-Point Protocol: протокол "точка-точка"). Протоколы SLIP и PPP позволяют подключаться к Интернету по телефонным линиям с помощью модема. Если соответствующая фирма или университет предоставляет доступ с помощью протокола SLIP или PPP, то нужно лишь дозвониться до SLIP или PPP-сервера. Если же компьютер имеет доступ в Интернет через адаптер Ethernet, то компьютер можно превратить в SLIP или PPP-сервер.

Полная информация о работе с протоколом TCP/IP в системе Linux может быть найдена в Практическом руководстве по использованию NET-3 в системе Linux (NET-3 HOWTO). Этот документ можно скопировать с анонимного доступа FTP к сайту sunsite.unc.edu. Документ NET-3 HOWTO является полным руководством к конфигурированию сетей с протоколом TCP/IP; в нем, в том числе, описываются подключения Ethernet, SLIP и PPP в системе Linux. Практическое руководство по использованию подключения Ethernet в системе Linux (Ethernet HOWTO) родственный ему документ; в нем описываются конфигурации различных драйверов для адаптеров Ethernet в системе Linux. Также имеется документ Linux Network Administrator's Guide (Руководство администратора сети в Linux), разработанный в рамках проекта Linux Documentation Project. Более подробно эти документы описаны в приложении A.

Интересна будет также книга Крейга Ханта (Craig Hunt) под названием TCP/IP Network Administration (администрирование в сети TCP/IP). В этой книге имеется полная информация по использованию и конфигурированию протокола TCP/IP в системе Linux.

Требования к аппаратуре для работы в сети TCP/IP.

  В системе Linux можно использовать протокол TCP/IP без каких-либо сетевых устройств, поскольку конфигурирование режима работы с сетевой "заглушкой" (loopback) позволяют вести диалог с самим собой. Это необходимо для некоторых программ и игр, в которых используется "заглушка".

     Однако если предполагается использование системы Linux в сети с протоколом TCP/IP и подключением Ethernet, то адаптер Ethernet потребуется. В системе Linux имеется поддержка распространенных адаптеров Ethernet, таких, как 3com 3c503, HP PCLAN (серии 27245 и 27xxx), Western Digital WD80x3, Novell NE2000/NE1000 и многих других. Подробности можно найти в практических руководствах по адаптерам Ethernet и по аппаратному обеспечению в системе Linux (Linux Ethernet HOWTO, Linux Hardware HOWTO).

Нужно иметь в виду, что для некоторых карт поддержка пусть формально и имеется, но производительность оказывается невысокой, или присутствуют другие ограничения. Примерами могут служить адаптер 3Com 3C501, который работает, но с очень низкой производительностью, и адаптер Racal-Interlan NI6510 с микросхемой am7990, который не работает, если оперативная память превышает 16 MB. Также многие адаптеры являются клонами, совместимыми с NE1000/NE2000, и могут быть причиной различных проблем. Более полное обсуждение вопроса о совместимости сетевого оборудования в системе Linux можно найти в документе Linux Ethernet HOWTO.

Linux также поддерживает протоколы SLIP и PPP, что позволяет заходить в Интернет через телефонные линии с помощью модема. В данном случае модем должен быть совместимым со SLIP или PPP-сервером: большинство серверов требуют как минимум модема со скоростью обмена 14.4bps и протоколом V.32bis. Производительность резко повышается при использовании модема со скоростью обмена 33.6bps и выше.

6.1.1 Конфигурирование TCP/IP.

  В этом разделе обсуждается конфигурирование подключения к сети Ethernet с протоколом TCP/IP. Следует отметить, что этот метод будет работать для большинства компьютеров и вариантов системы Linux, но определенно не для всех. Обсуждение будет достаточным для того, чтобы указать верный путь к успешному конфигурированию подключения, но на этом пути имеется множество опасностей и тонких деталей, которые здесь не оговариваются. Более полная информация может быть найдена в документах Linux Network Administrators' Guide и NET-3-HOWTO.

Во-первых, предполагается, что на компьютере с Linux установлено программное обеспечение TCP/IP. Это обеспечение включает основные клиентские программы, такие как telnet и ftp, команды для системного администрирования, например, ifconfig и route (обычно эти файлы находятся в каталоге /etc), конфигурационные файлы (например, /etc/hosts). Если сетевое программное обеспечение еще не установлено, то сделать это помогут упомянутые выше документы по Linux.

Также предполагается, что ядро системы конфигурировано и откомпилировано так, что в нем имеется поддержка TCP/IP. Процедура компиляции ядра описывается в разделе 4.9. Для того, чтобы задать опцию, соответствующую работе в сетях, надо ответить ``yes'' на соответствующие вопросы на этапе make config и собрать ядро заново.

После того, как это будет сделано, нужно поменять несколько файлов, которые используются системой NET-3. По сути это простая процедура. К сожалению, разные дистрибутивы системы Linux помещают конфигурационные файлы и программы поддержки протокола TCP/IP в разные каталоги. Как правило, в каталог /etc, иногда в каталоги /etc, /usr/etc, /usr/etc/inet или другие странные каталоги. В наихудшем случае придется воспользоваться командой find, чтобы найти эти файлы. Следует помнить также, что не все дистрибутивы помещают конфигурационные файлы и программы NET-3 в одно и то же место; напротив, они могут быть рассеяны по разным каталогам.

Следующая информация касается прежде всего подключения Ethernet. Если планируется использовать протоколы SLIP или PPP, то этот раздел следует прочитать, чтобы узнать основные понятия, а при использовании руководствоваться последующими разделами.

Ваши параметры сети.

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

      
  • IP-адрес. Это уникальный адрес компьютера в формате четырех трехзначных десятичных чисел, разделенных точками, например, 128.253.153.54. Этот набор чисел должен предоставить системный администратор.

    Если конфигурируется только режим работы с "заглушкой" (которая вообще-то называется закольцовывающим интерфейсом, loopback mode, т.е. когда нет подключения SLIP и нет адаптера Ethernet, а только моделируется подключение TCP/IP компьютера к самому себе, то IP-адресом будет 127.0.0.1.

      

  • Маска подсети (``netmask''). Формат маски аналогичен формату IP-адреса. Маска определяет, какая часть IP-адреса соответствует номеру локальной подсети (subnetwork number), а какая номеру компьютера в сети. Маска представляет собой битовый шаблон. При наложении этого шаблона на адрес компьютера (хоста) можно узнать номер того участка сети, к которому относится этот адрес. Это очень важно для рассылки сообщений, поэтому если вдруг окажется, например, что можно установить связь с кем-либо вне локальной сети, а внутри сети такая связь не устанавливается, то может оказаться, что маска указана неверно.

    Маска выбиралась администратором сети при ее проектировании, поэтому он должен ее точно знать. Большинство локальных сетей имеют класс C и используют маску 255.255.255.0. Сети класса B имеют маску 255.255.0.0. Программа NET-3 выбирает маску автоматически, предполагая по умолчанию, что подсети отсутствуют, если они не указаны.

    То же относится и к адресу "заглушки". Поскольку адрес в этом случае всегда 127.0.0.1, то и маска всегда 255.0.0.0. Это можно указать явно или положиться на маску, даваемую по умолчанию.

      

  • Адрес сети (network address). Этот адрес является результатом побитовой операции AND двух аргументов: IP-адреса компьютера и маски подсети. Например, если маска имеет вид 255.255.255.0, IP-адрес равняется 128.253.154.32, то адрес сети будет 128.253.154.0. Если маска равняется 255.255.0.0, то адрес сети будет равняться 128.253.0.0.

    При использовании только loopback сетевой адрес отсутствует.

      

  • Широковещательный адрес (broadcast address). Этот адрес используется для трансляции пакетов сообщений по всем компьютерам, объединенным в подсеть. Следовательно, если IP-адрес компьютера в сети определяется последним байтом (иными словами, если маска равна 255.255.255.0), то широковещательный адрес является результатом побитовой операции OR выражения 0.0.0.255 с IP-адресом Вашего компьютера.

    Например, если IP-адрес компьютера 128.253.154.32, а маска 255.255.255.0, то широковещательный адрес будет равен 128.253.154.255.

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

    При использовании только loopback широковещательный адрес отсутствует.

      

  • Адрес шлюза (gateway address). Это адрес компьютера, который действительно является ``шлюзом'' во внешний мир (т.е. к компьютерам вне локальной сети). Во многих случаях адрес шлюза получается из IP-адреса компьютера заменой последних групп цифр на .1. Например, если IP-адрес компьютера равняется 128.253.154.32, то адрес шлюза может иметь значение 128.253.154.1. Это значение может также сообщить системный администратор.

    Реально шлюзов может быть несколько. В действительности шлюз это компьютер, который находится в двух различных сетях (т.е. имеет IP-адреса в различных подсетях). Шлюз занимается тем, что пересылает пакеты сообщений между этими двумя сетями. Многие сети имеют единственный шлюз во внешний мир (который представляет собой непосредственно примыкающую сеть). Однако в некоторых случаях к локальной сети примыкает несколько других сетей, и для каждой из них имеется свой шлюз.

    При использовании только loopback адрес шлюза отсутствует. То же верно и в случае, когда локальная сеть изолирована от всех остальных.

      

  • Адрес сервера имен в сети (name server address). У большинства компьютеров в сети имеется сервер, который преобразует имя компьютера в IP-адрес. Адрес этого сервера должен сообщить администратор сети. Такой сервер можно также запустить на собственном компьютере (программа называется named); в этом случае адрес сервера имен в сети равняется 127.0.0.1. Кроме тех случаев, когда абсолютно необходимо иметь собственный сервер имен, лучше воспользоваться тем, который имеется (если имеется). Совершенно отдельный вопрос конфигурирование программы named. Сейчас он рассматриваться не будет, поскольку цель данного раздела дать возможность приступить к работе в сети. Вопросы, касающиеся имен в сети, будут рассмотрены позднее.

    При использовании только loopback адрес сервера имен отсутствует.

Пользователям SLIP/PPP информация, приведенная выше (кроме адреса сервера имен), может не требоваться. При подключении SLIP клиентский IP-адрес определяется либо статически, когда при каждом новом соединении клиенту дается один и тот же IP-адрес, либо динамически, когда адрес в момент соединения выбирается из некоторого множества свободных IP-адресов сервера. В последующих разделах конфигурирование подключения SLIP будет обсуждаться более подробно.

В реализации NET-3 заложена полная маршрутизация (full routing), поддерживаются множественные маршруты и подсети (последние на данный момент только по границам байта), и тому подобное. Приведенное выше иллюстрирует только принципиальные основы построения сетей TCP/IP. Конкретная сеть может обладать рядом особенностей; выяснить их можно у администратора сети. Также полезно будет почитать экранную документацию к программам route и ifconfig. Конфигурирование сетей TCP/IP лежит далеко за пределами темы данной книги, однако приведенное рассмотрение должно дать достаточно информации, чтобы пользователь смог выяснить остальное самостоятельно.

Файлы rc для работы в сетях.

     Файлы rc являются конфигурационными скриптами системы. Эти файлы выполняются скриптом init, который запускается при загрузке системы и в свою очередь запускает основные демоны системы (такие как sendmail, cron и т.д.) и конфигурирует параметры сети, устанавливает имя компьютера и т.п. Обычно файлы rc находятся в каталоге /etc/rc.d, однако в некоторых версиях их помещают в каталог /etc. Дистрибутивы Slackware используют файлы rc.inet1 и т.д. в каталоге /etc/rc.d, а дистрибутивы RedHat и другие используют набор каталогов.

       Далее будут описываться файлы rc, с помощью которых конфигурируется программное обеспечение протокола TCP/IP. Таких файлов два: rc.inet1 и rc.inet2. Файл rc.inet1 служит для конфигурирования основных параметров сети (например, устанавливает IP-адрес и информацию о маршрутах), а файл rc.inet2 запускает демоны TCP/IP (telnetd, ftpd и т.д.).

      Во многих версиях системы эти два файла объединяются в один, называемый rc.inet или rc.net. Имя rc-файла не имеет значения; важно, чтобы он правильно исполнял свои функции и запускался во время загрузки скриптом init. Последнее обеспечивается соответствующими строками в файле /etc/inittab (при необходимости этот файл нужно отредактировать, раскомментировав строчки, относящиеся к нужным rc-файлам). В худшем случае пользователю придется создавать самому файлы rc.inet1 и rc.inet2 и добавить запускающие их строчки в файл /etc/inittab.

Как уже говорилось выше, файл rc.inet1 производит основное конфигурирование сетевого интерфейса. Сюда входит задание IP-адреса компьютера и информации о таблице маршрутов сети. Таблицы маршрутов используются для того, чтобы направлять входящие в сеть и выходящие из сети датаграммы (datagrams). В самом простом случае имеется всего три маршрута: один для пакетов, посылаемых на данный компьютер, второй на другие компьютеры в той же сети, и третий на компьютеры вне локальной сети (через шлюз). Для конфигурирования этих параметров используются две программы: ifconfig и route. Обе программы обычно находятся в каталоге /etc.

      Программа ifconfig используется для конфигурирования интерфейса сетевых устройств. При этом задаются такие параметры, как IP-адрес, маска, широковещательный адрес и т.п. Программа route используется для создания и изменения элементов в таблице маршрутов.

   Для большинства конфигураций файл rc.inet1 может выглядеть примерно следующим образом. Этот пример, разумеется, следует приспособить к конкретному компьютеру и не использовать те IP-адреса, которые указаны в этом примере (они соответствуют некоторым конкретным компьютерам в сети Интернет).


#!/bin/sh
# Это пример файла /etc/rc.d/rc.inet1 - конфигурирование
#     интерфейсов TCP/IP

# Сначала конфигурируем loopback

HOSTNAME=`host name`

/etc/ifconfig lo 127.0.0.1      # используется маска по умолчанию 255.0.0.0
/etc/route add 127.0.0.1        # маршрут к loopback

# Теперь конфигурируем устройства Ethernet. Если используются только
# loopback и/или SLIP, закомментируйте остальные строки.

# Измените на значения для своего компьютера
IPADDR="128.253.154.32"         # ЗАМЕНИТЕ на ВАШ IP-адрес
NETMASK="255.255.255.0"         # ЗАМЕНИТЕ на ВАШУ маску
NETWORK="128.253.154.0"         # ЗАМЕНИТЕ на адрес ВАШЕЙ сети
BROADCAST="128.253.154.255"     # ЗАМЕНИТЕ на широковещательный
                                # адрес ВАШЕЙ сети, если он есть.
                                # Если нет, оставьте свободное
                                # место и продолжайте редактировать дальше.
GATEWAY="128.253.154.1"         # ЗАМЕНИТЕ на адрес ВАШЕГО шлюза

/etc/ifconfig eth0 ${IPADDR} netmask ${NETMASK} broadcast ${BROADCAST}

# Если у вас нет широковещательного адреса, то замените
# предыдущую строчку на следующую:
# /etc/ifconfig eth0 ${IPADDR} netmask ${NETMASK}

/etc/route add ${NETWORK}

# Следующая строчка нужна только в случае, если есть шлюз
# (т.е. сеть связана с внешним миром)
/etc/route add default gw ${GATEWAY} metric 1

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

     Файл rc.inet2 запускает различные серверы, входящие в обеспечение протокола TCP/IP. Наиболее важным из них является сервер inetd. Этот сервер находится в фоновом режиме и наблюдает за работой сетевых портов. Когда к компьютеру пытаются обратиться через какой-либо порт (например, на этот порт приходит команда telnet), сервер inetd создает для этого порта копию соответствующего демона (в случае прихода команды telnet это будет демон in.telnetd). Это оказывается проще, чем иметь сразу несколько отдельных работающих демонов (т.е. отдельных копий telnetd, ftpd и т.д.). В принятой схеме они запускаются по мере надобности программой inetd.

      Syslogd демон протоколирования системы. Он собирает сообщения о работе от разных программ и складывает их в файлы протоколов согласно конфигурации, содержащейся в файле /etc/syslogd.conf. Функции сервера routed поддерживать динамическую информацию о маршрутах. Если компьютер пытается послать пакеты сообщений на другую сеть, то для этого ему могут потребоваться дополнительные данные в таблице маршрутов. Заботы о действиях с таблицей маршрутов берет на себя сервер routed, и пользователь может не вмешиваться в этот процесс.

   В приведенном ниже примере файл rc.inet2 запускает лишь необходимый минимум серверов. Помимо указанных, существует еще много других серверов, и многие из них относятся к конфигурированию NFS. Однако при попытке конфигурировать программное обеспечение протокола TCP/IP лучше всего начинать с минимальной конфигурации, а более сложные элементы (такие, как NFS) добавлять, когда часть программ уже работает.

Также отметим, что в приведенном ниже файле предполагается, что демоны работы в сетях располагаются в каталоге /etc. Разумеется, для конкретной конфигурации этот файл может быть отредактирован.


#!/bin/sh
# Пример файла /etc/rc.d/rc.inet2

# Запуск демона syslogd
if [ -f /etc/syslogd ] then
   /etc/syslogd
fi

# Запуск сервера inetd
if [ -f /etc/inetd ] then
   /etc/inetd
fi

# Запуск сервера routed
if [ -f /etc/routed ] then
   /etc/routed -q
fi

   Среди дополнительных серверов, которые могут быть запущены скриптом rc.inet2, имеется сервер named. Это сервер имен в сети, и его функция состоит в том, чтобы преобразовывать (локальные) IP-адреса в имена компьютеров и обратно. Если в сети нет другого сервера имен или если требуется дать (локальные) имена другим компьютерам того же домена, можно воспользоваться этим сервером (однако для большинства конфигураций это оказывается ненужным). Конфигурирование сервера named является довольно сложным и требует предварительного планирования; тем, кому это интересно, можно порекомендовать обратиться к книгам по администрированию сетей TCP/IP.

Файл /etc/hosts.

   Файл /etc/hosts содержит список IP-адресов и соответствующих им имен компьютеров. Как правило, файл /etc/hosts содержит информацию только о данном компьютере и, возможно, о других важных компьютерах (таких, как сервер имен или шлюз). Для других компьютеров в локальной сети преобразования IP-адресов в имена и обратно будет обеспечиваться локальным сервером имен в сети.

Например, если имя компьютера loomer.vpizza.com, а IP-адрес 128.253.154.32, то файл /etc/hosts на этом компьютере может выглядеть так:


127.0.0.1               localhost
128.253.154.32          loomer.vpizza.com loomer

Если используется только loopback, то единственная строка в файле /etc/hosts должна начинаться с чисел 127.0.0.1, за которыми должны следовать localhost и затем имя компьютера (прим. переводчика: так должно быть вообще в любой конфигурации: дело в том, что если loopback будет первым в этом файл, системе не надо будет просматривать остальные строки).

Файл /etc/networks.

   Файл /etc/networks содержит список имен и адресов как собственной сети, так и других сетей. Этот список используется командой route и дает возможность (при желании) для обозначения сетей использовать имена, а не адреса.

  Каждая сеть, к которой предполагается создать отдельный маршрут командой route (обычно вызываемой скриптом rc.inet1), должна иметь соответствующую строку в файле /etc/networks.

Приведем пример:


default      0.0.0.0         # маршрут по умолчанию - обязателен
loopnet      127.0.0.0       # сеть для loopback - обязательна
mynet        128.253.154.0   # ИЗМЕНИТЕ на адрес ВАШЕЙ сети

Файл /etc/host.conf.

   В этом файле определяется, как в системе будут разрешаться имена компьютеров. В нем должны содержаться две строки:


order hosts,bind
multi on

Эти строки сообщают соответствующим процедурам, что сначала все имена должны искаться в файле /etc/hosts, а затем делается обращение к серверу имен (если он есть). Строка, начинающаяся с multi, позволяет в файле /etc/hosts для данного компьютера иметь несколько IP-адресов.

Файл /etc/resolv.conf.

     В этом файле содержится конфигурация для программы разрешения имен. Здесь задается имя сервера имен (если таковой имеется) и имя домена. Имя домена получается, если из полного имени компьютера (например, для компьютера, зарегистрированного в сети Интернет) вычеркнуть имя компьютера (хоста). Например, если полное имя выглядит как loomer.vpizza.com, именем домена будет vpizza.com.

Пусть, например, имя компьютера goober.norelco.com, а сервер имен для него имеет IP-адрес, равный 128.253.154.5. Тогда файл /etc/resolv.conf может выглядеть так:


domain      norelco.com
nameserver  127.253.154.5

Можно указать и несколько серверов имен, тогда для каждого из них в файле /etc/resolv.conf будет строка, начинающаяся с nameserver.

Установка имени хоста.

   Имя компьютера устанавливается командой hostname. Она обычно вызывается из скрипта /etc/rc или /etc/rc.local; чтобы определить, где именно, надо просто просмотреть содержимое этих файлов и найти ее имя. Например, если (полное) имя компьютера должно быть loomer.vpizza.com, то надо отредактировать соответствующий rc-файл и вставить туда строку


/bin/hostname loomer.vpizza.com

Отметим, что исполняемый файл с именем hostname может и не присутствовать в каталоге /bin.

Проверка работоспособности.

  После того, как все сконфигурировано, можно попробовать перезагрузить систему с новым ядром и попытаться использовать сеть. Неисправность может случиться во многих местах, так что разумно будет проверять правильность конфигурации сети по частям. К примеру, не следует начинать проверку работы сети с запуска программы Mosaic через сетевые функции системы X.

   Для вывода на экран таблиц маршрутов можно использовать программу netstat. Именно эти таблицы являются наиболее частым источником неполадок. Точный синтаксис команды netstat подскажет man-страница. Для проверки подключения к сети мы предлагаем использовать клиентские программы, такие, как telnet, и попытаться подключится к компьютерам как в своей локальной (под)сети, так и за ее пределами. Такой подход сузит область поиска возможных неполадок. Например, если не удается соединиться с компьютерами в своей сети, но соединение с компьютерами вне этой сети устанавливается, то скорее всего ошибка связана с маской и с конфигурированием таблицы маршрутов. Для непосредственной работы с содержимым таблиц маршрутов можно вызвать (как пользователь root) команду route для работы с записями в Вашей таблице маршрутизации.

Можно также проверить соединение через сеть путем указания точного IP-адреса вместо обращения по имени. Например, если не работает команда


telnet shoop.vpizza.com

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

Поиск ошибок в конфигурировании сети может оказаться трудной задачей, и она не может быть здесь освещена целиком. Если у вас под рукой нет специалиста, который помог бы вам, мы предлагаем обратиться к книге Linux Network Administrators' Guide, выполненной в рамках проекта Linux Documentation Project.

6.1.2 Настройка SLIP.

      Протокол SLIP (Serial Line Internet Protocol) позволяет использовать протокол TCP/IP при подключении через последовательный порт. К этому порту может быть подключен либо модем, либо выделенная асинхронная телефонная линия (leased asynchronous line) какого-либо вида. Разумеется, при таком подключении требуется близко расположенный SLIP-сервер с соответствующими телефонными номерами. Многие университеты и коммерческие организации предоставляют доступ к SLIP-серверу за умеренную плату.

   В настоящий момент имеется две основные программы, работающие с протоколом SLIP: dip и slattach. Обе программы предназначены для того, чтобы установить соединение SLIP через последовательное устройство. Для осуществления соединения SLIP необходимо воспользоваться одной из этих программ; просто позвонив на номер сервера одной из коммуникационных программ (например, kermit) и выполнив команды ifconfig и route, того же результата достичь не удастся. Дело в том, что программы dip и slattach выдают специальное обращение обращение ioctl() к системе, которое перехватывает управление последовательным устройством и начинает использовать его как интерфейс SLIP.

Программа dip может позвонить на номер SLIP-сервера, произвести необходимый диалог для входа в систему (например, ввести по приглашению имя пользователя и пароль) и инициализировать подключение SLIP через открытый последовательный порт. Напротив, программа slattach не делает почти ничего помимо захвата последовательного устройства для использования его для подключения SLIP. Она полезна в случае, если имеется постоянное соединение со SLIP-сервером через выделенную телефонную линию, и для установления связи не надо звонить на сервер, вводить пароль и т.п. Большинству пользователей, работающих с протоколом SLIP, нужнее оказывается программа dip.

Программа dip может быть использована также для конфигурирования системы Linux в качестве SLIP-сервера. При этом другие компьютеры могут звонить на данный компьютер и подключаться к сети через вторичное подключение Ethernet (secondary Ethernet connection). Для более полной информации об этом следует обратиться к соответствующим документам и man-документации к dip.

      Подключение SLIP кардинально отличается от подключения Ethernet тем, что в "сети" присутствует всего два компьютера: SLIP-клиент (ваш компьютер) и SLIP-сервер. По этой причине соединение SLIP часто называется соединением "точка-точка" (point-to-point connection). Обобщение этой идеи под названием "протокол PPP" (Point to Point Protocol) также реализовано в системе Linux.

При инициализации подключения к SLIP-серверу последний дает клиенту IP-адрес. При выборе адреса используется два основных метода. Некоторые SLIP-серверы дают статические IP-адреса, так что один и тот же клиент будет всякий раз при подключении получать один и тот же адрес. Однако многие SLIP-серверы дают динамические IP-адреса, которые могут быть новыми при каждом новом подключении. Как правило SLIP-сервер при соединении сообщает клиенту его IP-адрес и IP-адрес шлюза. Программа dip может прочесть эти данные, сообщаемые сервером при входе в систему, и использовать их затем при конфигурировании устройств SLIP.

По сути настройка SLIP напоминает настройку сетевой заглушки или адаптера Ethernet. Основные отличия обсуждаются ниже. Для ознакомления надо прочесть предыдущий раздел, посвященный конфигурированию основных файлов, относящихся к протоколу TCP/IP, и затем прочесть про отличия в данном разделе.

Соединение SLIP программой dip со статическими IP-адресами.

      Если SLIP-сервер дает статические IP-адреса, их можно вписать в файл /etc/hosts. Можно также конфигурировать файлы, упомянутые в предыдущих разделах: rc.inet2, host.conf и resolv.conf.

Также можно сконфигурировать файл rc.inet1 как описано выше. Для сетевой заглушки (вырожденной сети) надо выполнить только программы ifconfig и route. При использовании программы dip она сама выполнит команды ifconfig и route для устройства SLIP. Однако если используется программа slattach, то команды ifconfig/route надо будет включить в файл rc.inet1 для устройства SLIP (см. ниже).

Во время соединения программа dip должна конфигурировать должным образом таблицы маршрутов (routing tables) для устройства SLIP. Однако для некоторых конфигураций поведение программы dip может оказаться неправильным, и после того, как программа dip произведет соединение с сервером, придется выполнять команды ifconfig и route вручную. Проще всего это сделать из скрипта командной оболочки, который запускается из программы dip и немедленно исполняет соответствующие команды конфигурирования. В большинстве случаев адрес шлюза совпадает с адресом SLIP-сервера. Этот адрес может быть известен заранее; кроме того, этот адрес будет выдан на экран SLIP-сервером при соединении. Диалоговый скрипт программы dip (см. ниже) может воспринимать и использовать эту информацию.

Если программа dip сконфигурировала интерфейс неправильно, то программа ifconfig может затребовать значение аргумента pointopoint. Например, если адрес SLIP-сервера равен 128.253.154.2, а IP-адрес клиента 128.253.154.32, то может потребоваться войти в систему как root и после соединения с помощью программы dip выполнить команду


ifconfig sl0 128.253.154.32 pointopoint 128.253.154.2

При выяснении деталей может оказаться полезной man-документация к команде ifconfig.

   Следует напомнить, что используемые командами ifconfig и route имена устройств имеют вид sl0, sl1 и т.д., в отличие от устройств Ethernet, называемых eth0, eth1 и т.д.

В разделе 6.1.2, ниже, будет объяснено, как конфигурировать программу dip для соединения со SLIP-сервером.

Соединение SLIP программой slattach со статическими IP-адресами.

     При наличии выделенной телефонной линии (или кабеля), ведущей непосредственно к SLIP-серверу, нет необходимости использовать программу dip для инициализации соединения. Вместо нее для конфигурирования устройств SLIP может использоваться программа slattach.

В этом случае файл /etc/rc.inet1 должен выглядеть примерно так:


#!/bin/sh
IPADDR="128.253.154.32"   # ЗАМЕНИТЕ на ВАШ IP-адрес
REMADDR="128.253.154.2"   # ЗАМЕНИТЕ на адрес ВАШЕГО SLIP-сервера

# Замените данные в следующих строках на параметры ваших
# последовательных устройств, используемых для соединения SLIP
slattach -p cslip -s 19200 /dev/ttyS0
/etc/ifconfig sl0 $IPADDR pointopoint $REMADDR up
/etc/route add default gw $REMADDR

slattach размещает первое свободное устройство SLIP (sl0, sl1 и т.д.) на указанную последовательную линию.

Первым параметром программы slattach является тип используемого протокола SLIP. На настоящее время такими могут быть slip и cslip. Первый из них обычный протокол SLIP, а второй протокол SLIP со сжатием заголовка датаграммы (datagram header compression). В большинстве случаев нужно использовать cslip; однако если возникают проблемы, можно попробовать slip.

Если имеется более одного интерфейса SLIP, то надо создать некоторый принцип маршрутизации (routing considerations). Надо будет решить, какие нужно создать маршруты; такие решения принимаются только на основе знаний о конкретной структуре сети и подключений. При этом большую помощь окажет книга по конфигурированию сетей TCP/IP, а также man-страница по программе route.

Соединение SLIP программой dip с динамическими IP-адресами.

     Если SLIP-сервер назначает IP-адреса динамически, то никогда нельзя знать IP-адрес компьютера заранее. Следовательно, включать соответствующую запись в файл /etc/hosts нельзя (при этом IP-адрес для loopback 127.0.0.1 должен присутствовать).

Многие SLIP-серверы выдают IP-адрес, выданный клиенту (а также собственный), во время соединения. Например, некоторые типы SLIP-серверов выводят такие сообщения:


Your IP address is 128.253.154.44.
Server address is 128.253.154.2.

Программа dip может перехватить эти цифры из выдачи сервера и использовать их для конфигурирования устройств SLIP.

Информация по составлению файлов конфигурации протокола TCP/IP для использования протоколом SLIP дана выше в разделе 6.1.2. Далее описывается конфигурирование программы dip для соединения со SLIP-сервером.

Использование dip.

 

   dip заметно упрощает процесс подключения к SLIP-серверу, входа в систему и конфигурирования устройств SLIP. Программа dip будет весьма полезна кроме, может быть, случаев, когда для подключения к SLIP-серверу используется выделенная телефонная линия (leased line).

  Для использования программы dip требуется написать диалоговый скрипт (chat script). В этом скрипте будет содержаться список команд, с помощью которых будет осуществляться диалог со SLIP-сервером во время входа в систему. Эти команды могут автоматически посылать на сервер имя пользователя и пароль, а также получить от сервера информацию о вашем IP-адресе.

Ниже дается пример диалогового скрипта программы dip для работы с сервером с динамическими IP-адресами. Для серверов со статическими адресами надо будет в начале скрипта установить значения переменных $local и $remote, равных соответственно вашему (local) IP-адресу и IP-адресу сервера. Подробно об этом написано в man-документации к dip.


main:
  # Установка максимального размера передаваемого блока
  # (Maximum Transfer Unit). Это максимальный размер пакета,
  # передаваемого через устройство SLIP device. Многие
  # SLIP-серверы используют либо 1500 либо 1006; при сомнениях
  # следует спросить администратора сети.
  get $mtu 1500

  # Установить маршрут SLIP как маршрут по умолчанию
  default

  # Установить нужный последовательный порт и скорость передачи
  port cua03
  speed 38400

  # Выполнить начальную установку модема и терминальной линии.
  # Если эта команда создает проблемы, закомментируйте ее.
  reset

  # Подготовка к набору номера. Подставьте в следующей строке
  # инициализационную команду (initialization string) для
  # вашего модема.
  send ATT&C1&D2\\N3&Q5%M3%C1N1W1L1S48=7\r
  wait OK 2
  if $errlvl != 0 goto error

  # Набираем номер SLIP-сервера
  dial 2546000
  if $errlvl != 0 goto error
  wait CONNECT 60
  if $errlvl != 0 goto error

  # Связь установлена. Входим в систему.
login:
  sleep 3
  send \r\n\r\n

  # Ждем приглашения в систему
  wait login: 10
  if $errlvl != 0 goto error

  # Посылаем имя пользователя
  send USERNAME\n

  # Ждем приглашения ввести пароль
  wait ord: 5
  if $errlvl != 0 goto error

  # Посылаем пароль
  send PASSWORD\n

  # Ждем сигнала готовности SLIP-сервера
  wait annex: 30
  if $errlvl != 0 goto error

  # Посылаем команды SLIP-серверу для инициализации соединения
  send slip\n
  wait Annex 30

  # Получаем значение IP-адреса SLIP-сервера. Команда
  # "get...remote" читает текст в формате xxx.xxx.xxx.xxx,
  # и присваивает его переменной, указанной вторым аргументом
  # (в данном случае переменной $remote).
  get $remote remote
  if $errlvl != 0 goto error
  wait Your 30

  # Получаем значение своего IP-адреса от SLIP-сервера и
  # присваиваем его переменной $local.
  get $local remote
  if $errlvl != 0 goto error

  # Запускаем связь через соединение SLIP
done:
  print CONNECTED to $remote at $rmtip
  print GATEWAY address $rmtip
  print LOCAL address $local
  mode SLIP
  goto exit
error:
  print SLIP to $remote failed.

exit:

dip автоматически исполняет команды ifconfig и route с учетом значений переменных $local и $remote. В данном примере этим переменным присваивает значение команда get...remote, которая получает текстовую строку от SLIP-сервера и присваивает ее указанной переменной.

Если запускаемые программой dip команды ifconfig и route не работают, то можно либо после выполнения программы dip запустить правильные команды из скрипта программной оболочки, либо непосредственно изменить текст скрипта для программы dip. Запуская программу dip с опцией -v можно получать протокол процесса подключения. Эта информация поможет выяснить источник неудачи, если связь не будет устанавливаться.

Для того, чтобы запустить программу dip и установить подключение SLIP, можно использовать команду следующего типа:


/etc/dip/dip -v /etc/dip/mychat 2>&1

При этом различные файлы программы dip и диалоговый скрипт mychat.dip хранятся в каталоге /etc/dip.   

Вышеприведенное обсуждение должно быть достаточным для вашего хорошего самочувствия на славном пути в сетевое сообщество через Ethernet или SLIP. И вновь мы настоятельно рекомендуем заглянуть в книгу по TCP/IP, особенно, если ваша сеть имеет специфику в маршрутизации, отличающую ее от рассмотренных здесь.

       

6.2 Сети на основе телефонных линий и PPP.

 

Linux поддерживает полную реализацию протокола PPP (Point-to-Point Protocol). Этот протокол является механизмом создания и эксплуатации Интернет-протокола (Internet Protocol, или IP) и других сетевых протоколов для связи через последовательное соединение (через нуль-модемный кабель), через связь, установленную посредством программы telnet, или через связь посредством модемов и телефонных линий (разумеется, включая и цифровые линии, такие, как ISDN). В данном разделе описывается только конфигурирование протокола PPP для клиента, осуществляющего связь через аналоговый модем с удаленным компьютером, предоставляющим доступ к себе через телефонные линии с помощью протокола PPP.

Для того, чтобы получить полную информацию по конфигурированию протокола PPP в системе Linux, читателю предлагается обратиться к Практическому руководству по протоколу PPP в системе Linux (Linux PPP HOWTO), который можно получить через анонимный доступ FTP к сайту sunsite.unc.edu. Этот документ является полным руководством по конфигурированию протокола PPP в системе Linux, включая конфигурирование модемов, линий ISDN, нуль-модемных кабелей. Большая часть информации в этом разделе была взята из этого документа. Также доступен документ Linux Network Administrator's Guide, являющийся частью проекта Linux Documentation Project. Более подробно об этих документах можно прочесть в приложении A.

6.2.1 Что нужно для начала работ.

Предполагается, что ядро системы Linux сконфигурировано и откомпилировано с включением в него функций поддержки протокола TCP/IP. Информация о компиляции ядра приведена в разделе 4.9 . Для того, чтобы обеспечить сетевые функции в ядре системы, надо ответить ``yes'' на соответствующие вопросы во время шага make config и затем собрать ядро заново. Предполагается также, что сам пакет ppp откомпилирован и установлен, и что с ядром Linux версии 1.2.x используется версия PPP 2.1.2, а с ядром Linux версий 1.3.X/2.0.x версия PPP 2.2.0. На время написания книги последняя официальная версия пакета PPP имеет номер ppp-2.2f. Если планируется использовать модули для того, чтобы загрузить программы PPP в ядро системы, то следует прочесть kerneld mini-HOWTO. Крайне рекомендуется использовать только те сочетания версий ядра системы и программного обеспечения PPP, про которые известно, что они стабильны в совокупности.

Надо также прочесть следующую документацию:

  • документацию, сопровождающую пакет программного обеспечения PPP;
  • man-страницы к программам pppd и chat (используйте команды man chat и man pppd);
  • Linux Network Administration Guide (NAG);
  • Net-2/3 HOWTO;
  • документацию к ядру системы, которая поставилась в /usr/src/linux/Documentation при установке исходных текстов Linux;
  • www-страницу, посвященную конфигурированию модема (Modem Setup Information), по адресу http://www.in.net/info/modems/index.html;
  • замечательные книги по системам UNIX и Linux, выходящие в издательстве O'Reilly and Associates. Электронный каталог в системе Интернет (O'Reilly and Associates On-Line catalog) находится на сайте http://www.ora.com/. Новичку в системах UNIX и Linux следует приобрести некоторые из этих книг!
  • документ PPP-FAQ (Часто задаваемые вопросы по протоколу PPP), который поддерживает Эл Лонгейр (Al Longyear). Этот документ находится по адресу ftp://sunsite.unc.edu/pub/Linux/docs/faqs (см. приложение B). Здесь можно найти много полезной информации в формате вопрос-ответ; эта информация будет очень полезна при выяснении, почему связь PPP неправильно работает.

6.2.2 Обзор этапов настройки.

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

  1. Убедиться, что в ядре откомпилирован блок поддержки протокола TCP/IP.
  2. Убедиться, что в ядре откомпилирован (либо статически, либо как загружаемый модуль) блок поддержки протокола PPP.
  3. Убедиться, что программное обеспечение протокола PPP откомпилировано и установлено.
  4. Убедиться, что модем сконфигурирован и установлен (подключен) к известному последовательному порту компьютера.
  5. Убедиться, что известна следующая информация от провайдера PPP (обычно это провайдер Интернет):
    • Телефонный номер, по которому следует звонить на сервер.
    • Тип назначения клиентских IP-адресов (статический или динамический). В первом случае надо знать статический IP-адрес.
    • IP-адрес сервера имен (DNS server), который будет разрешать имена компьютеров при соединении.
Убедиться, что в ядре откомпилирован блок поддержки протокола TCP/IP.

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


grep -i "TCP/IP" /var/adm/messages

Если будет получена строчка, напоминающая:

Jun  8 09:52:08 gemini kernel: Swansea University Computer Society TCP/IP for NET3.019

то значит, поддержка протокола TCP/IP откомпилирована. Эту же информацию можно увидеть на экране консоли во время загрузки. Однако на быстрых компьютерах это сообщение пролетает слишком быстро, чтобы его увидеть. Для того, чтобы пролистать сведения и найти это сообщение, можно использовать комбинацию клавиш Shift-PageUp.

Убедиться, что в ядре откомпилирован блок поддержки протокола PPP.

Если при загрузке ядро системы выдает сообщения типа:


  PPP Dynamic channel allocation code copyright 1995 Caldera, Inc.
  PPP line discipline registered.

то значит, поддержка протокола PPP есть. Можно также ввести команду:

grep -i "PPP" /var/adm/messages

Строка, напоминающая:

Jun  8 09:52:08 gemini kernel: PPP: version 0.2.7 (4 channels) NEW_TTY_DRIVERS O PTIMIZE_FLAGS

также обозначает, что протокол PPP поддерживается.

Убедиться, что модем сконфигурирован.

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

  • DOS com1: = Linux /dev/cua0 (/dev/ttyS0)
  • DOS com2: = Linux /dev/cua1 (/dev/ttyS1),
  • и т.д.

Исторически сложилось так, что в системе Linux устройства cuax используются для исходящих звонков, а устройства ttySx для входящих. Начиная с версии ядра 2.0.x такое положение изменилось, и теперь как для входящих, так и для исходящих звонков нужно использовать устройство ttySx. Возможно, что в последующих версиях ядра устройства cuax вообще исчезнут.

Если используется высокоскоростной модем (14400 бод и выше, не имеет значения, внешний или внутренний), то последовательный порт должен уметь справляться с таким потоком данных, в частности, когда используется сжатие данных.

Это требует, чтобы последовательный порт использовал современную версию UART (Universal Asynchronous Receiver Transmitter), например, 16550A. На старом компьютере (или на компьютере со старым контроллером последовательных портов) может быть всего лишь 8250 UART, что создаст значительные трудности при использовании высокоскоростных модемов.

Для выдачи характеристики UART порта надо ввести команду:


# setserial -a /dev/ttySx

Если имеется высокоскоростной модем, а характеристики порта недостаточные, следует позаботиться о приобретении нового адаптера последовательных портов (их цена менее $50). Для использования протокола PPP нужно будет сконфигурировать модем, поэтому нужно прочесть руководство к модему. Большинство модемов выпускаются с именно теми установками по умолчанию, которые требуются для протокола PPP. Рекомендуем следующую конфигурацию (в стандартных командах протокола Hayes):

  • Hardware flow control (RTS/CTS) (&K3 в большинстве модемов)
  • E1 (Echo ON) в /usr/src/linux-2.0.27/include/linux/serial.h (команда требуется для функционирования программы chat.)
  • Q0 Report result codes (требуется для функционирования программы chat.)
  • S0=0 Auto Answer OFF (если модем не должен отвечать на телефонные звонки).
  • &C1 Carrier Detect ON только после соединения.
  • &S0 Data Set Ready (DSR) всегда ON.
  • Data Terminal Ready (команда зависит от типа модема).

Информация по адресу http://www.in.net/info/modems/index.html содержит примеры конфигураций для многочисленных модемов и может оказаться полезной.

Для выяснения информации о конфигурации модема и ее установки можно использовать соответствующие программы коммуникаций (например, minicom или seyon). Многие модемы выдают данные о своих установках в ответ на запрос AT&V, однако этот вопрос нужно уточнить в инструкции к модему.

Если вы при установке окончательно запутались, то вернуться к установкам производителя можно командой AT&F. Как уже говорилось, в большинстве модемов эти установки включают все, что нужно для PPP, однако в этом следует убедиться.

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

Если модем используется только в системе Linux и только для соединения с каким-либо сервером, то проще всего записать конфигурацию в постоянную память (NV-RAM) модема.

Если же модем используется другими программами или операционными системами, то безопаснее будет сообщать установки при каждом соединении, гарантируя, что при каждом обращении к модему он будет находиться в правильной конфигурации. Такой подход имеет также преимущества, что конфигурирующая строка модема не будет потеряна, если вдруг пропадет содержимое постоянной памяти (NV-RAM) модема.

Информация о сервере.

Прежде, чем устанавливать PPP-связь с удаленным сервером, требуется получить о нем следующую информацию (ее может дать системный администратор сервера или служба технической поддержки).

  • Телефонный номер сервера (один или несколько). Если модем вашего компьютера установлен в офисной АТС, то нужно знать номер, который выводит во внешнюю телефонную сеть. Обычно это либо цифра 0 или 9.
  • Назначает ли сервер IP-адреса статически или динамически. Если используется статическое назначение IP-адресов, то нужно знать этот адрес для данного пользователя. Если сервер дает сразу несколько разрешенных IP-адресов, то надо знать их все, а также маску подсети (netmask).

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

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

  • IP-адрес DNS-сервера (или DNS-серверов) (Domain Name Server, серверы имен) на PPP-сервере. Таких должно быть по крайней мере два, хотя требуется только один.

    Этот пункт может вызвать проблему. Дело в том, что установка для протокола PPP в системе Microsoft Windows 95 позволяет передавать адрес DNS клиенту в процессе соединения. Поэтому служба технической поддержки сервера может заявить, что клиенту не нужно знать этот адрес.

    Однако при использовании системы Linux этот адрес требуется. Реализация протокола PPP в системе Linux не позволяет производить установку IP-адреса DNS динамически во время соединения (и возможно, что никогда не позволит).

  • Использует ли сервер протоколы PAP (Password Authentication Protocol) или CHAP (Challenge/Handshake Authentication Protocol). Если да, то в этом случае нужно знать идентификатор (id) и пароль соединения (secret), которые следует использовать при соединении. Возможно, что ими являются соответственно имя пользователя и пароль в операционной системе сервера.
  • Запускает ли сервер протокол PPP автоматически, или для этого требуется выдать специальную команду после входа в систему. Если надо ввести команду, то ее нужно знать.
  • Является ли операционная система сервера системой Microsoft Windows NT, а если да, то используется ли в ней система MS PAP/CHAP. Многие корпоративные локальные сети используют такие возможности системы MS Windows NT для большей безопасности.

Каждый компьютер, подключенный к сети интернет, должен иметь свой уникальный IP-адрес. Эти адреса назначаются централизованно специальными уполномоченными в каждой стране. Следовательно, для использования связи посредством протокола PPP нужно, чтобы имелся такой назначенный IP-адрес. Система динамического назначения адресов возникла по причине растущего количества компьютеров в сети Интернет (и отчасти из-за большого числа пользователей PPP). При динамическом назначении IP-адресов, когда адрес назначается при соединении с сервером, при каждом новом соединении могут назначаться различные IP-адреса. Этот метод является наиболее употребительным для большинства провайдеров. В некоторых случаях используется статическое назначение адресов. Выбрать себе IP-адрес нельзя; он присваивается специально уполномоченной на то организацией. Это предотвращает ситуацию, когда два компьютера будут иметь один и тот же IP-адрес, что создаст проблемы в Интернете. Удаленные PPP-серверы сообщают тип присваиваемых IP-адресов и, при динамическом присвоении адресов, фактический адрес, назначенный при соединении.

Важно знать, что при динамическом назначении IP-адресов будет очень сложно обеспечить любые постоянные услуги Интернета, такие, как www-серверы, услуги gopher, серверы Internet Relay Chat. Можно будет использовать такие услуги, расположенные на других компьютерах, но нельзя будет создать подобное на своем компьютере без приложения чрезвычайных усилий. Подобные приемы лежат вне целей данного рассмотрения.

PAP и CHAP это два различных распространенных метода идентификации. Оба эти метода поддерживаются Linux.

Тестирование модема и соединения с удаленным сервером.

Теперь, когда улажены вопросы с последовательным портом и модемом, можно посмотреть, как эти установки будут работать при попытке установить соединение с сервером.

Для этого нужно, используя коммуникационные программы (например, minicom или seyon), задать требуемую для протокола PPP инициализационную строку модема и набрать номер PPP-сервера.

Замечание: на этом этапе мы не пытаемся установить соединение PPP, а только проверяем, правильно ли указан телефонный номер сервера, и пытаемся точно определить, какого рода информацию сервер посылает клиенту для входа в систему и установки связи PPP.

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

Если сервер использует протокол PAP, то вы не должны увидеть приглашения, а вместо этого на экран будет выдаваться текстовое представление протокола установления связи (link control protocol), который будет выглядеть бессодержательным (иногда его еще называют "garbage": мусор).

Несколько предупреждений:

  • Некоторые серверы позволяют пользователю входить как с помощью текстового имени и пароля, так и через протокол PAP. Так что если известно, что сервер использует PAP, но при соединении на экран не поступает сразу же бессодержательная выдача, то это не значит, что сделано что-то неправильное.
  • Некоторые серверы требуют, чтобы клиент вначале ввел некоторый текст, а потом запускают стандартную последовательность PAP.
  • Некоторые PPP-серверы являются пассивными. Это значит, что они ничего не посылают до тех пор, пока клиент не пошлет им некоторый lcp-пакет. При соединении с таким сервером бессодержательная выдача на экране не появится, как впрочем и какая-либо другая.
  • Некоторые серверы не запускают протокол PPP пока клиент не нажмет клавишу Enter, так что это всегда стоит попробовать, если соединение произошло, а "мусор" на экране не появился!

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

  • приглашение ввести имя пользователя.
  • приглашение ввести пароль.

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

Если при входе в систему сервер автоматически запускает PPP, то клиент сразу увидит на экране бессодержательные сообщения. Это сервер посылает клиенту информацию для запуска и конфигурирования соединения PPP.

Выглядит это примерно так:


y}#.!}!}!} }8}!}}U}"}\&} } } } }}\& ...}'}"}(}"} .~~y}

На некоторых серверах программу PPP требуется явно запустить. Обычно так сделано потому, что конфигурация сервера позволяет входить в систему через протокол PPP и через командную оболочку, используя одну и ту же пару имени пользователя и пароля. В таком случае после входа в систему нужно выдать команду на запуск PPP.

Если непосредственно после соединения (а также, если требуется, после входа в систему и запуска PPP-сервера) на экран не выдается бессодержательное сообщение, можно попробовать запустить PPP-сервер, нажав клавишу Enter.

На этом этапе можно повесить трубку модема (обычно для этого надо быстро ввести с клавиатуры +++, и после того, как модем откликнется сообщением OK, послать команду ATH0).

Если модем не заработал, следует вернуться к руководству к данному модему, экранной документации к коммуникационным программам и документу Serial HOWTO.

Работа с PPP-серверами с динамическим назначением IP-адресов.

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

Сразу скажем, что ограничения не коснутся исходящих запросов к ресурсам системы Интернет. Иными словами, можно посылать электронную почту программой sendmail (если она будет правильно сконфигурирована), осуществлять FTP-соединение с удаленными сайтами и копировать с них файлы, пользоваться командой finger, бродить по www-страницам и т.п.

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

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

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

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

Файлы программ PPP.

Для того, чтобы создать каталоги и редактировать файлы, нужные для конфигурирования PPP, надо войти в систему как root. Местоположение файлов, обеспечивающих конфигурирование и работу PPP-соединения, различается для версий PPP 2.1.2 и 2.2.

Для версии PPP 2.1.2 это следующие файлы:


/usr/sbin/pppd           исполняемый файл PPP.
/usr/sbin/ppp-on         скрипт для набора номера и установления соединения.
/usr/sbin/ppp-off        скрипт для разрыва соединения.
/etc/ppp/options         опции программы pppd для всех соединений.
/etc/ppp/options.ttyXX   специальные опции для соединения через данный порт.

Для версии PPP 2.2 используются такие файлы:


/usr/sbin/pppd                   исполняемый файл PPP
/usr/sbin/ppp-on                 скрипт для набора номера и установления соединения
/etc/ppp/scripts/ppp-on-dialer   первая часть скрипта для набора номера
/etc/ppp/scripts/ppp-off         собственно скрипт диалога (chat script)
/etc/ppp/options                 опции программы pppd для всех соединений
/etc/ppp/options.ttyXX           специальные опции для соединения через данный порт

Пользователи Red Hat Linux должны иметь в виду, что Red Hat 4.X устанавливает эти скрипты в каталог /usr/doc/ppp-2.2.0f-2/scripts.

В каталоге /etc должен быть каталог ppp:


drwxrwxr-x   2 root     root         1024 Oct  9 11:01 ppp

Если такого каталога нет, его следует создать с такими принадлежностью и правами доступа.

Если же этот каталог уже существует, то в нем должны находиться шаблоны опций в файле с именем options.tpl. Пример этого файла, если такого файла не окажется, приведен ниже.

В этом примере объясняются почти все опции программного обеспечения протокола PPP, поэтому с ним полезно будет ознакомиться (вкупе с экранной документацией к программе pppd). Хотя этот файл можно рассматривать как основу для создания собственного файла /etc/ppp/options, возможно, что лучше будет создать такой файл самостоятельно, потому что так файл не будет содержать большого числа закомментированных строк, как следствие, он окажется намного короче, и его будет легче читать и поддерживать.

В некоторых дистрибутивах, по-видимому, потерян файл options.tpl. Его полная версия должна находиться в документе PPP-HOWTO.

Какие опции нужны?

Набор опций зависит от многих факторов. Приведенный здесь список должен работать с большинством серверов.

Однако, если таким образом протокол PPP не удалось заставить работать, следует прочесть образец файла /etc/ppp/options.tpl и man-страницу к программе pppd. Полезно также проконсультироваться с системным администратором соответствующего сервера, либо обратиться в службу технической поддержки пользователей.

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


# ОБРАЗЕЦ ФАЙЛА /etc/ppp/options (нет поддержки PAP/CHAP)
#
# Для того, чтобы предотвратить раздвоение pppd в фоновый режим,
# используется опция -detach
#
# использовать управляющие строки модема
modem
# использовать стиль захвата uucp для того, чтобы обеспечить
#   исключительный доступ к последовательному устройству
lock
# использовать аппаратный контроль потока данных
crtscts
# в таблице маршрутов создать маршрут по умолчанию для
# этого соединения
defaultroute
# НЕ посылать никаких управляющих Esc-последовательностей
asyncmap 0
# использовать максимальный размер передаваемого пакета 552 байта
mtu 552
# использовать максимальный размер принимаемого пакета 552 байта
mru 552
#
# КОНЕЦ ОБРАЗЦА ФАЙЛА /etc/ppp/options (нет поддержки PAP/CHAP)

Установка PPP-соединения вручную.

Теперь, когда созданы файлы /etc/ppp/options и /etc/resolv.conf (и, если необходимо, файл /etc/ppp/pap|chap-secrets), все установки можно проверить, попытавшись произвести соединении PPP вручную. После того, как это удастся, можно будет автоматизировать этот процесс.

Для того, чтобы это было можно сделать, нужно, чтобы коммуникационные программы могли завершить свою работу, не перезагружая модем. Программа minicom может это сделать при нажатии последовательности клавиш Control-A Q.

  • Убедиться, что вы в системе как пользователь root.
  • Запустить коммуникационные программы (например minicom), набрать номер сервера и войти в систему. Ввести команду для запуска PPP, если это требуется. При этом на экран начинают поступать бессодержательные сообщения (как раньше).
  • Если используются PAP или CHAP, то само по себе соединение с удаленным сервером должно запускать программы PPP на удаленном компьютере, и бессодержательные сообщения будут выдаваться без входа в в систему. Для ряда серверов это будет не так; тогда надо нажать клавишу Enter и посмотреть на результат.
  • Теперь надо выйти из коммуникационной программы, не перезагружая модем. Теперь на приглашения Linux в качестве пользователя root можно ввести команду:
    
    # pppd -d /dev/ttyS0 38400 &
    
    
    При этом, разумеется, надо подставить имя устройства, к которому подсоединен модем.

    При опции -d возможен поиск ошибок: начальные диалоги процесса установления соединения PPP будут протоколироваться в специальных файлах, что будет полезно позднее при отслеживании ошибок.

  • При установке связи PPP индикаторы модема должны мигать. Процесс установки связи PPP длится некоторое время.

В данное время можно посмотреть на интерфейс PPP командой:


# ifconfig

В дополнение к сетевым заглушкам (loopback) и адаптерам Ethernet можно увидеть информацию следующего типа:


  ppp0     Link encap:Point-Point Protocol
      inet addr:10.144.153.104  P-t-P:10.144.153.51 Mask:255.255.255.0
      UP POINTOPOINT RUNNING  MTU:552  Metric:1
      RX packets:0 errors:0 dropped:0 overruns:0
      TX packets:0 errors:0 dropped:0 overruns:0

Здесь:

  • inet addr:10.144.153.10 IP-адрес Вашего конца PPP-соединения.
  • P-t-P:10.144.153.5 IP-адрес PPP-сервера.

Программа ifconfig сообщает не эти IP-адреса, а те, которые используются PPP-сервером. Отметим, что команда ifconfig также сообщает, что соединение установлено и работает ("up and running").

Можно также увидеть маршрут к удаленному компьютеру (и далее). Для этого надо ввести команду


# route -n

Будет выдана информация следующего вида:


Kernel routing table
Destination  Gateway      Genmask         Flags MSS  Window Use Iface
10.144.153.3 *            255.255.255.255 UH    1500 0        1 ppp0
127.0.0.0    *            255.0.0.0       U     3584 0       11 lo
10.0.0.0     *            255.0.0.0       U     1500 0       35 eth0
default      10.144.153.3 *               UG    1500 0        5 ppp0

Отметим здесь две важные строки, указывающие на IP-адрес PPP-клиента.

Первая является маршрутом HOST (помечена флагом "H"). Она позволяет увидеть компьютер, с которым произведено соединение, но не дальше.

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

Отсутствие таблицы с такими двумя строками говорит о том, что не все установки сделаны верно. В частности, если в протоколе имеется сообщение, что программа pppd не замещает существующего маршрута по умолчанию, то значит, что маршрут по умолчанию указывает на интерфейс Ethernet. Это должно быть заменено на необходимый нам сетевой маршрут, поскольку можно иметь ТОЛЬКО ОДИН МАРШРУТ по умолчанию.

Надо будет исследовать инициализационные файлы системы и найти, где же устанавливается этот путь по умолчанию. Искать надо команду route add default..., и заменить ее на что-либо вроде route add net....

Теперь можно проверить связь, введя команду ping с IP-адресом, указанном в выводе команды ifconfig:


# ping 10.144.153.51

В ответ будут приходить строки следующего вида:

  PING 10.144.153.51 (10.144.153.51): 56 data bytes
  64 bytes from 10.144.153.51: icmp_seq=0 ttl=255 time=328.3 ms
  64 bytes from 10.144.153.51: icmp_seq=1 ttl=255 time=190.5 ms
  64 bytes from 10.144.153.51: icmp_seq=2 ttl=255 time=187.5 ms
  64 bytes from 10.144.153.51: icmp_seq=3 ttl=255 time=170.7 ms

Эти строчки будут идти бесконечным потоком; чтобы остановить этот поток, надо нажать комбинацию клавиш Control-C. При этом будет получена дополнительная информация:

  --- 10.144.153.51 ping statistics ---
  4 packets transmitted, 4 packets received, 0% packet loss
  round-trip min/avg/max = 170.7/219.2/328.3 ms
(сообщается количество переданных, принятых и потерянных пакетов, а также минимальное, среднее и максимальное время реакции).

Теперь можно попытаться ввести команду ping, указав некоторый компьютер (но не сам PPP-сервер) по имени (желательно знать, что этот сервер в данный момент включен). Например:


# ping sunsite.unc.edu

Далее должна последовать пауза, во время которой компьютер получает IP-адрес от сервера DNS, указанного в файле /etc/resolv.conf. В этот время индикаторы модема должны мигать. Через некоторый промежуток времени будет получено примерно следующее сообщение:


  PING sunsite.unc.edu (152.2.254.81): 56 data bytes
  64 bytes from 152.2.254.81: icmp_seq=0 ttl=254 time=190.1 ms
  64 bytes from 152.2.254.81: icmp_seq=1 ttl=254 time=180.6 ms
  64 bytes from 152.2.254.81: icmp_seq=2 ttl=254 time=169.8 ms
  64 bytes from 152.2.254.81: icmp_seq=3 ttl=254 time=170.6 ms
  64 bytes from 152.2.254.81: icmp_seq=4 ttl=254 time=170.6 ms

Остановите вывод, нажав Control-C. Будет получена статистика:


  --- sunsite.unc.edu ping statistics ---
  5 packets transmitted, 5 packets received, 0% packet loss
  round-trip min/avg/max = 169.8/176.3/190.1 ms

Если отклик от удаленного сервера не был получен, то можно отдать команду ping, указав IP-адрес DNS-сервера. Если в этот раз отклик получен, то похоже, что ошибка связана с файлом /etc/resolv.conf.

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

Если оказалось, что связь работает, ее надо закрыть командой


# ppp-off

После короткой паузы модем сам разорвет связь.

Если это не сработало, то надо либо выключить модем, либо запустить коммуникационную программу и послать модему прерывание командой +++, и затем, после приглашения от модема OK разорвать связь командой ATH0.

Может потребоваться также очистить файл захвата (lock file), созданный программой pppd, с помощью команды:


# rm -f /var/lock/LCK..ttySx

6.2.3 Создание скриптов установления связи.

Хотя и в дальнейшем можно устанавливать связь вручную, как это делалось выше, намного удобнее создать несколько скриптов, которые будут делать все операции автоматически. При этом пользователю (из группы, которой доступны команды поддержки PPP, либо пользователю root) будет достаточно ввести одну команду, чтобы эти скрипты автоматически установили связь, вошли в систему сервера и запустили программы PPP.

Ниже даются скрипты для случая, когда сервер провайдера не использует 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, то мы советуем удалить файлы с примерами, поскольку их использование чревато проблемами (несмотря на то, что они длительное время использовались и даже рекомендовались в ранних версиях документа PPP-HOWTO).

Для пользователей версии PPP 2.1.2 здесь даются более удачные образцы, взятые из дистрибутива версии PPP 2.2. Их предлагается скопировать и использовать вместо старых.

Скрипт ppp-on является первым из пары, которая осуществляет соединение.


#!/bin/sh
#
# Это скрипт для инициирования PPP-соединения и первый из
# пары предназначенных для этого скриптов. Они не отвечают
# требованиям безопасности, поскольку коды можно увидеть
# командой ps. Преимущество этих скриптов в их простоте.
#
# Далее идут параметры. Их нужно заменить на параметры
# для конкретного клиентского компьютера.
#
TELEPHONE=555-1212     # Телефонный номер сервера
ACCOUNT=george         # Имя пользователя для входа в
                       # систему сервера
PASSWORD=gracie        # Пароль
LOCAL_IP=0.0.0.0       # IP-адрес клиента (если известен).
                       # При динамическом назначении
                       # 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
#
# Здесь указывается местоположение скрипта, который набирает
# номер и входит в систему сервера. Надо указывать абсолютный
# путь, поскольку переменная $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              ATDP$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 file). Теперь можно удалить это файл.
#
        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

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

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

Скрипт ppp-on.

Скрипт ppp-on надо отредактировать, вставив правильные имена пользователя и пароль на сервере, а также телефонный номер сервера.

Каждая строка скрипта, начинающаяся, например, с TELEPHONE=, в действительности устанавливает значение некоторой переменной командной оболочки, причем это значение стоит справа от символа '=' (разумеется, комментарии не учитываются). Редактироваться должны именно эти значения.

Поскольку IP-адрес устанавливается в файле /etc/ppp/options (если он требуется), то надо удалить следующую строчку:


$LOCAL_IP:$REMOTE_IP \

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

Скрипт ppp-on-dialer.

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

Замечание: скрипт диалога (chat script) обычно целиком помещается на одной строке. Обратные слэши используются для того, чтобы объединить несколько коротких строк, которые можно выводить сразу на экран, так что командная оболочка будет воспринимать их как одну очень длинную строку. Таким образом, эти символы не являются частью скрипта.

Будет, тем не менее, полезно познакомиться с текстом этого скрипта и понять, что он должен делать.

Скрипт диалога (chat script) является последовательностью пар 'строка ожидания'-'посылаемая строка' ('expect string'-'send string'). Заметим, что любой посылке всегда предшествует ожидание некоторого сигнала.

Если некая строка посылается без предварительного ожидания прихода какого-либо сигнала (или наоборот), то надо использовать пустую строку ожидания (или посылаемую строку), обозначаемую как "". Кавычки должны обрамлять сообщение и в том случае, когда оно состоит из нескольких слов (пример: сообщение 'NO CARRIER'), так что скрипт воспринимает его как единую строку.

В приведенном примере диалоговая строка выглядит так:


  exec /usr/sbin/chat -v

При вызове диалогового скрипта использована опция -v, указывающая, что все сообщения ввода и вывода будут сохраняться в системном протоколе (обычно это файл /var/log/messages). После того, как этот скрипт показал свою работоспособность, эту опцию можно убрать, сократив тем самым объем информации в системных протоколах.

Следующая строка:


  TIMEOUT         3

устанавливает время ожидания для прихода ожидаемых строк, равное трем секундам. Для очень медленного модема это время можно увеличить до 5 или 10 секунд.

Строка:


  ABORT           '\nBUSY\r'

говорит, что при приходе строки 'BUSY' надо прервать работу.

Аналогично нужно поступить, если придет строка 'NO ANSWER':


  ABORT           '\nNO ANSWER\r'

или строка 'RINGING':

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

(кто-то уже звонит по телефону клиента).

Посылаем модему строку 'AT'; в ответ ничего не ожидается:


  ''              \rAT

В следующей строке:

  OK-+++\c-OK   ATH0

использованы некоторые возможности восстановления после сообщений об ошибке.

Здесь от модема ожидается строка 'OK'; если она не пришла (из-за того, что модем не находится в командном режиме), то посылается строка '+++' (эта строка возвращает стандартный Hayes-совместимый модем в командный режим) и ожидается 'OK', а затем посылается команда ATH0. Эта команда позволяет скрипту справляться с ситуацией, когда модем завис в режиме on-line.

Следующая строка:


  TIMEOUT         30

устанавливает время ожидания, равное 30 секундам, на весь остаток скрипта. Если это время окажется недостаточным, его можно увеличить до 45 секунд и более.

Строка набора номера:


  OK              ATDP$TELEPHONE

ожидает 'OK' от модема в ответ на команду ATH0, и набирает требуемый номер.

Дальше ждем сообщения 'CONNECT':


  CONNECT         ''

Наш модем также посылает 'CONNECT', когда отвечает удаленный модем.

Теперь надо войти в систему:

  ogin:--ogin:    $ACCOUNT

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

Теперь ожидается приглашение ввести пароль:


  assword:        $PASSWORD

и он вводится.

В данном скрипте предусмотрены возможности возникновения различных ошибок. Однако программа chat имеет гораздо больше возможностей, чем здесь продемонстрировано. Более полную информацию можно получить на ее man-странице (man 8 chat).

6.2.5 Запуск PPP на сервере.

Приведенный выше скрипт ppp-on-dialer хорошо работает для тех серверов, которые после входа в систему автоматически запускают программу pppd. Однако некоторые серверы требуют, чтобы эта программа была явным образом запущена. Для этого нужно отредактировать скрипт ppp-on-dialer.

В конце скрипта (после строки, где ожидается и вводится пароль) надо ввести еще одну строку. В ней будет ожидаться приглашение командной оболочки сервера. Следует особо обходится с символами, которые имеют особый смысл в командных оболочках, например, для оболочки Bourne shell это символы:


$  [  ]

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

Сервер, которым пользуется автор этих строк, использует стандартное приглашение оболочки Bash системы Linux:


[hartr@kepler hartr]$

на что требуется ответить:

# ppp

и на сервере будет запущен протокол PPP.

Можно предусмотреть различные ситуации следующей строкой в скрипте:


hartr--hartr    ppp

Это означает, что если приглашение в установленное время не получено, то надо послать пустую строку и еще раз подождать приглашения.

Когда приглашение получено, посылается строка 'ppp'.

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

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

6.2.6 Если Ваш PPP-сервер использует PAP (Password Authentication Protocol).

Если сервер использует для опознавания клиента протоколы PAP или CHAP, то требуется еще некоторая работа.

В дополнение к уже указанным, в файл /etc/ppp/options нужно добавить следующие строки:

#
# указать программе pppd использовать имя пользователя
# на сервере в качестве имени компьютера в процессе
# идентификации
#
name <имя пользователя в системе сервера>  # отредактировать
#                                                # эту строку
#
# Одну из следующих строк надо раскомментировать тем, у кого
# работает PPP-сервер. ВНИМАНИЕ: не надо раскомментировать
# эти строки при соединении в качестве клиента, даже если
# сервер использует PAP или CHAP (поскольку, работая на
# клиентском компьютере, эти строки дадут команду серверу
# использовать для опознавания себя протоколы PAP или CHAP;
# эту команду сервер почти наверняка не сможет выполнить,
# и связь не установится).
#
#+chap
#+pap
#
# Если используются зашифрованные пароли в файле
# /etc/ppp/pap-secrets, то надо раскомментировать следующую
# строку. ВНИМАНИЕ: это НЕ то же самое, что зашифрованный
# пароль в системе Microsoft Windows NT, который может быть
# установлен программой MS RAS
#
#+papcrypt

6.2.7 Использование MSCHAP.

Программа RAS в операционной системе Microsoft Windows NT может быть установлена так, что в ней будет использоваться модификация протокола CHAP. Среди исходных текстов программ PPP можно найти файл README.MSCHAP80, в котором обсуждается этот вопрос. Узнать о том, использует ли сервер для опознавания этот протокол, можно, установив опцию поиска ошибок (debugging) программы pppd. Если сервер использует протокол MS CHAP, то на экране будет примерно такая строка:


rcvd [LCP ConfReq id=0x2 <asyncmap 0x0> <auth chap 80> <magic 0x46a3>]

Индикатором здесь является строка auth chap 80.

Для того, чтобы использовать MS CHAP, надо будет заново откомпилировать программу pppd, чтобы включить туда поддержку этого протокола. Инструкции для компилирования и использования такой версии программы pppd можно также найти в файле README.MSCHAP80.

Если используется опознавание протоколом PAP или CHAP, то нужно создать файлы с секретными ключами (secrets file). Их имена будут соответственно /etc/ppp/pap-secrets и /etc/ppp/chap-secrets, принадлежность пользователю root, группе root с правами доступа 740.

Первое, что нужно знать о протоколах PAP и CHAP, это что они созданы для опознавания хостов, а не пользователей. Другими словами, после того, как компьютер совершил PPP-соединение с сервером, любой пользователь на этом компьютере сможет использовать это соединение.

Протокол PAP может, а протокол CHAP должен потребовать двустороннего опознавания, т.е. имя и ключ потребуются с каждой стороны. Однако большинство PPP-серверов, использующих PAP, этого не требуют.

Предоставляя услуги, провайдер обычно дает клиенту имя и пароль для входа в систему, и не интересуется тем, какое имя компьютера установлено в операционной системе на клиентском компьютере. Поэтому при соединении с сервером надо использовать имя пользователя, данное провайдером. Для этого используется опция name программы pppd. В файл /etc/ppp/options надо добавить строку:


name your_user name_at_your_ISP

(первый аргумент "локальное" имя пользователя, второй имя на сервере).

С технической точки зрения, на самом деле надо использовать команду user your_user name_at_your_ISP для PAP, однако программа pppd может использовать это имя в качестве имени пользователя, если оно требуется для PAP. Преимущество использования опции name в том, что она применима и к протоколу CHAP.

Поскольку протокол PAP предназначен для опознавания компьютеров, с технической точки зрения требуется также указать имя удаленного компьютера. Однако, поскольку в большинстве случаев используется один сервер, в файле с секретным ключом можно использовать для имени удаленного компьютера шаблон "*".

Файл /etc/ppp/pap-secrets устроен следующим образом:


# Секретные ключи для опознавания протоколом PAP
# клиент   сервер   ключ   приемлемые_IP-адреса_клиента

Четыре поля в файле разделены пробелами; последнее поле может быть пустым (для динамического и, возможно, статического назначения IP-адреса сервером).

Пусть провайдер предоставил имя пользователя fred и пароль flintstone. Значение fred для опции name будет занесено в файл /etc/ppp/options, а файл /etc/ppp/pap-secrets будет выглядеть так:


# Секретные ключи для опознавания протоколом PAP
# клиент     сервер    ключ     приемлемые_IP-адреса_клиента
fred         *         flintstone

В данном файле указывается, что клиентский компьютер по имени fred (это имя будет использоваться программой pppd, хотя настоящее имя компьютера может быть иным) с каждым сервером будет использовать пароль (секретный ключ) flintstone.

Заметим, что указывать IP-адрес клиента не требуется, если только сервер не требует, чтобы статический IP-адрес клиента обязательно указывался. Иначе, даже если адрес будет указан, для большинства PPP-серверов это не будет работать, так как они (по соображениям безопасности) не позволяют клиентам указывает те IP-адреса, которые им будут даны.

Процедура требует, чтобы опознавание было двусторонним, т.е. чтобы не только сервер опознавал клиента, но и клиент опознавал сервер.

Допустим, что имя клиентского компьютера fred, а имя сервера barney. Тогда клиент в файле /etc/ppp/options.ttySx должен указать значение опций name и remotename соответственно fred и barney, а сервер наоборот: barney и fred.

На компьютере fred файл /etc/chap-secrets будет выглядеть так:


# Секретные ключи для опознавания протоколом PAP
# клиент     сервер    ключ     приемлемые_IP-адреса_клиента
fred         barney    flintstone
barney       fred      wilma

а на компьютере barney:

# Секретные ключи для опознавания протоколом PAP
# клиент        сервер    ключ         приемлемые_IP-адреса_клиента
barney          fred      flintstone
fred            barney    wilma

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

Скрипт для связи с опознаванием по PAP/CHAP.

Если сервер провайдера использует PAP/CHAP, то диалоговый скрипт выглядит гораздо проще. Все, что должен делать этот скрипт, это набрать номер, подождать соединения и передать управление для входа в систему программе pppd.


#!/bin/sh
#
# Это 2 часть скрипта ppp-on. Она осуществляет протокол
# соединения.
#
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              ATDP$TELEPHONE                  \
        CONNECT         ''                              \

Как и раньше, протоколирование сообщений можно включить опцией -d программы pppd. Это эквивалентно опции 'debug'.

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

Когда скрипт несколько раз подтвердит свою работоспособность, протоколирование можно будет отменить.


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

Проверка работы скрипта.

Для проверки работы откройте новый Xterm как root (если используется X Window System), или откройте новую виртуальную консоль. В этом новом сеансе надо ввести команду:


# tail -f /var/log/messages

Во многих системах протокол помещается именно в файл /var/log/messages. Если в данной системе для этого используется файл с другим именем, то команду, приведенную выше, надо соответственно изменить.

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


# ppp-on &

(если имя отредактированного скрипта /usr/sbin/ppp-on не было изменено).

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

После этого можно переключиться в окно (консоль), в котором будет вестись наблюдение за протоколом системы (system log).

6.2.8 Завершение PPP-соединения.

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

6.2.9 Наиболее распространенные проблемы с соединением.

Одна проблема может заключаться в том, что многие провайдеры поддерживают только те пакеты программного обеспечения, которые они предоставляют новым пользователям сервера. Обычно эти программы предназначены для операционной системы Microsoft Windows (и многие службы технической поддержки ничего не знают о системах UNIX и Linux). Так что можно рассчитывать на весьма ограниченную помощь провайдера.

Можно, разумеется, оказать частную услугу работникам технической поддержки, познакомив их с системой Linux (они могут иметь начальное представление о системе UNIX из работы в Интернете), которую они могут установить на собственных домашних компьютерах.

Проблемы с адресами.

Итак, PPP-соединение установлено и работает, и можно получить отклик от PPP-сервера командой ping, указав в качестве IP-адреса второй (удаленный) IP-адрес, выданный командой ifconfig ppp0.

Прежде всего, следует попытаться указать команде ping те IP-адреса, которые указаны в файле /etc/resolv.conf IP-адресами серверов имен. Если серверы откликаются и их IP-адреса отличны от IP-адреса сервера, то должна иметься возможность установить связь через сервер с внешним миром. Попробуйте задать в качестве аргумента команды ping полное имя сервера провайдера:


ping my.isp.net

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

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

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

Одной из возможностей может быть та, когда на сервере стоит система Linux, где среди опций ядра системы не указано перенаправление сообщений в Интернет-протоколах (IP forwarding)!

Поиск ошибок при неудачной попытке установить соединение.

Причин неудачи при соединении может быть много (ошибки в работе диалогового скрипта, сильные шумы в телефонных линиях и т.п.). Поэтому при неудачах надо исследовать системные протоколы.

Весьма распространена ситуация, когда ядро системы Linux откомпилировано и в него включены функции поддержки PPP, но при запуске программы pppd ядро выдает сообщение, что поддержки PPP нет. Для этого имеется целый набор возможных причин.

  • Загружено не новое, а старое ядро без поддержки PPP.
  • Модули поддержки PPP откомпилированы, но не установлены.
  • Ожидается, что модули будут загружаться автоматически, однако это не так.
  • Используется не та версия PPP, которая нужна для данной версии ядра.
  • pppd запускается не пользователем root.
  • Имеется опечатка в стартовых скриптах.
  • Вход в систему сервера осуществляется неправильно.
  • Не запускается протокол PPP на сервере.
  • Процесс PPP на сервере начинается слишком медленно.
  • Не установлен маршрут по умолчанию.

Наилучшим средством решения проблем будет обратиться к документу PPP FAQ (который действительно представляет собой набор вопросов и ответов). Это весьма полезный документ, и там наверняка есть ответы на все важные вопросы. Скорее всего, если там нет ответа на конкретный вопрос, то проблема не связана с протоколом PPP!

Ничего не получается...

Если ничто не помогает наладить PPP-соединение, следует вернуться к началу этой главы и проверить все с начала и в соответствии с выдачей в файлах системных протоколов, созданных командами chat -v и pppd -d.

Следует также обратиться к документации по протоколу PPP, к документу PPP FAQ, а также к другим указанным в этом разделе источникам!

Если проблема остается, можно обратиться за помощью в телеконференции comp.os.linux.misc и comp.os.linux.networking, а также в comp.protocols.ppp. Эти телеконференции часто посещают специалисты, которые могут оказать помощь.

Если принято решение искать помощь в системе Usenet, не следует посылать очень длинные сообщения, содержащие системные протоколы, поскольку это перегружает сеть. Более продуктивно будет описать проблему словами и, возможно, включить несколько строк выдачи (объемом не более одного экрана).

 


Next: Про этот документ Up: Linux Installation and Getting Previous: 5 The X Window Оглавление: Оглавление.


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

Комментарии отсутствуют