The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Каталог документации / Раздел "Сети, протоколы, сервисы" / Оглавление документа

Dial-in сервер:

Настройка инициализации портов.

Скрипт инициализации портов /etc/rc.serial сам по себе довольно объемен. Он содержит все (или почти все) возможные параметры инициализации для большинства известных науке девайсов, подключаемых к последовательному порту. Нас же интересует наличие раздела инициализации последовательных портов для модемов:

modem() {
	# Modem that supports CTS and perhaps RTS handshaking.
	ci=$1; shift
	co=$1; shift
	for i in $*
	do
		# may depend on modem
		comcontrol /dev/tty${ci}${i} dtrwait 100 drainwait 180
		# Lock crtscts on.
		# Speed reasonable for V42bis.
		stty < /dev/ttyi${ci}${i} crtscts 57600
		stty < /dev/ttyl${ci}${i} crtscts
		stty < /dev/cuai${co}${i} crtscts 57600
		stty < /dev/cual${co}${i} crtscts
	done
}.
Сим инициализируются порты, идентификаторы и номера которых передаются функции в качестве аргументов.

Собственно, настройка заключается в раскомментировании строки в конце файла. Для терминалов ttyd1 и ttyd2 (в терминах Microsoft это COM2 и COM3) строка должна выглядеть так:

# Initialize assorted 8250-16550 (sio) ports.
modem    d a    1 2
Параметры проинициализированных портов получаются такими: Единственный параметр, который есть резон менять - это скорость порта, все остальное трогать особого смысла нет. Для установки другой скорости, к примеру, 115200 бит/с, stty нужно скормить соответствующие аргументы, при этом описание скорости должно обязательно присутствовать в /etc/gettytab, на такой же скорости должны работать getty и pppd:
stty < /dev/ttyi${ci}${i} crtscts 115200
...
stty < /dev/cuai${co}${i} crtscts 115200

Теперь, если отдать:

dial-in-server# cd /etc
dial-in-server# sh rc.serial
то порты проинициализируются нужными скоростями. Для пущей уверенности правильность настроек проверяется соединением с модемом с помощью терминалки. Об этом
в разделе, посвященном настройке модемов.

Напоследок, есть немаловажные и не совсем очевидные детали при установке скоростей нескольких модемов на одном сервере, которую автор не встречал ни в одном из руководств по dial-in:

Правится это в /etc/ppp/ppp.conf, в параметре set speed. Мне это стоило двух дней - понять, где «собака порылась». Файл /etc/ppp/ppp.conf:

set speed 57600

Протокол терминальных линий.

Вообще, передача данных на физическом уровне бывает синхронной и асинхронной. Терминалы исторически пользуются только асинхронными протоколами последовательных линий. Начало пакета данных определяется положительным или отрицательным фронтом импульса. Затем следует заранее оговоренное число импульсов данных с заранее оговоренной скоростью. Количество переданных полезных бит может быть больше количества импульсов - данные могут передаваться и по фронтам. Далее могут следовать служебные данные типа бита четности. Завершают пакет стоп-биты. Сервер и терминал должны поддерживать и быть сконфигурированы на один тот же протокол.

Настройки линий собраны в файле /etc/gettytab. Естественно, getty, каждый раз, при старте его перечитывает. То есть, после правки, при следующем коннекте будут действовать уже правленые настройки. Секция default определяет параметры, общие для всех секций. Началом секции считается начало строки, окончание и разделитель - двоеточие, продолжение секции на следующей строке - «\» перед концом строки:

default:\
	:cb:ce:ck:lc:fd#1000:im=\r\n%s/%m (%h) (%t)\r\n\r\n:sp#1200:\
	:if=/etc/issue:
Умолчания такие: По документации, cb, lc и fd в свежих версиях getty не поддерживаются, но удалять их, по-моему, пока не стоит. Независимо от версии getty можно убрать if, в нем нет никакой смысловой нагрузки, как и самого файла, скорее всего.

Интересующие нас секции std находятся под комментарием:

# Fixed speed entries
Для dial-in сгодится большинство из них, если не использовать модем на 2400. Как видим, в секциях определяется запрещение эмуляции контроля четности и использование восьмибитных символов (np), затем переопределяется скорость порта (sp#):
g|std.19200|19200-baud:\
	:np:sp#19200:
std.38400|38400-baud:\
	:np:sp#38400:
std.57600|57600-baud:\
	:np:sp#57600:
std.115200|115200-baud:\
	:np:sp#115200:
std.230400|230400-baud:\
	:np:sp#230400:
Редактировать (пока) ничего не нужно, важно лишь наличие секции с выбранной скоростью портов и определения в ней протокола 8-N-1:

Настройка модемов.

Настройка сводится к конфигурированию и записи в NVRAM модемов профиля, который будет загружаться при включении и сбросе сигнала DTR. Делается это с помощью любой терминалки и не важно, будет это Windows HyperTerminal, cu или tip UNIX. Мне, однако, претит лишний раз возиться в пыли-грязи с разъемами, да и колотить по клавиатуре в csh получается все же быстрее, чем возить мышью.

Итак, запустим терминалку (модем, подключенный к sio1, проинициализирован на 57600):

dial-in-server# cu -l /dev/cuaa1 -s 57600
она лаконично ответит:
Connected.

По команде ATI4 модем обязан послушно выдать листинг текущего профиля. В зависимости от значений этого самого профиля модем может и не дублировать ввод, и не отвечать «ОК». Аналоги ATI4 реализованы во всех модемных чипсетах, так что, скорее всего, листинг будет примерно таким:

U.S. Robotics 56K FAX EXT Settings...

   B0  E0  F1  L2  M1  Q1  V1  X4  Y0
   BAUD=57600  PARITY=N  WORDLEN=8
   DIAL=PULSE   ON HOOK   CID=0

   &A3  &B1  &C1  &D2  &G0  &H1  &I0  &K1
   &M4  &N0  &P2  &R2  &S0  &T5  &U0  &Y1

   S00=001  S01=000  S02=043  S03=013  S04=010  S05=008  S06=002
   S07=060  S08=002  S09=006  S10=014  S11=070  S12=050  S13=000
   S15=000  S16=000  S18=000  S19=000  S21=010  S22=017  S23=019
   S25=020  S27=000  S28=008  S29=020  S30=000  S31=128  S32=002
   S33=000  S34=000  S35=000  S36=014  S38=000  S39=012  S40=000
   S41=004  S42=010

   LAST DIALED #:

Для нормального функционирования модем должен иметь следующие настройки профиля:

Для U.S.Robotics/3COM строка будет выглядеть примерно так:
AT&F1E0F1Q1Y0&A3&B1&C1&D2&G0&H1&K1&M4&N0&P0&R2&S0&T5&U0S0=1&W0

Можно поступить по-другому: загрузить заводской шаблон с аппаратным управлением потоком, пролистать его, подправить настройки и записать в NVRAM:

AT&F1
ATI4
AT&F1E0F1Q1Y0 U0S0=1
Измененный заводской шаблон сохраняется в профиль 0 NVRAM командой:
AT&W0
Проверить настройки можно перезагрузив модем с профилем по умолчанию:
ATZ0
ATI4
Выход из cu по:
~.
dial-in-server#

В старых (и некоторых не очень старых) модемах есть DIP-переключатели, они имеют наибольший приоритет по сравнению с командами и регистрами, настройка локального эха, автоответа, результирующих кодов и прочих разностей осуществляется ими.

Настройка терминалов.

Определения терминалов находятся в файле /etc/ttys. В числе прочих его пользует init, который и запускает на терминале управляющую программу. В контексте настройки dial-in правке подлежат строки определений последовательных терминалов:

# Serial terminals
# The 'dialup' keyword identifies dialin lines to login, fingerd etc.
ttyd0	"/usr/libexec/getty std.9600"	dialup	off secure
ttyd1	"/usr/libexec/getty std.9600"	dialup	off secure 
ttyd2	"/usr/libexec/getty std.9600"	dialup	off secure
ttyd3	"/usr/libexec/getty std.9600"	dialup	off secure 
В исходном состоянии каждым из четырех dial-in терминалов ttyd заведует getty с параметрами секции std.9600 из файла /etc/gettytab. Параметр secure разрешает логин rootом, а off - говорит init, что терминал отключен. Чтобы реализовать dial-in подключение к ttyd1 и ttyd2, нужно включить терминал, указать ему секцию с настройками порта и одновременно запретить getty принимать логин rootа - немного паранойи никому не помешает:
ttyd0	"/usr/libexec/getty std.9600"	dialup	off secure
ttyd1	"/usr/libexec/getty std.57600"	dialup	on insecure
ttyd2	"/usr/libexec/getty std.57600"	dialup	on insecure
ttyd3	"/usr/libexec/getty std.9600"	dialup	off secure 
Теперь отдадим:
dial-in-server# kill -HUP 1
Этим мы заставляем init перезагрузиться и, соответственно, перечитать конфигурационные файлы, через момент внешний модем должен зажечь индикатор «TR» (или «DTR» у некоторых модемов, если он есть). Отдадим:
dial-in-server# ps ax | grep ttyd
и убедимся, что getty готов принимать звонки на нужных нам терминалах с нужными скоростями:
232  ??  I      0:00,07 /usr/libexec/getty std.57600 ttyd1
237  ??  I      0:00,07 /usr/libexec/getty std.57600 ttyd2
Особое внимание в листинге процессов стоит уделить второму столбцу. Символы «??» свидетельствуют о нормальном открытии порта getty и ожидании им модемного соединения (активности сигнала DCD). Нечто отличное, вроде «d1» для ttyd1 означает, что модем, подключенный к sio1, принял звонок и установил связь с удаленным коллегой или о неправильной настройке сигнала CD модема.

На этом настройку dial-in сервера можно закончить, если его основное назначение - удаленное администрирование, ибо dial-in консоли для этих целей вполне достаточно. Настройка PAP и CHAP аутентификации «как у взрослых провайдеров» рассматривается в главе «Настройка сервера удаленного доступа», но перед этим автор настоятельно рекомендовал бы убедиться в полной работоспособности «голой» dial-in консоли. В любом случае траблшутинг придется начинать с отключения протоколов авторизации, так как основных исходных причин немного:

Аккаунт dial-in пользователя.

Если Вы знакомы с удаленной консолью, то этот раздел можно пропустить и пользоваться для dial-in тем же аккаунтом, что и для удаленной консоли.

В предыдущем разделе «Настройка терминалов» удаленные терминалы были объявлены как insecure. Администрировать же нужно от имени rootа. Создадим с помощью /stand/sysinstall или adduser нового пользователя так, чтобы он являлся членом группы wheel - только доверенным лицам позволено su. Можно просто отредактировать /etc/group, если аккаунт уже существует.

wheel:*:0:root,remoteuser

Теперь, после логина под таким аккаунтом в любое время можно стать rootом:

% su -
Password:
dial-in-server#
Тире - параметр su, позволяющий пользовать окружение rootа, если его опустить, окружение будет взято пользовательское. Кроме dial-in такой аккаунт годится и для любой удаленной консоли.

Неплохим решением будет очистить или отредактировать /etc/motd (оставив две пустые строки в конце) - его содержимое выводится на все виды консолей при логине. Желающим «крутить» систему, подсказка - секция default в /etc/login.conf, мне же было достаточно:

FreeBSD 4.7-RELEASE (NETKERNEL) #8: Thu Feb  5 22:05:48 MSK 2004

Welcome to FreeBSD!




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2020 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру