Ключевые слова:linux, ppp, modem, dial-in, dial-up, (найти похожие документы)
From: Иван Песин <ipesin at post.Lviv.UA>
Newsgroups: Russian Linux Gazette
Date: Mon, 14 Jan 2004 14:31:37 +0000 (UTC)
Subject: Linux в качестве сервера доступа для клиентов Windows 9x/NT
Оригинал: http://gazette.linux.ru.net/rus/articles/TalePPP/taleppp.html
Повесть о Linux и PPP
Автор: (C) Иван Песин
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 Иван Песин
интересно, зачем включать маршрутизацию,
для того чтобы чужой дядя залез на ваш комп,
по моему если сетевое пространство на PPP выделяется из тех же ip то работать и так все будет.
А вот если есть другой сетевой интефейс с другим пространством, то net.ipv4.ip_forward = 1
позволит между сетями свободно ходить и комуто делать пакости.
Так что будьте осторожны читая подобные статьи,
хотя в целом статья неплохая.
Коннект вылетает с мессагой Имя пользователя или пароль недопустимы/
В логах 06/13 00:25:38 yS1 waiting for ''OK'' ** found **
06/13 00:25:38 yS1 waiting...
06/13 00:26:49 yS1 wfr: waiting for ''RING''
06/13 00:26:59 yS1 mdm_read_byte: read returned -1: Interrupted system call
06/13 00:26:59 yS1 wfr: timeout waiting for RING
06/13 00:26:59 yS1 huh? Junk on the line?
06/13 00:26:59 yS1 >>> could be a dial-out program without proper locking - check this!
Что делать?
Всё сделал как сказано в статье, заработало. Спасибо! Но интернета у PPP клиентов нет. Oни свободно могут видеть сеть, делать пинг даже смежной сети на eth2, но интернета нет. Есть ли готовый рецепт сделать Маскарадинг через iptables?
а у меня почему то нихрена не заработало, стоит RedHat 6.0, зделал все как ниписано, прикол в чем, модем трубку снимает, но как только начинается проверка пользователя и пароля, модем на сервере обрывает линию...
может кто че скажет че умное, как с этой фигней справится???
Борюс с dial-in уже неделю, никак не выходит нормально подключиться, если при создании соединения на WinXP в свойствах соединения, выбираю "вызывать окно терминала", окно появляется, могу логироваться, могу работать в шелле, но само соединение ещё не устанавливается, когда выбираю "готово" , терминал естественно уходит, после нескольких секунд задержки вываливается еррор "обнаружено замыкание на себя" под разными юзерами пробовал войти и под теми у которых в passwd вместо шелла указан pppd и "простых" . Все настройки идентичны данным в этой статье, перерыл уже несколько подобных мануалов, во всех вариантах исполнения у меня вываливается проблема с "замыканием на себя" Подскажите пожалуйста что я мог проглядеть.