Настройка сервера дозвона ???
Хочется настроить сервер в конторе, чтобы из дому люди могли дозвонится из
под оффтопика и линукса на сервер и получить к нему доступ. Соответственно с
помощью kppp или удаленного соединения. Доступ к внутренней сети совсем не
обязателен :-)
Кто знает где можно почитать внятные доки на эту тему на русском - ткните
урлем.
Я понимаю что крутить надо в сторону mgetty и раздавать чем-то ip клиентам
(dhcp ?), но должны ж быть внятные туторы у кого-то в букмарках :-)
Здравствуйте, A.Vorobets.
НАСТРОЙКА INCOMING CONNECTIONS В LINUX
(C) Serrgio[HI-TECH]
Users never read manuals...
"man mgetty", секция "BUGS"
В любой конторе наверняка найдутся один-два человека, которым жизненно
необходимо получать почту за пределами "офисной сети". Хорошо, если
ваш шеф человек с понятием и свято чтит КЗОТ - тогда он просто скажет
им: "ребята, в воскресенье нужно ОТДЫХАТЬ!". А если нет? Тогда не
остается ничего другого, кроме как пару минуту отвлечься от раскладывания
пасьянса и сделать это. Для тех, кто еще не понял - в статье пойдет
речь о том, как настроить удаленный доступ к серверу.
Во избежание всевозможных непонятностей и матюгальников, в том числе и
системных (и да не нарветесь вы на kernel panic), на всякий случай уточняю:
1). В качестве модема использовалась покрытая пылью коробочка с надписью "ZyXEL
228S".
2). Подключалось это безобразие к серийному порту почтового сервера.
3). В качестве операционной системы стоял ASPLinux версии 7.2.
Что ж, приступим ;)
ШАГ 1. После того, как модем должным образом подключен и сконфигурирован,
например, утилитой kudzu, попробуем его для начала протестировать на
предмет поднятия трубки. Для этого запускаем программу /sbin/mgetty
(чур, не путать с mingetty!) следующим образом:
mgetty -D -s 38400 -n 4 ttyS1
То есть указываем mgetty работать с модемом на линии /dev/ttyS1
только в режиме DATA (-D) со скоростью 38400 (-s), а трубку поднимать
только после четвертого гудка (-n). Если модем действительно подключен
к этой линии (а не к ttyS0, например) то при попытке дозвона вы услышите
ровно четыре длинных гудка, прежде чем модем "поднимет трубку".
ШАГ 2. Все устройства, с помощью которых можно получить доступ на
линуксовый сервер, должны быть должным образом прописаны в файле
/etc/inittab. Программа init считывает этот файл и "принуждает"
определенные программы отслеживать попытки регистрации в системе
через эти устройства. Чтобы каждый раз не запускать mgetty
ручками, переложим это муторное занятие на широкие плечи init'а.
Открываем файл inittab и дописываем туда вышеуказанную командную
строку следующим образом:
s1:2345:respawn:/sbin/mgetty -D -s 38400 -n 4 ttyS1
То есть даем init'у ценное указание под кодовым названием s1:
активизировать mgetty на четырех уровнях запуска (2345) и
"держать его постоянно" (respawn).
Даем команду ps fax|less, чтобы узнать PID процесса init (а ВДРУГ
он не равен 1?) и PID mgetty (а ВДРУГ он остался висеть после
"ручного" запуска?). Процесс mgetty, если он подгружен, киляем
обычным образом (kill <PID>), а вот init ненавязчиво просим
перечитать свой конфигурационный файл при помощи сигнала
"SIGHUP": kill -SIGHUP <PID>. После этого можно попробовать
тестирования ради кильнуть несколько раз mgetty - он все равно
будет появляться автоматически под новыми PID'ами. Именно
подобное поведение процесса, кстати говоря, и подразумевается
под параметром respawn в inittab'е.
ШАГ 3. Теперь необходимо сконфигурировать mgetty так, чтобы при
успешном коннекте инициировалось PPP-соединение. Для этого
открываем конфигурационный файл /etc/mgetty+sendfax/login.conf
и пишем там следующую каббалистику (остальные строчки конфига
лично я удалилил):
/AutoPPP/ - ppp /usr/sbin/pppd auth -chap +pap login modem
crtscts lock proxyarp
/AutoPPP/ расшифровывается как "обнаруживать PPP-соединение
автоматически", ppp можно смело заменить своим любимым словом
из трех букв. Далее следует путь к программе, которую нужно
запустить при обнаружении попытки установить PPP-соединение
и её параметры: auth означает, что перед тем как пустить клиента
в сетку, необходимо провести авторизацию; -chap - не проводить
chap-авторизацию (только не спрашивайте меня, что это такое);
+pap - проводить pap-авторизацию; login - использовать для
pap-авторизации базу зарегистрированных в системе юзверей;
modem - "общаться с модемом" (ждать CD, подавать DTR);
crtscts - использовать хардварный flow control (RTS/CTS)
при работе с серийным портом; lock - создавать lock-файл,
дабы доступ к устройству был эксклюзивным; proxyarp -
"добавлять" хост клиента в локальную сеть.
ШАГ 4. Чтобы клиент успешно прошел авторизацию, необходимо
сделать две вещи: добавить пользователя в систему (adduser
<username>, passwd <username>) и добавить регистрационную
информацию в файл /etc/ppp/pap-secrets.
#Secrets for authentication using PAP
#client server secret IP addresses
dialup * qwerty 192.168.1.254
Под client подразумевается имя пользователя, * server'а
говорит о том, что пользователь под этим именем может
подключаться к любым сервисам, secret - это пароль (он д
олжен быть тем же самым, что и при добавлении пользователя
в систему), IP addresses - ip-адрес, под которым
дозвонившийся клиент будет работать в сети.
Все, теперь можно тестировать mgetty по полной программе ;)
ШАГ 5. Лог mgetty находится в файле mgetty.log.ttyS1 каталога
/var/log/ и выглядит он следующим образом (я пронумеровал строки,
чтобы было легче их комментировать).
00 --
01 09/23 14:34:28 yS1 mgetty: experimental test release 1.1.26-Apr16
02 09/23 14:34:28 yS1 check for lockfiles
03 09/23 14:34:28 yS1 locking the line
04 09/23 14:34:28 yS1 lowering DTR to reset Modem
05 09/23 14:34:29 yS1 send: \dATQ0V1H0[0d]
06 09/23 14:34:29 yS1 waiting for ``OK'' ** found **
07 09/23 14:34:30 yS1 send: ATS0=0Q0&D3&C1[0d]
08 09/23 14:34:30 yS1 waiting for ``OK'' ** found **
09 09/23 14:34:30 yS1 waiting...
10 09/23 14:35:25 yS1 wfr: waiting for ``RING''
11 09/23 14:35:25 yS1 wfr: waiting for ``RING''
12 09/23 14:35:30 yS1 wfr: waiting for ``RING''
13 09/23 14:35:35 yS1 wfr: waiting for ``RING''
14 09/23 14:35:40 yS1 send: ATA[0d]
15 09/23 14:35:40 yS1 waiting for ``CONNECT'' ** found **
16 09/23 14:35:59 yS1 send:
17 09/23 14:35:59 yS1 waiting for ``_'' ** found **
18 09/23 14:36:01 yS1 clean_line: only 500 of 5277 bytes logged
19 09/23 14:36:11 yS1 login.config: max. 9 command line arguments possible
20 09/23 14:36:11 ##### data dev=ttyS1, pid=2307, caller='none',
conn='38400/V.34 28800/None', name='', cmd='/usr/sbin/pppd', user='/AutoPPP/'
01 - 03 - блокировка линии.
04 - 08 - инициализация модема.
09 - ждем-c, пока кто-нибудь позвонит ;).
10 - 14 - поднятие трубки после четырех "дзынь".
15 - 18 - обмен какой-то инфой (хз, что за она).
19 - считывание конфига.
20 - поднятие PPP и, собственно... клиент получил доступ к серверу ;).
Теперь, когда поставленная задача решена, самое время подумать
о "наворотах". Во-первых, давать ли пользователю доступ ко всей
"офисной сети" или ограничить его коннектом с почтовым сервером?
Во-вторых, если в вашей сети есть засранцы, считающие себя
хакерами, то хранение паролей в открытом виде - не очень
хороший способ. В-третьих, возможно имеет смысл настроить
mgetty таким образом, чтобы после установки соединения
модем сервера прерывал его и тут же пытался дозвониться
модему клиента сам...