Удаленный доступ по коммутируемым каналам связи. Протоколирование работы системы
Протокол PPP
Протокол PPP (Point-to-Point Protocol) был разработан для связи по последовательным каналам, таким как коммутируемые телефонные каналы, соединения через последовательные порты и т.д. С помощью протокола PPP можно установить канал связи и передавать по нему пакеты любых протоколов - TCP/IP, IPX/SPX, NetBIOS. Нас в приложении к UNIX интересует настройка работы с TCP/IP поверх PPP.
Протокол PPP предполагает возможность выполнения следующих операций:
- установление связи;
- согласование параметров передачи (скорость, четность и т.п.);
- согласование параметров сетевого интерфейса (IP-адрес, маска, адрес сервера имен и пр.);
- передача пакетов между интерфейсами;
- разрыв связи.
Для установления связи может потребоваться аутентификация, поэтому программы, работающие с PPP, должны уметь запрашивать и передавать аутентификационную информацию (имя и пароль, в некоторых случаях - зашифрованные).
Подробная документация по настройке PPP в Solaris 9 содержится, в частности, в документе "Solaris 9 System Administrator Collection System Administration Guide: Resource Management and Network Services" по адресу http://docs.sun.com/db/doc/806-4076?q=ppp, а обзор PPP в Solaris 9 имеется по адресу http://docs.sun.com/db/doc/806-4076/6jd6amr63?q=ppp&a=view.
Программа aspppd
В системах Solaris, начиная с Solaris 2.4 и до Solaris 8 включительно, для обеспечения связи по протоколу PPP использовалась утилита aspppd, вызывавшая нарекания из-за сложности настройки и использования. В Solaris 9 она заменена на более стандартную и удобную программу pppd, которая может служить как сервером, так и клиентом PPP . Для настройки aspppd в более старых системах Solaris следует обратиться к FAQ на эту тему. Например, можно найти одно из них по адресу http://solaris.opennet.ru/docs/RUS/solaris_x86/index.html.
Программа pppd
Сейчас для установления соединений через PPP в UNIX-системах используют сервер pppd , причем он есть в поставке как новых коммерческих, так и некоммерческих вариантов UNIX.
Программа pppd может работать в качестве сервера удаленнго доступа , т.е. принимать входящие звонки, а может выполнять роль клиента, дозваниваясь до сервера удаленного доступа .
При соединении двух компьютеров по протоколу PPP каждый из них рассматривается как равноправный участник соединения. Любой участник может предъявить к соединению свои требования: запросить определенный IP-адрес для себя или другого участника, потребовать аутентификацию и т.д. Если второй участник соглашается с требованием или его собственные требования не противоречат запрошенным, соединение устанавливается. Если требования участников противоречивы, то соединение не устанавливается.
Настройки программы pppd находятся в каталоге /etc/ppp. Основной файл настроек pppd - это /etc/ppp/options.
pppd параметры
Параметры должны включать имя_устройства и скорость.
Имя устройства последовательного порта
В Solaris, как и в некоторых других системах UNIX, файл устройства, используемый для приема соединения через последовательный порт, и файл устройства, используемый для инициирования такого соединения, - это два разных файла. Входящие соединения принимаются устройствами /dev/ttyd*, а исходящие создаются через /dev/cua*. Имя устройства, например, для входящих соединений через COM2 будет /dev/ttyd1 ( ttyd0 - COM1, ttyd1 - COM2), а для исходящих через COM2 - /dev/cua1.
Если вы настраиваете сервер удаленного доступа , надо заранее записать в конфигурацию модема (т.е. в NVRAM самого модема ) значения S0=1 и S1=1 для того, чтобы модем снимал трубку с первого звонка.
Для непосредственного общения с модемом удобно использовать простейшую терминальную программу cu:
cu -l /dev/cua1
Если никакая программа не общается с /dev/cua1 в данный момент, то cu подключится к порту COM2. Теперь можно набирать команды модема: все, что будет набрано, попадет в последовательный порт. Для выхода из cu надо набрать ~. (тильда, затем точка) и подождать немного. Программа cu не умеет мгновенно отсоединяться.
По умолчанию, обращаться к устройствам напрямую с помощью cu может только root. Это соглашение можно изменить, установив нестандартные права доступа к файлам устройств /dev/cua * и /dev/ttyd *·.
Параметры pppd удобно записать в файл /etc/ppp/options. Если все PPP-сессии на сервере будут однотипными (одна скорость, соединение через один и тот же модем, звонки всегда только входящие), в этот файл можно записать все параметры pppd. Саму программу pppd можно прописать в качестве командного процессора по умолчанию в /etc/passwd всем, кто использует этот сервер как сервер удаленного доступа :
cat /etc/ppp/options /dev/cuaa0 # устройство 57600 # скорость crtscts # управл. сигн. RTS/CTS modem # модем, использовать DTR debug # протоколирование сессии passive # устанавливать соед. и ждать * dns1 193.114.38.65 # установить DNS 193.114.38.5:193.114.38.4 #назначить адреса local:dialup ** -detach # не уходить в background lock # блокировка порта по типу UUCP
Параметр debug включает протоколирование сессии. Программа pppd расценит этот параметр как требование записывать с использованием механизма syslog() все управляющие входящие и исходящие пакеты в удобочитаемой форме. Запись происходит от имени источника daemon с уровнем debug. Подробнее об источниках и уровнях записей в syslogd см. лекцию 16.
Параметр modem указывает, что нужно использовать сигналы управления модемом. Программа pppd ждет сигнала CD (carrier detect) от модема, если только не указан connect-script, и "передергивает" (коротко выключает, затем включает) сигнал DTR (data terminal ready) как только соединение завершается и перед тем, как запустить connect-script.
Если нужно установить индивидуальные настройки pppd для каждого пользователя, то в домашние каталоги пользователей нужно положить файлы .pppr, которые будут прочитаны демоном pppd после /etc/ppp/options и могут содержать дополнительные сведения для него.
Выдача динамических адресов клиентам PPP ("динамических" в том смысле, что клиент не знает заранее, какой адрес он получит) выполняется путем создания файлов с именами типа /etc/ppp/options.ttyd1.
В каждом таком файле можно указать конкретный адрес удаленного клиента, и тот будет получать разные адреса при соединении с разными последовательными портами сервера. В то же время, каждому порту сервера и его удаленному клиенту на этом порту при такой настройке всегда будет соответствовать фиксированная пара адресов, жестко определенная для каждого последовательного порта сервера.
Кроме этого, можно вообще ничего не писать в /etc/ppp/options про назначение адресов. По умолчанию всем позвонившим на сервер удаленного доступа pppd выдаст адрес ethernet-интерфейса этого сервера. Отличать разных клиентов он будет не по IP-адресу, а по имени создающегося при соединении через PPP интерфейса - ppp0, ppp1 и т.д.
Приведенный пример предполагает, что при дозвоне на сервер удаленного доступа не используется стандартный протокол аутентификации в Windows-системах, так называемый PAP (password authentication protocol). В данном примере предполагалось, что пользователи применяют конфигурацию generic login из Windows XP или вводят имя и пароль вручную открытым текстом.
Если требуется настроить аутентификацию с использованием PAP и при этом использовать для аутентификации файл /etc/passwd, нужно записать в файл /etc/ppp/options параметр login. При этом пользователь, который соединяется с сервером удаленного доступа посредством PAP, должен иметь учетную запись и в /etc/passwd, и в /etc/ppp/pap-secrets. Формат записей в последнем таков:
имя_клиента имя_сервера пароль IP-адрес
В каждом из полей может стоять *, обозначающая допустимость любого значения. Как правило, строка аутентификации в pap-secrets выглядит так:
klara * KqZXV5-u *
Эта строка определяет имя и пароль пользователя klara, которому разрешено соединяться с данным сервером.
В некоторых версиях pppd при установленном параметре login программа в начале аутентификации полагает, что ей должен быть передан пароль, записанный открытым текстом в /etc/ppp/pap-secrets.
Если это так и есть, то любой, прочтя этот файл, сможет ввести в строку пароля именно то, что записано в этом файле, и будет аутентифицирован. Естественно, хранить незашифрованные пароли в /etc/ppp/pap-secrets небезопасно, поэтому там следует хранить зашифрованный пароль.
Чтобы объяснить программе pppd, что пароль в /etc/ppp/pap-secrets зашифрован, следует использовать параметр papcrypt при вызове pppd или указать его в файле /etc/ppp/options.
Есть, таким образом, две схемы организации сервера удаленного доступа :
- Пользователь дозванивается на модем сервера, где его встречает программа ttymon (стандартная программа, обслуживающая вход на любой терминал, кроме псевдотерминала). Она спрашивает его login и password, которые пользователь сообщает вручную или с использованием скрипта на своей машине. Затем, уже после входа в систему, для пользователя запускается pppd, указанный в качестве командного процессора для этого пользователя в /etc/passwd.
- При запуске системы вместо ttymon, запускается pppd на том последовательном порту, где находится модем, и pppd ждет входящего звонка. Когда кто-то дозванивается, pppd сам проводит аутентификацию с использованием /etc/ppp/pap-secrets.
Запуск ttymon для определенных терминалов контролируется в /etc/inittab в системах System V, включая Solaris. Старые версии Solaris и большинство других операционных систем используют программу getty вместо ttymon, в новых версиях Solaris программа getty также может быть вызвана, поскольку файл getty здесь представляет собой символическую ссылку на ttymon.
Файл /etc/ppp/pap-secrets может содержать как строки для аутентификации удаленных клиентов, так и строки, которые соответствуют аутентификации самого pppd на сервере удаленного провайдера. Имя пользователя, которое pppd будет использовать для того, чтобы идентифицировать самого себя, задается параметром user.