Хотелось ли вам хоть когда-нибудь стать провайдером? Представьте — вы выдаете кому-то логин, пароль, этот кто-то подключается... Давайте попробуем создать рабочий dial-up сервер, поддерживающий подключение Linux/Windows-машин как через терминал, так и в PPP-сессии.

Что нам нужно:

1. Модем, работающий в Linux;

2. Поддержка PPP в ядре;

3. PPPD (Point-to-Point Protocol Daemon) — демон PPP;

4. Mgetty.

Несколько замечаний. В комплект практически любого дистрибутива по умолчанию ядро входит с поддержкой PPP; если этой поддержки нет, PPPD не заработает. Мой модем подключен к ttyS0 (COM1) — обязательно узнайте, куда он подключен у вас. Настоятельно рекомендую либо во всех программах использовать символические ссылки типа /dev/modem, либо просто /dev/ttyS0, но не смешивать ссылки и файлы! Почему — узнаете далее. Практически все конфигурационные действия потребуется выполнять от имени root.

Для начала все установим и посмотрим, что к чему.

PPPD

Если вы уже входили в Интернет через Linux, то данный пакет у вас установлен. Если не уверены, тогда запустите (под любым пользователем):

whereis PPPD

Если вам скажут Not found или вообще ничего не скажут, то пакет PPP еще потребуется установить.

Mgetty

Эта программа будет отвечать у нас на входящие звонки. Это не единственная ее функция — еще она может принимать/отправлять факсы и даже работать с voice-модемом, как с автоответчиком. Mgetty можно найти на дисках вашего дистрибутива, в этом случае файлы конфигурации будут находиться в /etc/mgetty+sendfax. Также можно скачать исходники mgetty в Интернете: . Если вы планируете пользоваться автоответчиком, последние очень будут кстати. Внимательно прочитайте все инструкции и соберите программу, в makefile в CFLAGS= обязательно допишите -DAUTO_PPP. В случае успешной сборки по умолчанию файлы конфигурации будут находиться в /usr/local/etc/mgetty+sendfax. С помощью вашего любимого текстового редактора открываем файл mgetty.config. Здесь мы поставим на максимум скорость доступа к модему (если ваш модем не поддерживает скорость 115200 бит/c, пропишите корректное значение):

speed 115200

и настройки порта:

port ttyS0 debug 3 # ограничить объем отладочной информации data-only y # не использовать функции факса

Дальше идем в login.config, там находим строчку, начинающуюся с #/AutoPPP/ и снимаем с нее комментарий (убираем # вначале). Mgetty настроена и уже готова к тому, чтобы вы ее запустили. Теперь проверим, правильный ли порт выбран:

mgetty -D ttyS0

Если в течение примерно полминуты программа завершилась, значит, не все в порядке с настройками. Взгляните на файл /var/log/mgetty.log.ttyS0 (или mgetty.ttyS0) и проверьте последние записи — возможно, там будет описание ошибки. В идеальном случае программа не должна завершаться вообще (без помощи Ctrl+C). Но таким образом получить dial-in соединение не получится — mgetty не сможет нормально контролировать порт и вылетит при первом же звонке. Поэтому, как и сказано в инструкции, запуск программы будет происходить через /etc/inittab.

В конце данного файла допишите:

S0:345:respawn:/sbin/mgetty -D ttyS0 -n 3

или

S0:345:respawn:/opt/sbin/mgetty -D ttyS0 -n 3

в зависимости от того, где лежит исполняемый файл mgetty. (-n 3 означает, что модем будет «брать трубку» после третьего звонка)

Все, теперь вам осталось сохранить inittab и скомандовать:

/sbin/telinit q

Теперь init увидит изменения.

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

Терминальный доступ

Создайте полноценного пользователя (например, dialup), который будет подключатся через модем. Измените ему пароль (passwd dialup) и передайте эти сведения своему «клиенту». Тот со своей машины в Hyper-Terminal'е дозвонится к вам и получит рабочую Linux-консоль (Рис. 1). Теперь он является полноправным пользователем вашей машины. Будьте внимательны — если до этого вы не беспокоились о правах пользователей и не контролировали доступ, сейчас самое время изменить свое отношение к безопасности файлов на своем компьютере. Также советую установить пароли на вход всех пользователей и особенно root, ведь одно неверное движение... Также советую просматривать системные логи, хранящиеся в /var/log — там можно найти очень много полезной информации о системе: кто и откуда входил в систему, какие были сообщения ядра и т.д. Заходите, не пожалеете.

Рис. 1.

Уверен, что вам захочется поговорить с подключенным пользователем. Для этих целей будем использовать talk. Синтаксис команды таков:

talk <имя пользователя>

Окно терминала разделится на две части, и, если ваш пользователь запустит talk <ваше имя>, вы сможете вести разговор. Для того чтобы заработал talk, нужно установить 2 пакета —talk и talk-server, после чего включить запуск сервиса в xinetd. С последним пунктом поступаем так: идем в /etc/xinetd.d и открываем файл talk. Изменяем параметр disable=yes на disable=no, и при следующем перезапуске xinetd talk начнет ожидание входящих соединений.

/etc/init.d/xinetd restart

Если вы хотите, чтобы удаленный пользователь мог что-то скачивать или закачивать на ваш компьютер, нужно установить пакет с веселым названием lrzsz, в котором находятся утилиты для передачи файлов по протоколам X/Y/ZModem. Использовать мы будем только последний (поддержка докачки), а для того чтобы пользователь не утруждал себя запоминанием строчки:

/usr/bin/sz -b -r &lt;имя файла&gt;

создадим скриптик:

#!/bin/bash for FILE in $@; do /usr/bin/sz -b -r $FILE; done

сохраним его как dl, сделаем исполняемым (chmod +x dl) и положим в /usr/local/.

Теперь, если юзер увидит файл и захочет его скачать, он просто наберет:

dl &lt;имя файла1&gt; &lt;...&gt;

(Разумеется, если /usr/local/bin будет присутствовать в переменной окружения $PATH), после чего запрошенный файл медленно (это же модем!) перетечет на его компьютер. Параметр -b указывает, что данные нужно передавать в двоичном виде, а -r позволяет докачивать файл после разрыва.

Чтобы закачать файл на ваш сервер, потребуется выполнить такую команду:

/usr/bin/rz

После этого терминал как бы зависнет, ожидая начала передачи.

Сейчас все сетевые операции происходят через lo-интерфейс вашей системы, поэтому настройки firewall'а изменять нет необходимости; но как только мы сконфигурируем PPPD, вам потребуется разрешить соединения с адреса, который вы присвоите своему пользователю.

PPP-доступ

Полагаю, что его используют большинство наших провайдеров. Настала и ваша очередь.

Предположим, что PPPD уже установлен. Тогда начнем его конфигрурировать. Переходим в папку /etc/PPP.

В конец файла pap-secrets дописываем такое:

**“”*

(звездочка звездочка две_кавычки звездочка)

что значит: «позволить любому зарегистрированному пользователю подключатся к серверу, не думая о пароле и IP-адресе».

Теперь осталось присвоить вам и вашему пользователю IP-адреса. Их можно задать, например в файле options в виде ваш_IP:IP_клиента, т.е. 192.168.1.1:192.168.1.254. Вы можете присваивать абсолютно любые адреса. Внимание! Если вы собираетесь через данный компьютер выходить в Интернет, перед выходом обязательно уберите эти настройки IP-адресов, т.к. при подключении к провайдеру ваша система попытается сама присвоить адреса. Серверу это не понравится, и Интернета не будет. Самый простой выход — создать скрипт:

#!/bin/bash case "$1" in on) echo "192.168.1.1:192.168.1.254" &gt; /etc/PPP/options.ttyS0; rm -f /etc/nologin.ttyS0 ;; off) rm -f /etc/PPP/options.ttyS0; touch /etc/nologin.ttyS0 ;; status) [ -f /etc/PPP/options.ttyS0 ] &amp;&amp; echo "Dialin mode: on";; *) echo -e "Usage:\n\t$0 [ on | off | status ]";; esac

и сохранить его в /usr/local/sbin/dialin, права на использование дать только root'у (chmod 0700 dialin). Запускать этот скрипт root'ом до выхода в сеть с параметром off, а если нужно, то разрешить входящие соединения —dialin on (наличие файла /etc/nologin.ttyS0 сигнализирует mgetty о том, что трубку брать не требуется). Теперь вот еще что: в ваших настройках интернет доступа обязательно должен быть включен пункт Использовать lock-файл, или же в /etc/PPP/options должен значиться параметр lock. Если вы этого не сделаете, в Интернет через модем вы опять же не попадете — программа дозвона начнет набирать номер, mgetty заметит, что с модемом что-то не то, и заново переинициализирует его. В итоге никто не получит эксклюзивных прав доступа к модему. Если lock-файл будет создан (где-то в /var/lock) с именем LCK..ttyS0, mgetty не будет обращаться к модему до момента снятия блокировки. В начале статьи я предупредил, что не надо в одной программе ставить /dev/ttyS0, а в другой —/dev/modem. Файл LCK..modem скажет mgetty, что использовать /dev/modem нельзя, он ведь использует /dev/ttyS0, а значит — «никаких проблем». Это также применимо и к другим программам, работающим с модемом (minicom, например).

Ну вот, теперь уже от удаленного пользователя требуется создать удаленное соединение, установить в качестве типа сервера PPP (не SLIP!); из протоколов оставляем только TCP/IP, выбрать IP-адрес назначается сервером, логин и пароль остались прежними.

Подключение

Предположим, у вас установлен Apache — тогда, подключившись и набрав http://192.168.1.1, юзер получит вашу страничку (Рис. 2). В Apache можно выставить опцию Indexes, чтобы список файлов генерировался автоматически. Файлы теперь можно скачивать, используя различные менеджеры закачек (FlashGet, ReGet, wget), без вашего непосредственного участия. Еще можно поговорить с подключившимся, но для этого потребуется разрешить входящие соединения на 23 порт и установить пакет telnet-server. Для включения сервиса telnet вам потребуется произвести изменения в файле /etc/xinetd.d/telnet (см. настройку talk) — если firewall не будет препятствовать, удаленный пользователь с помощью telnet сможет войти в вашу систему и там уже запустить talk. Если во время разговора будут передаваться файлы, это заметно скажется на скорости передачи букв, задержки будут до нескольких секунд (в зависимости от линии и модемов), но главная же задача — файл передать!

[![Рис. 2.](https://ua-tech-mags-archive.s3.us-east-2.amazonaws.com/images/2003-35_258-32-33-TN_32_http .webp)](https://ua-tech-mags-archive.s3.us-east-2.amazonaws.com/images/2003-35_258-32-33-TN_32_http .webp)

Дополнительно

Благодаря такой схеме не составит большого труда администрировать ваш компьютер с любого другого. Только внимание: в файле /etc/securetty находится список устройств (без /dev/), через которые разрешен вход root'а — последний по умолчанию может входить в систему только с локальных терминалов (если и вовсе удалить этот файл, то будет разрешен вход с ЛЮБОГО устройства; чтобы запретить вход root’а, потребуется удалить все записи из файла). Если вы захотите стать суперпользователем, вам сначала придется войти как простой пользователь, а потом исполнить команду su.

Выражаю благодарность Оксане Журавлевой за помощь в подготовке статьи.