О том, как настроить в Лinuxe модемное соединение, уже
написано несметное количество статей. Но согласитесь, что когда приходится
конфигурировать какой-нибудь модем, будь то входящие или исходящие звонки,
все равно приходится открывать пару, тройку руководств. Эта статья ни чем
не отличается от перечисленных. В ней так же описан реальный
пример настройки соединения. Единственное отличие - ?? затрудняюсь назвать
:) В общем, тут описано как настроить маленький модемный пул.
Настройка
Для начала опишу инструментарий:
ОС: Linux Slackware 8.0.0
Ядро: 2.2.19
HW: Digiboard AccelePort 8r 920
Soft: pppd-2.4.1 mgetty-1.1.26
Установить Digiboard оказалось проще, чем я предполагал. На homesite лежат
дрова для всей продукции. Затем надо установить pppd и mgetty особо я тут
не увлекался.
Для pppd все просто: ./configure; make; make install
Плюс поддержка PPP в ядре, у меня модулем.
А вот для mgetty придется кое-что подправить, так как мы хотим, чтобы
юзвери входили без терминального окна. Заходим в исходники
mgetty и находим файл Makefile. Спускаемся примерно на 110ю строку
(подробней - читайте комментарий в текущем файле).
Видим: CFLAGS=-O2 -Wall -pipe
Добавляем: -DAUTO_PPP
Получаем: CFLAGS=-O2 -Wall -pipe -DAUTO_PPP
Сохраняем: F2 ;)
---
Итого: ./configure; make; make install
Если mgetty собран без -DAUTO_PPP, то надо использовать терминальное окно,
да и юзверей прописывать в систему :( Так что предлогаю пересобрать.
Боевой комплект готов. Осталось редактирование конфигов. Думаю
начать следует с инициализации модема, т.к. после этого надо настраивать
pppd, а тут уже каждый сам себе хозяин.
У меня модемный пул любительский, так что стоят Курьеры. Вся инициализация
зашита в ROM (AT&W) и в дальнейшем только ATZ. ВНИМАНИЕ: переключатель DTR
(если такой имеется) должен находится в положение "Always ON". Достаточное
кол-во информации на тему инициализации можно найти тут.
Переходим в директорию mgetty, каталог etc - конфигурационные файлы.
Файл dialin.config - обычно пустой (все закомментировано).
login.config - должен содержать только одну строку:
---
/AutoPPP/ - pppd /usr/sbin/pppd file /etc/ppp/options
---
mgetty.config - должен выглядеть примерно так:
---
speed 57600 # Максимальная скорость
data-only y # Только data, игнорировать fax
debug 5 # Уровень debug
init-chat "" AT OK ATZ OK # Вся иниц-ия записана в ROM (AT&W)
---
Теперь надо "подцепить" модемы. Для этого в файле /etc/inittab добавим
следующие строки:
---
D000:345:respawn:/usr/local/sbin/mgetty -x 5 -D /dev/ttyD000 ttyD000
....................................................................
....................................................................
....................................................................
D00n:345:respawn:/usr/local/sbin/mgetty -x 5 -D /dev/ttyD00n ttyD00n
---
У меня пока только 6ть модемов, следовательно, 6ть строк. А ttyD00n только
потому, что стоит Digiboard. Если в наличии имеется только
один модем и использовать стандартный порт (com2) , то
строка приобретает вид:
---
S1:345:respawn:/usr/local/sbin/mgetty -x 5 -D /dev/ttyS1 ttyS1
---
-х 5 # Будет писаться лог /var/log/mgetty.ttyD00n
# (по каждому модему отдельно)
-D # Data only, no fax
/dev/mgetty.ttyD00n # ttydevice
ttyD00n # gettydefs
Подробнее: man mgetty. Теперь нежно и аккуратно делает "init q", затем
смотрим в /etc/message наличие ошибок, а так
же появление файла(ов) /var/ttyD00n. Если все сделано корректно, то на
модеме горит чуть большее кол-во светодиодов, чем обычно ;) Попробуйте
позвонить на модем - должен ответить. В ином случае не правильная строка
инициализации. На самом деле вся моя инициализация на 3Com'e Курьере это
(ввод с терминалки):
ATZ OK
AT&F1 OK
ATC10=17 OK
AT&F1 OK
AT&P1 OK
AT&W OK
К этому времени модем должен быть готов к работе и осталось только pppd.
Тут, как я уже говорил, есть большой выбор вариантов настройки. Мой выбор:
пользователи не системные (/etc/ppp/pap-secrets),
следовательно, авторизация PAP, у каждого модема свой ip, многоканальная
линия, общие настройки в /etc/ppp/options, а
индивидуальные настройки в /etc/ppp/options.ttyD00n. А можно еще столько
наворотить и чтоб пользователь был системным, и чтоб каждый юзверь имел
свой ip, и чтоб без юзверя и без пароля, и чтоб использовалось
терминальное окошко, короче если кому интересно пишите. И так...
pppd - постараюсь покороче. Заходим в /etc/ppp/ Вот что там должно быть:
root@dialup:/etc/ppp# ls -l
total 48
-rw-r--r-- 1 root root 10022 Oct 25 23:12 options
-rw-r--r-- 1 root root 16 Oct 25 23:12 options.ttyD000
-rw-r--r-- 1 root root 16 Oct 25 23:13 options.ttyD001
-rw-r--r-- 1 root root 16 Oct 25 23:13 options.ttyD002
-rw-r--r-- 1 root root 16 Oct 25 23:13 options.ttyD003
-rw-r--r-- 1 root root 16 Oct 25 23:13 options.ttyD004
-rw-r--r-- 1 root root 16 Oct 25 23:14 options.ttyD005
-rw-r--r-- 1 root root 16 Oct 25 23:14 options.ttyD006
-rw-r--r-- 1 root root 16 Oct 25 23:14 options.ttyD007
-rw------- 1 root root 158 Oct 26 14:12 pap-secrets
root@dialup:/etc/ppp#
Теперь "cat" файла options:
root@dialup:/etc/ppp# egrep -v '#|^ *$' /etc/ppp/options
dialup:
ms-dns 212.248.100.8
asyncmap 0
auth
crtscts
lock
modem
-detach
debug
usehostname
proxyarp
lcp-echo-interval 30
lcp-echo-failure 4
root@dialup:/etc/ppp#
Тут полное описание на руссом файла options. В
начале "dialup:" - это (ip-server):(ip-client),
только (ip-server) прописано в options'e - общие
настройки, а (ip-client) в options.ttyD000 - индивидуальные настройки. В
сущность получается 192.168.1.2:192.168.1.10, т.к. у меня в DNS'e
...
dialup IN A 192.168.1.2
dialup-ttyD000 IN A 192.168.1.10
...
Ниже "cat" файла options.ttyD000
root@dialup:/etc/ppp# egrep -v '#|^ *$' /etc/ppp/options.ttyD000
:dialup-ttyD000
root@dialup:/etc/ppp#
Теперь файл /etc/ppp/pap-secrets. Должен chown
root.root, а chmod 600 - пароли все таки :) Его формат прост:
# Secrets for authentication using PAP
#client server secret IP addresses
user1 * user1passwd *
ppp * pppsecrets *
...
....
.....
При желании каждому user'у можно отдавать конкретный IP или таскать пароли
из /etc/passwd (/etc/shadow). Для этого пароль должен выглядеть так:
user1 servername "" ip_addr