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 с ошибкой, потому вам будет необходимо либо понизить, либо повысить версию
демона.