Повесть о Linux и PPP

Задача данной статьи -- комплексное описание настройки Linux в качестве сервера доступа для клиентов Windows 9x/NT. При этом предполагается, что читатель знаком с основами настройки Linux в качестве маршрутизатора и пакетного фильтра.

[Иван Песин (ipesin@post.lviv.ua)]

Повесть о Linux и PPP

Автор: © Иван Песин

1. Введение.

Цель написания данной статьи -- комплексное описание настройки Linux в качестве сервера доступа для клиентов Windows 9x/NT. При этом предполагается, что читатель знаком с основами настройки Linux в качестве маршрутизатора и пакетного фильтра.

Описание приводится для дистрибутива RedHat 6.2, но может быть легко применено и к другим дистрибутивам.

2. Подготовка.

Для настройки сервера доступа вам понадобятся пакет с демоном ppp и пакет mgetty. Для того, что бы узнать, установлены ли у вас указанные пакеты, введите:

$ rpm -q mgetty; rpm -q ppp

Если пакетов нет -- установите их с компакт диска :

# cd /mnt/cdrom/RedHat/RPMS; rpm -ivh mgetty*rpm; rpm -ivh ppp*rpm;

3. Настройка

Теперь можно переходить к настройке системы. В каталоге /etc/mgetty+sendfax/ находятся файлы конфигурации программы mgetty. Проверяем их содержимое:

  • файл dialin.config должен быть пустой (все строки закомментированы);

  • файл login.config среди прочих, закомментированных строк, должен содержать строки:

    /AutoPPP/ - a_ppp /usr/sbin/pppd auth -chap +pap login
    * - - /bin/login @
    

    Первая строка указывает на то, что получив вызов от ОС Windows и некоторых других), программа mgetty должна передать управление демону PPP. Вторая строка разрешает в остальных случаях выдавать приглашение (полезно при отладке, например).

  • файл mgetty.config варьируется, и должен быть привязан к вашему модему. У меня он выглядит вот так:

    port ttyS0
    speed 115200
    data-only y
    
    
    port ttyS1
    speed 115200
    data-only y
    
    
    port ttyS2
    speed 115200
    data-only y
    

Следующим нашим шагом будет указание Linux, когда и как он должен запускать программу mgetty Для этого в каталоге /etc находим файл inittab и добавляем в него строки:

S0:345:respawn:/sbin/mgetty -n 2 -D ttyS0 F115200
S1:345:respawn:/sbin/mgetty -n 2 -D ttyS1 F115200
S2:345:respawn:/sbin/mgetty -n 2 -D ttyS2 F115200

Здесь параметр "-n" указывает количество гудков до снятия трубки, "-D" -- отключение режима факса, F115200 -- скорость обмена с модемом. Возможно, вы заметили, что ключами дублируются параметры, указанные в файле mgetty.conf. Конечно же, делать это не обязательно, можно выбрать наиболее вам нравящийся вариант.

Теперь, чтобы процесс узнал о изменении файла конфигурации, выполняем команду:

# init q

На модеме должна загореться лампочка "TR" (на некоторых модемах -- "MR"). Для пущей верности проверим, запустился ли mgetty, командой:

$ ps ax | grep mgetty

Очередь настраивать демон PPP. Для этого в каталоге /etc/ppp создаем файл options.ttySX, где Х -- номер порта к которому подсоединен модем. В него вносим следующие строки:

lock
login
auth
modem
crtscts
refuse-chap
require-pap
mtu 576
mru 576
aaa.bbb.ccc.ddd:eee.fff.ggg.hhh
ms-dns kkk.lll.mmm.nnn

Где aaa.bbb.ccc.ddd -- адрес, присваиваемый интерфейсу сервера, адрес eee.fff.ggg.hhh -- отдается клиенту, а kkk.lll.mmm.nnn -- адрес DNS-сервера.

Важный момент с адресом клиента. Он либо будет принадлежать той же сети, что и сервер, либо нет. В первом случае вам необходимо будет добавить директиву proxyarp в файл options.ttySX, и тогда всем хостам будет казаться, что клиент находится в Ethernet-сети. Во втором же случае, будет необходимым указание маршрута к сети клиента либо к самому хосту клиента.

Пройдемся по другим полезным опциям. Итак:

  • idle n сообщает демону pppd о необходимости обрыва соединения, в случае отсутствия в канале пакетов данных на протяжении n секунд.
  • ktune разрешает демону настраивать переменные ядра. Например, если в конфигурации указана директива proxyarp, то автоматически будет разрешена маршрутизация пакетов.
  • ms-wins <addr> указывает адрес сервера WINS для клиентов.
  • noipx запрещает использование протоколов IPXCP и IPX
  • show password опция, полезная при отладке: при протоколировании пакетов, пароли будут представлены открытым текстом.

На очереди файл /etc/ppp/pap-secrets. В нем указывают пользователей, которым разрешен доступ по dial-up, и где они должны проходить аутентификацию. Вот пример:

dipuser1 myserver "" * dipuser2 myserver "" * dipuser3 myserver "otherpass" * dipuser4 myserver "" * dipuser5 myserver "yetanotherpass" * dipuser6 myserver "" dfg.wer.cxv.sdf dipuser7 myserver "" *

где:

dipuser1 -- имя пользователя, myserver -- сервер аутентификации (имя вашего хоста) "" -- означает, что пароль берется из /etc/passwd (/etc/shadow) otherpass -- конкретно указанный пароль * -- означает, что разрешен доступ с любого IP адреса dfg.wer.cxv.sdf
-- доступ только с указанного адреса.

Вот мы и настроили демон PPP. Для полного счастья нам осталось разрешить форвардинг пакетов. Это делается командой:

# sysctl -w net.ipv4.ip_forward=1

Для того, что бы эта функция включалась автоматически при загрузке системы, отредактируйте файл /etc/sysctl.conf так, чтобы в нем значилось:

net.ipv4.ip_forward = 1

4. Заключение

Всё. Сервер Dial-IN уже работает. В качестве дополнительных возможностей укажем настройку firewall, времени доступа и так называемый callback. Документацию по настройке брандмауэра (firewall) можно найти на любом сайте с документацией по ОС Линукс. Ограничение времени доступа реализуется при помощи файла /etc/nologin.ttySX, когда этот файл существует, доступ через указанный порт запрещен. В простейшем случае в /etc/crontab добавляются строки:

30   8   *   *   *   root rm -f /etc/nologin.ttyS1
30 20   *   *   *   root echo "disable" > /etc/nologin.ttyS1

результатом коих будет разрешение доступа к серверу с 8:30 до 20:30 на порт /dev/ttyS1 (COM2). Настройка callback является темой отдельной статьи, которая будет опубликована в ближайшее время. Сложность такой настройки обуславливается желанием не производить никаких дополнительных действий на клиентах. Для этого существует специальный протокол CBCP, который, к сожалению, не входит в бинарную поставку демона ppp, а существует в виде патча, поставляемого с исходным кодом и требующим компиляции.

В заключение хочу сказать, что в дистрибутиве RedHat 7.2 поставляется демон ppp с ошибкой, потому вам будет необходимо либо понизить, либо повысить версию демона.


Copyright (C) 2002 Иван Песин

[ опубликовано 30/01/2004 ]

Иван Песин (ipesin@post.lviv.ua) - Повесть о Linux и PPP   Версия для печати