Хотелось ли вам хоть когда-нибудь стать провайдером? Представьте вы выдаете кому-то логин, пароль, этот кто-то подключается... Давайте попробуем создать рабочий dial-up сервер, поддерживающий подключение Linux/Windows-машин как через терминал, так и в PPP-сессии.
Несколько замечаний. В комплект практически любого дистрибутива по умолчанию ядро входит с поддержкой PPP; если этой поддержки нет, PPPD не заработает. Мой модем подключен к ttyS0 (COM1) обязательно узнайте, куда он подключен у вас. Настоятельно рекомендую либо во всех программах использовать символические ссылки типа /dev/modem, либо просто /dev/ttyS0, но не смешивать ссылки и файлы! Почему узнаете далее. Практически все конфигурационные действия потребуется выполнять от имени root.
Для начала все установим и посмотрим, что к чему.
PPPD
Если вы уже входили в Интернет через Linux, то данный пакет у вас установлен. Если не уверены, тогда запустите (под любым пользователем):
Если вам скажут Not found или вообще ничего не скажут, то пакет PPP еще потребуется установить.
Mgetty
Эта программа будет отвечать у нас на входящие звонки. Это не единственная ее функция еще она может принимать/отправлять факсы и даже работать с voice-модемом, как с автоответчиком. Mgetty можно найти на дисках вашего дистрибутива, в этом случае файлы конфигурации будут находиться в /etc/mgetty+sendfax. Также можно скачать исходники mgetty в Интернете: http://www.leo.org/~doering/mgetty. Если вы планируете пользоваться автоответчиком, последние очень будут кстати. Внимательно прочитайте все инструкции и соберите программу, в makefile в CFLAGS= обязательно допишите -DAUTO_PPP. В случае успешной сборки по умолчанию файлы конфигурации будут находиться в /usr/local/etc/mgetty+sendfax. С помощью вашего любимого текстового редактора открываем файл mgetty.config. Здесь мы поставим на максимум скорость доступа к модему (если ваш модем не поддерживает скорость 115200 бит/c, пропишите корректное значение):
и настройки порта:
Дальше идем в login.config, там находим строчку, начинающуюся с #/AutoPPP/ и снимаем с нее комментарий (убираем # вначале). Mgetty настроена и уже готова к тому, чтобы вы ее запустили. Теперь проверим, правильный ли порт выбран:
Если в течение примерно полминуты программа завершилась, значит, не все в порядке с настройками. Взгляните на файл /var/log/mgetty.log.ttyS0 (или mgetty.ttyS0) и проверьте последние записи возможно, там будет описание ошибки. В идеальном случае программа не должна завершаться вообще (без помощи Ctrl+C). Но таким образом получить dial-in соединение не получится mgetty не сможет нормально контролировать порт и вылетит при первом же звонке. Поэтому, как и сказано в инструкции, запуск программы будет происходить через /etc/inittab.
В конце данного файла допишите:
или
в зависимости от того, где лежит исполняемый файл mgetty. (-n 3 означает, что модем будет «брать трубку» после третьего звонка)
Все, теперь вам осталось сохранить inittab и скомандовать:
Теперь init увидит изменения.
На этом этапе у вас должно заработать простое соединение.
Терминальный доступ
Создайте полноценного пользователя (например, dialup), который будет подключатся через модем. Измените ему пароль (passwd dialup) и передайте эти сведения своему «клиенту». Тот со своей машины в Hyper-Terminal'е дозвонится к вам и получит рабочую Linux-консоль (Рис. 1). Теперь он является полноправным пользователем вашей машины. Будьте внимательны если до этого вы не беспокоились о правах пользователей и не контролировали доступ, сейчас самое время изменить свое отношение к безопасности файлов на своем компьютере. Также советую установить пароли на вход всех пользователей и особенно root, ведь одно неверное движение... Также советую просматривать системные логи, хранящиеся в /var/log там можно найти очень много полезной информации о системе: кто и откуда входил в систему, какие были сообщения ядра и т.д. Заходите, не пожалеете.
Уверен, что вам захочется поговорить с подключенным пользователем. Для этих целей будем использовать talk. Синтаксис команды таков:
Окно терминала разделится на две части, и, если ваш пользователь запустит talk <ваше имя>, вы сможете вести разговор. Для того чтобы заработал talk, нужно установить 2 пакета talk и talk-server, после чего включить запуск сервиса в xinetd. С последним пунктом поступаем так: идем в /etc/xinetd.d и открываем файл talk. Изменяем параметр disable=yes на disable=no, и при следующем перезапуске xinetd talk начнет ожидание входящих соединений.
Если вы хотите, чтобы удаленный пользователь мог что-то скачивать или закачивать на ваш компьютер, нужно установить пакет с веселым названием lrzsz, в котором находятся утилиты для передачи файлов по протоколам X/Y/ZModem. Использовать мы будем только последний (поддержка докачки), а для того чтобы пользователь не утруждал себя запоминанием строчки:
создадим скриптик:
сохраним его как dl, сделаем исполняемым (chmod +x dl) и положим в /usr/local/.
Теперь, если юзер увидит файл и захочет его скачать, он просто наберет:
(Разумеется, если /usr/local/bin будет присутствовать в переменной окружения $PATH), после чего запрошенный файл медленно (это же модем!) перетечет на его компьютер. Параметр -b указывает, что данные нужно передавать в двоичном виде, а -r позволяет докачивать файл после разрыва.
Чтобы закачать файл на ваш сервер, потребуется выполнить такую команду:
После этого терминал как бы зависнет, ожидая начала передачи.
Сейчас все сетевые операции происходят через lo-интерфейс вашей системы, поэтому настройки firewall'а изменять нет необходимости; но как только мы сконфигурируем PPPD, вам потребуется разрешить соединения с адреса, который вы присвоите своему пользователю.
PPP-доступ
Полагаю, что его используют большинство наших провайдеров. Настала и ваша очередь.
Предположим, что PPPD уже установлен. Тогда начнем его конфигрурировать. Переходим в папку /etc/PPP.
В конец файла pap-secrets дописываем такое:
(звездочка звездочка две_кавычки звездочка)
что значит: «позволить любому зарегистрированному пользователю подключатся к серверу, не думая о пароле и IP-адресе».
Теперь осталось присвоить вам и вашему пользователю IP-адреса. Их можно задать, например в файле options в виде ваш_IP:IP_клиента, т.е. 192.168.1.1:192.168.1.254. Вы можете присваивать абсолютно любые адреса. Внимание! Если вы собираетесь через данный компьютер выходить в Интернет, перед выходом обязательно уберите эти настройки IP-адресов, т.к. при подключении к провайдеру ваша система попытается сама присвоить адреса. Серверу это не понравится, и Интернета не будет. Самый простой выход создать скрипт:
и сохранить его в /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. Если во время разговора будут передаваться файлы, это заметно скажется на скорости передачи букв, задержки будут до нескольких секунд (в зависимости от линии и модемов), но главная же задача файл передать!
Дополнительно
Благодаря такой схеме не составит большого труда администрировать ваш компьютер с любого другого. Только внимание: в файле /etc/securetty находится список устройств (без /dev/), через которые разрешен вход root'а последний по умолчанию может входить в систему только с локальных терминалов (если и вовсе удалить этот файл, то будет разрешен вход с ЛЮБОГО устройства; чтобы запретить вход root’а, потребуется удалить все записи из файла). Если вы захотите стать суперпользователем, вам сначала придется войти как простой пользователь, а потом исполнить команду su.
Выражаю благодарность Оксане Журавлевой за помощь в подготовке статьи.