Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

2006 г.

Настройка dial-in модемного пула

Денис Шергин, "Slackware Linux в Томске"

Постановка задачи

Допустим, у вас есть подключенная к сети по скоростному каналу машина под управлением Linux, модем и телефонная линия (или несколько линий и модемов). В такой ситуации возникает соблазн сделать из всего этого dial-in сервер, чтобы иметь dial-up доступ к этой машине и к сети из любого места.

Необходимо заметить, что модемы при этом должны быть настроены на автоответ на входящий звонок (как именно это сделать - смотрите в документации к вашему модему). Кстати, если вам понадобится программа-терминал для конфигурирования модема - можете воспользоваться minicom (входит в комплект пакетов Slackware).

Конфигурация ядра

Собираем ядро с поддержкой PPP (Point to Point Protocol), поддержкой асинхронных последовательных линий и поддержкой алгоритмов компрессии для PPP соединений (секция Network device support):

CONFIG_PPP=y # PPP (point-to-point protocol) support
CONFIG_PPP_ASYNC=y # PPP support for async serial ports
CONFIG_PPP_DEFLATE=y # PPP Deflate compression
CONFIG_PPP_BSDCOMP=y # PPP BSD-Compress compression

Так как скорее всего вам не захочется тратить реальные адреса на модемные соединения (или у вас просто нет лишних адресов), вполне логично использовать IP-адреса из серого диапазона и воспользоваться механизмом MASQUERADE. Секция Networking options:

CONFIG_NETFILTER=y # Network packet filtering (replaces ipchains)
CONFIG_INET=y # TCP/IP networking

в подменю IP: Netfilter Configuration:

CONFIG_IP_NF_CONNTRACK=y # Connection tracking (required for masq/NAT)
CONFIG_IP_NF_IPTABLES=y # IP tables support (required for filtering/masq/NAT)
CONFIG_IP_NF_NAT=y # Full NAT
CONFIG_IP_NF_TARGET_MASQUERADE=y # MASQUERADE target support

После этого соответственно нужно пересобрать ядро и перезагруться с ним.

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

Нам понадобится mgetty+sendfax (домашняя страница проекта). На текущий момент последняя beta версия mgetty - 1.1.30, однако опытным путем выяснилось, что лучше использовать версию 1.1.28, ибо 1.1.30 у меня как-то странно глючила.

Распаковываем тарбол:

% tar zxvf ./mgetty1.1.28-Jan10.tar.gz
% cd ./mgetty-1.1.28

копируем дефаултный policy.h, на базе него будем составлять свою конфигурацию:

% cp ./policy.h-dist ./policy.h

Редактируем policy.h, переназначая консоль для вывода сообщений, чтобы всякая ерунда не сыпалась на экран (если нужно - в логах все можно посмотреть):

#define CONSOLE "/dev/null"

Редактируем Makefile:

CFLAGS= -DAUTO_PPP
prefix=

Компилируем и устанавливаем mgetty:

% make
% make install

Редактируем /etc/mgetty+sendfax/login.config, добавляя туда строчку:

/AutoPPP/ -     a_ppp   /usr/sbin/pppd file /etc/ppp/options

В /etc/mgetty+sendfax/mgetty.config для каждого порта прописываем (соответственно указывая ttyS0, ttyS1...):

port ttyS0
    debug 3
    data-only y

Добавляем в /etc/inittab запуск mgetty init'ом (по строчке на каждый порт):

d0:23:respawn:/sbin/mgetty ttyS0

Перезапускаем init (необходимо делать после каждого изменения inittab):

% kill -1 1

Настройка pppd

За PPP соединения отвечает демон pppd, настроим его так. чтобы при установлении соединения интерфейсу выдавался серый IP-адрес.

В /etc/ppp/options прописываем (информацию по этим опциям можно найти, почитав man pppd):

modem
crtscts
-detach
mru 1500
mtu 1500
auth
+pap
login
ms-dns 192.168.100.1
netmask 255.255.255.0

значение ms-dns - адрес вашего DNS-сервера, netmask - сетевая маска, выставляемая для всех поднимаемых интерфейсов.

Создаем для кажого порта файлик /etc/ppp/options.ttySX (options.ttyS0, options.ttyS1...) и прописываем в нем комбинацию шлюз:адрес (адрес, естественно, для каждой линии свой):

192.168.0.1:192.168.0.10

Заводим в системе модемного пользователя, указывая в качестве шелла /usr/sbin/pppd. Будем пользоваться системной базой паролей, в файлик /etc/ppp/pap-secrets для каждого модемного пользователя добавляем запись:

user * "" *

Если вам необходимо как-то производить учет и ограничение доступа (accounting/billing) пользователей к пулу (например, установить им временной лимит использования пула), можно для этих целей воспользоваться скриптами /etc/ppp/auth-up, /etc/ppp/ip-up и /etc/ppp/ip-down, /etc/ppp/auth-down, которые исполняются при установлении и окончании соединения соответственно.

Настройка masquerade

Если проделать вышеописанные действия, уже будет работать доступ до нашего dial-in сервера, но мы хотели пускать дозвонившихся дальше в сеть, для этого-то и воспользуемся MASQUERADE для всей задействованной серой подсети:

% /usr/sbin/iptables -t nat -A POSTROUTING -i ppp+ -s 192.168.0.0/24 -j MASQUERADE

Для создания более сложных конфигураций почитайте документацию к iptables и netfilter вообще.

Как все это работает

Теперь окинем взором всю связку:

  • удаленный пользователель звонит в наш пул, модемы устанавливают соединение
  • процесс mgetty, обслуживающий эту линию, после установления соединения и определения его типа, запускает процесс pppd и сам тихо умирает
  • pppd, в свою очередь, авторизует пользователя по системной базе и если все в порядке, поднимает IP-интерфейс в соответствии с конфигом этого порта
  • IP-пакеты за счет masquerade бегают от пользователя в сеть и обратно, пользователь наслаждается интернетом
  • по какой-либо причине модемное соединение разрывается (обрыв связи, преднамеренное окончание сеанса со стороны клиента или сервера), процесс pppd, обслуживавший его, запускает финальные скрипты и умирает
  • init вновь порождает процесс mgetty, призванный обслуживать освободившуюся линию, система готова к следующему звонку

Устойчивого CONNECT'а вам!

Новости мира IT:

Архив новостей

Последние комментарии:

Loading

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 985 1945361
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2015 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...