Протокол PPP является протоколом канального уровня (data link) модели OSI и разработан для связи по последовательным каналам (например, по нуль-модемному кабелю, поверх Ethernet, по коммутируемым телефонным линиям, посредством GPRS или EDGE). Если с помощью протокола PPP установить канал связи, можно передавать по нему пакеты любых протоколов – TCP/IP, IPX/SPX, NetBIOS.
Связь по протоколу РРР состоит из четырех этапов:
- установление связи посредством LCP (Link Control Protocol) - осуществляется выбор протоколов аутентификации, шифрования, сжатия и устанавливаются параметры соединения,
- установление подлинности пользователя - реализуются алгоритмы аутентификации поп протоколам РАР, СНАР или MS-CHAP,
- контроль повторного вызова РРР (необязательный этап, подтверждающий подлинность удаленного клиента),
- вызов протокола сетевого уровня (реализация протоколов, установленных на первом этапе).
Настройка работы TCP/IP поверх PPP с использованием pppd
Программа pppd может быть сервером удаленного доступа, принимая входящие звонки, а может выполнять роль клиента, дозваниваясь до сервера. При соединении по протоколу PPP каждый из компьютеров считается равноправным участником соединения, который может предъявить свои требования: запросить определенный IP-адрес, потребовать аутентификацию и т.д. Если требования участников не совпадают - соединение не устанавливается.
Синтаксис вызова pppd:
pppd параметры
Параметры включают имя устройства и скорость соединения.
Настройки pppd находятся в каталоге /etc/ppp, основные файлы настроек – options и ppp.conf.
В Solaris имеются разные файлы устройств для приема соединения через последовательный порт и создания исходящего соединения. Входящие соединения принимаются устройствами /dev/ttyd*, а исходящие создаются через /dev/cua* (ttyd0/cua0 – COM1, ttyd1/cua1 – COM2 и т.д.).
Для обращения к модему можно использовать терминальную программу cu:
#cu –l /dev/cua1
Она подключится к порту COM2, если он в данный момент не занят. Теперь все, что будет набрано (команды модема), попадет в последовательный порт. Для выхода из cu нужно набрать “~.”.
Если изменить права доступа к файлам устройств /dev/cua* и /dev/ttyd*, обращаться к устройствам напрямую с помощью cu сможет не только root.
Некоторые параметры /etc/ppp/options:
/dev/cuaN# устройство
115200 # скорость
crtscts # управление сигналами RTS/CTS
modem # модем, использовать DTR - pppd ждет сигнала CD (carrier detect)
от модема, если не указан connect-script,
и выключает-включает сигнал DTR (dara terminal ready),
как только соединение завершается
и перед тем, как запустить connect-script
debug # протоколирование сессии, запись происходит
от имени источника daemon с уровнем debug
passive # устанавливать соединение и ждать
dns1 x.x.x.x # установить DNS
-detach # не уходить в background
lock # блокировка порта по типу UUCP
Для установления индивидуальных настроек pppd для пользователя, в его домашний каталог нужно добавить файл .ppprc, который будет прочитан демоном pppd после /etc/ppp/options.
Выдача динамических адресов клиентам PPP происходит путем создания файлов с именами типа /etc/ppp/options.ttydN. В каждом файле можно указать конкретный адрес удаленного клиента, который будет получать разные адреса при соединении с разными портами сервера, но каждому порту сервера и его удаленному клиенту на этом порте всегда будет соответствовать определенная пара адресов.
Если ничего не указывать в /etc/ppp/options про назначение адресов, всем позвонившим на сервер удаленного доступа pppd выдаст адрес Ethernet-интерфейса этого сервера. Клиенты будут отличаться по имени создавшегося при соединении через PPP интерфейса – ppp0, ppp1 и т.д.
Если нужно настроить аутентификацию с применением PAP (password authentication protocol) и при этом использовать для аутентификации файл /etc/passwd, нужно записать в файл /etc/ppp/options параметр login. При этом пользователь, соединяющийся с сервером удаленного доступа с использованием PAP, должен иметь учетную запись и в /etc/passwd, и в /etc/ppp/pap-secrets. Формат записей в последнем файле:
имя клиента имя сервера пароль IP-адрес
В каждом из полей может стоять *, обозначающая допустимость любого значения.
Локальный IP-адрес определять не нужно, если не требуется принудительно выставить локальный, статический адрес (к тому же большинство PPP-серверов не позволяют удаленной системе устанавливать свой IP-адрес).
В некоторых версиях pppd при установленном параметре login пароль, записанный в /etc/ppp/pap-secrets, считается незашифрованным, т.е. для успешной аутентификации достаточно ввести в строку пароля то, что записано в этом файле.
Варианты организации сервера удаленного доступа
1. Пользователь дозванивается на модем сервера, где запущена программа getty. Она запрашивает login и password, которые пользователь сообщает вручную или с использованием скрипта. Уже после входа в систему запускается pppd, указанный в качестве командного процессора для этого пользователя в /etc/passwd.
2. При запуске системы вместо ttymon (getty – символическая ссылка на
/usr/lib/saf/ttymon в новых версиях Solaris) на последовательном порте, где находится модем, работает pppd, ждущий входящего звонка. Когда кто-то дозванивается, pppd проводит аутентификацию с использованием
/etc/ppp/pap-secrets.
Запуск ttymon для определенных терминалов контролируется в /etc/inittab. Файл /etc/ppp/pap-secrets может содержать как строки для аутентификации удаленных клиентов, так и строки, которые соответствуют аутентификации самого pppd на сервере провайдера. Имя пользователя, которое pppd будет использовать для идентификации себя, задается параметром user.
Пример настройки PPPoE-соединения
Создание файла /etc/ppp/peers/provider:
sppptun # what device to use
plugin pppoe.so
connect "/usr/lib/inet/pppoec interface" # initialize the INTERFACE (сетевая карта)
persist # if the connection dies, bring it back up
user "user" # login
noauth # Do not make the other side authenticate itself
noipdefault # Let them give you what IP they want to give you
noccp # No compression
novj # No compression
noaccomp # No compression
nopcomp # No compression
defaultroute #add an appropriate defaultroute
Теперь нужно записать пароль на подключение в файлы /etc/ppp/chap-secrets и
/etc/ppp/pap-secrets:
user * pass
Поля “user” и “pass” разделены между собой знаком табуляции (Tab).
Перед подключением нужно привязать PPPoE к интерфейсам:
sppptun plumb pppoed interface
sppptun plumb pppoe interface
Все остальные настройки сети должны быть указаны в соответствующих файлах.
Подключение выполняется командой
/usr/bin/pppd call provider
Можно настроить автоматическое подключение. Для этого создается файл
/etc/init.d/ppplink, содержащий следующий скрипт:
#!/sbin/sh
case "$1" in
'start')
if [ ! -x /usr/bin/pppd -o ! -c /dev/sppp ] ; then
exit 1
fi
if [ -s /usr/sbin/sppptun -a -f /etc/ppp/pppoe.if] ; then
/usr/bin/pppd call provider
fi
;;
'stop')
echo "Taking down PPPoE connection"
/usr/bin/pkill -x pppd
echo "Done"
;;
*)
echo "Usage: $0 { start | stop }"
exit 1
;;
esac
exit 0
Теперь нужно сделать его автоматически запускаемым:
chmod 744 ppplink //изменение прав доступа
chown root:sys ppplink //изменение владельца файла
на root, группы на sys
cd /etc/rc2.d
ln -s ../init.d/ppplink S48ppplink //создание символической ссылки
в одном из каталогов стартовых скриптов