From: Дмитрий Новиков <dmn@nnz.ru>
Newsgroups: http://www.artmagic.ru/labs/
Date: Mon, 4 Dec 2002 13:01:37 +0000 (UTC)
Subject: Настройка модема для организации приема входящих звонков
Пошаговая настройка модема на входящие звонки для доступа в сеть
Интернет по коммутируемым линиям.
1. Для того, чтобы предоставлять доступ в сеть или Интернет по
коммутируемым соединениям можно применять различные средства (UNIX,
Windows RAS, Cisco). Наиболее практичным безопамным и управляемым
решением является установка UNIX сервера и пакета pppd (Point to Point
Daemon). Этот пакет обладает очень широкими возможностями по настройке
соединений и организации множественного доступа.
Для организации коммутируемого доступа мы применяем OC FreeBSD и
пакеты pppd и mgetty. Аналогично натсройка может быть успешно
произведена для Linux и практически для любой ОС.
2. Пакет pppd в операционной системе FreeBSD 4.4 идет в стандартной
поставке, все остальные пакеты необходимые для работы pppd будут
установлены по зависимостям.
3. Необходимо скачать (или взять из портов) mgetty-1.1.28.01.10.tgz
Для того, что бы собрать mgetty из портов, нужно выполнить следующие
команды:
cd /usr/ports/comms/mgetty
make
После успешной сборки можно установить mgetty командой:
make install
Пакет mgetty задаст несколько простых вопросов о типе модема,
КОМ-порте к которому производиться подключения и о параметрах работы
(для UNIX com1 это cuaa0, com2 это cuaa1 и т.п.). В последствии можно
редактировать эти параметры в файле
/usr/local/etc/mgetty+sendfax/mgetty.config
Приведем типичный пример mgetty.config, который работает на прием
звонков с первого гудка для всех AT-совместимых модемов.
debug 4
fax-id 00 00 000000
speed 57600 <--- скорость порта
direct NO
blocking NO
port-owner uucp
port-group uucp
port-mode 0660
toggle-dtr YES
toggle-dtr-waittime 500
data-only YES <--- работать только с данными (умеет еще работать с
факсами)
fax-only NO
modem-type auto
init-chat "" ATS0=0Q0&D3&C1 OK <-- строка инициализации модема
modem-check-time 3600 <-- периодичность проверки модема
rings 1 <-- с какого звонка снимать трубку и инициировать соединение
answer-chat "" ATA CONNECT c r <-- строка ответа на звонок
answer-chat-timeout 80
autobauding NO
ringback NO
ringback-time 30
ignore-carrier false
issue-file /etc/issue
prompt-waittime 500
login-prompt @!login:
login-time 240
diskspace 1024
notify faxadmin
fax-owner uucp
fax-group modem
fax-mode 0660
По умолчанию в mgetty.config есть еще строчка (port ...), но мы ее
предпочитаем убирать, т.к. зачастую запускаем mgetty на нескольких
портах.
3. Далее необходимо инициализировать mgetty на порту(ах). Для
управления внешними соединениями через последовательные уситройства
применяется файл /etc/ttys (vi /etc/ttys). В этом файле определяются
параметры и типы терминалов, в том числе и для последовательных
портов.
После установки mgetty в самом конце (внизу) этого файла должна
появиться строка:
сuaa0 "/usr/local/sbin/mgetty" unknown on insecure
(если её нет, то надо прописать самому)
Если необходимо запустить mgetty на нескольких портах, необходимо
добавить аналогичные строчки для всехх портов. Например, для com1:
сuaa1 "/usr/local/sbin/mgetty" unknown on insecure
4. После того, как все изменения сделаны, нужно перестартовать процесс
init:
kill -1 1 (у процесса init всегда pid=1).
Нужно проверить, запустился ли mgetty:
Команда: ps ax | grep mgetty должна выдать результат:
ps ax | grep mgetty
39676 ?? I 0:00.12 /usr/local/sbin/mgetty cuaa1
73454 ?? I 0:00.02 /usr/local/sbin/mgetty cuaa0
Программа mgetty ведет подробные лог-файлы, которые располагаются в
каталоге /vat/log и называются mgetty.[порт]. В них можно увидеть
какие команды посылаются модему и какие ответы получает система. Если
mgetty "правильно" видит модем на порту, то в лог-файл будут записи,
подобные этим:
12/15 12:08:41 aa0 mgetty: experimental test release 1.1.25-Feb01
12/15 12:08:41 aa0 check for lockfiles
12/15 12:08:41 aa0 locking the line
12/15 12:08:44 aa0 lowering DTR to reset Modem
12/15 12:08:45 aa0 send: ATS0=0Q0&D3&C1[0d]
12/15 12:08:45 aa0 waiting for ``OK'' ** found **
12/15 12:08:45 aa0 waiting...
12/15 13:08:45 aa0 checking if modem is still alive
12/15 13:08:46 aa0 mdm_send: 'AT' -> OK
12/15 13:08:46 aa0 waiting...
Если mgetty не найдет модем на порту она будет его искать, непрерывно
сообщая о неудачах в лог-файл.
5. Далее нужно настроить mgetty на запуск pppd. Вообще, вся мощь
mgetty заключается в том, что она по типу пакета - запроса запускает
различные программы. Т.е. в зависимости от запроса она может запустить
программу pppd, uucp, или выдать приглашение login: (по умолчанию).
Для того, чтобы mgetty "понимала" pppd, нужно отредактировать файл
файл /usr/local/etc/mgetty+sendfax/login.conf
6. В файле login.conf необходимо найти строку которая начинается с
#AutoPPP, раскоментировать и прописать либо параметры запуска pppd,
либо просто указать pppd конфигурационный файл (можно вообще ничего не
указывть - тогда будет взят файл по-умолчанию - /etc/ppp/options).
Номы предпочитаем делать отдельный конфигурационный файл для
соединений по модему (мало ли как еще будет применен pppd, например
для постоянных соединений). Поэтому наша строка должна выглядеть
следующим образом:
7. Затем снова необходимо перестартовать init: kill -1 1
10. Далее нужно создать файл с логинами и паролями пользователей для
доступа (/etc/ppp/pap-secrets) через модем. Файл pap-secrets содержит
строчки вида:
modem: данная опция настраивает демон pppd так, чтобы он проверял
наличие сигнала CD (Carrier Detect) от модема, после чего осуществляет
открытие порта.
noipdefault: указывает, что IP адрес назначается динамически.
crtscts: эта опция устанавливает аппаратный контроль за
приемом/передачей данных; необходима для высокоскоростных соединений.
domain: задает доменное имя провайдера, к которому осуществляется
подключение, что иногда необходимо для аутентификации (доменное имя
добавляется к имени хоста)
require-pap: требование использовать именно РАР-аутентификцию
refuse-chap: если задать эту опцию, то хост откажет клиенту в СНАР-
аутентификации, даже если удаленный компьютер делает запрос именно на
такой тип аутентификации.
ms-dns: задает DNS для пользователей Windows-систем.
idle 1000: задает интервал "простоя" в секундах. Если за указанное
время через интерфейс не будет передано ни одного байта - то pppd
автоматически закрывает соединение
proxyarp: добавляет адреса пользователей pppd в arp таблицу, что
позволяет использовать их без дополнительной маршрутизации.
Более подробную информацию обо всех параметрах можно получить из
документации на pppd (man pppd).
12. Осталось задать IP-адрес, который будет получать пользователь и
локальный IP-адрес. Это можно сделать в файле options.modem, но
правильнее создать специальный файл, который будет читаться, при
соединении с конкретным портом.
При старте pppd "читатет" файлы options.[имя порта соединения]. Для
com1 (cuaa0) создадим файл /etc/ppp/options.cuaa0. в котором будет
всего одна строка, задающая локальный IP и IP пользователя, который
подсоединиться к этому порту:
195.131.31.1:195.131.31.245
Если организовывается несколько принимающих портов, то нужно для всех
них создать подобные файлы. Например, /etc/ppp/options.cuaa1:
195.131.31.1:195.131.31.246
В качество локального IP смело можно указывать Интрнетовский
IP-интерфейс.
13. Теперь осталось проверить что все работает. Для этого, можно в
Windows настроить новое соединение с Интернетом, указав логин и
пароль, прописанный в pap-secrets. При удачном соединении mgetty
выдаст:
12/15 12:13:44 aa0 wfr: waiting for ``RING''
12/15 12:13:44 aa0 send: ATA[0d]
12/15 12:13:44 aa0 waiting for ``CONNECT'' ** found **
12/15 12:13:55 aa0 send:
12/15 12:13:55 aa0 waiting for ``_'' ** found **
12/15 12:13:57 ##### data dev=cuaa2, pid=73540, caller='none',
conn='21600/ARQ/V
32/LAPM/V42BIS', name='', cmd='/usr/sbin/pppd', user='/AutoPPP/'
А pppd должен выдать (в зависимости от уровня debug):
Dec 15 14:12:43 vGate pppd[74380]: Connect: ppp4 <--> /dev/cuaa0
Dec 15 14:12:47 vGate pppd[74380]: rcvd [PAP AuthReq id=0x6
user="user" passw
ord="password"]
Dec 15 14:12:47 vGate pppd[74380]: sent [PAP AuthAck id=0x6 "Login
ok"]
Dec 15 13:56:17 vGate pppd[74175]: found interface fxp0 for proxy arp
Dec 15 13:56:17 vGate pppd[74175]: local IP address 195.131.31.1
Dec 15 13:56:17 vGate pppd[74175]: remote IP address 195.131.31.246