Протокол РРР
Реализация сервера РРР в ОС Linux
Программа pppd, которая используется в качестве клиента РРР, может работать и в режиме сервера РРР. Обратите внимание на строку 10 в листинге 8.2. В этой строке клиент запустил pppd на сервере РРР с целью открытия сеанса РРР. Кроме возможности запуска вручную, для ОС Linux были разработаны специальные программы для автоматического запуска pppd при обнаружении на входной линии запроса на открытие сеанса РРР. В этом разделе также рассматриваются преимущества совместного использования программ pppd и mgetty+sendfax.
Параметры сервера в pppd
С помощью определенных параметров программа pppd может выполнять функции сервера РРР. Несмотря на то что протокол РРР рассматривает обе стороны, участвующие в соединении, как равноправные, одна из сторон всегда выступает в роли сервера и ожидает запросов на установление соединения от клиентов. Некоторые из параметров, используемые сервером РРР, описаны в последующих разделах.
Параметры passive и silent используются программой pppd для ожидания пакета LCP типа Configure-Request с целью инициализации сеанса РРР.
Параметр proxyarp применяется для предоставления хост-комьютеру РРР возможности обрабатывать ARP-запросы в локальной сети от имени клиента РРР. Таким образом, другие компьютеры могут подключаться к клиенту РРР.
Предупреждение
С помощью параметра proxyarp другие компьютеры могут подключаться к РРР-клиенту. Например, когда ваш сервер на базе ОС Linux устанавливает РРР-соединение с провайдером Internet, он становится сетевым устройством в сети провайдера и вполне может быть подвержен атакам извне, как и любое другое устройство, напрямую подключенное к сети. Мы настоятельно рекомендуем использовать программное обеспечение для организации брандмауэра ( firewall ) с целью контроля доступа удаленных клиентов на ваш сервер. Особенно следует быть внимательным, если не применяется никаких мер безопасности при установке РРР-соединения. Внимательно анализируйте файлы отчетов системы на предмет попыток несанкционированного доступа.
С помощью параметра Local_IP:Remote_IP программой могут назначаться IP-адреса для удаленных устройств. При этом Local_IP — это адрес хоста РРР, а Remote_IP — адрес удаленного клиента.
Параметры pppd, которые задаются при запуске из командной строки, также можно заносить в конфигурационные файлы. По умолчанию программа pppd проверяет файл /etc/ppp/options и запускается с параметрами, которые в нем заданы. Еще одно полезное свойство pppd состоит в том, что она может устанавливать параметры в зависимости от используемого устройства tty. Благодаря этому для каждого устройства tty (порта) можно задать специфические параметры, например IP-адрес удаленной стороны. Тогда, если задействованы линии ttyS0, ttyS1 и ttyS2, для каждой из них можно задать свой набор параметров в файлах /etc/ppp/options.ttyS0, /etc/ppp/options.ttyS1 и /etc/ppp/options.ttyS2. При этом в каждом файле параметров будут указаны различные пары адресов Local_IP:Remote_IP, т.е. исключается возможность получения несколькими клиентами РРР одинакового IP-адреса.
Программа mgetty+sendfax
Если необходимо, чтобы сервер на базе ОС Linux выступал в качестве сервера РРР и принимал от клиентов запросы на установление соединений, то лучше всего для этой цели подходит программа mgetty+sendfax, написанная Гертом Доерингом (Gert Doering). Бинарный пакет этой программы, уже готовый к установке, входит в большинство версий ОС Linux. Если по какой-либо причине он отсутствует в вашей версии Linux, можно получить его с сервера sunsite.unc.edu в каталоге /pub/Linux/system/serial.
Как правило, в ОС Linux для обработки входящих соединений используется программа getty. Обнаружив попытку соединения на линии, она использует для аутентификации пользователя процедуру login, для которой требуется идентификатор пользователя и пароль. В состав mgetty+sendfax входит новая программа mgetty, которая заменяет старую программу getty для работы с последовательными линиями. Эта программа обладает большей гибкостью, чем getty, так как она способна автоматически определять тип входного звонка с помощью lock-файлов.
Для управления работой mgetty используются как параметры командной строки, так и конфигурационные файлы. В ОС Linux все указания этой программе, касающиеся взаимодействия с другими программами и обслуживания последовательных соединений, задаются в файле /etc/inittab. Каждое устройство tty на сервере под управлением ОС Linux имеет в этом файле свою строку конфигурации. Строка в файле inittab, с помощью которой mgetty управляет последовательной линией, выглядит примерно так:
#Set serial line for modem s1:12345:respawn:/sbin/mgetty -D -s 38400 -n 4 ttyS0
Знаки двоеточия используются здесь для разделения параметров. Первый параметр — уникальный идентификатор терминальной линии. Второй параметр указывает на уровень init, на котором терминал будет активен. Как видите, для данной линии терминал будет активен для всех уровней init. Третий параметр обуславливает реакцию процесса init на активность в линии. Ключевое слово respawn указывает, что программу можно запускать на указанном уровне запуска и перезапускать ее снова после завершения работы. Таким образом, после отключения клиента модемная линия снова будет готова к приему нового соединения. Четвертым параметром является программа, которую init запускает для управления терминальной линией. Формат команды на запуск mgetty следующий:
mgetty [options] ttydevice
Под параметрами [options] подразумеваются параметры для управления модемной линией, а ttydevice — устройством tty в ОС Linux, которым будет управлять mgetty. В табл. 8.6 представлены все параметры mgetty.
Как показано в примере inittab, модем переведен в режим передачи данных (т.е. в режим модема) с фиксированной скоростью 38400 бит/с. Кроме того, модем будет отвечать на звонок только после четвертого звонка. Однако есть одно свойство mgetty, которое может привести вас в замешательство. Дело в том, что mgetty не поддерживает для модема режим автоответа. Она лишь анализирует служебные сообщения, получаемые от модема. Приняв нужное количество строк RING (в зависимости от параметра -n ), она выдает на модем команду на поднятие трубки ATA. Таким образом, модем не сможет ответить на входной звонок, если программа mgetty заблокирована. Вероятно, вам знакома ситуация, когда модем на сервере отвечал на входной звонок, но при этом приглашение системы login не выдавалось.
Для управления работой mgetty, кроме параметров командной строки, можно использовать и конфигурационные файлы. Для указания программ, которым mgetty должна передать управление после установления соединения, используется файл /etc/mgetty+sendfax/login.conf. Как уже отмечалось ранее, обычно управление в терминальном сеансе передается процедуре регистрации в системе login. Точно так же mgetty умеет автоматически определять, что новое соединение является соединением РРР, и передавать дальнейшее управление им программе pppd. Строка в файле /etc/mgetty+sendfax/login.conf, с помощью которой передается управление, выглядит так:
/AutoPPP/ - ppp /usr/sbin/pppd auth -chap +pap login modem \ crtscts lock proxyarp
Все данные в строке AutoPPP чувствительны к регистру букв, так что будьте осторожны. Далее mgetty передает управление РРР-соединением программе pppd с параметрами, которые приведены выше в строке AutoPPP. Все они будут добавлены к параметрам, заданным в конфигурационных файлах pppd. Кстати, очень важным для клиентов РРР на базе ОС Windows, которые открывают соединение с сервером, является параметр +pap. Об этом более подробно читайте в "Поддержка удаленных клиентов" , "Поддержка удаленных клиентов".
После того как информация о mgetty добавлена в файл /etc/inittab, нужно чтобы она возымела действие. Для этого в ОС Linux следует задать команду telinit Q (или KILL HUP 1 ), чтобы процесс init перечитал файл inittab.
Следует отметить, что программа mgetty ведет собственные файлы отчетов в каталоге /var/log. Каждая модемная линия имеет свой файл отчета с именем mgetty.log + номер устройства tty. Пример сеанса работы mgetty приведен ниже в листинге файла отчета.
1 09/19 06 43 56 yS0 mgetty: experimental test release 1.1.14-Apr02 2 09/19 06 43 56 yS0 check for lockfiles 3 09/19 06 43 56 yS0 locking the line 4 09/19 06 43 56 yS0 lowering DTR to reset Modem 5 09/19 06 43 57 yS0 send: \dATQ0V1H0[0d] 6 09/19 06 43 57 yS0 waiting for ``OK'' ** found ** 7 09/19 06 43 58 yS0 send: ATS0=0Q0&D3&C1[0d] 8 09/19 06 43 58 yS0 waiting for ``OK'' ** found ** 9 09/19 06 43 58 yS0 waiting... 10 09/19 06 45 23 yS0 waiting for ``RING'' ** found ** 11 09/19 06 45 23 yS0 waiting for ``RING'' ** found ** 12 09/19 06 45 29 yS0 waiting for ``RING'' ** found ** 13 09/19 36 45 35 yS0 waiting for ``RING'' ** found ** 14 09/19 06 45 59 yS0 send: ATA[0d] 15 09/19 06 45 59 yS0 waiting for ``CONNECT'' ** found ** 16 09/19 06 46 13 yS0 send: 17 09/19 06 46 13 yS0 waiting for ``_'' ** found ** 18 09/19 06 46 16 ##### data dev=ttyS0, pid=2766, caller='none', conn='38400/ARQ/28800 LAP-M', name='', cmd= '/usr/sbin/pppd' , user='/Autoppp/'Листинг 8.5. Файл отчета mgetty
Как видно из данного листинга, в строках 1–9 mgetty инициализирует модем для использования с устройством ttyS0 (порт COM1). В строках 10–14 mgetty принимает от модема служебное слово RING, которое сигнализирует о получении модемом входного звонка. Как видим, после четвертого звонка mgetty выдает модему команду ATA, что означает "поднять трубку". Далее, в строке 18, mgetty определяет, что соединение является запросом на установление РРР-соединения, и запускает программу pppd с помощью команды /usr/sbin/pppd.
Резюме
Итак, протокол типа "точка-точка" (Point-to-Point Protocol (PPP)) служит для передачи сетевого трафика между двумя устройствами через модемное соединение. Для сервера электронной почты на базе ОС Linux это означает, что для установления соединения с провайдером сети Internet и получения IP-соединения требуется стандартный модем для асинхронных линий, который подключается к последовательному СОМ-порту ПК. С помощью такого соединения почтовый сервер может обмениваться электронной почтой с внешним миром (сетью Internet). Протокол РРР поддерживается в ОС Linux посредством программы pppd. Она разработана специально для работы с протоколом РРР и может выполнять как функции сервера РРР при обслуживании входящих соединений, так и клиента РРР для запроса на установление таких соединений. Сопутствующей pppd программой является программа chat. С ее помощью сервер на базе ОС Linux может общаться с модемом для установления соединения с провайдером Internet по телефонной линии и организации сеанса РРР с сервером провайдера. С целью более полной автоматизации установления РРР-соединений можно использовать программу diald. При наличии в сети IP-трафика, который адресован в Internet, она автоматически устанавливает РРР-соединение с провайдером. Для реализации функций сервера РРР можно использовать программу mgetty+sendfax, с помощью которой, при наличии входных запросов, автоматически запускается программа pppd и открываются сеансы РРР для клиентов. Она весьма успешно работает с клиентами РРР, которые используют операционные системы Windows 95, 98 и NT.