Руководство по настройке PPP-соединения на выделенной линии в ОС Unix


Условия задачи
Предварительная проверка связи
Настройка аутентификации (PAP)
Настройка протокола PPP
Настройка пакета mgetty

Условия задачи

Предположим, что нам необходимо, как показано на рисунке ниже, соединить два компьютера в сеть класса С через коммуникационные порты, оснащенные преобразователями интерфейсов, по протоколу PPP. Для большинства диалектов Unix эта задача решается одинаковыми средствами; единственное различие состоит в именовании COM-портов (COM1 в терминах DOS называется /dev/ttyS0 в Linux, и /dev/cuaa0 в BSD).

Соединение должно обладать следующими параметрами:
ПараметрЗначение
IP-адрес сервера192.168.4.1
IP-адрес клиента192.168.4.2
Маска подсети255.255.255.0
Тип авторизацииPAP
Регистрационное имя (login) клиентаguest
Пароль клиентаqw123
Скорость на порту, бит/с115200

Предварительная проверка связи

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

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


   cu -l ttyS0 -s 115200

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

Настройка аутентификации (PAP)

Вообще говоря, аутентификация при соединении по выделенной линии вряд ли имеет большой смысл. Однако в случае, когда клиентом выступает машина, работающая под ОС MS Windows, такая функция необходима.

Пароли PAP обычно хранятся в файле /etc/ppp/pap-secrets. В нашем случае он будет иметь вид:


# Секреты для аутентификации с использованием PAP
# клиент        сервер   секрет  IP-адреса
guest           *        qw123   192.168.4.2

Файлы секретов должны быть идентичны на клиенте и на сервере. Обратите внимание, что владельцем их должен быть пользователь root, а права доступа - 0600 (владельцу разрешены запись и чтение, остальным - все запрещено).

Настройка протокола PPP

Опции запуска демона pppd возможно задавать несколькими способами. Наиболее удобным, на наш взгляд, является их описание в файле /etc/ppp/options.имя_линии. В нашем случае это будет /etc/ppp/options.ttyS0. На сервере он будет иметь вид:
# /etc/ppp/options -*- sh -*- general options for pppd

# 1.Не использовать модемные сигналы для управления линией
local

# 2.Использовать программное  управление   потоком   данных   (т.e.
# XON/XOFF), идущих через последовательный порт
xonxoff
nocrtscts

# 3.Какие символы должны "маскироваться" при передаче.
# Указываются в виде списка  шестнадцатиричных  кодов,  разделенных
# запятыми. В случае использования  протокола  XON/XOFF  необходимо
# маскировать символы ^S (XOFF), ^Q (XON)
escape 11,13,ff

# 4.Использовать аппаратное управление потоком данных (т.e. RTS/CTS),
# идущих через последовательный порт
#crtscts

# 5.Использовать модемные сигналы для управления линией.
#modem

# 6.Добавить маршрут по умолчанию в системные таблицы маршрутизации
# (routing), используя машину, с которой  соединились,  в  качестве
# шлюза.  Данная   запись   удаляется   из   таблиц   при   разрыве
# PPP-соединения.
#defaultroute

# 7.pppd должен использовать блокировку  последовательной  линии  в
# стиле UUCP для обеспечения эксклюзивного доступа к устройству
lock

# 8.Соединение в "пассивном"  режиме. В этом  режиме  pppd  сначала
# пытается  инициировать  соединение;  если  ответ  не  получен   -
# переходит в состояние пассивного ожидания допустимого пакета  LCP
# от партнера (а не завершается, как было бы при отсутствии  данной
# опции).
passive

# 9.Не переходить в фоновый режим
-detach

# 10.Требовать от партнера аутентификацию с использованием PAP.  Не
# используйте   эту   опцию   для   стандартного   подключения    к
# Интернет-провайдеру, т.к. в этом случае вы  будете  требовать  от
# машины провайдера аутентифицироваться на вашей машине
+pap

# 11.Максимальное время неактивности в  секундах.  Если  в  течении
# временного промежутка большего, чем данное значение, по линии  не
# пересылаются данные - соединение разрывается.  В  случае  прямого
# нуль-модемного    соединения    полезно    для    автоматического
# восстановления связи после  некорректного  завершения  сеанса  со
# стороны партнера
idle 180

# 12.IP-адреса, назначаемые соединению, в формате:
# наш_адрес:адрес_партнера
192.168.4.1:192.168.4.2


Аналогичный файл на машине-клиенте будет выглядеть так (комментарии не показаны):


# /etc/ppp/options -*- sh -*- general options for pppd
local
xonxoff
nocrtscts
escape 11,13,ff
defaultroute
lock
passive
-detach
user guest

Данный пример рекомедуется для нуль-модемной связи, обеспечиваемой большинством преобразователей. В случае полномодемной связи (преобразователь 232-485 c аппаратным управлением полудуплексом) следует указать на необходимость использования протокола управления потоком RTS/CTS вместо XON/XOFF, для чего закомментарить пп.1-2 и раскомментарить пп.4-5. В результате файл options будет иметь вид:



Сервер:                      Клиент:
-------                      -------
escape ff                    escape ff
crtscts                      crtscts
modem                        modem
lock                         defaultroute
passive                      lock
-detach                      passive
+pap                         -detach
idle 180                     user guest
192.168.4.1:192.168.4.2


Наконец, последнее, что необходимо сделать - это запустить на обоих машинах демон pppd. Для этого записываем в файлы /etc/inittab строку:

sa:345:respawn:/usr/sbin/pppd ttyS0 115200

и переинициализируем процесс init:

init q

Процесс соединения регистрируется в системном журнале (обычно - /var/log/daemon или /var/log/debug). В случае успешного соединения его параметры можно просмотреть с помощью программы ifconfig.

Настройка пакета mgetty

Приведенные выше рекомендации по настройке сервера достаточны для случая, когда и сервер, и клиент работают в Unix. Если клиентом является машина с ОС MS Windows, на сервере следует вместо прямого запуска pppd использовать его запуск через программу mgetty (в противном случае при попытке соединения Windows будет сообщать о неуспешном наборе номера).

Конфигурационные файлы mgetty обычно располагаются в директории /etc/mgetty+sendfax.

Вначале опишем основные параметры коммуникационного порта в файле mgetty.config:



port ttyS0
speed 115200
direct y


Далее настроим правила обработки входных соединений в файле login.config:


# login.config
#
# Формат записей:
#       имя_пользователя id utmp_entry login_программа [аргументы]
#
# Пояснение:
#       При вводе "имя_пользователя" в ответ на приглашение mgetty `login:'
#       вызывается "login_программа" с [аргументами],
#       ее uid устанавливается в "id",
#       в utmp заносится запись USER_PROCESS ut_user = "utmp_entry"
#
# имя_пользователя может начинаться с / и заканчиваться "*" (wildcard)
#
# id - допустимое имя пользователя из /etc/passwd, или "-" для установки
#  пользовательского uid/euid = root (нужно для /bin/login)
#
# utmp_entry - то, что будет выводиться в листинге "who" listing.
#  Используйте "-" чтобы не изменять wtmp (необходимо для /bin/login), и "@"
#  для установки имени пользователя. Максимальная длина - 8 символов.
#
# login_программа - программа, которая будет exec()'аться, с аргументами,
#  указанными в [аргументы]. "@" в аргументах будет заменяться именем
#  пользователя. Предупреждение: если "@" нигде не задается, login_program
#  не сможет определить имя вызвавшего пользователя.
#
#----------------------------------------------------------------------
# Автоматический запуск PPP по получению конфигурационного запроса LCP (AutoPPP).
#  mgetty должно быть скомпилировано с ключом "-DAUTO_PPP" чтобы это работало.
#
#
/AutoPPP/ -     guest   /usr/sbin/pppd
#
# Стандартный вход для пользователя, которому разрешена обычная регистрация
#  через данную линию (для тестовых целей)
#  Имя_пользователя должно быть одним из допустимых в /etc/passwd
#
test    -       -       /bin/login @
# Всех остальных, пытающихся залезть (в том числе помехи) - посылаем
*       -       -       /bin/echo "GO OUT, @ !!!"


ПРИМЕЧАНИЕ:Конфигурационные файлы mgetty должны принадлежать пользователю root и иметь права доступа 0600 (владельцу разрешены чтение и запись, остальным - доступ запрещен).

И, наконец, в /etc/inittab вместо запуска pppd выполняем запуск mgetty:

sa:345:respawn:/sbin/mgetty ttyS0

и переинициализируем процесс init:

init q

Процесс соединения регистрируется в журнале программы mgetty (в нашем случае - /var/log/mgetty.ttyS0).