Google
 
Web avtobazar.com.ua


О том, как настроить в Л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