Допустим, у вас есть подключенная к сети по скоростному каналу
машина под управлением 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_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, домашняя страница проекта -
http://alpha.greenie.net/mgetty/. На текущий момент последняя 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, добавляя туда
строчку:
значение 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 для всей задействованной
серой подсети:
Для создания более сложных конфигураций почитайте документацию к
iptables и netfilter вообще.
Как все это работает
Теперь окинем взором всю связку:
* удаленный пользователель звонит в наш пул, модемы устанавливают
соединение
* процесс mgetty, обслуживающий эту линию, после установления
соединения и определения его типа, запускает процесс pppd и сам
тихо умирает
* pppd, в свою очередь, авторизует пользователя по системной базе и
если все в порядке, поднимает IP-интерфейс в соответствии с
конфигом этого порта
* IP-пакеты за счет masquerade бегают от пользователя в сеть и
обратно, пользователь наслаждается интернетом
* по какой-либо причине модемное соединение разрывается (обрыв
связи, преднамеренное окончание сеанса со стороны клиента или
сервера), процесс pppd, обслуживавший его, запускает финальные
скрипты и умирает
* init вновь порождает процесс mgetty, призванный обслуживать
освободившуюся линию, система готова к следующему звонку
Устойчивого CONNECT'а вам!
08.02.2004
Den aka Diesel, http://diesel.tomsk.ru
1310 Прочтений • [Настройка dial-in модемного пула под Linux (modem dialup ppp getty linux nat)] [08.05.2012] [Комментариев: 0]