Site Mascot
 

Не удивляйтесь, сайт переехал: был http://smacker.fatal.ru, стал http://smacker.heliohost.org.

Dial-in Сервер

29.01.2006 17:56

Этот текст суммирует мой опыт по настройке Dial-In сервера.

 
Вводная
Что это такое и зачем это нужно? Dial-in сервер — это машина, оборудованная модемом (или модемами), ждущая звонков от благодарных слушателей, авторизующая их и пускающая в сеть. Это в общем случае. В моём же задача сводилась установлению сетевого соединения через модем только между двумя машинами (моей, т.е. сервером — и клиентом), так как сети у меня — увы и ах — нет. А всё это для того, чтобы дать удалённому пользователю доступ к сервисам на моей машине — в качестве которых по делу проходят FTP, SSH и HTTP-серверы. Я думаю, не нужно объяснять, что таким образом я одним махом послал ффтопку терминальное соединение (как меня воротит от криков виндузятников «давай соединимся по гипертерминалу» — прим. авт.) и перешёл на качественно новый уровень взаимодействия — при том же, даже более широком круге возможностей — к передаче файлов и текстовой коммуникации добавилось полноценное удалённое подключение по SSH.

 

Первый этап — ждём звонка
Итак, для начала нужно заставить модем ждать звонка, потом принять его и установить соединение. Для этого, как я выяснил, есть много разных программ (*getty), но я остановился на mgetty. Конфигурация mgetty проста и безболезненна. В каталоге с конфигурационными файлами лежат следующие файлы:

 

 [smacker@localhost smacker]$ ls -1 /etc/mgetty+sendfax/
 * dialin.config
 faxheader
 faxrunq.config
 faxspool.rules.sample
 * login.config
 * mgetty.config
 sendfax.config
 voice.conf 

 

Но нам, разумеется, потребуются только те, которые выделены звёздочками — ведь мы (то есть я) не собираемся работать с факсами.
dialin.config — файл настройки приёма звонков. Тут можно запретить входящие вызовы с определённых номеров и т.д. Я ничего здесь не менял, но вам, может быть, захочется.
mgetty.config — собственно конфиг программы mgetty. Здесь описываются настройки железа. Я вписал настройки для моего модема следующего вида:
 #US ROBOTICS 2977 int hard fax/voice PCI
 port /dev/modem
 speed 115200
 init-chat '' ATZ OK ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 OK
 data-only y 

 

Строка инициализации не отличается от той, что используется при дозвоне до ISP (dial-up), более подробно о значении ключей можно узнать в Modem-HOWTO на LDP, ссылку см. в конце текста). Но вид записи для параметра init-chat несколько отличен от привычного: в одну строчку следует вписать и команды, подаваемые модему при инициализации, и ожидаемый ответ.
В моём случае это
 '' ATZ OK ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 OK 
- хотя при дозвоне wvdial-ом мы бы увидели:

 

 --> Sending: ATZ
 ATZ
 OK
 --> Sending: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
 ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
 OK
 --> Modem initialized. 

 

login.config — это «ключевой» конфиг, в котором описывается поведение mgetty после того, как модемы установят соединение. Я сначала пытался заставить mgetty поднять соединение по SLIP, но не преуспел. В итоге оказалось, что задействовать PPP гораздо легче и проще.
Для этого нужно раскомментировать соответствующую строку в конфигурационном файле и подредактировать её. В файле даны необходимые разъяснения; в итоге будет произведена авторизация и запущено соединение по PPP с указанными параметрами.
В нескольких документах, посвящённых настройке Dial-In+PPP, с которыми я ознакомился в процессе ликвидации собственной безграмотности, постоянно рекомендуется для pppd создавать файл options.порт_модема (скажем, options.ttyS4), в которых и выкладывать настройки. Но я обнаружил, что это порочная практика: у меня в машине только один модем, и мне придётся использовать его и для приёма звонков, и для дозвона в интернет. Но файл options.порт_модема действует «в обе стороны», и делает невозможным дозвон до провайдера, подсовывая настройки на случай приёма звонка (например, ip). Во всяком случае, так происходит в моей ситуации (возможно, что и по недомыслию автора).
Выход я нашёл в том, чтобы перенести настройки в конфиг mgetty (разрешено передавать до 9 параметров). Этого вполне хватит: /AutoPPP/ - - /usr/sbin/pppd auth refuse-chap require-pap login modem crtscts 192.168.93.1:192.168.93.10
Я передаю настройки для типа авторизации (PAP — принять, CHAP — нет), аппаратный контроль за потоком данных и локальный и удалённый IP адреса для клиента и сервера. В целом, те же настройки, что и в «шаблонном» файле плюс ещё чуть-чуть «от себя». DNS-сервер указывать я не собирался, так как это лишено смысла: все сервисы будут доступны по адресу вида IP:PORT. Таким образом, всё, что нужно, поместилось в файл mgetty.

 

Теперь надо организовать запуск mgetty. Сделать это можно не иначе как через /etc/inittab (просто так работать не будет), добавив в него примерно такую строку:
 S1:2345:respawn:/sbin/mgetty -x 3 /dev/modem 
Для того, чтобы изменения вступили в силу, надо заставить систему заново считать inittab, сказав от root-a init q. Для того, чтобы отключить mgetty, надо закомментировать данную строку (#) и снова считать inittab.

 

Настройка pppd
Это небольшой раздел — ведь основные настройки мы уже вынесли в конфиг mgetty и обсужать создание файла options.XXX не нужно. Собственно, осталось настроить только авторизацию.
Для этого в файле /etc/ppp/pap-secrets (у нас ведь refuse-chap) надо на каждого пользователя, кого мы хотим пускать на машину, завести по записи вида:
 otaku localhost.localdomain "" * 
Где первое поле — имя пользователя, второе — имя сервера, третье — «секрет», более известный как пароль — если его не указать (как у меня), то будет использоваться учётная запись существующего в системе пользователя с указанным логином. Последнее поле — ip адреса, которые можно будет использовать пользователю. Осталось только завести пользователя (или нескольких), которых мы будем пускать в систему. Что-то вроде Guest.

 

Софт
Итак, система настроена и можно ждать звонка. Но чтобы от данной затеи была польза, необходимо на сервере запустить сервисы, реализующие нужную нам функциональность.
Для передачи файлов нужен FTP-сервер. Такое решение — учитывая ширину канала примерно в 5 кб/с и принцип «а-кто-его-знает-какая-там-у-клиента-ось» наиболее универсально. Я выбрал ProFTPd — как говорят, не самый секьюрный, но простой в установке и настройке сервер (кстати, поддерживает докачку). Вот мой файл proftpd.conf:
 ServerName			"Smacker -- ProFTPD"
 ServerType			standalone
 DefaultServer			on
 Port				21
 Umask				022
 MaxInstances			30
 User				nobody
 Group				daemon
 DefaultRoot			~
 AllowOverwrite			on
 

 

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

 

Выводы
Сейчас, я знаю, что настроить Dial-in сервер очень просто, но настраивая его я почему-то решил, что настройка pppd для Dial-in будет намертво конфликтовать с моим желанием дозваниваться в интернет (частично — если создавать options.XXX — это соответствует действительности) и провозился со SLIP-ом, потратив без пользы много времени (а всё потому, что я не был уверен в том, что PPP в Linux сработается с оффтопиком). А на самом деле оказалось, что сочетание mgetty+pppd самое простое в настройке.

 

А что делать клиенту?
Всё очень просто: берётся обычная звонилка, которой дозваниваются до провайдера, указывается телефон сервера, логин и пароль пользователя. Для оффтопика следует оставить только опции «программное сжатие данных» и «протокол TCP/IP». Авторизация через PAP. DNS не нужен, адрес ip назначается сервером. Всё, можно соединяться.

 

Ссылки по теме:
http://www.tldp.org/HOWTO/Modem-HOWTO.html — один из лучших хавтов, которые я встречал. Очень информативен и познавателен.
http://proftpd.org — ProFTPd
  1. Я буду рад, если вы оставите свой отзыв об этой заметке:

    Никнейм

    Email

    URL

    Заголовок комментария

    Проверка на человечность
    - Введите буквы:
    The CAPTCHA image