JA :: Just Articles

На главную

Настраиваем Dial-in во FreeBSD.

Автор: Svyatoslav "KipDblK" Bezgin

0. Введение.

Очень часто возникает желание сконнектиться компьютерами с целью передачи данных и/или общения. В основном для этого применяют программы-терминалки, например HyperTerminal, minicom и другие, но это, как говориться не "Unix way". Настоящий пользователь *nix пожелает настроить входящее интернет соединение, чтоб хоть на полчаса почувствовать себя кул сисАдмином и провайдером в одном лице.

В данной статье я остановлюсь на настройке входящего ppp соединеия в среде FreeBSD, ибо про Lnux написано даже очень много, а FreeBSD обойдена таким вниманием. В FreeBSD существует две реализации ppp. Это kernel-level ppp, его функциональность обеспечивается программой pppd(8) и так называемый user-ppp, который представлен программой ppp(8). Про настройку pppd очень много сказано на http://www.sysoev.ru, а про ppp напрасно забыли. Итак, в этой статье рассказывается про настройку связки mgetty и ppp; mgetty служит для ожидания звонка и снятия трубки, а ppp занимаеться всем остальным.

1. Установка и настройка mgetty.

Итак, начнем. Пусть для определенности модем будет подключен ко второиу com-порту, соответсвенно в системе он будет фигурировать как /dev/cuaa1. Я надеюсь, что подключение к интернету из-под FreeBSD у вас уже настроена, иначе бегом читать handbook на эту тему.

Теперь установим mgetty. Сделаем это привычным для каждого пользователя FreeBSD способом -- используя механизм портов.

$su
Password:
#cd /usr/ports/comms/mgetty+sendfax
#make
#make install
#exit
После выполнения make install вам зададут n вопросов на которые надо честно ответить и тогда вы получите практически полностью настроенный /usr/local/etc/mgetty+sendfax/mgetty.config в котором надо проверить только следующую вещь: переменная blocking должна быть выставленна в значение NO, иначе будут проблемы с блокировкой модема, когда mgetty ожидает звонка, а вам хочется позвонить а интернет или фидо. Вот пример моего mgetty.config:
port cuaa1
#Модем висит на втором ком-порте
debug 4
#Уровень ведения логов
fax-id 77 52 719255
#Идентификатор факса, используется для передачи/приема факсов
speed 115200
#Cкорость порта
switchbd 19200
#Что-то связанное со скоростью порта в режиме факса, но я не разбирался с факсами
direct NO
#У меня не выделенка ;-)
blocking NO
#Не блокировать порт во время ожидания
port-owner uucp
port-group dialer
port-mode 0660
#Владелец порта и режим доступа к нему
toggle-dtr YES
#Понижать ли уровень DTR при сбросе модема
toggle-dtr-waittime 500
#Время понижения DTR
data-only NO
#mgetty использутся только для данных
fax-only NO
#mgetty использутся только для факсов
modem-type auto
#тип модема. Испольуется для факсовых операций
init-chat "" ATS0=0Q0&D3&C1 OK
#Строка инициализации
modem-check-time 3600
#интервал проверки модема на зависание
rings 3
#отвечать будем через 3 звонка
answer-chat "" ATA CONNECT \c \r
#строка ответа
answer-chat-timeout 80
#Таймаут ожидания
autobauding NO
#что такое сам не понял
ringback NO
ringback-time 30
#ringback позволяет иметь телеыон и модем на одной линии.
#сначала mgetty не будет брать трубку при звонке, но запомнит, что он был
#и если кто-то перезвонит в течении 30 секунд после первого звонка, то он снимет трубку
ignore-carrier false
#если модем не поднимает сигнал DCD, но работает в принципе должно помочь true
issue-file /etc/motd
#Файл, содержимое которого печатается, если входящий звонок не ppp
prompt-waittime 500
#сколько ждать перед выводом issue-file и приглашения к логину
login-prompt @!login: 
#Формат строки приглашения
login-time 240
#и время ее вывода
diskspace 1024
#минимальное место на диске для приема факса (в KB)
notify kirdyk
#уведомить по почте этого пользователя, что пришел факс
fax-owner uucp
fax-group dialer
fax-mode 0660
#владелец и права принятых факсов
Теперь надо проверить файл /etc/ttys на наличие в нем следующей строки:
cuaa1	"/usr/local/sbin/mgetty"	unknown on insecure
Эта строка говорит, что на терминале cuaa1 "сидит" mgetty, а слово insecure означает, что по этому терминалу нельзя заходить root'ом.

Вся прелесть mgetty заключается в его умении различать тип входящих звонков, и в зависимости от этого запускать ту или иную программу. Так mgetty может определять EMSI звонок и запускать ftn-mailer, PPP звонки и запускать ppp программу, а если это ни то и не другое, то выдается приглашение зайти в систему. Нам нужно теперь настроить эту фичу. Для этого открываем файл /usr/local/etc/mgetty+sendfax/login.config находим там строку начинаюшуюся с "/Auto-PPP/", раскомментируем ее и меняем на следующее:

/AutoPPP/ -	a_ppp	/usr/sbin/ppp -direct dialin
И все. Все довольны, и теперь сделав
#kill -1 1
и позвонив на модем можно услышать радостное шипение и попискивание ;-) Если сего не наблюдается, то ползем в /var/log/mgetty.cuaa1 и вдумчиво читаем логи.

2. Настройка ppp.

Теперь настроим собственно ppp(8). Это делается еще легче, чем настройка mgetty. Открываем в своем любимом редакторе файл /etc/ppp.conf и создаем в нем новую секцию и называем ее dialin. В принципе можно использовать любое название, но тогда в /usr/local/etc/mgetty+sendfax/login.config вместо /usr/sbin/ppp -direct dialin надо прописать /usr/sbin/ppp -direct <section_name>. Вот как эта секция выглядит у меня:

dialin:
 disable pred1
 deny pred1
 #Запрещаем и отказываемся от сжатия pred1
 #Позволяет избежать некоторых проблем с
 #linux'овым pppd, и, как стало известно с mpd
 enable chap chap80 chap81 pap passwdauth
 #Разрешаем все виды аутентификации
 #и использование системной базы master.passwd для аутентификации
 enable proxy
 #Разрешаем прохождение ARP запросов на удаленную сторону. 
 #если есть локальная сеть, то удаленная сторона будет как бы являться частью LAN
 set ifaddr 192.168.0.1 192.168.0.1/24 
 #устанавливаем ip адреса.
 #нам выдаетсяадрес 192.168.0.1
 #Удаленной стороне любой из диапазона 192.168.0.1/24
 #подробнее man 8 ppp
 accept dns
 #Отвечаем на DNS запросы удаленной стороны.

Теперь все уже существующие пользователи могут сконнектиться по ppp, но если у меня есть 20 человек мне неохота заводить 20 пользователей, а создание публично доступной комбинации логин/пароль уменьшает защищенность системы в целом. Поэтому мы поступим по другому. Надо создать файл /etc/ppp/ppp.secret

$su
Password:
#cd /etc/ppp
#touch ppp.secret
#chmod 600 ppp.secret
#$EDITOR ppp.secret
#exit
и прописать там пользователей в формате
username<TAB>password
Например так
user	user
Теперь к вам можно зайти по ppp использую комбинацию user/user, но это распространяется только на ppp, что увеличивает секьюрность.

Вот и все. Теперь можно договариваться с друзьями и просить их проверить как это все работает. если что-то не так, то надо читать /var/log/mgetty.* и /var/log/ppp.log

2. Советы и хитрости.

2.0 Непринятие звонков

Поскольку сейчас настроенный mgetty так и хочет поднять трубку после третьего звонка, то возникает интересный вид спорта: успеть к телефону за 3 звонка, иначе человеку придеться шептаться с модемом ;-)

Но у нас и на это найдеться лекарство. Чтоб запретить mgetty принимать звонки на специфическом порту надо просто создать файл /etc/nologin.<devname> в нашем случае это /etc/nologin.cuaa1. Делаем раз:

#cd /etc
#touch nologin.cuaa1
перезапускать mgetty не надо! При звонке он сначала проверит наличие файла, и только потом примет решение, ответить ли на звонок. Когда же вам надоедят бренные акустические разговоры, надо просто удалить магический файлик. Делаем два:
#cd /etc
#unlink nologin.cuaa1

2.1 Работа по расписанию

Файлики nologin всем хороши, но приходиться постояноо их создавать/убивать, что при систематических звонках немного напрягает. Надо это автоматизировать! Предположим, что мы решили отвечать модемом с 22-00 до 8-00 каждого дня. Для этого в файл /etc/crontab добавляются следующие строки:

*/15	8-21	*	*	*	root	! [ -e /etc/nologin.cuaa1 ] && touch /etc/nologin.cuaa1
*/15	22-23	*	*	*	root	[ -e /etc/nologin.cuaa1 ] && unlink /etc/nologin.cuaa1
*/15	0-7	*	*	*	root	[ -e /etc/nologin.cuaa1 ] && unlink /etc/nologin.cuaa1
Этим самым каждые четверть часа проверяется наличие или отсутсвие файла /etc/nologin.cuaa1 и, в зависимости от времени суток он убивается или создается. Автоматизация - конек юниксоида!

3. Поклоны.

Все вопросы, тухлые яйца и виртуальные розы просьба направлять по адресу bezgin@front.ru. Возможно я что-то пропустил, ибо я настраивал все вышеописанное полгода назад ;-)

© Svyatoslav "KipDblK" Bezgin, 21 January 2004

На главную

Дизайн и программирование : Sergey Guriev
Вопросы, предложения, комментарии присылайте по адресу webmaster@ja.fatal.ru