Руководство администратора сети в ОС Linux.
====================================================================
1992-1994
Олаф Кирч (Olaf Kirch)
.
- 2 -
1. Предисловие
В последнее время Internet очень часто оказывается в центре
внимания, и серьезные люди часто болтаются по этому " Информационному
супершоссе". Компьютерные сети становятся такими же обыденными вещами,
как телевизоры и микроволновые печи. Inetrnet получает необычно
широкое освещение в печати, а ученые обсуждают в Usenet возможность
проведения исследований "Internet культуры." Различные компании
работают над новыми методами передачи данных, например ATM, которые во
многих случаях позволяют получить большую скорость передачи, чем
сейчас.
Конечно, сети развивались достаточно долгое время. Обычной
практикой было создание маленьких локальных сетей, в основном
распологавшихся в одном здании, и соединенных через обычные телефонные
линии. Таким образом, быстро разраставшийся конгломерат сетей,
позволял подсоединятся к этой глобальной системе даже маленьким
некоммерческим организациям и частным пользователям. Поэтому создание
Internet-хоста с почтой и новостями, предлагающего доступ по
телефону, стало нормальной практикой, и появление ISDN будет,
несомненно, ускорять эту тенденцию.
Разговор о компьютерных сетях очень часто означает разговор о
UNIX. Конечно, UNIX - не единственная сетевая операционная система и
не всегда она будет лидером, но умрет она очень не скоро. Поэтому
особенно интересным для пользователя становится появление бесплатных
UNIXоидных операционных систем для PC (386BSD, FreeBSD и Linux).
Однако, Linux - не UNIX. Unix - зарегистрированная торговая марка, кто
бы в настоящее время не держал права на него, в то время как Linux -
oперационная система, которая стремится предложить все функциональные
возможности, требующие POSIX-стандарты для UNIX-подобных операционных
систем.
Ядро Linux было написано в значительной степени Linus Torvalds,
человеком, который начал это проект, чтобы понять как работает Intel
i386 и MINIX. MINIX -- другая, популярная тогда операционная система
- 3 -
для PC, предлагающая многие функциональные возможности Unix, и
написанная профессором A.С.Танненбаумом.
Linux попадает под GNU Лицензию, которая позволяет свободно
распространять код (пожалуйста читайте GPL в приложении 20.3,где
написано, что значит "свободнораспространяемое программное
обеспечение"). Понемногу оставляющая трудности, связанные с маленьким
возрастом, и привлекающая большой и все возрастастающей базой
бесплатных прикладных программ, эта операционная система становится
все более распространенной. Ядро и C библиотека становятся так хороши,
что большинство стандартного программного обеспечения компилируется с
тем же успехом, что и на любой другой Unix системe, а широкий
ассортимент различных Linux позволяет Вам просто переписать его на ваш
жесткий диск и начинать работать.
1.1. Документация о Linux
Одна из жалоб, которая часто возникает в связи с Linux (и
свободным программным обеспечением вообще) -- жалкое состояние или
полное отсутсвие документации. Раньше было обычным делом, что пакет
программ распространялся с горсткой примечаний по установке и
README-файлов. Они давали опытному оператору достаточное количество
информации чтобы успешно установить и управлять этим пакетом, но были
недостаточны для пользователя.
Так в 1992, Lars Wirzenius и Michael K. Johnson предложили
организовать проект документации для Linux, или LDP (Linux
Documentation Project), который стремится к обеспечению пользователя
полным набором документации. Коротко останавливаясь на вопросах типа "
Как? ", "Почему?", или "Что - значит жизнь, вселенная, и все
остальное?", эти руководства пытаются охватить все аспекты
управления и использования Linux пользователем, не требуя от него
предварительного знания Unix. Среди достижений LDP - Руководство по
установке, написанное Matt Welsh, Руководство по взлому ядера, Michael
K. Johnson, и проект создания man-страниц, скоординированный Rik
Faith, который пока снабдил Linux 450 страницами руководства для
большого количества системных вызовов и Cи библиотек. Руководство для
- 4 -
администраторов системы, написанное Lars Wirzenius, находится все еще
на стадии разработки. Руководство пользователя уже подготовлено.
Однако, книги LDP - не единственный источник информации о Linux.
В настоящее время, имеются больше чем дюжина HOWTOs, которые
отправлены по почте к comp.os.linux.announce и регулярно архивируются
на различных FTP серверах.
HOWTOs - короткие документы, состоящие из нескольких страниц,
которые дают Вам краткое представление по темам типа поддержки
Ethernet под Linux, или конфигурации Usenet программного обеспечения,
а также ответы на часто задаваемые вопросы. Они обычно обеспечивают
наиболее точную и современную информацию, доступную по даннной теме.
Список доступных HOWTO приводится в "Аннотируемой Библиографии" в
конце этой книги.
1.2. Об этой книге
Когда я присоединился к LDP в 1992, я написал две маленькие главы
об UUCP и smail, которые я хотел добавить к "Руководству для
администратора системы". Разработка TCP/IP сети только начиналась, и
когда те "маленькие главы" начали расти, я решил, что было бы хорошо
иметь Руководство для администратора сети, пошел и написал первую
версию Руководства Сети, которую и выпустил в сентябре 1993.
Новое Руководство для администратора сети, которое Вы сейчас
читаете, описывает несколько новых приложений, которые стали
доступными Linux пользователям после первого выпуска.
Книга организована как последовательность шагов, которые Вы
должны сделать, чтобы отконфигурировать вашу систему для работы в
сети. Все начинается с обсуждения основных концепции сетей вообще, и
сетей, основанных на TCP/IP, в частности. Мы медленно пройдем путь от
конфигурирования TCP/IP на уровне устройств к установке стандартных
приложений типа rlogin и подобных, сетевой файловой системы, и
информационной системы сети. К этому прилагается глава о том, как
сделать вашу машину UUCP-узлом. Остаток книги посвящен двум главным
приложениям, которые запускаются как над TCP/IP, так и над UUCP:
- 5 -
электронная почта и новости.
Email часть более широко описывает механизмы транспортировки и
маршрутизации почты, и множество схем адресации, с которыми вы можете
столкнутся. Там же описывается конфигурирование и управление smail,
агента транспортировки почты, обычно используемого на меньших почтовых
центрах, и sendmail, который преддлагается для людей, которые должны
заниматся сложной маршрутизацией или работать с большим количеством
почты. Глава Sendmail была написана Vince Skahan.
Часть News пытается дать Вам краткий обзор работы Usenet
новостей, наиболее широко используемое в настоящее время программное
обеспечение для транспортировки новостей и использование NNTP для
обеспечения доступа newsreader к местной сети. Книга заканчивается
короткой главой о наиболее популярных newsreaders для Linux.
1.3. Официально Напечатанная Версия
Осенью 1993, Andy Oram, человек который был в списке рассылки LDP
почти с самого начала, спросил меня относительно публикации моей книги
в фирме O'Reilly и Партнеры. Я был воодушевлен этим; Я никогда не мог
вообразить, что моя книга пользуется успехом. Мы согласились что
O'Reilly будет печатать "Официальную печатную версию руководства для
администратора сети", в то время как Я сохранил первоначальные
авторские права так, чтобы книга свободно распространялась. Это
означает что Вы можете выбрать: получить LaTeX текст
распространяемый по сети ( DVI или PostScript версии), и распечатать
их. Или Вы можете купить официально напечатанную версию у O'Reilly,
которая будет доступна несколько позже в этом году.
Непонятно, почему Вам захочется заплатить деньги за что-то, что
Вы можете достать бесплатно? Не сошел ли Tim O'Reilly с ума, раз
пытается продавать то что каждый может напечатать и даже продавать?
Или есть некое различие между этими версиями?
Ответ -- "это зависит", "нет, определенно не," и "да и нет."
O'Reilly и Партнеры рискует, публикуя это руководство, но Я надеюсь
- 6 -
что это окупится. Если это произойдет, Я полагаю, что этот проект
сможет послужить как пример того как мир бесплатного программного
обеспечения и компании могут сотрудничать, чтобы произвести что-нибудь
полезное и тем и другим. На мой взгляд, O'Reilly делает большую услугу
Linux сообществу (кроме книге доступной в вашем местном книжном
магазине) и тем, что это может помочь всем посмотреть на Linux как на
что-то серьезное, как на жизнеспособную и полезную альтернативу
коммерческим UNIX операционным системам для PC.
Так что же относительно различай между напечатанной версией и
электронной? Andy Oram провел большую работу по преобразованию моей
ранней версии в то, что можно печать. (Он просмотрел также и другие
книги созданные под эгидой LDP, и повышал как мог профессиональный
уровень нашей документации).
С тех пор Andy начал просматривать это Руководство и
редактировать копии, которые Я послал ему, книга стала значительно
лучше, чем еще пол года назад. И если бы не он то книга была бы
гораздо хуже чем есть сейчас Все его изменения тут же вставлялись в
электронную версию, и все последующие изменения, которые будут сделаны
к Руководству для администратора сети во время редактирования их
O'Reilly так же будут вставлены. Таким образом не будет никаких
различай между этими версиями. Все же, версия O'Reilly будет
несколько отличатся: С одной стороны, люди O'Reilly проделывают массу
работы над внешним видом книги на таком уровне который вы никогда не
получите от стандартного TEXа С другой стороны, там будет больше
картинок, и улучшенный алфавитный указатель.
1.4. Дополнительная Информация
Если Вы следуете инструкциями этой книги, и что-нибудь не
работает, пожалуйста будьте терпеливы. Некоторые из ваших проблем
могут возникнуть из-за моих глупых ошибок, но могут также быть вызваны
изменениями в программном обеспечении. Лучше спросить относительно
своих проблем на comp.os.linux.help. Есть большая вероятность что Вы
не единственный кто столкнулся с подобными вашим проблемами, и ее
решение известно. Если Вы имеете возможность, Вы должны также
попробовать получить самую последнюю версию ядра и сетевого
- 7 -
программного обеспечения на одном из Linux FTP серверах, или на
ближайшей от вас BBS.
Много проблем связаны с программным обеспечением находящихся на
различных стадиях разработки, которые оказываются не в состоянии
работать вместе должным образом.
Другое хорошее место, где можно узнать о процессе разработки
организация сети HOWTO. Ее поддерживается Terry Dawson HOWTOs
отсылаются по почте на comp.os.linux.announce один раз в месяц, и
содержат наиболее современную информацию. Текущая версия может быть
также получена на tsx-11.mit.edu, в /pub/linux/doc. Если свои проблемы
Вы не можете решить другим путем, Вы можете также войти в контакт с
автором этой книги по адресу данному в ведении. Но, пожалуйста,
воздержитесь от обращения за помощью к разработчикам. Они и так
посвящают основную часть свободного времени Linux.
1.5. Об Авторах
1. Olaf был UNIX пользователем и администратором пару лет пока
изучал математику. В настоящее время он работает UNIX программистом и
пишет книгу. Одно из его любимых спортивных состязаний делать такие
вещи с помощью sed для которых другие люди использовали бы perl. Он
получает от этого такое же удовольствие как другие люди от лазанья по
горам с палаткой и рюкзаком.
2.
с 1987 и в настоящее время управляет sendmail+IDA на приблизительно
300 UNIX машинах для более чем 2000 пользователей. Он признался, что
провел много бессонных ночей за редактированием sendmail.cf файлов до
открытия sendmail+IDA в 1990. Он также признает, что с тревогой
ожидает поставки первой perl версии sendmail, для неясных пока забав
(см. 4).
3. Terry Dawson может быть найден по адресу
terryd@extro.ucc.su.oz.au.
4. Вы думаете что Вы могли бы сделать это в sed, Vince?
- 8 -
Olaf может быть найден по следующему адресу:
Olaf Kirch
Kattreinstr. 38 64295 Darmstadt Германия
okir@monad.swb.de
Vince может быть найден на:
Vince Skahan
vince@victrola.wa.com
Мы открыты для ваших вопросов, комментариев, открыток, и т.д..
Однако, мы просим Вас писать нам только если это действительно важно.
1.6. Благодарности
Olaf благодарит всех людей, которые профессионально прочитали эту
книгу, и потратили свое время на исправление ошибок как грамматических
так и технических. Наиболее энергичный среди них был Andy Oram.
Я очень признателен Andres Seplveda, Wolfgang Michaelis, Michael
K. Johnson, и всем разработчикам кто потратил свое время чтобы
проверить информацию, находящуюся в данном Руководстве. Я также хочу
поблагодарить всех тех кто читал первую версию Руководства за
посланные меня исправления и предложения. Вы можете найти полный
список помощников в файле Thanks. И Наконец, эта книга не появилась бы
без поддержки Holger Grothe.
Я также хотел бы поблагодарить следующие группы и компании,
которые напечатали первое издание Руководства и пожертвовали деньги
или мне, или LDP в целом.
+ Linux Бригада Поддержки, Erlangen, Германия
+ S.u. S.E. GmbH, Fuerth, Германия
+ Linux Лаборатории Системы, Компания, Соединенные Штаты
- 9 -
Vince благодарит Neil Rickert и Paul Pomes за большую помощь во время
работы с sendmail+IDA и Rich Braun за перевод sendmail+IDA на Linux.
Самая большая благодарность моей жене Susan за всю поддержку в этом и других
проектах.
1.7. Условные Обозначения
Условные обозначения были введены чтобы отметить команды
оболочки, переменные аргументы, и т.д.. Ниже приводится их описания.
Жирный шрифт используется чтобы отметить имя хоста и адреса
почты, а также новые концепции и предупреждения.
Italics шрифт используется чтобы отметить имена файла, UNIX
команды и ключевые слова в файлах конфигурации. Также используется для
расстановки акцентов в тексте.
Шрифт пишущей машинки используется чтобы представить выводимую на
экран информацию во время работы описываемых программ. Также
используется для примеров кода, будь то файл конфигурации, набор
команд оболочки или что-нибудь еще.
Typewriter Slanted шрифт используется чтобы отметить
meta-переменные в тексте, особенно в представление командной строки.
Например:
$ Ls -l foo
Где foo -- имя файла, типа /tmp.
'клавиша' Представляет клавишу, которую надо нажать. Вы будете
часто видеть это в этой форме:
Press 'return' to continue.
<> - алмаз с краю, подобно черному алмазу на a лыжном склоне,
отмечает "опасность" или "предостережение." Читайте параграфы
- 10 -
отмеченные этим значком более тщательно.
$ И # предшествует команде оболочки которую нужно выполнит. "$"
символ используется когда команда может быть выполнена простым
пользователем; "#" означает что команда требует пользователя с
привилегией root.
1.8. Проект linux документации
Проект linux документации, или LDP, является свободной бригадой
авторов и редакторов, которые работают вместе, чтобы обеспечить
завершенную документацию для Linux операционной системы. Главный
координатор проекта - Matt Welsh, ему помогает Lars Wirzenius и
Michael K. Johnson.
Это руководство распространяется как часть LDP, который включает
в себя "Linux Руководство Пользователей", "Руководство Администраторов
Системы", "Руководство Администраторов Сети", и "Руководство хакеров
ядра". Эти руководства доступны в формате LaTeX, .dvi и Postscript на
анонимном FTP ic.funet.fi, в каталоге /pub/OS/Linux/doc/doc-project, и
на tsx-11.mit.edu, в каталоге /pub/linux/docs/guides.
Мы поощряем любого кто пожелает помогать нам улучшать Linux
документацию. Если Вы имеете доступ к электронной почте, Вы можете
присоединяться к DOC каналу списка рассылки linux-активистов посылая
почту на linux-activists-request@niksula.hut.fi
Со строкой:
X-Mn-Admin: join DOC
в заголовке или как первая строка тела сообщения. Пустая почта,
без дополнительной строки, заставит mail-server отослать сообщение с
помощью. Чтобы оставить канал, пошлите сообщение тому же самому
адресу, включив строку
X-Mn-Admin: leave DOC
- 11 -
1.9. Стандартная организация файлов системы
В прошлом, одна из проблем которые сокрушили Linux а также
отдельные пакеты было то, что в нем не был принят единый стандарт
расположения системных файлов. Это приводило к несовместимости между
различными пакетами и ставило перед пользователями и администраторами
задачу расположения различных файлов и программ в нужном порядке.
Чтобы улучшить эту ситуацию, в августе 1993 несколько людей
сформировали Группу Стандартов Системы Файлов в Linux, или коротко
FSSTND После шести месяцев обсуждения, группа представила проект,
который представляет структуру системных файлов и определяет
местоположение наиболее необходимых программ и файлов конфигурации.
Этот стандарт, как предполагается, будет поддержан в основных
Linux дистрибуциях и пакетах. По этому в этой книге, мы будем
предполагать что любые обсуждаемые файлы находятся в местах указанных
стандартом; только там где есть традиционное расположение находится в
противоречии с этой спецификацией будет упомянуты альтернативные
местоположения.
Стандарт системы файлов в Linux может быть получен на всех
основных Linux FTP серверах и их зеркалах; например, Вы можете найти
его на sunsite.unc.edu в /pub/linux/docs. Daniel Quinlan, координатор
группы FSSTND, может быть найден по адресу quinlan@bucknell.edu.lex
.
- 12 -
2. Общие сведения о сетях.
2.1. Введение.
Идея сетей также стара, как и вообще идея телекоммуникаций.
Рассмотрим людей, живших в каменном веке, когда для обмена сообщениями
между людьми использовались барабаны. Предположим пещерный человек А
хочет пригласить пещерного человека Б поиграть, но тот живет слишком
далеко и не может услышать барабана, в который бьет А. Каковы же могут
быть действия А? Он может а) пешком добраться до Б, б) взять барабан
побольше , или в) попросить В живущего на полпути между А и Б передать
сообщение. Позже это стали называть сетями.
Конечно мы далеко ушли от примитивных занятий и устройств наших
предков. В наши дни мы пользуемся компьютерами которые общаются между
собой по большому количеству проводов, оптиковолоконных кабелей, с
помощью коротких волн, и т. д. , которые позволяют легко договорится о
партии в сокер. Далее, мы будем обсуждать способы и пути, с помощью
которых это можно сделать.
Здесь будет описано два типа сетей: те что базируются на UUCP
протоколе, и те что базируются на TCP/IP. Это комплект протоколов и
программ, которые предоставляют различные способы передачи информации
между компьютерами. В этой главе мы рассмотрим оба типа сетей и
обсудим их основополагающие принципы.
Мы определим сеть как набор из нескольких хостов, которые могу
обмениваться информацией между собой, часто подразумевая набор
специализированных хостов которые позволяют обмениваться информацией
всем частям сети.
Хост -- это чаще всего компьютер, но не обязательно, это может
быть и Х-терминал, и сетевой интеллектуальный принтер. Небольшой набор
хостов можно называть участок(site).
Связь невозможна без какого либо языка или кода. В компьютерных
- 13 -
сетях эти языки называют протоколами(protocols). Те мне менее, здесь
вам ненужно думать о протоколах как о каком-то языке на котором
разговаривают, а скорее вы должны думать о сильно формализованном
коде, описывающем поведение при встрече глав государств. Точно также,
протоколы, используемые в компьютерных сетях, являются набором строгих
правил, используемых компьютерами при обмене сообщениями друг с
другом.
2.2. UUCP сети.
UUCP (Unix-to-Unix copy) начинался как пакет программ для
пересылки файлов через последовательные линии, управления этой
пересылкой и выполнения программ на удаленной машине. Он претерпел
большие изменения с тех пор как был впервые предложен в конце
семидесятых, но до сих пор по спартански простой по. Его основные
приложения до сих пор базируются на телефонных линиях.
UUCP впервые был предложен Bell лабораториями в 1977 году для
связи между их Unix участками. В середине 1978 г. эта сеть объединяла
уже 80 машин. Она позволяла использовать электронную почту и удаленную
печать. Сегодня UUCP не ограничивается только Unix средами. Существует
масса как коммерческих так и бесплатных переносов данного протокола на
другие платформы, включая AmigoOS, DOS, Atari's TOS, и другие.
Один из главных недостатков UUCP сетей -- их низкая пропускная
способность. С одной стороны, телефонное оборудование устанавливает
жесткий предел на максимальную скорость передачи. С другой стороны,
UUCP соединение -- редко постоянная связь; где хосты соединяются друг
с другом через определенный интервал. Следовательно, наибольшее
количество времени при передаче почты через UUCP она просто лежит на
диске некоторого хоста, обживающего установления следующего сеанса
связи.
Несмотря на эти ограничения, имеется большое количество UUCP
сетей, работающих во всем мире главным образом под управлением
энтузиастов, которые предлагают частный доступ к сети за разумные
цены. Главная причина популярности UUCP в том, что это очень дешево по
сравнению с наличием компьютера, связанного кабелем с Intеrnet. Чтобы
- 14 -
сделать ваш компьютер UUCP узлом, все в чем Вы нуждаетесь это модем,
работающее UUCP программное обеспечение и другой UUCP узел, который
будет снабжать Вас почтой и новостями.
2.2.1. Как Использовать UUCP
Идея UUCP довольно проста: как и указывает его название, он в
основном копирует файлы с одного хоста на другой, но также позволяли
определенным действиям выполняться на удаленном хосте.
Предположим что вашей машине разрешен доступу к гипотетическому
хосту с именем swim, и он может выполнить lpr команду для Вас. Тогда
Вы могли бы напечатать следующее в вашей командной строке, для того
чтобы напечатать эту книгу
$ Uux -r swim! Lpr! Netguide.dvi
Uux, команда из UUCP набора, передает работу swim. Эта работа
состоит из входного файла, netguide.dvi, и запроса передать этот файл
команде lpr. -r флаг просит uux не вызывать отдаленную систему
немедленно, а сохранить работу до установления связи с ней. Это
названо spooling (спулинг).
Другое свойство UUCP, позволяет передавать задачи и файлы через
несколько хостов. Предположим swim, упомянутый в предыдущем примере,
связан UUCP с groucho, который поддерживает большой архив Unix
приложений. Чтобы загрузить файл tripwire-1.0.tar.gz на вашу машину,
Вы могли бы ввести
$ uucp -mr swim!groucho!~/security/tripwire-1.0.tar.gz trip.tgz
Эта команда попросит swim скачать файл с groucho, и послать его
вашей машине, где UUCP сохранит его в trip.tgz и уведомит Вас по почте
о получение этого файла. Все выполняется в три шага. Сначала, ваш хост
посылает задачу swim. Когда swim устанавливает контакт с groucho в
следующий раз, он загружает файл. Заключительный шаг - передача файла
от swim вашему хосту.
- 15 -
Наиболее важная услуга, предоставляемая UUCP сетями в наши дни,
-- электронная почта и новости. Мы вернемся к этому позже, так что
здесь мы дадим только краткое описание.
Электронная почта (email) позволяет Вам обмениваться сообщениями
с пользователями на отдаленных хостах без необходимости иметь доступ
на эти хосты. Задача направления сообщения от вашего участка до
участка места назначения полностью выполняется системой обработки
почты. В UUCP среде, почта обычно транспортируется с помощью команды
rmail, передовая ей адрес получателя и само сообщение. Rmail
отправляет сообщение соседнему хосту, и так далее, пока оно не
достигнет места назначения. Мы будем рассматривать это подробно в
главе 14 ..
Новости(News) могут лучше всего быть описаны как распределенная
система информационного табло. Наиболее часто, этот термин относится к
Usenet Новостям, которые являются наиболее широко известной сетью
обмена новостями с приблизительно 120,000 участвующими хостами.
Появление Usenet относятся к 1979 г, когда, после выпуска UUCP с новым
Unix V7, три студента предложили идею всеобщего обмена информации в
пределах Unix сообщества. Они создали несколько скриптов, которые
стали первой news системой. В 1980, эта сеть связывала duke, unc и
phs, в двух Университетах на Севере Каролины. И Usenet в конечном
счете рос и рос. Хотя она появилась как uucp-основанная сеть, она не
могла ограничиваться только одним типом сети.
Основная единица информации - статья (article), которая может
быть отправлена по почте к иерархии newsgroup(группе новостей)
посвященных определенным темам. Большинство участков получают только
некий набор newsgroup, чей общий объем статей за день составляет в
среднем 60 МБ.
В мире UUCP, новости вообще посылаются через UUCP связь, собирая
все статьи от требуемых групп и упаковывая их в несколько партий,
которые посылаются требуемому участку, где они передаются команде
rnews для распаковки и дальнейшей обработки.
- 16 -
Наконец, UUCP предоставляет доступ к большому количеству
участков, которые предлагают свободный доступ. Вы можете попасть на
них дозвонившись до них и соединившись с ними с помощью UUCP, как
гость, и скачивать с них файлы расположенные в общедоступной области
архива. Пользователь с правами гостя часто имеет имя и пароль типа
uucp/nuucp.
2.3. TCP/IP Сети
Хотя UUCP может быть и разумный выбор для дешевых сетей связи по
телефону, но существует большое количество ситуаций в которых техника
сохранил-передал оказывается слишком негибкой, например в локальных
сетях (LANs). Они обычно состоят из маленького числа машин
расположенных в одном здании или даже на одном этаже, которые связаны
для создания однородной рабочей среды. И Вы хотели бы разбросать файлы
между этими хостами, или запускать одно приложение на различных
машинах.
Эти задачи требуют совершенно другого подхода к организации сети.
Вместо отправления полных файлов наряду с описанием работы, все данные
разбиваются на маленькие пакеты, которые немедленно отправляются
нужному хосту, где они повторно собираются. Этот тип сети называется
packet-switched(пакетной) сетью. Среди прочего, это позволяет
запускать по сети диалоговые приложения. Стоимость этого, конечно,
резкое увеличение сложности программного обеспечения.
Решение, которое Unix системы и большинство не-Unix участков
приняли известно как TCP/IP. В этой секции, мы будем рассматривать его
основные концепции.
2.3.1. Введение в TCP/IP-сети.
TCP/IP происходит от проекта, финансируемого американским DARPA (
Оборонное Агентство Продвинутых Исследований) в 1969. Это была
экспериментальная сеть, ARPANET, которая была преобразована в
эксплуатационную в 1975, после того, как была доказана ее полезность.
В 1983, новый протокол TCP/IP был принят как стандарт и от все
- 17 -
хостов в сети требовалось его использование. Когда ARPANET наконец
вырос в Inetrnet (ARPANET непосредственно окончил свое существования в
1990), использование TCP/IP распространилось и на сети вне Inetrnet.
Наиболее известные -- Unix локальные сети, но из-за появлении быстрого
цифрового телефонного оборудования, типа ISDN, он также имеет большой
шанс стать протоколом транспортировки для телефонных сетей.
Для более конкретного рассмотрения TCP/IP повсюду в следующих
секциях, мы будем пользоваться как примером Groucho Marx Университетом
(GMU),который расположен где-нибудь в Fredland, большинство его
отделов используют собственную локальную сеть, а другие используют
несколько из них. Они все связаны, и подключены к Inetrnet через
единственную быстродействующую линию.
Предположите что ваш Linux связан с сетью из Unix машин в Отделе
Математики, и имя вашей машины erdos. Для доступа к хосту в Отделе
Физики, называемого quark, вводите следующую команду:
$ rlogin quark.physics
Welcome to the Physics Department at GMU
(ttyq2) login:
В приглашении Вы вводите ваше имя, скажем andres, и ваш пароль.
Вам дают shell(оболочку) на quark, к которой Вы можете обращаться как
будто Вы сидите за системной консолью quark. После того как Вы
покинете оболочку, Вы возвращаетесь к приглашению вашей собственной
машины. Сейчас Вы использовали только одно из диалоговых приложение,
которые предлагает TCP/IP: remote login.
Пока вы находитесь на quark, Вы можете захотеть управлять Х11
приложением. Чтобы сказать этому приложению что Вы хотите видеть окна
на экране вашего хоста, Вы должны отрегулировать среду:
$ export DISPLAY=erdos.maths: 0.0
Если Вы теперь запускаете ваше приложение, оно будет входить в
контакт с вашим X-сервером вместо quark, и отображать все окна на
вашем экране. Конечно, это требует наличия у вас X11. TCP/IP позволяет
- 18 -
quark и erdos послать X11 пакеты туда и обратно создавая у вас
иллюзию, что вы находитесь на удаленной системе. Сеть здесь почти
прозрачна.
Другое очень важное приложение в TCP/IP сетях - NFS,
расшифровывается как сетевая операционная система. Это - другая форма
создания прозрачной сети, она позволяет Вам установить директории от
других хостов, так, чтобы они рассматривались подобно локальным
файловым системам. Например, домашние директории всех пользователей
могут быть на центральной машине, от которой все другие хосты в
локальной сети устанавливают требуемые директории. В результате
пользователи могут войти в любую машину и находиться в той же самой
домашней директории.
Так, можно устанавливать приложения которые требуют большого
количества места на диске ( типа TeX ) только на одной машине, а
остальные будут лишь экспортировать директории. Мы вернемся к NFS в
главе 12 ..
Конечно, это не единственные примеры того, что Вы можете делать
по TCP/IP сетям. Ваши возможности почти безграничны.
Теперь мы поближе познакомимся с работой TCP/IP. Вы будете
нуждаться в этом чтобы понять как и почему Вы должны конфигурировать
вашу машину. Мы начнем с исследования аппаратных средств, и медленно
пойдем дальше.
2.3.2. Ethernet
Тип аппаратных средств наиболее широко используемый повсюду в
локальных сетях обычно называют Ethernet. Он состоит из единственного
кабеля с хостами
Присоединяемый к нему через connector, tap или transceivers.
Простой Ethernet весьма недорог, хотя, вместе с сетью предлагает
скорость в 10 Мегабитов в секунду.
Ethernet бывает трех видов: толстый и тонкий, соответственно, и
- 19 -
витая пара. Тонкий и толстый Ethernet использует коаксиальный кабель,
отличающейся по ширине и способу подключения машины к кабелю. Тонкий
Ethernet использует "BNC" connector в форме буквы Т, в который Вы
вставляете кабель и вкручиваете сзади вашего компьютера в гнездо
сетевой платы. Толстый Ethernet требует, чтобы ВЫ проделали маленькую
дырку в кабеле, и воткнули transceiver "методом вампира". Один или
больше хостов может быть присоединено к одному transceiver. Тонкий и
толстый кабель Ethernet может иметь длину не больше 200 и 500
метров, соответственно, и поэтому также названы 10base-2 и 10base-5.
Витая пара использует кабель сделанный из двух медных проводов которые
используются в телефонии, но обычно требует дополнительных аппаратных
средств. Он также известен как 10base-T.
Добавление хоста к толстому Ethernet не слишком сложно, оно даже
не вырубает сеть. Чтобы добавлять машину к сети с тонким Ethernet Вы
должны прервать работу сети по крайней мере на несколько минут потому
что Вы должны разрезать кабель чтобы вставить Т-connector.
Большинство людей предпочитают тонкой Ethernet, потому что это
очень дешево: карты PC стоят всего $50, а кабель находится в диапазоне
нескольких центов за метр. Однако, для больших сооружений, толстый
Ethernet подходит лучше Например, в отделе математики используют
толстый Ethernet, так что у них работа сети не будет прерваться каждый
раз, когда к сети добавляется новый хост.
Один из недостатков Ethernet технологии -- ограниченная длинна
кабеля, который позволяет использовать его только для локальных сетей.
Однако, несколько Ethernet сегментов могут быть связан друг с другом с
помощью repeaters (повторителей), bridges (мостов) или routers
(маршрутизаторов). Repeaters просто копируют сигналы между двумя или
больше сегментами так, что все сегменты вместе действуют как будто это
один Ethernet. Но между двумя любыми машинами сети не может быть
больше четырех repeaters. Bridges и Routers более сложные. Они
анализируют поступающие данные и отправляют их только тогда, когда
хоста получателя нет на местном Ethernet.
Ethernet работает подобно системной шине, где хост может послать
пакеты до 1500 байтов другому хосту на том же самом Ethernet. Хост
- 20 -
идентифицируется адресом, состоящем из шести байт зашитыми в Ethernet
плату при ее создании. Эти адреса обычно записываются как
последовательность шестнадцатиричных чисел с двумя цифрами отделяемыми
двоеточиями, на пример aa: bb: cc: dd: ee: ff.
Структура посланная одной станцией видна и всеми остальными
станциями, но только хост места назначения подбирает и обрабатывает
ее. Если две станции пробуют послать сообщение одновременно,
происходит столкновение, которое решается двумя станциями с помощью
остановки передачи и попытке передать его несколько позже.
2.3.3. Другие типы аппаратных средств
В больших сооружениях, типа Groucho Marx Университет, Ethernet
обычно не единственный тип используемого оборудования. В Groucho Marx
Университет, локальная сеть каждого отдела связана с университетской
магистралью, которая является оптическим кабелем FDDI. FDDI использует
совершенно другой подход к передаче данных, который основывается на
рассылке определенных символов, и только если станция получает этот
символ, она может послать некий кусок информации. Главное преимущество
FDDI - скорость, достигающая 100 Mbps, и максимальная длина кабеля до
200 км.
Для дальней связи часто используются различные типы оборудования,
которые основаны на стандарте названном X.25. Большинство так
называемых "Общественных Сетей Данных", подобно Tymnet в США, или
Datex-P в Германии, предлагают свои услуги, основываясь именно на нем.
X.25 требует специальных аппаратных средств, а именно пакет
Assembler/Disassembler или PAD. X.25 определяет собственный набор
протоколов, но часто используется чтобы соединить сети работающие под
TCP/IP и другими протоколами. Так как IP пакеты не могут быть прямо
отображены на X.25 ( и наоборот ), они просто вставляются в X.25
пакеты и посылаются по сети.
Часто, радио любители используют свое оборудование для создания
сети из своих компьютеров; это называется пакетное радио или ham
радио. Протокол используемый ham радио назван AX.25 (он получен из
X.25).
- 21 -
Есть методы, которые используют специально для медленных, но
дешевых телефонных линий. Они требуют других протоколов для передачи
пакетов, типа SLIP или PPP, которые будут описаны ниже.
2.3.4. Internet Протокол(IP)
Конечно, Вы не хотели бы чтобы ваша сеть ограничивалась только
Ethernet. Идеально, Вы хотели бы использовать сеть независимо от того,
какими аппаратными средствами это достигается.
На Пример, в больших сооружениях типа Groucho Marx Университет,
Вы обычно имеете набор отдельных Ethernet, которые должны быть связаны
некоторым образом. В GMU, в математическом отделе используются два
Ethernets: одна сеть быстрых машин для профессоров и студентов
последних курсов, и другая с медленными машинами для студентов (обе
связаны с FDDI).
Эта связь управляется специальным хостом, так называемым gateway,
который направляет поступающие и уходящие пакеты копируя их между
двумя Ethernets и FDDI. Например, если Вы - в математическом отделе, и
хотите получить доступ к quark в локальной сети физического отдела,
сетевое программное обеспечение не может послать пакеты quark
непосредственно, потому что он находится на другом Ethernet.
Поэтому, этим занимается gateway. Gateway (назовем его sophus)
посылает эти пакеты другому gateway (niels) в Отделе Физики, niels же
отправляет их на требуемую машину. Поток Данных между erdos и quark
показывается на картинке 2.3.4 (с извинениями парню L. Steele).
Эта схема направления данных отдаленному хосту называется
routing(маршрутизация), а пакеты часто называют datagram(дэйтограмы).
Для простоты, обмен дэйтаграмами управляется в соответствии c
отдельным протоколом, который является независимым от используемых
аппаратных средств: IP, или Internet Протокол. В главе 3. мы будем
рассматривать IP и routing более подробно.
Основная польза IP в том, что он преобразует физически несходные
- 22 -
сети в одну с виду однородную сеть. Это называется internetworking, в
результате получаем "мета-сеть" называемую intеrnet. Обратите Внимание
на различие между inetrnet и Inetrnet здесь. Последнее - это
официальное название одного специфического глобального inetrnet.
Конечно, IP также требует машинонезависимой схемы адресования.
Это достигается с помощью назначая каждому хост уникального номера
размером в 32 бита, названного IP адресом. IP адрес обычно пишется как
четыре десятичных номера, для каждой 8-битовой части, разделенных
точками. Например, quark мог бы иметь IP адрес 0x954C0C04, который
будет записан как 149.76.12.4. Этот формат также назван dotted quad
notation.
Теперь мы имеем три различных типа адресов: имя хоста, типа
quark, IP адрес, и наконец, имеются адреса аппаратных средств, типа
адреса Ethernet с 6 байтами. Все они так или иначе соответствуют друг
другу, так, когда Вы пишете rlogin quark, программное обеспечение
находит его IP адрес; И когда IP пересылает данные в Ethernet Отдела
Физики, так или иначе по IP адресу выясняется Ethernet адрес.
Мы не будем здесь вдаваться в подробности этого процесса, а
сделаем это в главе 3. Пока достаточно помнить что эти шаги называются
hostname resolution, поиск IP адреса по имени хоста, и address
resolution, поиск физического адреса по IP.
2.3.5. IP на последовательных линий
Для последовательных линий, стандартом "de facto" является SLIP
или IP для последовательных линий. Есть модификация SLIP -- CSLIP, или
сжимаемый SLIP, который использует сжатие IP заголовков чтобы
оптимизировать IP для относительно низкой пропускной способности
последовательной связи. PPP, или Point-to-Point протокол -- еще один
протокол для последовательных линий. PPP имеет еще большее число
особенностей чем SLIP, включая стадии переговоров о начале связи. Его
главное преимущество по сравнению SLIP, то что он не ограничивается
только транспортировкой IP дэйтаграм, а предназначен для передачи
любого типа дэйтаграм.
- 23 -
2.3.6. Протокол Контроля Передачи (TCP)
Но конечно, посылка дэйтаграм от одного хоста к другому это не
все если Вы вошли на quark, Вы хотите иметь надежную связь между вашим
процессом rlogin на erdos и процессе оболочки на quark. Таким образом,
информация посылаемая туда и обратно должна быть разбита на пакеты
отправителем, и повторно собираться в поток приемником. Хотя это
кажется тривиальным, здесь появляется несколько достаточно сложных
задач.
Очень важно знать об IP, что он не надежен. Предположим что
десять людей на вашем Ethernet начали загружать самый последний выпуск
XFree86 с GMU FTP сервера. Такая активность может оказаться слишком
большой для того чтобы gateway переварил ее, потому что он слишком
медленен, и ограничен количеством памяти. Теперь если Вы пошлете пакет
от quark, у sophus может не хватить места в буфере и поэтому он не
сможет отправить этот пакет. IP решает эту проблему просто забывая про
данный пакет. Пакет безвозвратно потерян. Таким образом
ответственность за целостность данных перекладывается на
поддерживающие связь хосты.
Это происходит в соответствии c другим протоколом, TCP, или
Протоколом Контроля Передачи, который надстраивается над IP для
создания связи с проверкой целостности данных. Существенный плюс TCP
то, что он использует IP, что создает иллюзию простой связи между
двумя процессами на вашем хосте и отдаленной машине, так, что Вы не
заботитесь о том как и по которому маршрут ваши данные фактически
путешествуют. A TCP создает дуплексную связь, позволяющую одновременно
как посылать так и получать информацию. Представте телефонную беседу.
В TCP точки связи определяются IP адресами хостов , и номерами
так называемых портов на каждом из хостов. Порты служат для
определения процесса с которым устанавливается связь. Если опять
обратится к примеру с телефоном, то IP адрес соответствует кодам
городов, а номер порта местному номеру телефона. В примере с rlogin,
приложение-клиент (rlogin) открывает порт на erdos, и соединяется с
портом 513 на quark, который прослушивает rlogind сервер. Таким
образом и устанавливает TCP связь. Используя эту связь, rlogind
- 24 -
выполняет процедуру определения прав доступа, и запускает оболочку.
Стандартный ввод/вывод этой оболочки перенаправляются на TCP связь,
таким образом все, набранное вами в rlogin на вашей машине будет
передано через TCP поток на стандартный ввод оболочки.
2.3.7. Пользовательский протокол дэйтаграм(UDP)
Конечно, TCP не единственный протокол пользователя в TCP/IP
сетях. Хоть он и подходит для приложений подобных rlogin, но он
излишне надежен и не нужен для приложений типа NFS. Вместо, него в них
использует UDP, или протокол пользовательских дэйтаграм. Подобно TCP,
UDP также позволяет приложению войти в контакт с приложением,
обслуживающим определенный порт на отдаленной машине, но он не
устанавливает связь для этого. Вместо этого, Вы можете использовать
его чтобы посылать отдельные пакеты к месту назначения.
Предположим, что Вы установили директорию TeX с центрального NFS
сервера, galois, и Вы хотите просмотреть документ, описывающий как
использовать LaTeX. Вы запускаете ваш редактор, который сначала читает
указанный файл. Однако, требуется слишком много времени чтобы
установить TCP связь с galois, послать файл , и повторять это снова.
Вместо этого, на запрос посланный к galois, тот посылает файл в паре
UDP пакетов, что происходит гораздо быстрее. Однако, UDP не
приспособлен для борьбы с потерей пакетов. Этим приходится заниматься
NFS.
2.3.8. Дополнительно о портах
Порты могут рассматриваться как точки присоединения сетевых
связей. Если приложение (сервер) хочет предложить некий сетевой
сервис, оно ассоциирует себя с портом и ждет клиентов (это называется
слушать порт). Клиент, который хочет использовать этот сервис получает
порт на местном хосте и соединяется с портом сервера на отдаленном
хосте.
Важная особенность портов то, что пока существует связь между
клиентом и сервером, другая копия сервера может присоединиться к тому
же порту и ждать подключения других клиентов. Это разрешает, например,
- 25 -
несколько параллельных отдаленных входов на один и тот же хост, причем
все используют один самый 513 порт. TCP способен отличать этим связи
друг от друга, потому что они все прибывают от различных портов или
хостов. Например, если Вы дважды войдете на quark от erdos, тогда
первый rlogin клиент будет использовать местный порт 1023, а второй
будет использовать порт 1022. Однако, будут соединяться с тем же самым
портом 513 на quark.
Этот пример показывает использование портов как пункты, где
клиент входит в контакт с определенным портом чтобы получить
определенное обслуживание. Клиенту необходимо знать надлежащий номер
порта, соглашение о назначении этих номеров должно быть достигнуто
между администраторами обеих систем. Для услуг которые широко
используются, типа rlogin, эти номера должны устанавливаться
централизованно. Этим занимается IETF (или Проектирующая задачи
Internet сила), которая регулярно выпускает RFC статьи. Которые, среди
прочего, назначают номера портов для общеизвестных услуг. Linux
использует файл, в котором регистрируют названия доступного другим
сервеса и номера портов, к которым определенный сервес прикреплен,
называется он /etc/services. Он описан в секции 10.3.
Стоит заметить, что хотя и TCP и UDP полагаются на порты, эти
номера не находятся в противоречии. Это означает что TCP порт 513,
например, отличается от UDP порта 513. Фактически, эти порты служат
как точки доступа для двух различных услуг, а именно rlogin (TCP) и
rwho (UDP).
2.3.9. Библиотека гнезд(socket)
В Unixоидных операционных системах программное обеспечение,
выполняющее все задачи и протоколы описанные выше, обычно является
частью ядра, аналогично и в Linux. Интерфейс программирования наиболее
общий для мира Unix - Библиотека Гнезд Berkeley. Свое название она
получила из-за популярной аналогии которая рассматривает порты как
гнезда(розетки). Она обеспечивает (bind(2)) запрос, который определяет
отдаленный хост, транспортный протокол, и сервис, к которому программа
может присоединится или слушать (используя connect(2), listen(2), and
accept(2)).
- 26 -
Библиотека гнезд однако несколько более общая, она обеспечивает
не только класс TCP/IPоснованных гнезд (AF INET гнезда), но также
класс, который управляется локальной связью машины (AF UNIX класс).
Некоторые версии могут также управляться другими классами типа XNS (
Система Организации Сети Ксерокса ) протокол, или X.25.
В Linux, библиотека гнезд -- часть стандартной libc C библиотеки.
В настоящее время, она поддерживает только AF INET и AF UNIX гнезда,
но ведется работа над включением поддержки для Novell протоколов, так,
чтобы в конечном счете один или больше классов гнезд для него были бы
добавлены.
2.4. Linux сети
Будучи результатом концентрации усилие программистов всего мира,
Linux не был бы возможен без глобальной сети. Так что не удивительно,
что уже на ранних стадиях разработки, несколько людей начали работать
над сетевыми возможностями. UUCP появился в Linux почти с самого
начала, а работа над tcp/ip-основанной сетью была начата осенью 1992,
когда Ross Biro и другие создали то, что теперь стало известным как
Net-1.
Ross прекратил активную разработку в Мае 1993, Fred van Kempen
начал работать над новой версией, переделывая главные части кода. Это
усилие известно как Net-2. Первый общественный релиз, Net-2d, был
сделан летом 1992 (как часть 0.99.10 ядра), и с тех пор поддерживался
и расширялся несколькими людьми, наиболее сильно Alan Cox, как
Net-2Debugged. После тяжелой отладки и многочисленных
усовершенствований кода, он сменил название на Net-3. Эта версия кода
в настоящее время включена в официальные выпуски ядра.
Net-3 предлагает драйвера устройств для разнообразного Ethernet,
а также для SLIP (для работы сети по последовательным линиям), и PLIP
( для параллельных линий). С Net-3, Linux получил TCP/IP приложения,
которые очень хорошо ведут себя в локальной сети и часто работают
быстрее некоторых коммерческих. Существует несколько проектов,
развитие которых будет увеличивать многосторонность Linux. Драйвер для
- 27 -
PPP ( протокол point-to-point, другой способ работы по
последовательным линиям), является в стадии Beta версии в настоящее
время, а AX.25 драйвер для радио - в Alpha версии. Alan Cox создал
драйвер для Novell's IPX протокола, но завершающие усилия для создания
сети совместимой с Novell были отложены из-за нежелания Novell
обеспечить необходимую документацию. Еще один проект - samba,
свободный NetBIOS сервер, написанный Andrew Tridgell.
2.4.1. Другие пути развития
В это время, продолжая разработку, Fred предложил Net-2e, в
которой сильно пересмотрено вся структура организации сети. Во время
написания этой книги, Net-2e все еще Beta программное обеспечение.
Наиболее интересен в Net-2e - объединение DDI, Интерфейса Драйвера
Устройства. DDI предлагает однотипный доступ и метод конфигурации для
всех устройств сети и протоколов.
Пока используется TCP/IP сеть написанная Matthias Urlichs,
написавшего ISDN драйвер для Linux и FreeBSD. Для этого, он встроил
BSD сетевой код в ядро Linux.
В течение обозримого будущего, Net-3 скорее всего останется. Alan
в настоящее время работает над AX.25 протоколом, используемого
любителями радио. Несомненно, скоро будет разработан "модуль" для
ядра, который позволит Вам добавлять драйвера к ядру не
переустанавливая систему.
Хотя эти различные реализации сети борются за обеспечение одного
и того же сервеса, основные их различия находятся на уровне ядре и
устройств. Поэтому, Вы не сможете отконфигурировать систему используя
Net-2e ядро с утилитами от Net-2d или Net-3, и наоборот. Это относится
только к командам, которые имеют дело с ядром; приложения и общие
сетевые команды типа rlogin или telnet пойдут на любом из них.
Однако, все эти различные версии сети не должны волновать Вас.
Если Вы не участвуете в активной разработке, Вы не должны волноваться
относительно версии сода TCP/IP. Официальные выпуски ядра будут всегда
сопровождаться набором сетевых инструментов, которые являются
- 28 -
совместимыми с кодом представленным в ядре.
2.4.2. Где получить код
Самая последняя версия сетевого кода может быть получена на
различных анонимным FTP. Официальный FTP участок для Net-3 -
sunacm.swan.ac.uk, отражаемый sunsite.unc.edu в system/Network/sunacm.
Самый последний комплект Net-2e доступен на ftp.aris.com. Matthias
Urlichs' bsd код может быть взят на ftp.ira.uka.de в
/pub/system/linux/netbsd.
Самые последние ядра могут быть найдены на nic.funet.fi в
/pub/OS/Linux/PEOPLE/Linus; sunsite и tsx-11.mit.edu отражают эту
дерикторию.
2.5. Поддержка Вашей системы
Повсюду в этой книге, мы в основном будем иметь дело с проблемами
конфигурации и установки. Администрирование, однако, гораздо труднее--
после установки сервеса, Вы должны сохранить его работоспосбность Для
большенства из них, будет необходимо достаточно мало внимания, в то
время как некоторые, типа почты и новостей, требуют постоянного
внимания. Мы будем обсуждать все это в более поздних главах.
Абсолютный минимум в обслуживании -- регулярная проверка системы
и просмотр log файлов на ошибки и необычные случаи. Вы конечно
захотите сделать это с помощью написания административных скриптов и
периодически запуская их. Исходная дистрибуция некоторых основных
приложений, типа smail или C news, содержат такие скрипты. Вы должны
только попросить их удовлетворить ваши потребности.
Результат работы любого такого скрипта должен быть отправлена по
почте администратору. По умолчанию, большенство приложений будут
посылать сообщения об ошибках, обычную статистику, или резюме logfile
к root. Этот имеет смысл только если Вы часто входите в систему под
root; еще лучше, если почту root перенаправлять на ваше имя, как
описано в главе 15.
- 29 -
Однако как бы тщательно Вы не конфигурировали ваш участок, по
закону Мерфи проблемы обязательно появятся. Поэтому, при обслуживании
системы от жалоб не отвертеться. Обычно, люди ожидают что
администратор системы может по крайней мере быть найден через email
как root, но имеются также другие адреса, которые обычно используются
чтобы найти лицо ответственное за определенный аспект управления.
Например, жалобы относительно сбоев в конфигурации почты будут
обычно адресованы postmaster, а проблемы с системой новостей могут
быть сообщены newsmaster или usenet. Обращения к hostmaster должны
быть перенаправлены лицу отвечающему за основные услуги сети и службу
имен DNS.
2.5.1. Безопасность системы
Другой очень важный аспект администрирования системы в сети --
защита системы и пользователей от злоумышленников, которые могут
вредить вам не только фальшивыми сообщениями, но и стиранием данных
или нарушения секретности ваших пользователей. Мы будем yпоминать
некоторые специфические проблемы при обсуждении случаев, когда они
могут происходить, и предложим несколько общих способов защиты.
Здесь мы будет обсуждать несколько примеров и основных методов
обеспечения безопасности системы. Конечно, охваченные темы не могут
решить всех проблем безопасности, с которыми вы столкнетесь; они
просто служат иллюстрацией проблем, которые могут возникнуть. Поэтому,
необходимо прочитать хорошую книгу по безопасности, особенно
администратору сетевой системы. Simon Garfinkel "Практическая UNIX
Безопасность" ( см. [ GETST "безопасность"]) -- очень рекомендую.
Безопасность системы начинается с хорошего администрирования
системы. Это включает в себя проверку собственности и разрешений всех
жизненено важных файлов и каталогов, контроль использования
привилигерованных прав, и т.д.. COPS программа, например, будет
проверять вашу файловую систему и общие файлы конфигурации на
необычных разрешения и другие аномалии. Также следует ввести
определенные правила по созданию пользовательских паролей, которые
позволяли бы уменьшить вероятность их подбора. Например, потребовать
чтобы пароль имел по крайней мере пять букв, и содержал как верхние
- 30 -
так и низкие регистры и цифры.
При создании сервиса доступного по сети, постарайтесь дать ему
"наименьшие привилегии," удастовертесь что Вы не разрешаете ему делать
вещи, которые не требуются для его работы. Например, Вы должны делать
программы с привилегии root только, когда они действительно нуждаются
в этом. Например, если Вы хотите разрешить бездисковым хостам
загружаться от вашей машины, Вы должны обеспечить TFTP (тривиальный
сервис передачи файла) так, чтобы они загружали основные файлы
конфигурации из дириктории /boot. Однако, когда используется
неограниченный TFTP, это позволяет любому прочитать общедоступные
файлы с вашей машины. Если это не то, что Вы хотите, почему бы не
ограничить TFTP сервис дирикторией /boot?
По той же самой причине, Вы могли бы захотеть ограничить доступ к
определенным услугам пользователям с определенных хостов. В главе 10.,
мы представляем tcpd, который делает это для разнообразных сетевых
приложений.
Другой важный пункт -- избегайте "опасного" программного
обеспечения. Конечно, любое программное обеспечение, которое Вы
используете может быть опасно, потому что программное обеспечение
может иметь ошибки, так что умные люди могли бы использовать их чтобы
получить доступ к вашей системе. Подобные вещи случаются и нет никакой
полной защиты против этого. Эта проблема касается как бесплатного, так
и коммерческого программного обеспечения. Однако, программы, которые
требуют специальных привилегий несоизмеримо опаснее чем другие, потому
что любая лазейка может иметь непоправимые последствия. Если Вы
устанавливаете сетевую программу будте вдвойне осторожны и ничего не
пропускаете в документации, чтобы случайно не нарушить безопасность
системы. Вы не можете исключить того, что ваши предосторожности могут
потерпеть неудачу, независимо от того насколько осторожный Вы были.
Поэтому Вы должны удостовериться, что Вы обнаружите злоумышленников
сразу же после их появления. Хорошее начало -- проверка log файлов
системы, но злоумышленник вероятно умный человек, и будет удалять
любые очевидные следы перед уходом. Однако, имеются инструменты
подобно tripwire, которые позволяют Вам проверять жизненно важные
системные файлы и регистрировать были ли их содержание или разрешения
- 31 -
изменены. Tripwire вычисляет различные сильные контрольные суммы по
этим файлам и хранит их в базе данных. Потом контрольные суммы
повторно вычисляются и сравниваются с сохраненными для обнаружения
любых модификации.
2.6. Обзор следующих глав
Следующие несколько глав будут иметь дело с конфигурированием
Linux для TCP/IP сети, и с управлением некоторыми главными
приложениями. Прежде чем пачкать наши руки редактированием файлов и
подобными вещами мы немного исследуем IP в 3 главе. Если Вы уже знаете
относительно IP маршрутизации, и как выполняется address resolution,
Вы можете пропустить эту главу.
Глава 4. Обсуждение основных проблем конфигурации, типа установка
ядра и введения вашей Ethernet карты. Конфигурация ваших
последовательных портов охвачена в отдельной главе, потому что их
обсуждение не относится только к TCP/IP сети, но и к UUCP.
Глава 6. Помогает Вам отконфигурировать вашу машину для TCP/IP.
Она также описывает несколько полезных инструментов, которые Вы можете
использовать для проверки и отладки ваших установок Следующая глава
рассказывает как конфигурировать hostname resolution и объясняет как
установить сервер имен.
Это сопровождается двумя главами показывающими конфигурирование и
использование SLIP и PPP. Глава 8. Объясняет как установить SLIP связь
и дает детальные рекомендации по запуску программ, которые позволяют
автоматизировать большинство необходимых шагов. Глава 9. охватывает
PPP и pppd.
Глава 10. Дает короткое представление о некоторых из наиболее
важных сетевых приложений, типа rlogin, rcp, и т.д., Она также
охватывает услуги inetd и описывает как Вы можете ограничить
определенные услуги для набора каких-либо хостов.
Следующие две главы обсуждают NIS, Сетевую Информационную
Систему, и NFS, Сетевую Файловую Систему. NIS - полезный инструмент
- 32 -
для распространения административной информации типа паролей
пользователя в локальной сети. NFS позволяет Вам распределить файлы
между несколькими хостами в вашей сети.
Глава 13. Дает Вам представление об администрированию Taylor
UUCP, бесплатного UUCP пакета.
Остаток книги посвящен детальному путешествию по электронной
почте и Usenet Новостям. Глава 14. представляет Вам основные
концепциям электронной почты, типа того как выглядит адрес электронной
почты и как система обработки почты получает ваше сообщение
Главы 15. И 16. Охватывают установку smail и sendmail, два агента
транспортировки почты, которых Вы можете использовать в Linux. Эта
книга описывает оба из них, потому что smail более легкий для
установки (для начинающих), в то время как sendmail более гибок.
Главы 17. И 18. Объясняют пути управления новостями в Usenet и
как установить и использовать C news, популярный пакет программ для
управления Usenet новостями.
Глава 19. Кратко охватывает запуск NNTP daemon, чтобы обеспечить
доступ к новостям для вашей локальной сети.
Глава 20. Наконец показывает Вам как конфигурировать и
обслуживать различные newsreader.
.
- 33 -
3. Проблемы TCP/IP сети
Теперь обратимся к деталям того как вы будете присоединять вашу
Linux машину к сети TCP/IP, включая работу с IP адресами, именами
хостов, и чуть-чуть проблемы маршрутизации. Эта глава дает Вам основу,
которая поможет Вам понять, что требуется для установки системы, в то
время как следующие главы будут охватывать инструменты, с помощью
которых это достигается.
3.1. Сетевой интерфейс
Чтобы скрыть разнообразное оборудование, которое может
использоваться в сетевой среде, TCP/IP определяет абстрактный
интерфейс, через который можно обращаться к аппаратным средствам ЭВМ.
Этот интерфейс предлагает набор действий который является одинаковым
для всех типов аппаратных средств и в основном имеет дело с посылкой и
получением пакетов.
Для каждого переферийного устройства, которое Вы хотите
использовать, в ядре должен быть представлен соответствующий интерфейс
Например, Ethernet интерфейсы в Linux названы eth0 и eth1, а
интерфейсы SLIP -- sl0, sl1, и т.д.. Эти названия интерфейса
используются при конфигурировании, когда Вы хотите определить ядру
специфическое физическое устройство. Они не имеют никакого
назначения кроме этого.
Чтобы работать в TCP/IP сети, данному интерфейсу должен быть
назначен IP адрес, который служит как идентификатор при общении с
остальным миром. Этот адрес различен в зависимости от названия
интерфейса упоминаемого выше; если Вы сравниваете интерфейс с дверью,
тогда адрес подобен пластине с именем, прикрепленной на ней.
Конечно, имеются другие параметры устройства которые необходимо
отрегулировать; один из них - максимальный размер дэйтаграм который
может быть обработан данной частью аппаратуры, также называемый
Maximum Transfer Unit, или MTU. Другие параметры будут представлены
- 34 -
позже.
3.2. IP адреса
Kак упоминается в предыдущей главе, адреса понятные в
соответствии c IP -- это 32-битовые числа. Каждая машине в данной сети
должен быть назначена уникальный адрес.
В локальной сети, которая не использует TCP/IP для связи с
другими сетями, Вы может назначить эти номера согласно вашим
персональным предпочтениям. Однако, для участков Inetrnet, номера
назначаются NIC.
Для более легкого чтения, IP адреса разбивают на четыре 8 битовых
числа, названных octets. Например, quark.physics.groucho.edu имеет IP
адрес 0x954C0C04, который записывается как 149.76.12.4. Этот формат
часто называют dotted quad notation.
Другая причина для такой записи то, что IP адреса разбиваются на
номер сети, который написан в первых octets, и номер хоста, который
является остатком. При обращении к NIC за адресами, Вы не получаете
адрес для каждого отдельного хоста, которые Вы планируете поставить.
Вместо этого, Вам дают сетевой номер, и позволяющий назначать машинам
любые IP адреса из заданного таким образом диапазона.
В зависимости от размера сети, хост часть можем быть меньшей или
большей. В зависимости от различные потребностей имеются несколько
классов сетей, определяющих различное разбиение IP адресов.
Класс A включает сети от 1.0.0.0 до 127.0.0.0. Сетевой номер содержится в
первом octet, что предусматривает 24 разрядную хост часть, сеть
приблизительно из 1.6 миллион хостов.
Класс B содержит сети от 128.0.0.0 до 191.255.0.0; сетевой номер находится в
первых двух octets. Это предполагает 16320 сетей с 65024 хостами
каждый.
Класс C диапазон сетей от 192.0.0.0 до 223.255.255.0, с сетевой номер
- 35 -
содержится в первых трех octets. Это предполагает почти 2 миллиона
сетей по 254 хоста.
Классы D, E, и F Адреса попадающие в диапазон от 224.0.0.0 до 254.0.0.0
являются или экспериментальным, или сохранены для будущего
использования и не определяют какую-либо сеть.
Если мы вернемся к примеру в предыдущей главе, мы увидим что
149.76.12.4, адрес quark, относится к хосту 12.4 в сети 149.76.0.0
класса B.
Вы можете заметить, что в вышеупомянутом списке для каждого octet
в части хоста возможны не все значения. Это потому что номера хоста со
всеми octets равными 0 или 255 сохранены для специальных целей. Адрес
в котором все биты хост части -- ноль относится ко всей сети, а где
все биты хост части 1 назван broadcast (широковещательным) адресом. Он
относится ко всем хостам из указанной сети. Таким образом,
149.76.255.255 не существующий адрес хоста, он относится ко всем
хостам сети 149.76.0.0.
Имеются еще два зарезервированных адреса, 0.0.0.0 и 127.0.0.0.
Первый назван default route(путь по умолчанию), последний loopback
(кольцевым) адресом. default route используется при маршрутизации IP
дэйтаграм, с которыми мы будет иметь дело ниже.
Сеть 127.0.0.0 сохранена для IP работы внутри хоста. Обычно,
адрес 127.0.0.1 будет назначен специальному интерфейсу на вашем хосте,
так называемому интерфейсу loopback, который действует подобно
закрытому кругообороту. Любой IP пакет переданный ему от TCP или UDP
будет возвращен к ним как будто он только что прибыл из некоторой
сети. Это позволяет тестировать сетевое программное обеспечение без
использования "реальной" сети. Также он полезен, когда Вы хотите
использовать сетевое программное обеспечение на автономном хосте.
Например, большое количество UUCP участков не имеют IP связи вообще,
но все же хотят управлять INN системой новостей. Однако для правильной
работы под Linux, INN требует интерфейса loopback.
3.3. Address Resolution(поиск по адресу).
- 36 -
Теперь, когда вы видели как создаются IP адреса, Вы можете
спросить как же они используются в Ethernet при адресации различных
хостов? В конце концов Ethernet протокол опознает хосты по шести
байтовому адресу, который не имеет абсолютно ничто общего с IP
адресом.
Именно поэтому необходим механизм, переводящий IP адреса в адреса
Ethernet. Это так называемый Address Resolution Protocol (Протокол
Решения Адреса), или ARP. Фактически, ARP не ограничен Ethernet, он
используется и на сетях других типов. Идея, лежащая в основе ARP
аналогична способу применяемому большинством людей, когда они хотят
найти господина X. Они ходят по толпе и выкрикивают его имя. И если он
там, он откликнется.
Когда ARP хочет выяснять Ethernet адрес соответствующий данному
IP адрес, он использует особенность Ethernet известную как
"broadcast"(широковещательное), когда дэйтаграмы адресовываются
одновременно всем станциям в сети. Широковещательная дэйтаграма
посланная ARP содержит запрос с IP адресом. Каждый хост сравнивает его
с собственным адресом, и если они совпадают, возвращает ARP-ответ на
спрашивающий хост. Спрашивающий хост может теперь извлечь Ethernet
адрес отправителя из этого ответа.
Конечно Вы могли бы удивиться как хост может знать на котором из
миллионов Ethernet во всем мире должен находить желаемый хост, и
почему это вообще должен быть Ethernet. Все это называется
Routing(маршрутизация), а именно выяснение физического местоположения
хоста в сети. Это и будет темой следующей секции.
Давайте пока еще поговорим об ARP. Если хост обнаружил Ethernet
адрес, он сохранит его в ARP кэше, чтобы, когда в следующий раз
потребуется послать дэйтаграму рассматриваемому хосту, не требовалось
тратить время на его поиск. Однако, он не знает сохранить ли эту
информацию навсегда; например, на удаленном хосте могут поменять
Ethernet карту, так что хранимая информация окажется не верной. Что
потребует через некоторое время еще раз полностью повторить
описанную процедуру.
- 37 -
Иногда, также необходимо выяснять IP адрес связанный с данным
Ethernet адресом. Это случается, когда бездисковая машина хочет
загрузится с сервера по сети, что является весьма общей ситуацией для
локальных сетей. Бездисковый клиент, однако, не имеет никакой
информацию относительно себя кроме Ethernet адреса! Он посылает
широковещательное сообщение содержащее просьбу к серверу сообщить ему
его IP адрес. Для этого существует другой протокол, называемый
Reverse Address Resolution Protocol (Реверсивный ARP), или RARP. А
также BOOTP протокол, который служит для определения процедуры
загрузки бездисковых клиентов по сети.
3.4. IP маршрутизация
3.4.1. IP Сети
<> Когда Вы пишете письмо, Вы обычно помещаете на конверте полный
адрес: страну, штат, почтовый индекс, и т.д.. После того, как Вы
опускаете его в почтовый ящик, почта доставит его по месту назначения:
оно будет послано обозначенной стране, чья национальное почта пошлет
его в требуемый штат, и т.д.. Преимущество этой иерархической схемы
довольно очевидно: Везде, где Вы отправляете по почте письмо, местный
начальник почтового отделения будет точно знать, куда передать это
письмо, и не должен заботиться, которым путем письмо будет
путешествовать.
IP сети построины подобным образом. Весь Inetrnet состоит из
набора сетей, названных автономными системы. Каждая такая система
производит всю маршрутизацию между своими членами так, что задача
посылки дэйтаграм сведена к обнаружению пути к сети с требуемым
хостом. Это означает, что как только дэйтаграма вручена любому хосту
который находится в той же сети, обработка выполняется исключительно
данной сетью.
3.4.2. Подсети
Эта структура отражена в разбиении IP адреса на хост и сетевую
части, как объяснено выше. ПО умолчанию, сеть мест назначения
- 38 -
получается из сетевой части IP адреса. Таким образом, хосты с
идентичными IP адресами сети должны располагаться в пределах одной
сети, и наоборот. (2)
Имеет смысл предложить подобную схему также и внутри сети, так
как она может состоять из набора сотен меньших сетей, где самыми
маленькими единицами являются физические сети типа Ethernets. Поэтому,
IP позволяет Вам поделить IP сеть на несколько подсетей.
Подсеть принимает ответственность за доставку дэйтаграм для
определенного диапазона IP адресов. Как с классами A, B, или C, она
идентифицируется сетевой частью IP адресов. Однако, сетевая часть
теперь расширена, чтобы включить некоторые биты от хост части. Число
битов которые интерпритируются как номер в подсети задается так
называемой subnet(подсетевой) маской, или netmask. Это - 32 разрядное
число, которое определяет разрядную маску для сетевой части IP
адреса.
Сеть Groucho Marx Университета - пример такой сети. Она имеет
класс B с сетевым номером 149.76.0.0, и netmask поэтому равен
255.255.0.0.
Внутри, сеть GMU состоит из нескольких меньших сетей, типа
локальных сетей различных отделов. Так что диапазон IP адресов разбит
на 254 подсети, от 149.76.1.0 до 149.76.254.0. Например, отдел
теоретической физики имеет номер 149.76.12.0. Университетский
оптиковолоконный кабель тоже сеть с собственным номером 149.76.1.0.
Эти подсети имеют одинаковый сетевой IP адрес, в то время как третья
octet используется, чтобы различать их между собой. Таким образом
они будут использовать подсетевую маску 255.255.255.0.
Картинка 3.4.2 показывает как 149.76.12.4, адрес quark,
интерпритируется по-разному когда адрес принят как обычный адрес сети
класса B, и когда используется с подсетью.
Стоит заметить что subnetting (так названа техника создания
подсетей) -- чисто внутреннее дело сети. Подсети создаются сетевым
владельцем ( или администратором). Часто, подсети создаются чтобы
- 39 -
отразить существующие границы, будь они физические (два Ethernets),
административные (между двумя отделами) или географические. Однако,
эта структура воздействует только на внутреннее поведение сети, и
полностью невидима для внешнего мира.
3.4.3. Gateways
Subnetting - не только организационная деление, но часто и
естественное следствие границ аппаратных средств. Знания хоста о
строении данной физической сети, типа Ethernet, являются очень
ограниченными: Единственные хосты, с которыми они способны говорить
непосредственно, те, что находятся в той же сети. Ко всем другим
хостам они могут обращаться только через так называемый gateways.
Gateway -- хост который связан с двумя или больше физическими сетями
одновременно и конфигурирован так, чтобы перекачивать пакеты между
ними.
IP достаточно легко распознать находится ли хост на местной
физической сети, различные физические сети должны принадлежать
различным IP сетям. Например сетевой номер 149.76.4.0 сохранен для
хостов в локальной сети математиков. При посылке дэйтаграм к quark,
сетевое программное обеспечение на erdos немедленно видит по IP
адресу, 149.76.12.4, что хост места назначения находится в другой
физической сети, и поэтому может быть достигнут только через gateway
(sophus по умолчанию).
Sophus непосредственно связан с двумя отличными подсетями:
отделом математики, и университетской магистралью. Они доступы через
различные интерфейсы (eth0 и fddi0 соответственно). Но какой IP адрес
мы ему назначаем? 149.76.1.0 или 149.76.4.0?
Ответ: оба. При разговоре с сервером в локальной сети
математиков, sophus использует IP адрес 149.76.4.1, а при разговоре с
хостом на магистраль, он должен использовать 149.76.1.4.
Таким образом, gateway получает по одному IP адресу на каждую
сеть, к которой он подключен. Эти адреса (вместе с netmask) привязаны
к интерфейсу через, который обращаются подсети. Таким образом,
- 40 -
интерфейсы и адреса sophus связаны так:
----------------------------------------
+-------+-------------+----------------+
| Интерфейс| адрес | Netmask |
+-------+-------------+----------------+
+-------+-------------+----------------+
| Eth0 | 149.76.4.1 | 255.255.255.0 |
| fddi0 | 149.76.1.4 | 255.255.255.0 |
| Lo | 127.0.0.1 | 255.0.0.0 |
+-------+-------------+----------------+
+-------+-------------+----------------+
Последняя запись описывает loopback интерфейс lo.
На картинке 3.4.3 изображена топология части сети Groucho Marx Университета
(GMU). Хосты, находящиеся в двух подсетях в то же самое время показываются с
обоими адресами.
Вообще, Вы можете не обращать внимание на различия между адресами
хоста и интерфейса. Относитесь к адресу хоста, который находятся
только в одной сети, как к адресу того и другого, хотя строго говоря
это Ethernet интерфейс имеет IP адрес. Однако, это различие ощутимо
только, когда Вы работаете с gateway.
3.4.4. Таблица маршрутизации
Теперь сосредоточим наше внимание на том, как IP выбирает gateway
при доставке дэйтаграм к определенной сети.
Как мы видели раньше erdos, когда передавал дэйтаграмы для quark,
проверил место назначения и нашел, что его нет в местной сети. Поэтому
он посылает ее gateway, sophus, который теперь сталкивается с той же
самой задачей. Sophus определяет, что quark не находится в сетях, с
которыми он непосредственно связан, так что он передает эту дэйтаграм
другому gateway, чтобы он перенаправил ее дальше. Правильный выбор был
бы niels (gateway Отдела Физики). Но sophus нуждается в некоторой
информации чтобы определить подходящий gateway.
- 41 -
Для этого используется таблица IP маршрутизации, которая
определяет какие сети присоединены с помощью каких gateways.
Обязательно должен быть указан маршрут по умолчанию (the default
route), по которому будут направляться все пакеты с адресами в
неизвестных сетях. Этот gateway связан с сетью 0.0.0.0.. На sophus,
эта таблица могла бы напоминать эту:
-----------------------------------------
+------------+-------------+------------+
| Сеть | Gateway | Интерфейс |
+------------+-------------+------------+
+------------+-------------+------------+
| 149.76.1.0 | - | Fddi0 |
| 149.76.2.0 | 149.76.1.2 | fddi0 |
| 149.76.3.0 | 149.76.1.3 | fddi0 |
| 149.76.4.0 | - | Eth0 |
| 149.76.5.0 | 149.76.1.5 | fddi0 |
|... | ... | ... |
| 0.0.0.0 | 149.76.1.2 | fddi0 |
+------------+-------------+------------+
+------------+-------------+------------+
Маршруты к сетям, с которыми sophus связан непосредственно
обозначаются "-" в столбце gateway.
Таблицы маршрутизации могут быть построены различными средствами.
Для маленькой сети, наиболее эффективно строить их вручную и
передавать их IP, используя маршрутизирующую команду во время загрузки
системы. (см. главу 6.). Для больших сетей, они строятся и
регулируются во время работы маршрутизирующих демонов; они запускаются
на центральном хосте и обмениваются информацией с другими компьютерами
для вычисления "оптимального" маршрута между членами сетей.
В зависимости от размера сети используются различные протоколы
маршрутизации. Для маршрутизации в автономной системе (типа
университетского городка), лучше подходит RIP, Routing Information
Protocol (протокол маршрутной информации), который предложен в BSD
- 42 -
демоне. Для маршрутизации между автономными системами используются
внешние протоколы маршрутизации типа EGP (Внешний Gateway Протокол),
или BGP ( Пограничный Gateway Протокол); они ( а также RIP) были
предложены в gated демоне( University of Cornell's).
3.4.5. Метрические значения
Динамическая маршрутизация основанная на RIP выбирает самый
лучший маршрут к некоторому хосту или сети, основываясь на наборе
"hops"(перелетов), то есть gateways дэйтаграм, рассылаемых перед
передачей основной информации. Чем более короткий маршрут, тем лучше
RIP его оценивает. Очень длинные маршруты с 16 или больше перелетов
рассматриваются как неподходящие и отвергаются.
Чтобы использовать RIP для управления информацией,
маршрутизируемой внутри вашей сети, Вы должны запустить gated на всех
хостах. Во время загрузки gated проверяет все активные сетевые
интерфейсы. Если имеется больше чем один активный интерфейс ( не
считая loopback ), это предполагает что хост передает пакеты между
несколькими сетями, и будет активно обмениваться маршрутной
информацией. Иначе, он будет только пассивно получать RIP пакеты и
модернизировать локальную таблицу маршрутизации.
Получив информацию от локальной таблицы маршрутизации, gated
вычисляет длину маршрута по так называемому метрическому значению
связанному с записью в таблице. Это метрическое значение задается
администратором системы при конфигурировании маршрута и должна
отражать фактическую трудоемкость использования этого маршрута.
Поэтому, размер маршрута к подсети, с которой хост непосредственно
связан, должно всегда быть установлено в ноль, в то время как
маршрут проходящий через два gateways должен иметь размер два. Однако,
обратите внимание на то, что Вы не должны беспокоиться относительно
метрик, когда Вы не используете RIP или gated.
3.5. The Internet Control Message Protocol
(Межсетевой протокол контрольных сообщений)
IP имеет протокол-компаньон, что ж мы до сих пор не поговорили о
- 43 -
нем. Это межсетевой протокол контрольных сообщений (ICMP) и
используется он сетевым кодом ядра, чтобы передавать сообщения об
ошибках и т. п. другим хостам. Например, предположите что Вы
находитесь на erdos и хотите использовать telnet через 12345 порт на
quark, но на этом порте отсутствует слушающий процесс. Когда приходит
первый TCP пакет на этот порт, ядро определит это и отошлет ICMP
сообщение.
Имеются множество ICMP сообщений, большинство из них сообщают о
каких-либо ошибках. Однако, имеется очень интересное сообщение
названное Перенаправляющим сообщением (Redirect message). Оно
генирируется модулем маршрутизации, когда он обнаруживает что другой
хост использует его как gateway, хотя имеется более короткий маршрут.
Например, после загрузки таблицы маршрутизации на sophus может быть
неполной: она содержит маршруты к сети математиков, к FDDI магистрали,
а по умолчанию указан gateway Groucho Вычислительного центра (gcc1).
Поэтому, любые пакеты для quark посылаются через gcc1, хотя
быстрее было бы через niels (gateway в отделе физики). При получении
таких дэйтаграм, gcc1 будет извещать что это -- плохой маршрут, и
будет отправлять пакет к niels, в то же самое время возвращая ICMP
сообщение к sophus, показывая ему лучший маршрут.
Это кажется очень разумным, потому что пропадает необходимость
дописывать новые маршруты вручную. Однако будте осторожны, полагаясь
на динамические схемы маршрутизации, будь то RIP или ICMP
перенаправляющие сообщения, это не всегда хорошая идея. ICMP
перенаправления и RIP предлагают Вам маленький или никакой выбор при
проверке, подлинности маршрутной информации Это позволяет
злоумышлинику полностью разрушить движение по сети, или сделать что-то
еще.
3.6. Система имен областей (Domain Name System)
3.6.1 Поиск по имени (Hostname Resolution)
< > Как описано выше, адресация в TCP/IP сети крутится вокруг 32
разрядных номеров. Однако, Вам будет трудно запомнить даже некоторые из
- 44 -
них. Поэтому, хосты чаще известны под "обычными", имена типа gauss или
strange. Поэтому требуются программы для получения IP адреса по имени
машины Этот процесс назван Hostname resolution.
Приложение, которое хочет найти IP адрес по данному имени хоста,
не должен пытаться сделать это собственными силами Вместо этого, оно
обращается к библиотечным функциям, которые для этого и написаны, они
называются gethostbyname (3) и gethostbyaddr (3). Традиционно, эти и
ряд других процедур были сгруппированы в отдельной библиотеке
названной resolver; в Linux, это часть стандартной libc.
На маленькой сети, подобной Ethernet, или даже на нескольких, не
очень трудно поддерживать таблицу, сопоставляющую имена хоста к IP
адресам. Эта информация обычно хранится в файле /etc/hosts. При
добавлении или перемещении хоста, или при переназначении адресов, все
что Вы должны сделать -- это изменить файл hosts на всех хостах.
Очевидно, что это будет достаточно трудно в сетях с большим
количеством машин.
Одно из решений этой проблемы -- NIS, Сетевая Информационная
Система разработанная Sun Microsystems, названное YP, или Желтыми
Страницами. NIS хранит hosts файл (и другую информацию) в базе данных
на главном хосте, от которого клиенты могут восстановить свои файлы
если это необходимо. Все еще, Этот способ подходит только для сетей
среднего размера, потому что он требует поддерживать полную базу
данных как на центральной машине, так и на всех остальных.
В Internet, первоначально информация об адресах хранилась в
единственном файле HOSTS.TXT. Этот файл поддерживался в NIC, и должен
был загружаться всеми участвующими участками. Когда сеть выросла,
возникло несколько проблем. Постоянное обновление и постоянная
перекачка файла HOSTS.TXT регулярно требовали все больше ресурсов,
нагрузка на сервер, который этим занимался стала слишком высока. Но
еще большей проблемой стало придумывание новых (не совпадающих с
преждними) имен.
Вот почему, в 1984 г, введена новая схема -- DNS, разработанная
Paul Mockapetris и решившая обе проблемы одновременно.
- 45 -
3.6.2. О DNS
DNS организовывает имена хостов по областям(domain). Область --
набор как-то связанных участков, это могут быть машины одной сети (на
пример все машины в университетском городке, или всех хосты в BITNET),
все они могут принадлежать определенной организации (типа
американского правительства), или они просто географически близки.
Например, университеты сгруппированы в edu области, с каждым
Университетом или Коледжом, использующим отдельную подобласть, в
которой и находятся все его хосты. Groucho Marx Университету можно
давать groucho.edu область, Отделу математики -- maths.groucho.edu.
Хост на данной сети к имени области добавляет свое имя и таким образом
получает свое полное имя в Internet erdos был бы известен как
erdos.maths.groucho.edu.
Картинка 3.6.2 изображает пространство имен. Запись в корне этого
дерева, которая обозначена единственной точкой, весьма точно названа
областью корня, и она связана со всеми другими областями. Чтобы
показать что в данном месте пишется полное имя хоста, а не имя
относительно локальной области, иногда после имени ставят точку. Это
значит, что последний компонент имени принадлежит области корня.
В зависимости от местоположения в иерархии имени, область может
быть названа top-level, second-level, или third-level
(верхнеуровневой, второго уровня, или третьего уровня). Больше
количество уровней встречается редко. Вот несколько верхних областей,
которые Вы можете часто увидеть:
edu ( Главным образом США ) образовательные учреждения подобно
университетам, и т.д..
com Коммерческие организации, компании.
org некоммерческие организации. Часто частные UUCP сети находятся в этой
области.
net Gateways и другие административные хосты в сети.
- 46 -
mil американские военные учреждения.
gov американские правительственные учреждения.
uucp Официально, все имена участков прежде используемые как UUCP имена
без областей, были перемещены в эту область.
Технически, первый четыре из них принадлежат американской части
Internet, но там встречаются и не американские участки. Это особенно
верно для net области. Однако, mil и gov используются исключительно в
США.
Вне США, каждая страна вообще использует собственную область,
названую по имени страны и состоящая из двух букв определенных в
ISO-3166. Финляндия, например, использует fi область, fr используется
Францией, de Германией, au Австралией и т.д.. Ниже этой
высокопоставленной области, NIC каждой страны может свободно раздавать
имена хостам. Австралия, например, имеет области второго уровня
подобные международным высшим областям, названным com.au, edu.au, и
так далее. Другие, подобно Германии, не используйте этот
дополнительный уровень, но используют слегка длинные имена, которые
непосредственно относятся к организациям управляющих специфической
областью. Например, на пример ftp.informatik.uni-erlangen.de.
чонечно, эти национальные области не подразумевают что хост
расположенный ниже фактически расположен в той же стране; это только
сигнализирует что хост регистрировался в NIC этой страны . Шведский
изготовитель мог бы иметь отделение в Австралии, и все же
регистрировать все хосты в se области.
Теперь, организация пространства имен в иерархии имен областей
приятно решает проблему уникальности имен; с DNS, имя хоста должно
быть уникально только в пределах одной области Кроме того, полностью
квалифицированные имена весьма легко запомнить. Но DNS делает не
только это: он позволяет Вам передать работу с подобластями местным
администраторам. Например, администратор в Groucho Вычислительном
Центре мог бы создать подобласть для каждого отдела; мы уже
- 47 -
столкнулись с подобластями физиков и математиков. Когда он решит, что
сеть в Отделе Физики слишком большая и хаотичная, чтобы справиться с
ней из вне , он может просто передать контроль над physics.groucho.edu
областью администраторам этой сети. Тогда они свободны использовать,
любые имена хостов и назначать их IP адреса в пределах подсети без
вмешательства сверху.
Так, пространство имени раздроблено на зоны, которая управляется
своей областью. Обратите Внимание На различие между зоной и областью:
область groucho.edu затрагивает все машины в Groucho Marx
Университете, в то время как зона groucho.edu включает только хостов
которые работают в компьютерном центре непосредственно, например в
отделе математики. Хост в отделе физики принадлежат другой зоне, а
именно physics.groucho.edu. На картинке 3.6.2, начало зоны отмечено
маленьким кружочком справа от имени области.
3.6.3 Поиск имени с помощью DNS
На первый взгляд, все эти суета с областями и зонами кажется
делает поиск адреса ужасно сложным делом. В конце концов, если нет
центрального органа контролируещего какие имена связаны с каким
адресом, тогда как - скромное приложение должно его узнавать?!
Теперь начинается действительно техническая часть описания DNS.
Если Вы хотите выяснять IP адрес erdos, тогда, DNS говорит, иди и
спроси людей, которые управляют им, и они ответят Вам.
Фактически, DNS - гигантская распределенная база данных. Это
осуществлено посредством так называемых серверов имен(name server),
которые снабжают всех информацией о данной области или нескольких
областях сразу. Для каждой зоны имеются по крайней мере два сервера
имен, которые содержат всю информацию относительно хостов в этой зоне.
Чтобы получить IP адрес erdos, все что Вы должны сделать -- обратится
к серверу имен зоны groucho.edu, который и передаст Вам требуемые
данные.
Легко сказать, а как это сделать, подумали вы. Так как найти
сервер имен в Groucho Marx Университет? В случае если ваш компьютер не
- 48 -
оборудован address-resolving oracle, DNS также обеспечивает это. Когда
ваше приложение хочет найти информацию относительно erdos, оно входит
в контакт с местным сервером имен, который проводит так называемый
итерационный опрос. Сначала он посылает запрос серверу имен об области
корня, спрашивая о адресе erdos.maths.groucho.edu. Сервер имен корня
сообщает, что это имя не принадлежит зоне его полномочий, но вместо
этого отсылает к edu области. Таким образом, он предлагает Вам войти в
контакт с сервером имен зоны edu для получения большего количества
информации, и прилагает список всех серверов имен edu вместе с их
адресами. Ваш местный сервер имен пошлет запрос одному из них,
например a.isi.edu. Также как серверу имен корня, a.isi.edu знает что
люди groucho.edu управляют свей зоной сами, и направит Вас на их
сервера. Местный сервер имен запросит одного из них, который наконец
распознает имя, как принадлежащее к его зоне, и вернет IP адрес.
Кажется, что для поиска одного IP адреса тратится слишком много
ресурсов. но это не сравнимо меньше, чем при преждней схеме с
HOSTS.TXT. Но все еще имеются места для усовершенствования этой
схемой.
Чтобы уменьшить время ответа для будущих запросов, сервер имени
хранит полученную раньше информацию в кэше. Так что в следующий раз,
когда любой другой из вашей локальной сети захочет найти адрес хоста в
groucho.edu области, ваш сервер имен не проведет все снова, а будет
сразу обращаться к серверу имен groucho.edu.
Конечно, сервер имен не будет хранить эту информацию всегда, а
отбросит ее через некоторое время. Этот интервал времени назван time
to live(временем жизни), или TTL. TTL задается администратором данной
зоны.
3.6.4 Областные сервера имен (Domain Name Servers)
Сервера имен, которые содержат всю информацию относительно хостов
в пределах данной зоны названы авторитарными для этой зоны и иногда
упоминаются как master name servers. Любой запрос относительно хоста в
пределах этой зоны будет в конце концов передан одному из этих
серверов.
- 49 -
Чтобы обеспечить адекватную картину зоны, эти сервера должны быть
хорошо синхронизированы. Это достигается с помощью создания одного
главного сервера, который загружает зональную информацию из файлов
данных, а другие вторичные сервера через равные интервалы времени
качают эти данные с главного сервера.
Одна из причин иметь несколько серверов имен состoит в том, чтобы
распределять груз работы, другая -- надежность. Когда одна машина с
сервером имен ломается, все запросы будут посылаться другим серверам.
Конечно, эта схема не защищает Вас от сбоев сервера, при которых он
отсылает неправильные ответы на все запросы DNS, например от ошибок в
программе сервера.
Конечно, Вы можете также создать сервер имени, который не будет
авторитарным для любой области. Этот тип серверов используется чтобы
проверять запросы от местных приложений и кэшировать ответы. Поэтому
его называют caching-only сервером.
3.6.5 База данных DNS
Мы видели, что DNS имеет дело не только с IP адресами хостов, но
также обменивается информацией относительно серверов имен. В DNS базе
данных фактически имеется целая куча различных типов записей.
Единица информации в DNS базе данных названа resource record
(записью ресурса), или RR. Каждая запись имеет определенный тип,
описывающий тип данных, которые в ней записаны, и определяющий тип
сети, к которой она применяется. Последний используется при
определении схемы адресования, типа IP адресов (IN класс), или адресов
в Hesiod сетях (используемые в MIT), и др. Основной записью ресурсов
является запись, которая связывает полное имя области с IP адресом.
Конечно, хост может иметь больше чем одно имя. Однако, одно из
этих имен должно быть определенно как официальное, или каноническое
имя хоста, в то время как остальные просто псевдонимы. Различие между
ними в том, что каноническое имя хоста связано с А записью, в то время
как другие только с записью типа CNAME, которая указывает на
- 50 -
каноническое имя хоста.
Мы не будем приводить здесь все типы записей, а сделаем это
позже, в другой главе, здесь же ограничимся кратким примером. Картинка
3.6.5 показывает часть базы данных области которая загружена на
сервере имен для зоны physics.groucho.edu.
Кроме A и CNAME записи, Вы можете видеть специальную, занимающую
несколько строк, запись сверху файла. Это - SOA запись ресурса,
расшифровывается Start of Authority (Начало Власти), которая содержит
общую информацию относительно зоны, для которой этот сервер является
авторитарным. Она включает, например, время жизни для всех записей.
Обратите Внимание что все имена в файле с примером, которые не
заканчиваются точкой интерпретируются относительно groucho.edu
области. Специальное имя "@", используемое в SOA записи при обращении
к имени данной области.
Мы видели, что сервера имен для groucho.edu области так или иначе
должен знать хоть что-то относительно зоны физиков так, чтобы
направлять запросы серверам имен. Это обычно достигается парой
записей: NS запись дается FQDN, и А запись, ассоциирующая его имя с IP
адресом. Так как эти записи появляются вместе, они часто называются
склеенными записями. Это -- фактически единственный случаи записи, в
которой родительская зона держит информацию относительно хостов в
зоне подчиненного. Склеенные записи указывающие на сервера имен для
physics.groucho.edu показаны на рисунке 3.6.5.
;
; Authoritative Information on physics.groucho.edu
@ IN SOA {
niels.physics.groucho.edu.
hostmaster.niels.physics.groucho.edu.
1034 ; serial no
360000 ; refresh
3600 ; retry
3600000 ; expire
3600 ; default ttl
- 51 -
}
;
; Name servers
IN NS niels
IN NS gauss.maths.groucho.edu.
gauss.maths.groucho.edu. IN A 149.76.4.23
;
; Theoretical Physics (subnet 12)
niels IN A 149.76.12.1
IN A 149.76.1.12
nameserver IN CNAME niels
otto IN A 149.76.12.2
quark IN A 149.76.12.4
down IN A 149.76.12.5
strange IN A 149.76.12.6
...
; Collider Lab. (subnet 14)
boson IN A 149.76.14.1
muon IN A 149.76.14.7
bogon IN A 149.76.14.12
...
Картинка 5. фрагмент файла amed.hosts для Отдела Физики.
3.6.6. Обратный поиск.
После обнаружения IP адреса, принадлежащего хосту, иногда
желательно выяснять каноническое имя хоста, соответствующее данному
адресу. Это называется reverse mapping(обратное отображение) и
используется несколькими сервесами, чтобы проверить идентичность
клиента. При использовании единственного hosts файла, обратный поиск
заключается просто в проверке этого файла. В DNS, конечно не
проводится просмотр всего адресного пространсва. Вместо этого, создана
специальная область, inaddr.arpa, она содержит IP адреса всех хостов.
в перевернутой dotted-quad записи Например, IP адрес 149.76.12.4
соответствует имени 4.12.76.149.in-addr.arpa. Тип записи ресурса,
связывающий это имя с именем, называется PTR.
- 52 -
;
; Zone data for the groucho.edu zone.
@ IN SOA {
vax12.gcc.groucho.edu.
hostmaster.vax12.gcc.groucho.edu.
233 ; serial no
360000 ; refresh
3600 ; retry
3600000 ; expire
3600 ; default ttl
}
....
;
; Glue records for the physics.groucho.edu zone
physics IN NS niels.physics.groucho.edu.
IN NS gauss.maths.groucho.edu.
niels.physics IN A 149.76.12.1
gauss.maths IN A 149.76.4.23
...
Картинка 6. фрагмент файла named.hosts для GMU.
Создание зоны полномочий обычно означает что ее администраторам
дают полный контроль над тем как назначать адреса и имена хостов. Так
как они обычно управляют одной или более IP сетями или подсетями, одна
DNS зона может охватывать несколько IP сетей. Отдел Физики, например,
включает подсети 149.76.8.0, 149.76.12.0, и 149.76.14.0.
Как следствие, новые зоны должны быть записаны в in-addr.arpa
области: 8.76.149.in-addr.arpa, 12.76.149.in-addr.arpa, и
14.76.149.in-addr.arpa. Иначе, установка нового хоста в Collider
лаборатории требовала бы обращения к родительской области чтобы
отметится в ее in-addr.arpa файле. Зональная база данных для подсети
12 показана на картинке 3.6.6. Соответствующие склеенные записи в базе
данных зоны родителя показывается на картинке 3.6.6.
;
- 53 -
; the 12.76.149.in-addr.arpa domain.
@ IN SOA {
niels.physics.groucho.edu.
hostmaster.niels.physics.groucho.edu.
233 360000 3600 3600000 3600
}
2 IN PTR otto.physics.groucho.edu.
4 IN PTR quark.physics.groucho.edu.
5 IN PTR down.physics.groucho.edu.
6 IN PTR strange.physics.groucho.edu.
Картинка 7. фрагмент файла named.rev для подсети 12.
;
; the 76.149.in-addr.arpa domain.
@ IN SOA {
vax12.gcc.groucho.edu.
hostmaster.vax12.gcc.groucho.edu.
233 360000 3600 3600000 3600
}
...
; subnet 4: Mathematics Dept.
1.4 IN PTR sophus.maths.groucho.edu.
17.4 IN PTR erdos.maths.groucho.edu.
23.4 IN PTR gauss.maths.groucho.edu.
...
; subnet 12: Physics Dept, separate zone
12 IN NS niels.physics.groucho.edu.
IN NS gauss.maths.groucho.edu.
niels.physics.groucho.edu. IN A 149.76.12.1
gauss.maths.groucho.edu. IN A 149.76.4.23
...
Картинка 8. фрагмент файла named.rev для сети
Одно важное следствие этого то, что зоны могут создаваться только
как наборы IP сетей, и, даже круче, количество нулевых битов в
netmasks должно выть кратно 8. Все подсети в Groucho Marx Университете
- 54 -
имеют netmask 255.255.255.0, так что in-addr.arpa зона может быть
создана для каждой подсети. Однако, если netmask 255.255.255.128,
создание зон для подсети 149.76.12.128 будет невозможно, потому что
нет никакой возможности сообщить DNS, что 12.76.149.in-addr.arpa
область была раздроблена на две зоны, с именами хостов
располагающимися от 1 до 127, и 128 до 255, соответственно.
.
- 55 -
4. Конфигурирование сетевых аппаратных средств.
4.1. Устройства, драйвера, и все это
До сих пор, мы весьма немного говорили относительно сетевых
интерфейсов и общих проблем TCP/IP, но не говорили о том, что
происходит, когда "сетевой код" в ядре обращается к аппаратным
средствам. Для этого, мы должны немного поговорить о концепциях
интерфейсов и драйверов.
Во-первых, конечно, имеются непосредственно аппаратные средства,
например Ethernet карта: пластина из эпоксидной смолы, утыканная
большим количеством крошечных чипов с глупыми номерами на них, и
воткнутая в слот вашего PC. Это - то что мы обычно называем
устройством.
Для того чтобы использовать Ethernet карту, необходимы
специальные функции, расположенные в ядре вашего Linux, которые знают
как работать с этим устройством. Это так называемые драйвера
устройств. Например, Linux имеет драйвера устройства для нескольких
марок Ethernet плат которые очень похожи по выполняемым функциям. Они
известны как "Becker Series Drivers" ,и называются так по имени их
автора, Donald Becker. Другой пример - D-link драйвер, который
работает с адаптером D-link пакетов, присоединяемым к параллельному
порту.
Но, что мы подразумиваем, когда говорим что драйвер "управляет"
устройством? Давайте вернемся к Ethernet плата, которую мы уже
упоминали. Драйвер должен быть способен работать с переферией этой
платы: он должен посылать команды и данные плате, в то время как плата
должна передать полученные данные драйверу.
В PC, эта связь устанавливается через область памяти ввода-вывода
которая является отображением регистров платы и т.п. Все команды и
данные которые ядро посылает плате проходят через эти регистраторы.
Память ввода-вывода описывается указанием начального(или основного)
- 56 -
адреса Типичные основные адреса для Ethernet плат 0x300, или 0x360.
Обычно, Вы не должны волноваться относительно проблем аппаратных
средств, типа основного адреса, потому что ядро делает попытку во
время загрузки обнаружить местоположение платы. Это называется
autoprobing(автоматический поиск), который означает что ядро во время
загрузки считывает несколько участков памяти и сравнивает считанные
данные с тем, что должны быть, если установлена Ethernet. Однако,
существуют Ethernet платы, которые ядро не может автоматически
обнаружить; это часто случается с дешевыми Ethernet картами.
Также, во время загрузки, ядро будет пытаться обнаружить только
одно Ethernet устройство. Если вы используете больше чем одну плату,
Вы должны явно сообщить ядру об этой плате.
Другой параметр, который Вы могли бы сообщить ядру -- interrupt
request channel (канал прерывания запроса). Компоненты аппаратных
средств обычно прерывают ядро когда они нуждаются во внимании,
например когда прибыли данные, или произошли другие события. В PC,
прерывание может происходить на одном из 15 каналов (0, 1, 3 и до 15).
Номер прерывания назначенный компоненту аппаратных средств называется
interrupt request channel или IRQ.
Как описано в главе 3., ядро обращается к устройствам через так
называемый интерфейс. Интерфейсы предлагают абстрактный набор функций,
которые являются стандартными для всех типов аппаратных средств, типа
посылки или получения дэйтаграм.
Интерфейсы идентифицируются посредством имен. Эти имена
определенны внутри ядра, это не файлы устройств в директории /dev.
Типичные имена для интерфейсов Ethernet. - eth0, eth1, и т.д.
Назначение интерфейсов для определенных устройств обычно зависит от
способа, которым устройства конфигурированы; например первая
установленная Ethernet плата станет eth0, следующая -- eth1, и так
далее. Исключение из этого правила - SLIP интерфейсы, которые
назначаются динамически; То есть всякий раз, когда устанавливается
SLIP связь, последовательному порту назначается интерфейс
- 57 -
Картинка пробует показать связь между аппаратными средствами,
драйверами устройств и интерфейсами.
Во время загрузки, ядро показывает какие устройства обнаружены, и
какому какой интерфейс будет установлен. Фрагмент типичного экрана
загрузки:
This processor honours the WP bit even when in supervisor mode. Good.
Floppy drive(s): fd0 is 1.44M
Swansea University Computer Society NET3.010
IP Protocols: ICMP, UDP, TCP
PPP: version 0.2.1 (4 channels) OPTIMIZE FLAGS
TCP compression code copyright 1989 Regents of the University of California
PPP line discipline registered.
SLIP: version 0.7.5 (4 channels)
CSLIP: code copyright 1989 Regents of the University of California
dl0: D-Link DE-600 pocket adapter, Ethernet Address: 00:80:C8:71:76:95
Checking 386/387 coupling... Ok, fpu using exception 16 error reporting.
Linux version 1.1.11 (okir@monad) #3 Sat May 7 14:57:18 MET DST 1994
Здесь показано что ядро компилировалось с TCP/IP, и с драйверами
для SLIP, CSLIP, и PPP. Третья строка c низу сообщает, что был
обнаружен адаптер d-link, и он установился как интерфейс dl0. Если Вы
имеете Ethernet карту, ядро обычно печатает строку, начинающуюся с
eth0, и сопровождаемую типом обнаруженной карты. Если Вы имеете
Ethernet карту, но не увидели это сообщение, это означает что ядро
неспособно обнаружить вашу плату. Об этом мы поговорим позже.
4.2. Конфигурирование ядра
Большинство Linux распространяются вместе с загрузочными
дискетами, работующими со всеми основными типами аппаратных средств
PC. Это означает что ядро на этих дискетах имеет все виды драйверов,
многие из которых Вам никогда не пригодятся, но занимают драгоценную
память системы потому что части ядра не свопируются. Поэтому, Вы
должны собрать ваше собственное ядро, включая только необходимые Вам
драйвера.
- 58 -
При управлении Linux системой, Вы должны быть знакомы со
строением ядра. Основы этого объясняются в "Installation and Getting
Started" написанной Matt Welsh, который является также частью проекта
Linux документации. Потому, в этой секции мы будем обсуждать только те
стороны конфигурации Linux, которые относятся к сети.
При запуске make config, сначала Вас спрашивают общие вопросы
конфигурации, например хотите ли Вы в ядре иметь математический
эмулятор или нет, и т.д.. Один из этих вопросов -- хотите ли Вы
поддержку TCP/IP сети. Вы должны ответить y, чтобы получить ядро
способное работать с сетью.
4.2.1. Опции ядра в Linux 1.0 и выше
После того, как основная часть вопросов задана, конфигуратор
продолжит спрашивать Вас относительно различных особенностей типа SCSI
драйверов, и т.д..
Последующий список вопросов относится к проблемам поддержки сети.
Точный набор опций конфигурации постоянно меняется, из-за
продолжающейся разработки. Типичный список опций предлагаемых
большинством версий ядра (в основном в 1.0 1.1) напоминает этот (
комментарии даются italics шрифтом):
*
* Network device support
*
Network device support? (CONFIG ETHERCARDS) [y]
Несмотря на макро название указанное в скобках, Вы должны
ответить на этот вопрос y, если Вы хотите использовать любой тип
сетевых устройств, независимо от того является ли оно Ethernet, SLIP,
или PPP. При ответе y, поддержка для устройств Ethernet-типа
разрешается автоматически. Поддержку для других типов сетевых
драйверов нужно разрешить отдельно:
SLIP (serial line) support? (CONFIG SLIP) [y]
SLIP compressed headers (SL COMPRESSED) [y]
PPP (point-to-point) support (CONFIG PPP) [y]
- 59 -
PLIP (parallel port) support (CONFIG PLIP) [n]
Эти вопросы касаются различных протоколов связи поддерживаемых
Linux. SLIP позволяет Вам транспортировать IP дэйтаграмы через
последовательные линии. Опция сжатия заголовков обеспечивает поддержку
CSLIP, позволяющий сжимать TCP/IP заголовки всего в три байта.
Обратите Внимание что эта опция ядра не включает CSLIP автоматически,
она просто обеспечивает необходимые функции для него.
PPP - другой протокол для построения сетей на последовательными
линиях. Он еще более гибок чем SLIP, и не ограничен только IP, но
также поддерживает IPX. Так как поддержка PPP была закончена только
недавно, эта опция может быть не представлена в вашем ядре.
PLIP обеспечивает пересылку IP дэйтаграм через параллельный порт.
Он главным образом используется для того чтобы связаться с PC под
управлением DOS.
Следующие вопросы имеют отношение к Ethernet платами от различных
поставщиков. Чем больше становится драйверов, тем больше станет
вопросов. Если вы конфигурируете ядро для нескольких различных машин,
Вы можете установить больше чем один драйвер.
NE2000/NE1000 support (CONFIG NE2000) [y]
WD80*3 support (CONFIG WD80x3) [n]
SMC Ultra support (CONFIG ULTRA) [n]
3c501 support (CONFIG EL1) [n]
3c503 support (CONFIG EL2) [n]
3c509/3c579 support (CONFIG EL3) [n]
HP PCLAN support (CONFIG HPLAN) [n]
AT1500 and NE2100 (LANCE and PCnet-ISA) support (CONFIG LANCE) [n]
AT1700 support (CONFIG AT1700) [n]
DEPCA support (CONFIG DEPCA) [n]
D-Link DE600 pocket adaptor support (CONFIG DE600) [y]
AT-LAN-TEC/RealTek pocket adaptor support (CONFIG ATP) [n]
*
* CD-ROM drivers
*
- 60 -
...
Наконец, в секции файловой системы, скрипт конфигурации спросит
Вас хотите ли Вы поддержку NFS. NFS позволяет Вам экспортировать
файловые системы с других хостов, так что файлы и директории кажутся
находящимися на одной машине.
NFS filesystem support (CONFIG NFS FS) [y]
4.2.2. Опции ядра в Linux 1.1.14 и выше
При запуске Linux 1.1.14, в который добавили поддержку IPX,
процедура конфигурации слегка изменена. Общая секция опций теперь
спросит хотите ли Вы поддержку сети вообще. Что немедленно
сопровождается парой вопросов о разных сетях.
*
* Networking options
*
TCP/IP networking (CONFIG INET) [y]
Чтобы использовать TCP/IP сеть, Вы должны ответить на этот вопрос
y. Если Вы отвечаете n, Вы будете все еще способны собирать ядро с
поддержкой IPX.
IP forwarding/gatewaying (CONFIG IP FORWARD) [n]
Вы должны здесь ответить Y, если ваша система действует как
gateway между двумя Ethernet, или между Ethernet и SLIP, и т.д.. Хотя
не причинит вреда установить ее по умолчанию, но чтобы
отконфигурировать хост как так называемый firewall, вы должны ответить
здесь нет. Firewalls -- хосты которые связаны с двумя или больше
сетями, но не позволяют им общаться. Обычно они используются чтобы
обеспечить пользователям сетей с доступом к Internet минимальный риск
проникновения из вне. Пользователям позволяется входить на firewall и
работать с Internet, но машины компании будут защищены от нападений из
вне, потому что любые внешние хосты не могут пересечь firewall.
*
- 61 -
* (it is safe to leave these untouched)
*
PC/TCP compatibility mode (CONFIG INET PCTCP) [n]
Эта опция работает с несовместимостью с некоторыми версиями
PC/TCP, коммерческими TCP/IP выполненными для DOS. Если Вы разрешаете
эту опцию, Вы все еще будете способны общаться с нормальной Unix
машиной, но она вредна для медленных соединений.
Reverse ARP (CONFIG INET RARP) [n]
Эта функция включает RARP. RARP используется бездисковыми
клиентами и X-терминалами во время загрузки для запроса своего IP
адрес. RARP необходим только для работы с этими клиентами. Самый
последний пакет сетевых утилит (net-0.32d) содержит небольшую утилиту
rarp которая позволяет Вам добавлять системы в RARP кэш.
Assume subnets are local (CONFIG INET SNARL) [y]
При посылки данных по TCP ядро, перед передачей их IP, должно
разбивать поток на несколько пакетов. Большие пакеты используются для
работы в локальной сети типа Ethernet, меньшие в случае, когда данные
посылаются куда-то далеко. Если Вы запрещаете SNARL, ядро будет
работать только с локальными сетями, к которым он непосредственно
подключен. Так, если Вы посмотрите на сеть класса B в Groucho Marx
Университете, там большинство хостов подключены к только одному или
двум подсетям. Если Вы разрешаете SNARL, ядро будет предполагать что
все подсети местные и используют большие пакеты при разговоре с всеми
хостами в университетском городке.
Если Вы хотите использовать меньшие размеры пакетов для данных
посланных определенным хостам (потому что, например, данные проходят
через SLIP связь), Вы можете cделать это используя mtu опции
маршрутизации, которые кратко обсуждены в конце этой главы.
Disable NAGLE algorithm (normally enabled) (CONFIG TCP NAGLE OFF) [n]
Правила Nagle используются чтобы избежать посылки маленьких IP
- 62 -
пакетов, также названные tinygrams. Tinygrams обычно создаются
диалоговыми сетевыми программами, которые передают отдельные символы,
типа telnet или rsh. Tinygrams может стать особенно неудобными при
связи по узкополосным линиям. Nagle алгоритм пытается избегать их
сдерживая при некоторых обстоятельствах передачу TCP данных. Вам стоит
отключить Nalge алгоритм, только если у вас есть серьезные проблемы с
получением пакетов.
The IPX protocol (CONFIG IPX) [n]
Это опция включает поддержку IPX, транспортный протокол
используемый Novell сетями. Он все еще в разработке и не очень
полезен. Единственная польза -- обмен данными с IPX утилитами DOS и
передача данных между вашими novell сетями через PPP связь. Поддержка
протоколов высокого уровня для Novell сети в обозримом будущем не
будет, так как спецификации бесплатно не достать.
В ядре 1.1.16, Linux поддерживается еще один тип драйвера, dummy
driver (фиктивный драйвер). Следующий вопрос появляется в начале
секции драйверов устройств.
Dummy net driver support (CONFIG DUMMY) [y]
Фиктивный драйвер в действительности делает немного, но весьма
полезен на автономном или SLIP хосте. Это в основном замаскированный
loopback интерфейс. Этот вид интерфейса нужен на хостах, которые имеют
SLIP но не имеют Ethernet, но хотят иметь интерфейс, который все время
держит ваш IP адрес. Чуть больше он обсуждается в секции 6.7.7 в главе
6 ..
4.3. Путешествие по сетевым устройствам Linux
Linux ядро поддерживает несколько драйверов для различных типов
оборудования. Эта секция дает краткий обзор семейств доступных
драйверов, и имен интерфейсов, используемых для них.
В Linux имеются ряд стандартных имен интерфейсов, которые описаны
ниже. Большинство драйверов поддерживают больше чем один интерфейс,
- 63 -
тогда интерфейсы перечисляются как в eth0, eth1, и т.д..
lo локальный интерфейс для loopback. Он используется для отладки, а
также парой сетевых приложений. Он работает подобно замкнутому циклу,
возвращая все дэйтаграмы, переданные ему, сетевому уровню того же
хоста. В ядре имеется всего одно loopback устройство, и нет
большого смысла в наличии меньшего или большего количества.
ethn n-ая Ethernet карта. Это имя интерфейса генерируется для
большенства Ethernet плат.
dln Это интерфейс доступа к D-Link DE-600 пакетному адаптеру (другое
Ethernet устройство). Разница в том, что DE-600
работает через параллельный порт.
sln n-ый SLIP интерфейс. Первая последовательная линия отконфигурируемая под SLIP
становится sl0, и т.д.. Ядро поддерживает до четырех SLIP
интерфейсов.
pppn n-ый PPP интерфейс. Подобно SLIP интерфейсам, PPP интерфейс
связан с последовательной линией, если только она отконфигурирована для
PPP. В настоящее время поддерживается до четырех
интерфейсов.
plipn n-ый PLIP интерфейс. PLIP транспортирует IP дэйтаграмы по
параллельным линиям. Поддерживается до трех PLIP интерфейсов.
Они устанавливаются PLIP драйвером при загрузке системы,
и отображают параллельные порты.
Для других драйверов интерфейса, которые могут быть добавлены в
будущем, подобно ISDN или AX.25, будут предоставлены другие имена.
В следующих секциях, мы будем обсуждать детали использования
драйверов описанных выше.
4.4. Установка Ethernet
- 64 -
Сейчас Linux поддерживает различные марки Ethernet карт. Больше
всего драйверов были написаны Donald Becker (becker@super.org). Он
автор семейства драйверов для карт основанных на National
Semiconductor 8390 чипе; они стали известными как серия Becker
драйверов. Имеются также драйвера для пары изделий для D-Link, среди
них D-Link адаптер, который предлагает доступ к Ethernet через
паралельный порт. Драйвер для этот был написан Bjrn Ekwall
(bj0rn@blox.se). DEPCA драйвер был написан David C. Davies
(davies@wanton.lkg.dec.com).
4.4.1. Прокладка Ethernet кабеля.
Если вы устанавливаете Ethernet впервые в вашей жизни, несколько
сказанных здесь слов могут быть вам полезны. Ethernet - очень
чувсвителен к правельности прокладки кабеля. Кабель должен с обоих
концов закрыватся 50 Омным резистором и не каких ответвлений. Если Вы
используете тонкий кабель с T-образными BNC переходами, эти переходы
должны быть вкручены непосредственно в плату.
Если Вы используете толстый кабель, Вы должны присоеденять ваш
хост через transceiver. Вы можете воткнуть transceiver непосредственно
AUI порт на вашей плате, но можете также использовать кусок кабеля.
4.4.2. Поддержка платы
Полный список поддерживаемых плат доступен в Ethernet HOWTOs
расположенных на comp.os.linux.announce Paul Gortmaker.
Вот список наиболее широко известных платы, поддерживаемых Linux.
Полный список в HOWTO приблизительно в три раза длиннее. Однако, даже
если Вы нашли вашу плату в этом списке, проверите сначала HOWTO;
иногда существуют важные детали относительно работы этих карт. На
пример, некоторые DMA-основанные Ethernet платы используют тот же
самый DMA канал что и Adaptec 1542 SCSI контролер. Если Вы не
переместите один из них на другой DMA канал, не удивляйтесь, что ваша
Ethernet плата пишет данные в произвольные места вашего жесткого
диска.
- 65 -
3Com EtherLink поддерживаются и 3c503 и 3c503/16, как - 3c507 и 3c509. 3c501
также поддерживается, но слишком медленна, чтобы ее покупать.
Novell Eagle NE1000 и NE2000, и разнообразные клоны. NE1500 и NE2100 также
поддерживаются.
Western Digital/SMC WD8003 и WD8013 ( то же самое что SMC Elite и SMC Elite
Plus) поддержана также и более новая SMC Elite 16 Ultra.
Hewlett Packard HP 27252, HP 27247B и HP J2405A.
D-Link DE-600 pocket adaptor, DE-100, DE-200, и DE-220-T.. Имеется также
комплект для DE-650-T, который является PCMCIA картой. (4)
DEC DE200 (32K/64K), DE202, DE100, и DEPCA rev E.
Allied Teliesis AT1500 and AT1700.
Чтобы использовать одну из этих карт, Вы можете использовать ядро
от одной из главных Linux дистрибуций. Они вообще имеют драйвера для
всех из них. Однако, лучше собрать ваше собственное ядро и собирать с
единственном драйвером, в котором Вы фактически нуждаетесь.
4.4.3. Автоматическое определение Ethernet
Во время загрузки, Linux попробует найти вашу плату и определить
ее тип. Карты ищутся по следующим адресам и в следующем порядке:
------------------------------------------------------
+--------------+-------------------------------------+
|карта | адреса поиска |
+--------------+-------------------------------------+
|WD/SMC | 0x300, 0x280, 0x380, 0x240 |
- 66 -
|SMC 16 Ultra | 0x300, 0x280 |
|3c501 | 0x280 |
|3c503 | 0x300, 0x310, 0x330, 0x350, 0x250, |
| | 0x280, 0x2a0, 0x2e0 |
|NEx000 | 0x300, 0x280, 0x320, 0x340, 0x360 |
|HP | 0x300, 0x320, 0x340, 0x280, 0x2C0, |
| | 0x200, 0x240 |
|DEPCA | 0x300, 0x320, 0x340, 0x360 |
+--------------+-------------------------------------+
+--------------+-------------------------------------+
Имеются два ограничения autoprobing. Во первых, он может не
распознавать все платы должным образом. Это особенно касается
некоторых из дешевых клонов известных плат, а также для некоторых
WD80x3 плат. Вторая проблема состoит в том, что ядро находит не больше
одной платы. Если Вы используете больше чем одну плату, или если
autoprobe не в состоянии обнаружить вашу плату, Вы должны явно
сообщить ядру основной адреса карты и имя.
В Net-3, для этого Вы может использовать две различных схемы Один
путь состoит в том, чтобы изменить или добавить информацию в файл
drivers/net/Space.c в исходном коде ядра, который содержит всю
информацию относительно драйверов. Это рекомендуются только, если Вы
знакомы с сетевым кодом. Лучший путь состoит в том, чтобы обеспечить
ядро этой информацией при загрузке. Если Вы используете lilo для
загрузки вашей системы, Вы можете передавать параметры ядру, определяя
их через опцию в lilo.conf. Чтобы сообщить ядру о Ethernet
устройстве, Вы можете передавать следующий параметр:
ether=irq,base addr,param1,param2,name
Первые четыре параметра числовые, в то время как последний - имя
устройства. Все числовые значения необязательные; если они опущены или
равны нолю, ядро будет пробовать само обнаружить эти значения или
использует значение установленное по умолчанию.
Первый параметр устанавливает IRQ для устройства. Если он не
указан, ядро будет пробовать обнаружить IRQ канал само. 3c503 драйвер
- 67 -
имеет специальную особенность, которая позволяет ему выбирать
свободный IRQ (из 5, 9, 3, 4) и конфигурировать плату для
использования этой линии.
addr параметр задает основной адрес ввода-вывода платы; значение
ноль сообщает ядру исследовать адреса внесенные в следующий список.
Следующие два параметра могут использоваться по-разному
различными драйверами. Для плат с разделяемой памятью типа WD80x3, они
определяют начальный и конечный адреса разделенной области памяти.
Другие карты обычно используют param1 чтобы устанавливать уровень
отладочной информации. От 1 до 7 обозначают увеличивающиеся уровни
подробности, в то время как 8 выключает их; 0 обозначает значение
установленное по умолчанию. 3c503 драйвер использует param2 чтобы
выбрать внутренний transceiver (установленный по умолчанию) или
внешний transceiver ( значение 1). Первый использует BNC; последний --
AUI порт.
Если Вы имеете две Ethernet платы, Вы можете одну плату
определять автоматически, а параметры второй платы с помощью lilo.
Однако, Вы должны удостоверился, что драйвер случайно не находит
вторую плату, в то время как первая не будет регистрироваться вообще.
Это можно сделать, указывая в lilo избегать исследовать пространство
ввода-вывода занятое второй платой.
Например, прося Linux установить вторую Ethernet плату в 0x300
как eth1, Вы бы передали следующие параметры к ядру:
Reserve=0x300,32 ether=0,0x300, eth1
reserve опция требует чтобы никакие драйверы не трогали при
исследование пространство ввода-вывода некоторого устройства. Вы
можете также использовать параметры ядра для управления авто поиском:
Reserve=0x340,32 ether=0,0x340, eth0
Чтобы выключить autoprobing вообще, Вы можете определить addr в
-1:
- 68 -
Ether=0,-1, eth0
4.5. PLIP Драйвер
PLIP основан на IP для параллельных линий и используется, если
необходимо соединить две машины. Он использует параллельный порт и
специальный кабель и позволяет достигать скоростей от 10Кбит/cек до
20Кбит/сек.
PLIP был первоначально разработан компанией Crynwr. Довольно
оригинальный проект: в течение длительного времени параллельные порты
в PC использовались в основном для принтеров; то есть восемь линий
использовались только чтобы послать данные с PC на периферийное
устройство и никуда больше. PLIP работает, обходя это ограничение,
используя пять линий состояний порта для ввода, что позволяет
передавать по пол-байта за раз между машинами. Этот режим работы
называется mode zero PLIP (0 способ PLIP). Сегодня, эти
однонаправленные порты кажется больше нигде не используются. Поэтому,
имеется также PLIP расширение, названное способом 1 который использует
полный 8 разрядный интерфейс.
В настоящее время, только Linux поддерживает 0 способ. В отличии
От более ранних версий PLIP, теперь он пытается быть совместимым с
PLIP сделанным на Crynwr, а также PLIP драйвером в NCSA telnet. Чтобы
соединить две машины использующие PLIP, Вам требуется специальный
кабель -- "Null Printer" или "Turbo Laplink" кабель. Вы можете сделать
его и сами. Приложение 20.3 описывает как.
РLIP поддерживало большое количество людей. В настоящее время его
поддерживает Niibe Yutaka.
Если PLIP компилируется в ядро, он устанавливает сетевой
интерфейс для каждого из возможных портов принтера, plip0
соответствует параллельному порту lp0, plip1 -- lp1, и т.д.. В
настоящее время интерфейсы отображаются на порты следующим образом:
- 69 -
--------------------------------
+-----------+-----------+------+
| Интерфейс | I/O порт | IRQ |
+-----------+-----------+------+
|plip0 | 0x3BC | 7 |
|plip1 | 0x378 | 7 |
|plip2 | 0x278 | 5 |
+-----------+-----------+------+
+-----------+-----------+------+
Если Вы отконфигурировали ваш порт принтера по-другому, Вы должны
изменить эти значения в drivers/net/Space.c в исходниках ядра Linux, и
собрать новое ядро.
Этот отображение не означает, однако, что Вы не можете
использовать эти параллельные порты как обычные. PLIP драйвер
обращается к ним только, когда соответствующий интерфейс
отконфигурирован.
4.6. SLIP и PPP Драйвера
SLIP (Serial Line IP), и PPP ( Point-to-Point Протокол ) - широко
используемые протоколы для посылки IP пакетов через последовательное
соединение. Ряд учреждений предлагают телефонный SLIP и PPP доступ на
машины которые находятся в Internet, таким образом обеспечивая IP
частным лицам.
Чтобы запустить SLIP или PPP, не требуется модификации аппаратных
средств. Вы можете использовать любой последовательный порт. Более
подробно об этом написано в главе 5.
.
- 70 -
5. Установка последовательных аппаратных средств
Ходят слухи, что где-то там существуют люди, которые имеют только
один PC и не имеют денег на T1 Internet соединение. Чтобы получить
свою ежедневную дозу новостей и почты, они полагаются на SLIP связь,
UUCP сети, и системы информационных табло (BBS), которые используют
телефонные сети.
Эта глава написана для всех тех людей, кто полагается на модемы.
Однако, существует большое количество деталей, в которые мы не будем
вдаваться, например как конфигурировать ваш модем. Все эти темы будут
охвачены в создающемся Serial HOWTO Greg Hankins, который регулярно
отправляется по почте к comp.os.linux.announce.
5.1. Коммуникационное программного обеспечения для модемной связи
Имеются ряд коммуникационных пакетов доступных для Linux. Многие
из них -- это терминальные программы, которые позволяют пользователю
на брать номер другого компьютера и работать как будто Вы сидите перед
простым терминалом.
Традиционная терминальная программа для Unix -- kermit. Имеются
более удобные программы, которые поддерживают список телефонных
номеров, языки для написания скриптов запросов и описания входа в
удаленные системы, и т.д.. Один из них -- minicom, который близок к
некоторый терминальным программам для DOS. Имеются также Х-основанные
пакеты коммуникаций, например seyon.
Также, доступны несколько linux-основанных BBS пакетов для людей,
которые хотят управлять системой информационных табло. Некоторые из
этих пакетов могут быть найдены на sunsite.unc.edu в
/pub/Linux/system/Network.
Кроме терминальных программ, имеется также программное
обеспечение, которое использует последовательную связь в не
- 71 -
интерактивном режиме для транспортировки данных к или от вашего
компьютера. Преимущество этой техники в том, что требуется гораздо
меньше времени, чтобы загрузить несколько дюжины килобайт
автоматически, чем это мог бы отнять у Вас при чтении вашей почты
интерактивно в некотором почтовом ящике на удаленной машине или при
просмотре интересной информации на BBS. С другой стороны, она требует
больше места на диске из-за большого количества бесполезной
информации, которую Вы обычно получаете.
Основной представитель этого вида программного обеспечения --
UUCP. UUCP -- это набор программы, которые позволяют копировать файлы
с одного хоста на другой, выполнять программы на отдаленном хосте, и
т.д.. Он часто используется для транспортировки почты или новостей в
частных сетях. Ian Taylor's UUCP пакет, который работает под Linux,
описан в следующей главе. Но есть и другое недиалоговое
комуникационное программное обеспечение, например, используемое в
Fido. Порты Fido приложений подобно ifmail также доступны.
SLIP находится где-то посередине и используется как диалоговыми
так и не-диалоговыми приложениями. Множество людей используют SLIP
чтобы дозвонится до университетской сети или какого-либо другого
общественного SLIP сервера, чтобы управлять FTP сессиями, и т.д.. SLIP
может также использоваться для постоянной или полупостоянной связи
сеть-сеть, хотя здесь полезен скорее ISDN.
5.2. Представления последовательных устройств
Unix ядро обеспечивает обращение к последовательным устройствам,
названым ttys. Это - сокращение от названия компании Teletype(tm),
которая в прошлом был одним из основных изготовителей терминалов. Этот
термин используется в настоящее время для любого основоного на
символьных данных устройства. Повсюду в этой главе, мы будем
использовать этот термин исключительно по отношению к устройствам
ядра.
В Linux существует три класса tty: (виртуальные) консоли, псевдо
терминалы (подобные дуплексному каналу, используемому приложениями
- 72 -
типа X11) и последовательные устройства. Последние также причисляется
к ttys, потому что они позволяют создавать диалоговые сессии по
последовательной связи; будь то интенсивно-зашитый терминал или
удаленный компьютер соединенный с данным по телефонной линии.
Ttys имеют ряд конфигурируемых параметров которые могут быть
установлены с помощью ioctl запроса. Многие из них применяются только
для последовательных устройств, так как они нуждаются в большой
гибкости для того, чтобы работать с изменяющимися типами соединений.
Среди наиболее видных параметров линии -- скорость линии и
паритет. Но имеются также флаги для преобразования между верхним и
нижним регистрами символов, и т.п. Tty драйвер может также
поддерживать различные опции линии, которые заставляют драйвер вести
себя совершенно по разному. На пример, SLIP драйвер для Linux может
представляется в терминах специальных дисциплин.
Существует также некоторая двусмысленность относительно того как
измерять скорость линии. Правильно - bit rate(побитовое измерение),
которое связано со скоростью линии измеренной в битах за секунду (или
bps для краткости). Иногда, люди называют это Бод (Baud), что тоже
верно. Эти два термина, однако, не взаимозаменяемы. Бод относит к
физической характеристике некоторого последовательного устройства, а
именно время за которое произошла передача импульса. Битовое измерение
обозначает текущее состояние существующей последовательной связи между
двумя точками, а именно средний число битов переданных за секунду.
Важно знать что эти два значения обычно различны, поскольку
большинство устройств кодируют больше чем один бит за электрический
импульс.
5.3. Доступ к последовательным устройствам
Подобно всем устройствам в Unix системах, последовательные порты
доступны через специальные файлы, располагающиеся в директории /dev.
Имеются два множества файлов устройств, связанных с последовательными
драйверами, и для каждого порта, имеется один файл из каждого
множества. В зависимости от файла к которому обращаются, устройство
будет вести себя по-разному.
- 73 -
Первые файлы требуются в случае, если порт используется для
входа; они имеет главный номер 4, и файлы названы ttyS0, ttyS1, и
т.д.. Вторые используется для выхода; файлы названы cua0, и т.д., и
имеют главный номер 5. Незначительные номера одинаковы для обоих
типов. Если ваш модем подключен к одному из портов от COM1 до COM4,
незначительный номер будет номер COM порта плюс 63. Если ваша
установка отлична от этой, например при использовании платы
поддерживающей множество последовательных линий, пожалуйста обратитесь
к Serial Howto.
Предположим, что ваш модем находится на COM2. Таким образом
незначительный номер будет 65, а главный номер для дозвона будет 5.
Следовательно, должно иметься устройство cua1 которое имеет этот
номер. Просмотрите список последовательный ttys в директрорие /dev.
Колонки 5 и 6 должны показать главные и незначительные номера,
соответственно:
$ ls -l /dev/cua*
crw-rw-rw- 1 root root 5, 64 Nov 30 19:31 /dev/cua0
crw-rw-rw- 1 root root 5, 65 Nov 30 22:08 /dev/cua1
crw-rw-rw- 1 root root 5, 66 Oct 28 11:56 /dev/cua2
crw-rw-rw- 1 root root 5, 67 Mar 19 1992 /dev/cua3
Если нет таких устройств, Вы должны создать их: войдите
супер-пользователем и наберите
# mknod -m 666 /dev/cua1 c 5 65
# chown root.root /dev/cua1
Некоторые Люди предлагают создание символической связи /dev/modem
на ваше устройство модема, так, чтобы случайные пользователи не должны
были запоминать несколько неинтуитивное cua1. Однако, Вы не можете
использовать modem в одной программе, а реальное название файла
устройства в другой. Это - потому что эти программы используют так
называемые файлы замка (lock files) для обозначения того, что
устройство используется. В соответствии с соглашением, имя файла замка
для cua1, например, является LCK..cua1. Использование различных файлов
- 74 -
устройства для того же самого порта приведет к тому, что программы
окажутся не в состоянии распознавать файлы замка для каждого имени, и
будут и использовать устройство в одно и то же время. В результате,
оба приложения не будут работать вообще.
5.4. Аппаратные Средства для последовательных линий.
Linux в настоящее время поддерживает разнообразные
последовательные платы, которые используют стандарт RS-232. RS-232 в
настоящее время наиболее общий стандарт для последовательных
коммуникаций в мире PC.
Хотя аппаратные средства handshake необязательны, но очень
полезны. Они позволяют любой из двух станций сигнализировать о
готовности получить данные или о том, что другая станция должна
подождать пока приемник не обработает поступающие данные. Линии
используемые для этот названы "Clear to Send" (Чистыми для посылки или
CTS) и "Ready to Send"(Готовыми послать или RTS), соответственно,
которые, объясняют второе название handshake аппаратных средств, а
именно "RTS/CTS".
В PC, интерфейс RS-232 обычно управляется UART чипом, полученным
из 16450 чипа, или более новой его версии, NSC 16550A. Некоторые марки
( особенно внутренних модемов оборудованных набором чипов Rockwell)
используют другие чипы, которые были запрограммированы, чтобы вести
себя так же как 16550-ые.
Главное различие между 16450 и 16550 то, что последний имеют FIFO
буфер размером 16 Байт, в то время как первый только 1 байт
Это делает 16450 подходящими для скорости в 9600 Бод, в то время
как для больших скоростей требуются чипы совместимые с 16550. Кроме
этих чипов, Linux также поддерживает 8250 чип, который был сделан
специально для PC-AT.
В стандартной конфигурации, ядро ищет четыре стандартных
последовательных платы от COM1 до COM4. Они связываются с устройствами
с незначительными номерами от 64 до 67, так как описано выше.
- 75 -
Если Вы хотите отконфигурировать ваши последовательные порты
по-другому, Вы должны установить Ted Tso's setserial команду в
rc.serial скрипте. Этот скрипт должен вызываться из /etc/rc во время
загрузки системы. Он использует setserial чтобы конфигурировать
последовательные устройства. Типичный rc.serial скрипт напоминает это:
# /etc/rc.serial - serial line configuration script.
#
# Do wild interrupt detection
/sbin/setserial -W /dev/cua*
# Configure serial devices
/sbin/setserial /dev/cua0 auto irq skip test autoconfig
/sbin/setserial /dev/cua1 auto irq skip test autoconfig
/sbin/setserial /dev/cua2 auto irq skip test autoconfig
/sbin/setserial /dev/cua3 auto irq skip test autoconfig
# Display serial device configuration
/sbin/setserial -bg /dev/cua*
Пожалуйста обратитесь к документации, которая поставляется вместе
с setserial для объяснения параметров.
Если ваша последовательная карта не обнаружена, или setserial -bg
команда показывает неправильные установки, Вы должны будете
отконфигурировать его явно, используя правильные значения.
Пользователи с внутренними модемами оборудованными Rockwell набором
чипов как сообщается испытывают эту проблему. Так, например, UART чип
называется NSC 16450, в то время как фактически это NSC 16550, Вы
должны изменить конфигурационную команду для причиняющего
неприятность порта
/sbin/setserial /dev/cua1 auto irq skip test autoconfig uart 16550
Подобные опции существуют и для того чтобы изменить основной
- 76 -
адрес, и IRQ COM порта. Пожалуйста обратитесь к man страницам,
setserial(8).
Если ваш модем поддерживает аппаратные средства handshake, Вы
должны удостовериться, что вы разрешили работу сними. Большинство
коммуникационных программ по умолчанию не пытаются этим пользоваться.
Вы должны устанавливать его в ручную. Лучше всего это сделать в
rc.serial скрипте, используя команду stty:
$ Stty crtscts < /dev/cua1
Чтобы проверить действительно ли используется handshake
$ Stty -a < /dev/cua1
Это команда выдаст Вам состояния всех флагов для данного
устройства; флаг показанный с предшествующим минусом как и в -crtscts
означает что флаг выключен.
.
- 77 -
6. Конфигурирование TCP/IP сети
В этой главе, мы пройдем все шаги необходимые для создания TCP/IP
сети на вашей машине. Начнем мы с назначения IP адресов и будем
медленно проходить весь путь конфигурирования интерфейсов TCP/IP , и в
конце рассмотрим несколько инструментов, которые весьма удобны для
решения проблем с установкой сети.
Большинство работ охваченных этой главой, Вы должны сделать
только один раз. Впоследствии, Вы будете изменять конфигурационные
файлы только в случае добавлении новой системы к вашей сети, или когда
Вы повторно полностью переконфигурируйте вашу систему. Некоторые из
команд конфигурирования TCP/IP, однако, должны выполнятся каждый раз
когда загружается система. Это обычно делает /etc/rc скрипт.
Обычно, специфическая сетевая часть этой процедуры содержится в
скрипте названном rc.net или rc.inet. Иногда, Вы будете также видеть
два скрипта названные rc.inet1 и rc.inet2, где вышеупомянутый скрипт
инициализирует сетевую часть ядра, в то время как последние запускают
основные сетевые приложения. Дальше я буду твердо придерживаться этой
концепции.
Ниже, Я буду обсуждать действия выполняемые в rc.inet1, в то
время как приложения будут описаны в более поздних главах. После
окончания этой главы, Вы должны установить последовательность команд,
которые должным образом конфигурируют TCP/IP сеть на вашем компьютере.
Вы можете заменить любые команды в rc.inet1 вашими командами,
удостоверится что rc.inet1 выполняется при запуске системы, и
перезагрузить вашу машину. Сетевые rc скрипты, которые вы получили
наряду с вашим Linux должны быть хорошим примером.
6.1. Установка файловой системы proc
Некоторые из инструментов конфигурации в Net-2 для связи с ядром
используют файловую систему proc. proc -- интерфейс, разрешающий
доступ к информации ядра времени выполнения через механизм похожий на
- 78 -
файловую систему. Когда он установлен, Вы можете просматривать список
его файлов и их содержание также как в любой другой файловой системе.
Типичными представителями являются файл loadavg, который содержит
среднее число загруженности системы и meminfo, который показывает
текущее состояния памяти ядра и использование свопа. К этому, сетевой
код добавляет сeтевую директорию. Она содержит ряд файлов, которые
отображают состояние вещей типа ARP таблицы, TCP соединений, и таблиц
маршрутизации. Большинство инструментов администрирования сети
получают информацию из этих файлов.
Proc файловая система (или procfs) обычно устанавливается во
время загрузки в /proc. Самый лучший метод состoит в том, чтобы
добавить следующую строку в /etc/fstab:
# procfs mont point:
none /proc proc defaults
И выполнить "mount /proc" в вашем /etc/rc скрипте.
Procfs в настоящее время отконфигурирован в большинстве ядер
установленным по умолчанию. Если procfs нет в вашем ядре, Вы можете
получить сообщение типа "mount: fs type procfs not supported by
kernel". Тогда Вы должны будите повторно собрать ядро и ответить "да"
когда вас спросят о поддержки procfs.
6.2. Установка бинарников
Если Вы используете одну из пред-пакетных Linux дистрибуций, она
вероятно содержит основные сетевые приложения и утилиты наряду с
набором примеров. Единственный случай, когда Вам пришлось бы и
устанавливать новые утилиты, тогда, когда Вы устанавливаете новый
выпуск ядра. Поскольку в них иногда вносятся изменения в сетевом
уровне, Вы должны будите модернизировать основные инструменты
конфигурации. Это по крайней мере приводит к повторной компиляции, но
иногда Вам может потребоваться последний набор бинарников. Они
обычно распространяются вместе с ядром и находятся в архиве названном
- 79 -
netXXX.tar.gz, где XXX - номер версии. Выпуск соответствующий Linux
1.0 -- 0.32b, самое последнее ядро ( 1.1.12 или позже ) требуют 0.32d.
Если Вы хотите собрать и установить стандартные TCP/IP сетевые
приложения самостоятельно, Вы можете получить исходники на большинстве
Linux FTP серверов. Там лежат более или менее тяжело исправленные
версий программ от Net-BSD и другие исходники. Другие приложения, типа
Xmosaic, xarchie, или Gopher и IRC клиенты нужно получать отдельно.
Большинство из них легко собирают, если Вы следуете всем инструкциям.
Официальный FTP участок для Net-3 -- sunacm.swan.ac.uk,
отраженный sunsite.unc.edu в system/Network/sunacm. Самый последний
Net-2e комплект и бинарники к нему доступны на ftp.aris.com. Matthias
Urlichs bsd сетевой код может быть взят на ftp.ira.uka.de в
/pub/system/linux/netbsd.
6.3. Другой пример
Для остатка этой книги, позвольте мне представить новый пример,
который является менее сложным чем Groucho Marx Университет, и ближе к
задачам, с которыми Вы будете фактически сталкиваться. Рассмотрим
виртуальную пивоварню, маленькую компанию, которая варит пиво. Чтобы
управлять этим бизнесом более эффективно, в пивоварне хотят создать
сети из компьютеров, которые все оказались PC, управляемые Linux 1.0.
На том же самом этаже, только через коридор, имеется виртуальная
винодельня, которая работает рядом с пивоварней. Там используется
собственный Ethernet. Весьма естественно, что две компании хотят
связать свои сети. Как первый шаг, они хотят создать gateway, который
будет передавать дейтограмы между двумя полсетями. Позже, они также за
хотят иметь UUCP связь с внешним миром. В конечном счете, они захотят
установить SLIP соединение чтобы соединяться иногда с Internet.
6.4. Установка имени хоста
Большинство, если не все, сетевые приложения используют имя
локального хоста, которое устанавливается к некоторому разумному
- 80 -
значению. Чтобы установить имя хоста наберите
# hostname name
Существует общая практика использовать неквалифицированное имя
хоста, то есть без указания названия области для него. Например, хосты
в Виртуальной Пивоварне могли бы быть названы vale.vbrew.com,
vlager.vbrew.com, и т.д.. Это их официальные, полностью
квалифицированные имена области. Их локальные имена -- только первый
компонент этого имени, типа vale. Однако, поскольку локальное имя
часто используется для поиска IP адреса хоста, Вы должны
удостоверится что resolver библиотека способна найти IP адрес данного
хоста. Это обычно означает что Вы должны ввести имя в /etc/hosts ( см.
ниже ).
Некоторые Люди предлагают использовать команду domainname, чтобы
развить идею ядра относительно имени области к остающейся части FQDN.
Таким образом, Вы могли бы комбинировать вывод от hostname и
domainname чтобы получить снова FQDN. Однако, это в лучшем случае
правильно на половину . domainname вообще используется чтобы
устанавливать NIS область хоста, которая может полностью отличатся от
DNS области, к которой ваш хост принадлежит. NIS описан в главе 11 ..
6.5. Назначение IP Адресов
Если Вы конфигурируете сетевое программное обеспечение для
автономного действия (например, чтобы он мог запустить INN netnews
программное обеспечение), Вы можете благополучно пропустить эту
секцию, потому что Вы будете нуждаться в IP адресе только для
интерфейса loopback, который всегда равен 127.0.0.1.
Если Вы хотите соединить ваш хост с существующей сетью, Вы должны
просить администраторов дать Вам IP адрес. При создании собственной
сети, Вы должны назначать IP адреса самостоятельно как описано ниже.
Хосты в пределах локальной сети обычно должны использовать адреса
- 81 -
от той же самой логической IP сети. Если Вы имеете несколько
физических сетей, Вы или должны назначить им различные сетевые номера,
или использовать подсети, чтобы расколоть ваш диапазон IP адресов в
несколько подсетей.
Если ваша сеть не связана с Internet, Вы свободны выбрать любой
правельный сетевой адрес. Вы только должны удостовериться, что выбрали
его из классов A, B, или C, в противном случае большенство программ
будут работать не правильно. Однако, если Вы намереваетесь в ближайшем
будущем выйти в Internet, Вы должны получить официальный IP адрес.
Самый лучший путь состoит в том, чтобы попросить вашего сетевого
поставщика помочь Вам. Если Вы хотите получить сетевой номер только в
случае когда вы выбираетесь в Internet, запросите бланк заявки на
сетевой адреса от hostmaster@internic.net.
Чтобы оперировать несколькими Ethernet (или другими сетями), Вы
должны разбить вашу сеть в несколько подсетей. Обратите Внимание, что
подсети требуются только в случае, если Вы имеете больше чем одну
сеть; Point-to-point связь не учитывается. Например, если Вы имеете
один Ethernet и один или более SLIP соединений с внешним миром, Вы не
нуждаетесь в подсети. Причина этого объясняется в главе 8..
Как пример, менеджер сети пивоварни обращается к NIC за сетевым
номером класс В, и получает 191.72.0.0. Чтобы разместить два Ethernet,
он решает использовать восемь битов части хоста как дополнительные
подсетевые биты. Это оставляет другие восемь битов для хоста, то есть
по 254 хостов на каждой полсети. Он также назначает подсеть 1
пивоварне и 2 -- винодельне. Их соответствующие сетевые адреса таким
образом 191.72.1.0 и 191.72.2.0. Сетевая маска 255.255.255.0.
Vlager, который является gateway между двумя сетями, получил
номер хоста, равный 1 на обоих из них, что дает ему IP адреса равные
191.72.1.1 и 191.72.2.1, соответственно. Картинка показывает две
подсети, и gateway.
Обратите Внимание что в этом примере Я использую сеть класса B
для простоты; класс C сеть был бы более реалистичным. С новым сетевым
кодом, деление на подсети не ограничено границами байта, так даже сеть
- 82 -
класса C может быть раздроблена на несколько полсетей. Например, Вы
могли бы использовать 2 бита части хоста для сетевой маски, что дает
Вам четыре возможные подсети с 64 хостами на каждой.
6.6. Написание hosts и networks файлов
После того, как Вы разбили на подсети вашу сеть, Вы должны
подготовиться к некоторому простому виду поиска адреса по имени
использующего файл /etc/hosts. Если Вы не собираетесь использовать DNS
или NIS для этого, Вы должны помещать все хосты в hosts файл.
Даже если Вы хотите использовать DNS или NIS, Вы можете иметь
некоторое подмножество имен и в /etc/hosts. Например, если вы хотите
иметь некоторый вид поиска по имени даже когда никакие сетевые
интерфейсы не запущены, например во время загрузки. Это не только
вопрос удобства, но также позволяет Вам использовать символические
имена хостов в ваших rc.inet скриптах. Таким образом, при изменении IP
адресов, Вы должны будите только копировать обновленный файл хостов на
все машины, вместо того чтобы редактировать большое количество rc
файлов. Обычно, Вы будете помещать все локальные имена и адреса в
hosts, добавлением их на любой gateways и NIS сервера, если они
используется.
Также, в течение проверки, Вы должны удостовериться, что ваш
resolver использует информацию только из файла hosts. Ваше DNS или NIS
программное обеспечение может прибыть с файлами примеров, которые
могут дать странные результаты при их использовании. Чтобы заставить
все приложения использовать исключительно /etc/hosts при поиске IP
адреса хоста, Вы должны отредактировать файл /etc/host.conf.
Закоментируйте все строки, начинающиеся с ключевого слова order и
вставьте строку
order hosts
Конфигурация resolver библиотеки будет подробно описана в главе7.
hosts файл содержит по одной записи на строку, состоящую из IP
адреса, имени хоста и необязательного списка псевдонимов имени. Поля
- 83 -
отделяются пробелами или табуляцией, и поле адреса должно начинаться в
первой колонке. Все, что следует после символа (#), расценивается как
комментарий и игнорируется.
Имя хоста может быть также полностью квалифицированным или
относительно локальной области. Для vale, Вы бы ввели полностью
квалифицированное имя, vale.vbrew.com и vale само по себе, так, чтобы
было известно и официальное имя и более короткое локальное.
Пример как выглядит файл хостов Виртуальной Пивоварне дан ниже.
Два специальных имени , vlager-if1 и vlager-if2, дают адреса для обоих
интерфейсов используемых на vlager.
#
# Hosts file for Virtual Brewery/Virtual Winery
#
# IP local fully qualified domain name
#
127.0.0.1 localhost
#
191.72.1.1 vlager vlager.vbrew.com
191.72.1.1 vlager-if1
191.72.1.2 vstout vstout.vbrew.com
191.72.1.3 vale vale.vbrew.com
#
191.72.2.1 vlager-if2
191.72.2.2 vbeaujolais vbeaujolais.vbrew.com
191.72.2.3 vbardolino vbardolino.vbrew.com
191.72.2.4 vchianti vchianti.vbrew.com
Точно также как с IP адресами хостов, можно дать символическое
имя сетевым номерам. Поэтому, файл хостов имеет компаньона названного
/etc/networks который отображает имя сети на сетевой номер и наоборот.
В Виртуальной Пивоварне, мы могли бы устанавливать файл сетей подобно
этому:
- 84 -
# /etc/networks for the Virtual Brewery
brew-net 191.72.1.0
wine-net 191.72.2.0
6.7. Конфигурация интерфейса для IP
После установки аппаратных средств, как было объяснено в
предыдущей главе, Вы должны дать знать об этом сетевому программному
обеспечению. Пара команд используются чтобы конфигурировать сетевые
интерфейсы, и инициализировать таблицу маршрутизации. Эти задачи
выполняются обычно в rc.inet1 скрипте, при загрузке системы. Эти
команды называются ifconfig ( где "если" относится к интерфейсу ), и
route.
fconfig используется чтобы сделать интерфейс доступным для ядра,
что включает в себя назначение IP адреса и других параметров и
формирование интерфейса, также известное как "taking up". Активность
означает, что ядро будет посылать и получить IP datagrams через
интерфейс. Самый простой путь установки
# ifconfig interface ip-address
Который связывает ip-адрес с интерфейсом и активирует его. Все
другие параметры устанавливаются по умолчанию Например, маска подсети
установленная по умолчанию получена из сетевого класса IP адреса, типа
255.255.0.0 для класса B адрес. ifconfig описан более подробно в конце
этой главы.
route позволяет Вам добавлять или устранять маршруты из таблицы
маршрутизации. Это может быть использовано так
route [add|del] target
Где add и del аргументы определяют добавлять или удалять маршрут
к таблице.
- 85 -
6.7.1. Интерфейс loopback
Сам первый интерфейс который нужно сформировать и активизировать
-- интерфейс loopback:
# ifconfig lo 127.0.0.1
Иногда, Вы будете также видеть фиктивное имя localhost
используемое вместо IP адреса. ifconfig будет искать имя в hosts
файле, где должна быть запись, объявляющая его как имя для 127.0.0.1:
# Sample /etc/hosts entry for localhost localhost 127.0.0.1
Чтобы просмотреть информацию о конфигурации интерфейса, Вы можете
вызвать ifconfig передав как аргумент имя интерфейса:
$ ifconfig lo
lo Link encap Local Loopback
inet addr 127.0.0.1 Bcast [NONE SET] Mask 255.0.0.0
UP BROADCAST LOOPBACK RUNNING MTU 2000 Metric 1
RX packets 0 errors 0 dropped 0 overrun 0
TX packets 0 errors 0 dropped 0 overrun 0
Как Вы можете видеть, интерфейс loopback получил netmask равную
255.0.0.0, так как 127.0.0.1 -- адрес A класса. Вы можете также
увидеть, что интерфейс не имеет множества общевещательных адресов,
который вообще-то бесполезны для loopback. Однако, если Вы используете
rwhod демона на вашем хосте, Вы возможно будете должны установить
широковещательный адрес loopback для того чтобы rwho функционировал
должным образом. Установка этого адреса объясняется в секции "Все о
ifconfig".
Теперь, Вы можете начать играть с вашей мини-"сетью".
Единственное чего не хватает -- это запись в таблице маршрутизации,
которая говорит IP, что этот интерфейс как маршрут к месту назначения
127.0.0.1. Это делается с помощью следующей команды
- 86 -
# route add 127.0.0.1
Здесь, тоже можно использовать localhost вместо IP адреса.
Затем, Вы должны проверить правильность работы, например,
используя ping. ping - сетевой эквивалент звукового(sonar) устройства
и используется для проверки того доступен ли данный IP адрес, и
измерения интервала времени между посылкой дэйтаграмы и получением
ответа. Время требуемое для этого часто называется roundtrip time.
# ping localhost
PING localhost (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp seq=0 ttl=32 time=1 ms
64 bytes from 127.0.0.1: icmp seq=1 ttl=32 time=0 ms
64 bytes from 127.0.0.1: icmp seq=2 ttl=32 time=0 ms
^C
--- localhost ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0/0/1 ms
При вызове ping, он будет продолжать испускать пакеты пока не
будет прервано пользователем. ^C отмечает место где мы нажали Ctrl-C.
Вышеупомянутый пример показывает, что пакеты доставлены к
127.0.0.1 и ответ пришел к ping почти мгновенно. Это показывает что Вы
преуспели во введении вашего первого сетевого интерфейса.
Если вывод который Вы получаете от ping не походит на показанный
выше, Вы нарвались на неприятности. Проверите ошибки в установочных
файлах. Проверите чтобы ifconfig и маршрутизирующие приложения,
которые вы используете, были совместимы с ядром, которым Вы
пользуетесь и, вообще, что ядро компилировалось с разрешенной сетью
(Вы увидите это по отсутствию директории /proc/net ). Если Вы
получаете сообщение об ошибки, говорящее "Network unreachable" ,тогда
вероятно вы не правильно использовали команду route. Удостоверитесь
- 87 -
что Вы используете тот же самый адрес, что Вы дали ifconfig.
Шагов описанных выше достаточно чтобы использовать сетевые
приложения на автономном хосте. После добавления вышеупомянутых строк
к rc.inet1 и проверки, что оба rc.inet скрипта запускаются из /etc/rc,
Вы можете перезагрузить вашу машину и попытаться использовать
различные приложения. Например, "telnet localhost" должен установить
telnet соединение с вашем хостом.
Однако, интерфейс loopback полезен не только как пример в книгах
о сетях , или как система отладки, но фактически используется
некоторыми приложениями в течение нормальной работы. Поэтому, Вы
всегда должны конфигурировать его, независимо от того присоединена ли
ваша машина к сети или нет.
6.7.2. Ethernet интерфейсы
Конфигурирование интерфейса Ethernet, идет почти также как и
интерфейса loopback, он только требует больше параметров когда Вы
используете подсети.
В Виртуальной Пивоварне, мы разбивали на подсети IP сеть, которая
была первоначально класс B. При установке интерфейса для требовалось
бы написать:
# ifconfig eth0 vstout netmask 255.255.255.0
Эта запись назначает eth0 интерфейсу IP адрес vstout
(191.72.1.2). Если бы мы опустили netmask, ifconfig вывел бы netmask
из класса сети, что привело бы к netmask 255.255.0.0. Теперь
быстренько проверим:
# ifconfig eth0
eth0 Link encap 10Mps Ethernet HWaddr 00:00:C0:90:B3:42
inet addr 191.72.1.2 Bcast 191.72.1.255 Mask 255.255.255.0
UP BROADCAST RUNNING MTU 1500 Metric 1
RX packets 0 errors 0 dropped 0 overrun 0
- 88 -
TX packets 0 errors 0 dropped 0 overrun 0
Вы можете видеть что ifconfig автоматически устанавливает
широковещательный адрес (поле Bcast) равный обычному значению, которое
является номером сети хостов с битами хоста равными 1. Также, размер
передаваемых сообщений (для данного интерфейса устанавливается
максимальный размер Ethernet пакета) был установлен равным
максимальному значению 1500 байтов. Все эти значения могут быть
исправлены специальными опциями, которые было описаны позже.
Также как в loopback случае, Вы должны теперь установить
маршрутизационную запись, которая сообщает ядру о сети, которая может
быть достигнута через eth0. Для Виртуальной Пивоварни, Вы это сделали
бы так
# route add -net 191.72.1.0
Сначала это смотрится как волшебство, потому что это
действительно не очевидно как route обнаруживает, которые сети
связываются с помощью каких интерфейсов. Однако, уловка довольно
проста: ядро проверяет все интерфейсы которые были отконфигурированы и
сравнивает адрес места назначения (в этом случае 191.72.1.0) с сетевой
частью адреса интерфейса. Единственный интерфейс, который
соответствует данному адресу, -- eth0.
Теперь, что такое -net опция? Она используется, потому что route
может работать с маршрутами к сетям и с маршрутам к отдельным хостам
(как Вы видели в localhost). Когда route получает адрес в dotted quad
стандарте, он пытается предположить принадлежит ли этот адрес сети или
хосту, проверяя биты части хоста. Если хост часть адреса - ноль,
маршрут предполагает, что это обозначает сеть, в противном случае, что
это адрес хоста.
Поэтому, route решил бы, что 191.72.1.0 - адрес хоста, потому что
он не может знать что мы используем подсети. Поэтому мы должны явно
сообщить, что это адрес сети, это делает -net флаг.
Конечно, вышеупомянутая команда, немного утомительна для набора и
- 89 -
дает много ошибок. Более удобный подход -- использование сетевых имен,
которые мы определили в /etc/networks. Это делает команду еще более
удобочитаемой; и даже -net флаг может быть теперь опущен, потому что
route теперь знает, что 191.72.1.0 обозначает сеть.
# route add brew-net
Теперь, когда вы закончили основные шаги конфигурации, надо
удостовериться что ваш Ethernet интерфейс действительно работает
правильно Выберите хост на вашем Ethernet, например vlager, и наберите
# ping vlager
PING vlager: 64 byte packets
64 bytes from 191.72.1.1: icmp seq=0. time=11. ms
64 bytes from 191.72.1.1: icmp seq=1. time=7. ms
64 bytes from 191.72.1.1: icmp seq=2. time=12. ms
64 bytes from 191.72.1.1: icmp seq=3. time=3. ms
^C
----vstout.vbrew.com PING Statistics----
4 packets transmitted, 4 packets received, 0% packet loss
round-trip (ms) min/avg/max = 3/8/12
Если Вы не видите вывод подобный этому, значит что-то не так.
Если Вы сталкиваетесь с необычным количеством потерянных пакетов, это
означает проблему аппаратных средств, типа плохого или отсутствующего
terminator, и т.д.. Если Вы не получаете пакеты вообще, Вы должны
проверить конфигурацию интерфейса с помощью netstat. Пакетная
статистика, показанная ifconfig, должна сообщить Вам были ли вообще
посланы какие-то пакеты. Если у вас есть доступ к удаленному хосту, Вы
должны сходить к той машине и проверять там статистику интерфейса.
Таким образом, Вы можете точно решить, где пропали пакеты. Кроме того,
Вы должны посмотреть маршрутизационную информацию с помощью route,
чтобы выяснить имеют ли оба хоста правильные записи в таблице
маршрутов. route печатает всю таблицу маршрутизации, если его вызвать
без аргументов( -n опция указывает печатать вместо адресов имена
хостов):
- 90 -
# route -n
Kernel routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
127.0.0.1 * 255.255.255.255 UH 1 0 112 lo
191.72.1.0 * 255.255.255.0 U 1 0 10 eth0
Детальное значение этих полей объясняется ниже в секции 6.9.
Колонка Flags содержит список флагов устанавливаемых для каждого
интерфейса. U - всегда устанавливают для активных интерфейсов, а H
сообщает, что адрес места назначения обозначает хост. Если H флаг -
установлен для маршрута, который Вы считаете сетевым маршрутом, тогда
Вы должны использовать -net опцию с командой route. (Чтобы проверить,
используется ли маршрут, который Вы ввели, посмотрите на поле Use,
которое находится между двум сообщениями ping.) To check whether a
route you have entered is used at all, check if the Use field in the
second to last column increases between two invocations of ping.
6.7.3. Маршрутизация через Gateway
В предыдущей секции, Я охватил только случай введения хоста с
единственным Ethernet. Достаточно часто, однако, мы сталкивается с
сетями, соединенными с помощью gateway. Этот gateway может просто
связывать два или больше Ethernet, а может обеспечить связь с внешним
миром, (например с Internet). Чтобы использовать gateway сервис, Вы
должны обеспечить сетевому уровню дополнительную информацию о
маршрутизации.
Например, Ethernet Виртуальной Пивоварни и Виртуальной Винодельни
связаны через такой gateway, а именно хост vlager. Предположим, что
vlager уже был отконфигурирован, и нам осталось только добавить новую
запись в таблицу маршрутизации vstout, которая сообщает его ядру что
он может достигнуть всех хостов на Сети Винодельни через vlager.
Соответствующее описание маршрута показывается ниже; gw ключевое
слово, которое сообщает что следующий аргумент обозначает gateway.
# route add wine-net gw vlager
Конечно, любой хост в сети Винодельни, с которым вы желаете
- 91 -
поговорить должен иметь соответствующую запись в таблице маршрутизации
для Сети Пивоварни, иначе Вы были бы способны только послать данные с
vstout на vbardolino, но ответа вы не получите.
Этот пример описывает только gateway который переключает пакеты
между двумя изолированными Ethernet. Теперь предположите что vlager
также имеет соединение с Internet ( работающее через дополнительную
SLIP связь). Тогда мы хотели бы чтобы дэйтаграмы для любой сети,
отличной от Пивоваренной, передавались vlager. Это может быть
выполнено с помощью установки gateway по умолчанию для vstout:
# route add default gw vlager
Сетевое имя default(по умолчанию) связано с адресом 0.0.0.0, что
обозначает маршрут установленный по умолчанию. Вы не должны добавлять
это имя к /etc/networks, потому что это построено в route.
Если, используя ping, Вы обнаружили большой процент потери
пакетов при их проходе через несколько gateway, это может говорить о
очень большой нагрузке на сеть. Потеря пакетов в основном происходит
не из-за техническим проблемам, а скорее благодаря временной
избыточной нагрузке на направляющие хосты, которые из-за этого
задерживают или даже выбрасывают поступающие дэйтаграмы.
6.7.4. Конфигурирование Gateway
Отконфигурировать машину для передачи пакетов между двумя
Ethernet довольно просто. Вернемся к vlager, который оборудован двумя
Ethernet платами, каждая из них связанна с одной из двух сетей. Все,
что Вы должны сделать отконфигурировать оба интерфейса отдельно, дав
им их соответствующий IP адрес, и это все.
Весьма полезно добавлять информацию относительно двух интерфейсов
к файлу хостов путем показанным ниже, так чтобы иметь удобные имена
для них:
- 92 -
191.72.1.1 vlager vlager.vbrew.com
191.72.1.1 vlager-if1
191.72.2.1 vlager-if2
Последовательность команд для создания двух интерфейсов:
# ifconfig eth0 vlager-if1
# ifconfig eth1 vlager-if2
# route add brew-net
# riute add wine-net
6.7.5. PLIP интерфейс
При использовании PLIP связи для соединения двух машин,
существуют лишь небольшие отличия от того, что Вы должны делать при
использовании Ethernet. Вышеупомянутая связь называется
point-to-point(точка с точкой) связь, потому что она соединяет только
два хоста ("точки"), в противоположность широковещательным сетям.
Как пример, мы рассматриваем laptop компьютер некоторого
служащего в Виртуальной Пивоварне, который связана с vlager через
PLIP. Laptop непосредственно назван vlite, и имеет только один
параллельный порт. В о время загрузки, этот порт будет
регистрироваться как plip1. Чтобы сформировать связь, Вы должны
отконфигурировать интерфейс plip1, используя следующие команды:
# ifconfig plip1 vlite pointopoint vlager
# route add default gw vlager
Первая команда конфигурирует интерфейс, сообщая ядру, что это
point-to-point связь, с удаленной машиной имеющей адрес vlager. Вторая
устанавливает маршрут по умолчанию, используя vlager как gateway. На
vlager, подобная команда ifconfig необходима чтобы сформировать связь
и на vlager:
- 93 -
# ifconfig plip1 vlager pointopoint vlite
Интересно, что интерфейс plip1 на vlager не должен иметь
отдельный IP адрес, но если хочется можете дать ему адрес 191.72.1.1.
Теперь, мы отконфигурировали маршрутизацию от laptop до Сети
Пивоварни; что но все еще отсутствует маршруту от любого из Хостов
Пивоварни к vlite. Особенно тяжелый путь состoит в том, чтобы
добавлять определенный маршрут к таблице маршрутизации каждого хоста,
который состоит в том чтобы объявить vlager как gateway к vlite:
# route add vlite gw vlager
Гораздо лучше иметь дело с временными маршрутами, используя
динамическую маршрутизацию. Один из способов сделать это состoит в
запуске gated демона, который Вы должны устанавливать на каждом хосте
в сети, чтобы он распространял информацию о маршрутах динамически.
Самый легкий путь, однако, состoит в том, чтобы использовать proxy
ARP. С proxy ARP, vlager будет отвечать на любой ARP pfпрос для vlite
посылая собственный Ethernet адрес. Результат этого то, что все пакеты
для vlite будут закачивать на vlager, который будет передавать их на
laptop. Мы будем возвращаться к proxy ARP в секции 6.10.
Будущие выпуски Net-3 будут содержать инструмент названный
plipconfig, который позволит Вам устанавливать IRQ порта принтера.
Позже, это может быть заменено более общей командой ifconfig.
6.7.6. SLIP и PPP Интерфейсы
Хотя SLIP и PPP соединения -- всего лишь простые point-to-point
связь подобно PLIP соединениям, о них также есть некая дополнительная
информация. Обычно, при установке SLIP соединение требуется дозвонится
до удаленного участка через ваш модем, и отрегулировать
последовательную линию для SLIP способа. PPP используется подобным
образом. Инструменты требуемые для создания SLIP или PPP связи будут
описаны в главах 8. и 9.
- 94 -
6.7.7. Dummy(фиктивный) интерфейс
Фиктивный интерфейс действительно немного экзотический, но
довольно полезен. Он наиболее полезен для автономных хостов, и машин,
которые связаны с сетью через модем. Фактически, последний большинство
времени также является автономным хостом.
Проблема автономных хостов в том, что они имеют только одно
активное сетевое устройство, loopback устройство, которому обычно
назначен адрес 127.0.0.1. На в некоторых случаях, Вы должны послать
данные к "официальному" IP адресу локального хоста. Например,
рассмотрите laptop vlite, который был отъединен от сети Приложение на
vlite может захотеть послать некоторые данные к другому приложению на
том же самом хосте. Поиск vlite в /etc/hosts выдает IP адрес
191.72.1.65, таким образом приложение пытается послать данные этому
адресу. Поскольку интерфейс loopback в настоящее время единственный
активный интерфейс на машине, ядро не имеет никакую идей относительно
этого адреса! Как следствие, ядро отказывается от дэйтаграмы, и
возвращает приложению ошибку.
В этот момент просто необходимо фиктивное устройство. Оно решает
эту проблему также как loopback. В случае vlite, Вы просто даете ему
адрес 191.72.1.65 и добавляете новый маршрут указывающий на него. И
каждая дэйтаграма для 191.72.1.65 будет рассматривается локально.
Требуемые действия:
# ifconfig dummy vlite
# route add vlite
6.8. Все о ifconfig
Имеются еще несколько параметров для ifconfig, о которых мы не
писали раньше. Вот полное описание:
ifconfig interface [[-net|-host] address [parameters]]
interface - название интерфейса, и address - IP адрес который
- 95 -
требуется назначить для интерфейса. Это может быть или IP адрес в
dotted quad формате , или имя, которое ifconfig будет искать в
/etc/hosts и /etc/networks. -net и -host опции вынуждают ifconfig
обращаться с адресом как сетевым номером или адресом хоста,
соответственно.
Если ifconfig используется только с именем интерфейса, он
показывает конфигурацию этого интерфейса. Когда он вызывается без
параметров, он показывает все интерфейсы, которые Вы
отконфигурировали; опция -a вынуждает его показать и бездействующие.
Образец вывода для Ethernet интерфейса eth0 может напоминать это:
# ifconfig eth0
eth0 Link encap 10Mbps Ethernet HWaddr 00:00:C0:90:B3:42
inet addr 191.72.1.2 Bcast 191.72.1.255 Mask 255.255.255.0
UP BROADCAST RUNNING MTU 1500 Metric 0
RX packets 3136 errors 217 dropped 7 overrun 26
TX packets 1752 errors 25 dropped 0 overrun 0
MTU и Metric поля показывают текущее MTU и метрическое значение
для этого интерфейса. Метрическое значение традиционно используется
некоторыми операционными системами чтобы вычислить сложность маршрута.
Linux не использует это значение, но определяет его для совместимости.
RX и TX линии показывают сколько пакетов были получены или
переданы без ошибок, сколько произошло ошибок, сколько пакетов были
потеряны, вероятно из-за нехватки памяти, и сколько были потеряны
из-за переполнения. Переполнение приемника обычно случается когда
пакеты ходят быстрее чем ядро может их обслужить последнее прерывание.
Значения флагов, выводимые ifconfig, передают дополнительную
информацию о имени и опциях командной строки; они будут объяснены
ниже.
Следующий список параметров используется ifconfig с
соответствующими названиями флага, данными в скобках. Опция которая
просто включает некоторую особенность также позволяют выключать ее,
если названию опции предшествует (-).
- 96 -
up Эта опция делает интерфейс доступным для IP уровня. Эта опция
подразумевается, когда дается IP адрес.
( Эта опция соответствует UP RUNNING флагам)
down Она делает интерфейс недоступным IP уровню. Она эффективно
отключает любое IP движение через интерфейс. Обратите Внимание, что
она не удаляет все маршрутизационные записи, которые используют этот
интерфейс. Если Вы постоянно выключаете некий интерфейс, Вы должны
удалить эти записи предоставить, если возможно, альтернативные
маршруты.
netmask mask назначает маску подсети для использования интерфейсом.
здесь можно давать как любой шестнадцатиричнре число с 32 битами,
которому предшествует 0x, так и dotted quad десятичные номера.
Pointopoint adress Эта опция используется для point-to-point IP
соединений. Эта опция необходима чтобы отконфигурировать, например,
SLIP или PLIP интерфейсы.
(Если point-to-point адрес был установлен, ifconfig показывает POINTOPOINT
флаг.)
broadcast address широковещательный адрес обычно создается из сетевого
номера установкой всех битов части хоста. Некоторые IP используют
различную схему; эта опция помогает приспособиться к этим странным
средам.
(Если broadcast address был установлен, ifconfig показывает BROADCAST флаг.)
metric number Эта опция может использоваться для назначения метрического
значения записи таблицы маршрутизации созданной для интерфейса. Эта
метрика используется в RIP, для построения таблиц маршрутизации.
Установленным по умолчанию оно равно нулю. Если Вы не используете
RIP демона, Вы не нуждаетесь в этой опции вообще; если используете,
- 97 -
Вы редко должны будете изменять это значение.
mtu bytes Эта опция устанавливает Maximum Transmission Unit
(максимальную длину передаваемого пакета) Для Ethernets, MTU по
умолчанию 1500; для SLIP интерфейсов 296.
arp Это опция определенная для широковещательных сетей типа пакетного
радио или Ethernet. Она позволяет использовать ARP, протокола поиска
адреса, используемый для определения физического адреса хоста
включенного сеть. Для широковещательных сетей, включен по
умолчанию.
(Если ARP не включен, ifconfig показывает флаг NOARP. )
-arp запрещает использование ARP на этом интерфейсе.
promisc Помещает интерфейс в promiscuous состояние. В широковещательной
сети, это заставляет интерфейс получать все пакеты, независимо от
того были ли они предназначены для другого хоста или нет. Это
позволяет , используя фильтры пакетов, анализировать сетевой трафик.
Обычно, это хорошая техника охоты на сетевые проблемы которые должны
иначе интенсивно прибывать. С другой стороны, это позволяет врагам
исследовать движение паролей по вашей сети и делать другие черные
дела. Одна защита против этого типа нападения не позволять
присоединятся к вашей сети чужим компьютерам. Другая способ
использовать безопасные опознавательные протоколы, типа Kerberos,
или SRA login. (Эта опция соответствует флагу PROMISC.)
-promisc отказ от promiscuous способа.
allmulti Multicast адреса -- некоторый вид широковещательных адресов
позволяющих обращаться к группе хостов, которые не обязательно должны
- 98 -
быть на той же самой подсети. Multicast адреса еще не
поддерживаются ядром.
( Эта опция соответствует флагу ALLMULTI. )
-allmulti отключает Multicast адреса.
6.9. Проверка с помощью netstat
Дальше, Я рассмотрю полезный инструмент для проверки вашей
сетевой конфигурации и активности. Он назван netstat и ,фактически,
является набором из нескольких инструментов собранных вместе. Мы будем
обсуждать каждую из функций в следующих секциях.
6.9.1. Отображение таблицы маршрутизации
При вызове netstat с -r флагом, он показывает таблицу
маршрутизации. На vstout, он выдаст:
# netstat -nr
Kernel routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
127.0.0.1 * 255.255.255.255 UH 1 0 50 lo
191.72.1.0 * 255.255.255.0 U 1 0 478 eth0
191.72.2.0 191.72.1.1 255.255.255.0 UGN 1 0 250 eth0
-n опция заставляет netstat печатать адреса как dotted quad IP
номера вместо символических имен хостов и сетей. Это особенно полезно
когда Вы хотите избежать поисков адреса по сети (например через DNS
или NIS сервер).
Вторая колонка вывода netstat показывает gateway
маршрутизационную запись. Если gateway не используется, печатается
звездочка. Третья колонка "общность" маршрута. Когда дается IP адрес,
чтобы найти подходящий маршрут для него, ядро просматривает все записи
таблицы маршрутизации, берет побитовое И адреса и genmask и лишь за
тем сравнивает результат с целью маршрута.
- 99 -
Четвертая колонка показывает различные флаги, которые описывают
маршрут:
G маршрут использует gateway.
U интерфейс, который нужно использовать, работает.
H Только отдельный хост может быть достигнут через данный маршрут.
Например, для loopback записи 127.0.0.1.
D устанавливается, если запись таблицы была произведена по приходу
ICMP перенаправляемое сообщение ( см. секцию 3.5 ).
M устанавливается, если запись таблицы была изменена ICMP
перенапавляемым сообщением.
Ref колонка показывает число ссылок на этот маршрут, то есть
сколько других маршрутов (например через gateways) полагаются на
присутствие этого маршрута. Последние две колонки показывают время, в
течении которого используется запись маршрутизации, и интерфейс, через
который посылаются дэйтаграмы.
6.9.2. Отображение статистики интерфейса
Когда вызывается с -i флагом, netstat показывает статистику для
сетевых интерфейсов. Если, кроме того, дается -a опция, он будет
печатать все интерфейсы представленные в ядре, а не только те, которые
были отконфигурированы в настоящее время. На vstaout, вывод от netstat
будет напоминать это:
$ netstat -i
Kernel Interface table
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flags
lo 0 0 3185 0 0 0 3185 0 0 0 BLRU
eth0 1500 0 972633 17 20 120 628711 217 0 0 BRU
MTU и Met поля показывают текущий MTU и метрическое значение для
этого интерфейса. RX и TX колонки показывают сколько пакетов были
- 100 -
получены или переданы без ошибок (RX-OK/TX-OK), повредились
(RX-ERR/TXERR), сколько было потеряно (RX-DRP/TX-DRP), и сколько было
потеряно из-за переполнения (RX-OVR/TX-OVR).
Последняя колонка показывает флаги, установленные для этого
интерфейса. Здесь используется односимвольная версия флагов, которые
печатает ifconfig.
B был установлен широковещательный адрес.
L Этот интерфейс -- loopback устройство
M интерфайс получает все пакеты ( promiscuous способ ).
N Трейлеры избегаются.
O ARP выключен для этого интерфейса.
P Это - point-to-point соединение.
R Интерфейс работает.
U Интерфейс активен.
6.9.3. Отображение соединений
Netstat поддерживает множество опции для отображения активных и
пассивных гнезда. Опция -t, -u, -w, и -x показывают активные TCP, UDP,
RAW , или UNIX гнезда. Если Вы зададите -a флаг, гнезда которые ждут
соединения (то есть слушают) также показываются. Это даст Вам список
всех серверов которые в настоящее время работают в вашей системе.
Вызов netstat -ta на vlager даст:
$ netstat -ta
Active Internet connections
Proto Recv-Q Send-Q Local Address Foreign Address (State)
- 101 -
tcp 0 0 *:domain *:* LISTEN
tcp 0 0 *:time *:* LISTEN
tcp 0 0 *:smtp *:* LISTEN
tcp 0 0 vlager:smtp vstout:1040 ESTABLISHED
tcp 0 0 *:telnet *:* LISTEN
tcp 0 0 localhost:1046 vbardolino:telnet ESTABLISHED
tcp 0 0 *:chargen *:* LISTEN
tcp 0 0 *:daytime *:* LISTEN
tcp 0 0 *:discard *:* LISTEN
tcp 0 0 *:echo *:* LISTEN
tcp 0 0 *:shell *:* LISTEN
tcp 0 0 *:login *:* LISTEN
Видно, что больше всего серверов просто ждут соединения. Однако,
четвертая строка говорит о SMTP соединение с vstout, а шестая линия
сообщает о telnet соединение с vbardolino.
При использовании -a флага будут отображаться все гнезда всех
семейств.
6.10. Проверка ARP Таблицы
В некоторых случаях, бывает полезно просмотреть или даже изменить
содержание ARP таблицы, например, когда Вы подозреваете, что двойной
адрес причина некоторой сетевой неустойчивости. аrp был сделан для
исправления подобных вещей.
Arp [-v] [ -t hwtype ] -a [hostname] arp [-v] [ -t hwtype ] -s hostname
hwaddr arp [-v] -d hostname [ hostname ... ]
hostname аргумент может быть как символическим именем, так и IP
адресом в dotted quad стандарте.
Первая строка отображает ARP запись для IP адреса или указанного
хоста или всех известный хостов, если hostname не дается. Например,
вызов arp на vlager может выдать
- 102 -
# arp -a
IP address HW type HW address
191.72.1.3 10Mbps Ethernet 00:00:C0:5A:42:C1
191.72.1.2 10Mbps Ethernet 00:00:C0:90:B3:42
191.72.2.4 10Mbps Ethernet 00:00:C0:04:69:AA
что показывает Ethernet адреса vlager, vstout и vale.
При использовании -t опции Вы увидите информацию только о том
типе аппаратных средств, который вы укажете. Это может быть ethernet,
ax25net, или pronet, стоящие за 10Mbps Ethernet, AMPR AX.25, и IEEE
802.5 token ring оборудование, соответственно.
-s опция используется чтобы добавить Ethernet адрес хоста к ARP
таблицам. hwaddr аргумент определяет адрес аппаратных средств, который
по умолчанию предполагается Ethernet адресом, указанным как шесть
шестнадцатиричных байт, разделяемых двоеточиями. Вы можете также
устанавливать адрес аппаратных средств для других типов аппаратных
средств, также, используя -t опцию.
Одна из проблем, которая может потребовать, чтобы Вы вручную
добавили IP адрес к ARP таблице, когда по некоторым причинам ARP
вопросы для удаленного хоста не доходят, например когда глючит ARP
драйвер или имеется другой хост в сети которая ошибочно опознает себя
с IP адресом того хоста. Твердая установка IP адреса в ARP таблице
также (очень решительно) является мерой защиты себя от хостов на вашем
Ethernet, которые прикидываются кем-то другим.
Вызов arp с использованием ключа -d удаляет все ARP записи
касающиеся данного хоста. Это может быть необходимо, чтобы вынудить
интерфейс повторно получить Ethernet адрес для данного IP. Это полезно
когда переконфигурированная система имеет неправильную ARP информацию.
-s опция может также использоваться чтобы создать proxy ARP. Это
специальная техника когда хост, скажем gate, действует как gateway для
другого хоста назовем его fnord, делая вид что оба адреса относят тому
же самому хосту, а именно gate. Это делается так: на gate создается
ARP запись о fnord, которая указывает на его собственный Ethernet
- 103 -
интерфейс. Теперь когда хост посылает ARP запрос о fnord, gate будут
возвращать ответ содержащий собственный Ethernet адрес. Спрашивающий
хост будет тогда посылать все дэйтаграмы gate, который перенаправит их
к fnord.
Эти схема может быть необходима, например, когда Вы хотите
работать с fnord из DOS машины с нестандартным TCP, которое плохо
работает с маршрутизацией. Когда Вы используете proxy ARP, DOS машине
как будет казаться, что fnord находится в локальной подсети, так что
ей не требуется что-либо знать относительно маршрутов и gateway.
Другое очень полезное приложение proxy ARP -- когда один из ваших
хостов действует как gateway к некоторому другой хост только временно,
например по телефону. В предыдущем примере, мы уже столкнулись с
laptop vlite, который был связан с vlager через PLIP связь только в
небольшом промежутке времени. Конечно, это будет работать только, если
адрес хоста для, которого Вы хотите обеспечить proxy ARP, находится на
той же самой IP подсети, что и ваш gateway. Например, vstout мог бы
быть proxy ARP для любого хоста из подсети Пивоварни (191.72.1.0), но
никогда для хоста из подсети Винодельни (191.72.2.0).
Требуемые действия для обеспечения proxy ARP для fnord дается
ниже; конечно, Ethernet адрес должен быть от gate.
# arp -s fnord 00:00:c0:a1:42:e0 pub
proxy ARP запись может быть удалена снова используя:
# arp -d fnord
6.11. Будущее
Linux все еще развивается. Главные изменения в ядре принесет
очень гибкую схему конфигурации, которая позволит Вам конфигурировать
сетевые устройства во время работы. Например, команда ifconfig будет
работать с аргументами, которые устанавливают IRQ линию и DMA канал.
Другое изменение -- дополнительный mtu флаг для команды route,
- 104 -
которая будет устанавливать Максимальный размер пакета для
определенного маршрута. Этот маршруто-определенный MTU заменит MTU для
интерфейса. Вы будете использовать эту опцию для маршрутов через
gateway, где связь между gateway и хостом места назначения требует
очень низкого MTU. Например, предположите что хост wanderer связан с
vlager через SLIP связь. При посылке данных от vstout до wanderer,
сетевой уровень на wanderer использовал бы пакеты до 1500 байтов,
потому что пакеты посылаются через Ethernet. SLIP связь, с другой
стороны, используется с MTU 296, так что сетевой уровень на vlager был
бы должен разбивать IP пакеты на меньшие фрагменты, которые
вписываются в 296 байтов. Если вместо этого, Вы конфигурировали бы
маршрут на vstout так, чтобы сразу использовать MTU 296, этого
относительно долгого разбиения можно избежать:
# route add wanderer gw vlager mtu 296
Обратите Внимание что mtu опция также позволяет Вам выборочно
отменить результаты "Подсети Локальны" политики (SNARL). Эта политика
-- это опция конфигурации ядра и описана в главе 4.
.
- 105 -
7. Названия сервиса и конфигурация решающего устройства.
Как уже обсуждалось в главе 3., TCP/IP сеть может полагаться на
различные схемы, чтобы преобразовать имена в адреса. Самый простой
способ, у которого еще нет никаких преимуществ над способом, где все
пространство имен было расщеплено на зоны, - таблица хостов, сохраненная
в /etc/hosts. Это полезно только для малых LAN, которые управляются
одним единственным администратором, и не имеющих никакого IP общения с
внешним миром. Формат хост файлов был уже описан в главе 6.
С другой стороны, Вы можете использовать BIND - Berkeley Internet
Name Domain Service - для перевода хостов в IP адреса. Конфигурация BIND
может быть настоящей хореей, но если только вы сделаете это, то
изменения в сетевой топологии могут быть легко измены. На Linux, как и на
многих других Unix-подобных cистемах, обслуживание обеспечивается через
программу, называемую named. При запуске, эта программа загружает множество
основных файлов в их собственный кэш, и ждет запрос от отдаленных или
локальных пользовательских процессов. Имеющиеся способы требуют, чтобы Вы
обязательно ввели имя сервера для каждого хоста.
Эта глава делает немного больше, чем просто дает приблизительный
эскиз того как работает сервер. Если Вы планируете использовать BIND в
операционной среде с более чем малыми LAN и возможно Internet
uplink, то Вы должны приобрести хорошую книгу по BIND, например Льюиса
Крикета "DNS and BIND" (см. [GETST "liu-dns"]). Возможно Вы захотите
проверить примечания, они содержатся в BIND источниках. Там также имеются
вопросы newsgroup для DNS называемые comp.protocols.tcp-ip.domains.
7.1 Библиотека решающих устройств.
Когда мы говорим о " решающем устройстве ", то мы не подрузамеваем
никакого специального применения, поэтому достаточно обратится к
библиотеке решающих устройств - системе функций, которая может быть
найдена в стандарной библиотеке C. Центральные программы являются
gethostbyname(2) и gethostbyaddr(2), которые ищут все IP адреса
принадлежащие хосту, и наоборот. Они могут быть сконфигурированы при
простом просмотре информации в хосте, при запросе ряда серверов, или при
использовании баз данных хоста NIS(а) (Network Information Service).
Другое применение, подобно smail, может включать различные драйверы для
- 106 -
любого из вышеперечисленного, и нуждается в особой осторожности.
7.1.1 Файл конфигурации хоста.
Центральный файл, который управляет вашей установкой -
host.conf. Он сообщает решающему устройству какой сервис использовать, и в
каком порядке.
Опции в host.conf должны быть на отдельных строках. Области могут
быть отделены пустым пространством (spaces или tabs). Знак (#) вводит
строку, которая простирается вплоть до следующей строки.
Доступны следующие опции:
Order: Эта опция определяет порядок в котором перебераются все
доступные услуги. Valid опция - связывает запроса сервера и
поиск хостов в /etc/hosts, и nis для NIS поисков. Любая
или все из них могут быть определены. Порядок, в которым
они появляются на строках определяет порядок в котором будут
перебираться определенные услуги.
Multi: Она может использоваться как опция. Эта опция определяет,
разрешено ли хосту в /etc/hosts иметь несколько IP адресов,
которые обычно пазываются "multi - homed". Этот флаг не
действует на DNS или NIS запросы.
Nospoof: Как уже было объяснено в предыдущей главе, DNS позволяет Вам
найти имя хоста принадлежащего IP адресу, используя inaddr.arpa
область. Попытки серверов поддержать ложное имя хоста
называется "spoofing".Чтобы обезопасить себя от этого,
решающее устройство может быть сконфигурировано на
проверку, является ли настоящий IP адрес фактически
связанным с полученным именем хоста. Если нет, то этому имени
будет отказано и будет возвращен код ошибки. Это поведение
зависит от того включен ли nospoof.
Alert: Эта опция может использоваться как аргумент. Если эта
опция включена, то любые попытки spoof (см. выше) будут
- 107 -
причинами того, чтобы решающее устройство отправило бы
сообщение к syslog оборудованию.
Trim: Эта опция берет имя области как аргумент, которое будет
удалено из имени хоста перед поиском. Это полезно для
информационных элементов, где Вы могли бы только желать точно
определить имя хоста с локальной областью. При поиски хоста с
именем локальной области, будет удалено имя этой области,
таким образом легко осуществить поиск в /etc/hosts.
Опция Trim позволяет рассматривать Ваш хост локальным для нескольких
областей.
Типовой файл для vlager описывается ниже:
# /etc/host.conf
# We have named running, but no NIS (yet)
order bind hosts
# Allow multiple addrs
multi on
# Guard against spoof attempts
nospoof on
# Trim local dooain"(not really necessary).
trim vbrew.com.
7.1.2 Параметры среды окружения решающего устройства.
Установки из файла host.conf могут быть отменены, используя ряд
параметров среды окружения. Они следующие:
RESOLV HOST CONF. Он определяет файл, который будет считан
вместо /etc/host.conf.
RESOLV SERV ORDER Отменяет order опцию, данную в host.conf. Услуги,
данные как хосты, bind, и nis, отделенны пробелом, запятой,
двоеточием, или точкой с запятой.
- 108 -
RESOLV SPOOF CHECK Определяет критерии, принимаемые против
spoofing. Эта установка полностью отключается опцией off. Значения
предупреждают spoof проверку , но включают и выключают logging,
соответсвенно. Значение * включает spoof проверку, но оставляет logging
как определено в host.conf.
RESOLV MULTI Эта среда окружения ( может быть вкл. или выкл.), может
быть использована для отключения multi опции из tt host.conf.
RESOLV OVERRIDE TRIM DOMAINS Эта среда окружения определяет список
trim области, который отключает те, что даны в host.conf.
RESOLV ADD TRIM DOMAINS Эта среда окружения определяет список trim
области, который добавляется в host.conf.
7.1.3 Конфигурирование сервера поиска --- resolv.conf
При конфигурировании библиотеки решающего устройства,
для того чтобы использовать BIND обслуживание для поиска
хостов, вы обязательно должны сообщить, какое имя сервера вы
используете. Существует отдельный файл, предназначенный специально для
этого, называемый resolv.conf. Если этот файл не существует или пуст,
то решающее устройство примет имя сервера, определенного для вашего
локального хоста.Если Вы запускаете сервер на Вашем локальном хосте, то Вы
должны установить это имя отдельно, как это сделать, будет объяснено
позже в следующем разделе. Если в локальпой уети есть возможность
использовать существующее имя сервера, то этому должно отдаваться
предпочтение.
Самая важная опция в resolv.conf - nameserver, которая
дает IP адрес используемого сервера. Если Вы определите несколько
имен серверов используя nameserver опцию несколько раз, то они будут
проверяться в данном порядке. Поэтому Вы должны поместить наиболее
надежный сервер первым. Постоянно, могут поддерживаться не более трех
серверов.
Если опция nameserver не дана, то решающее устройство попытается
- 109 -
соединиться с сервером на локальном хосте.
Две других опции, domain и search имеют дело с заданными по
умолчанию областями, которые беруться из имени хоста, если BIND не может
решить это с первого запроса. Опция search определяет список названий
областей, которые необходимо проверить. Пункты списка отделены пробелом или
табуляцией.
Если опция search не дана, то заданный по умолчанию список
поиска создается из локального имени области, используя само название
области непосредственно, плюс все родительские области вплоть до root.
Локальное название области может быть дано при использовании оператора
области; если ни один из них не дан, то решающее устройство получит его
через getdomainname(2) системный вызов.
Если это уж слишком для вас, рассмотрите пример resolv.conf
файла для Virtual Brewery:
# /etc/resolv.conf
# Our domain
domain vbrew.com
#
# We use vlager as central nameserver:
nameserver 191.72.1.1
При определении имени vale, решающее устройство искало бы его и
в случае неудачи, vale.vbrew.com, и vale.com.
7.1.4 Ошибкоустойчивость решающего устройства.
Если Вы запускаете LAN внутри большей сети, Вы непременно должны
использовать центральные сервера, если они доступны. Преимущество этого
состоит в том, что они разработают богатые кэши, так как все запросы
направлены к ним. Эта схема имеет недостаток: когда сгорел базовый кабель в
нашем университете при пожаре, невозможно было дальше работать на LAN
нашего отдела, потому что решающее устройство не могло достичь какого-либо
из серверов. Не было login на X-terminals, не было печати на принтерах, и
т.д.
- 110 -
Хотя это не гоже для университетского городка, опускаться до пожаров,
каждый обязан соблюдать технику безопаности, чтобы избежать случаев
подобных этим.
One - устанавливает локальный сервер, который определяет hostnames из
вашей локальной области, и делает вперед все запросы для других
hostnames к главным серверам. Конечно, это применимо только тогда, когда
Вы используете вашу собственную область.
В качестве альтернативы, Вы можете сохранить таблицу
сохраненных хостов Вашей области или LAN в /etc/hosts. В /etc/host.conf Вы
можете включить "order bind hosts" для того, чтобы решающее устройство
вернулась бы к хост файлу, если центральный сервер ослабел или вышел из
строя.
7.2 Запуск named.
Программа, которая обеспечивает обслуживание имени области на
большинстве Unix машин обычно называется named. Эта программа
первоначально разработанна для BSD обеспечения клиентуры, и ,возможно,
для других серверов. Эта версия в настоящее время используется на
большинстве Linux инсталяционных пакетов, как мне кажеться это BIND-
4.8.3. Новая версия, BIND-4.9.3, тестируется бетой в этот момент, и должна
быть скоро доступна на Linux.
Этот раздел требует некоторого понимания как работает Domain
Name System. Если следующее изложение будет не совсем Вам понятно, то
Вам следует перечитать главу 3., которая имеет более подробную информацию
по основам DNS.
Named обычно запускается при начальной загрузке сичтемы, и работает
пока машина вновь не перезагрузится. Она черпает информацию из
конфигурационного файла называемого /etc/named.boot, и из различных файлов,
которые содержат набор данных имен областей адресов. Далее они будут
называться zone files. Форматы и семантика этих файлов будут объяснены в
следующем разделе.
Для запуска named, просто введите в командной строке:
# /usr/sbin/named
- 111 -
Появится named, читает named.boot файл и zone file,
установленные там. Он записывает идентичность процесса id к
/var/run/named.pid в ASCII, выгружая любые zone files из основных
серверов, в случае необходимости запускает listening на порт 53 для
запросов DNS. (1)
7.2.1 Файл named.boot.
Файл named.boot в основном очень мал и содержит еще немного
информации, но содержит указатели на главные файлы, содержащие zone
информацию, и указатели к другим серверам. Комментарии в файле начальной
загрузки начинаются с точки с запятой и простираются вплоть до
следующей линии. Прежде, чем мы обсудим формат named.boot файла более
подробно, мы рассмотрим типовой файл для vlager представленный на рисунке
7.2.1. (2)
Кэш и основные команды, показанные в этом примере загружают
информацию в named. Эта информация берется из главного файла,
определенного во втором аргументе. Он содержат текстовые представления
DNS источника записи, которые мы рассмотрим ниже.
1. Имеются различные named binaries касающиеся Linux FTP sites,
каждые из которых не намного, но отличаются друг от друга. Некоторые
имеют свой собственный pid файл, некоторые хранят его в /tmp или /var/tmp.
2. Заметьте, что имена областей в этом примере даны без конечной
точки. Более ранние версии named принимают конечные точки в named.boot за
ошибку, и их отбрасывают. BIND-4.9.3, как уже упоминалось, устраняет это.
;
; /etc/named.boot file for vlager.vbrew.com
;
directory /var/named
;
; domain file
;---------------------------------------------------
- 112 -
cache . named.ca
primary vbrew.com named.hosts
primary 0.0.127.in-addr.arpa named.local
primary 72.191.in-addr.arpa named.rev
Рисунок 9. Named.boot файл для vlager.
В этом примере, мы сконфигурировали named как основной сервер для
трех областей, как обозначено основными операторами в конце файла.
Первая из этих строк, например, инструктирует named действовать как
основной сервер для vbrew.com, принимая zone данные из файла named.hosts.
Ключевое слово каталога сообщает ему, что все zone files размещаются в
/var/named.
Кеш запись очень особа и должна присутствовать фактически на всех
машинах, запускающих сервер. Его функция - двукратная: она инструктирует
named для отмены кэша, и загружает основной сервер hints из кэш файла
(named.ca в нашем примере). Мы вернемся к серверам hints ниже.
Также имеется список наиболее важных опций, которые Вы
можете
использовать named.boot:
directory - определяет директорию, в которой zone files постоянно
находятся. Имена файлов могут быть даны относительно этой
директории.Несколько директорий могут быть определены неоднократно
используя directory. Согласно стандарту Linux filesystem, эта директория
должна быть /var/named.
primary - берет имя области и имя файла как аргумент,
объявленный локальным сервером авторитарно для named области. Как
основной сервер, named загружает zone информацию из данного главного файла.
В основном будет всегда, по крайней мере хотя бы одна основная
запичь в каждом boot-файле, а именно для обратного отбора сети
127.0.0.0, которая является локальной замкнутой сетью.
- 113 -
secondary - берет имя области, список адресов, и имя файла как
аргумент. Он объявляет локальный сервер вторичным главным сервером для
установленной области.Вторичный сервер задерживает авторитарные данные
поступающие на область, но он не собирает их из файла, и пробует
загрузить их из основного сервера. IP адрес, по крайней мере одного
основного сервера, должен быть дан named(у) в списке адресов. Локальный
сервер войдет в контакт с каждым из них, пока он успешно не перенесет всю
зональную базу данных, которая затем будет сохранена в файле с резервной
копией, данной как третий аргумент. Если ни один из основных
серверов не отвечает,то зональные данные восстановятся из файла с
резервной копией взамен.named затем пытается обновить зональные данные в
постоянные интервалы. Это объясняется ниже с SOA типом записи.
cache -Эта опция берет область и имя файла как аргументы. Этот файл
содержит подсказки сервера hints, который является списком записей,
указывающих на серверы. Но только NS и А записи будут признаны. Аргумент
области, в основном ,- источник имени области.Эта очень важно: если кэш
оператор не пояляется в boot-файле, named не начинает разрабатывать
локальный кэш вообще. Это строго ухудшит характеристику и увеличит
сетевую загрузку, если следующий сервер делает запрос не на локальную
сеть. Кроме того, named не будет способен достичь всех серверов, и
таким образом это не решит проблему адресов за исключением тех, которые
авторитарны. Исключение из этого правила - это когда используются
серверы пересылки (опция механизмов продвижения дана ниже).
forwarders -Этот оператор берет список адреса как аргумент. IP
адреса в этом списке точно определяют список серверов, на которые named
может сделать запрос, решается ли запрос из его локального кэша. Они
тестируются по порядку, пока один из них не отвечает на запрос.
slave - это оператор делает главный сервер подчиненным сервером. То
есть он никогда не будет выполнять рекурсивные запросы самостоятельно, и
будет только направлять их к серверам определенных с forwarders
оператором.
- 114 -
Имеются две опции, которые мы не будем описывать здесь, это sortlist
и domain. Дополнительно, имеются две директивы, которые могут
использоваться внутри zone файлов базы данных. Это - $INCLUDE и $ORIGIN.
Так как они редко когда понадобятся, то мы не будем описывать их здесь.
7.2.2 DNS файл базы данных.
Основной файл включаемый named, подобно named.hosts, всегда имеет
область соединенную с ним, которая называется origin. Это - область
название которой определено с кэшем и с основными командами. Внутри
основного файла Вам дозволено определить область и имена хостов
относительно этой области. Имя, данное в файле конфигурации, считается
абсолютным, если оно заканчивается в единственной точке, иначе она
будет рассматривается относительно origin. Весь оrigin может быть
упомянут, если Вы используете "@".
Все данные, содержащиеся в основном файле определены в источнике
записей, или Rrs(resource records) для краткости. Они составляют самую
малую единицу информации доступную через DNS. Каждый способ записи имеет
тип. Запись, например отображение имени хоста к IP адресу, и CNAME запись
ассоциируется с псевдонимом для хоста с его официальным именем. Например,
посмотрите на рисунок 7.2.3 на странице 116, которая показывает named.hosts
основной файл для virtual brewery.
Способ записи в основых файлах является общим форматом:
[domain] [ttl] [class] type rdata
Поля отделены пробелами или табуляцией. Запись может быть продолжена
через
несколько строк, если открываящая"фигурная скобка появляется перед
первой строкой, и последнее поле оканчивается закрывающей фигурной скобкой.
Что-либо между точкой с запятой и новой строкой игнорируется.
domain Это имя области в которой появляется запись. Если имя
области не дано, RR попытается обратиться к области из предыдущего RR.
ttl Необходим для того чтобы заставить решающие устройства
- 115 -
отбрасывать информацию после определенного промежутка времени, каждый RR
ассоциируется с "time to live'', или ttl для краткости. Поле ttl
определяет время в секундах.
information имеет силу после того, как она была найдено на сервере.
Это - десятичное число с восемью разрядами.
Если ttl значение не дано, то будет использоваться значение по
умолчанию к значению минимального поля предшествующей SOA записи.
class Это - класс адреса, подобно IN для IP адресов, или HS для
объекта в Hesoid классе. Для TCP/IP сетей, Вам необходимо сделать это IN.
Если никакой класс поля не дан,то будет принят класс предшествующего RR.
type Это описывает тип RR. Наиболее общие типы: A, SOA, PTR,
и NS. Следующие разделы описывают различные типы RR.
rdata Это задерживает данные связанные с RR. Формат этого поля
зависит от типа RR. Ниже, это будет описано для каждого RR поотдельности.
following - незавершенный список RR, который нужно использовать в
DNS основном файле. Имеется несколько пар из них, которые мы не
будем объяснять. Они являются экспериментальными, и вообще, небольшого
использования.
SOA
Это описывает зону власти (SOA означает " Start of
Authority''). Он сообщает что запись следующая за SOA RR содержите
авторитарную информацию для области. Каждый основной файл, включенный
основным оператором должен содержать SOA запись для этой зоны. Источники
данных содержат следующиз поля:
origin Это - каноническое имя хоста основного сервера для этой
области. Обычно дается как абсолютное имя.
- 116 -
contact Это - email адрес человека ответственного за поддержания
области, со знаком "@" в качестве точки. Например, если ответственный в
Virtual Brewery - janet, то тогда это поле содержало бы janet.vbrew.com.
serial Это - номер версии зонального файла, выраженный как
единственное десятичное число. Всякий раз, когда данные меняются в
зональном файле, то это число должно быть увеличено.
Серийный номер используется вторичными серверами, чтобы распознать,
когда зональная информация была изменена. Чтобы оставаться на уровне
современных требований, вторичные серверы запрашивают SOA запись
примарного сервера в определенные промежутки времени, и сравнивают
порядковый номер с кэшируемой SOA записью. Если номер изменился, то
вторичные серверы переносут целую зону баз данных из основного сервера.
refresh Определяет интервал, в секундах, который вторичные
серверы должны использовать между проверками SOA записей основного сервера.
Это - десятичный номер более чем с восемью разрядами.
В основном, сетевая топология слишком часто не изменяется для того,
чтобы этот номер точно определял интервал для сликшом бурных дней больших
сетей, и даже для меньших сетей.
retry Этот номер определяет интервалы за которые вторичный сервер
должен повторить соединение с основным сервером, если запрос или
зональная регенерация терпит неудачу. Он не должно быть слишком
маленьким, потому что даже временный отказ сервера или сетевая проблема
могут потратить впустую все сетевые ресурсы. Один час, или возможно
полчаса, могли бы быть хорошим выбором.
expire - определяет время в секундах после которого сервер
должен наконец-то отбросить все зональные данные, если невозможно было
войти в контакт с основным сервером. Этот промежуток времени в основном
должен быть очень большим. Craig Hunt (GETS "hunt - tcpip"]) рекомендует 42
дня.
- 117 -
minimum - задает по умолчанию ttl значение для исходных
записей, которые точно не определяют его. Требует другого сервера,
чтобы отбросить RR при проверки после определенного кол-ва времени.
Ничего нельзя сделать с временем после которого вторичный сервер
попробует модифицировать зональную информацию.
minimum должен быть большим значением, особенно для LANs, где
сетевая топология почти никогда не меняется. Значение в неделю или в месяц.
В случае, когда единственные Rrs могут часто изменяться, то Вы все еще
можете приписывать им различные ttl.
A
Ассоциирует IP адрес с hostname. Источник полей данных содержит адрес
в dotted quad notation.
Для каждого хоста должна быть только одна запись. Hostname
используемый в этой А записи рассматривается служебным или каноническим
hostname. Все другие hostnames - псевдонимы и должны быть отображены на
каноническом hostname используя CNAME запись.
NS
Указывает на главный сервер подчиненной зоны. Для объяснения,
почему, каждый должен иметь NS запись, просмотрите раздел 3.6.
Источник полей данных содержит hostname сервера. Можно разрешить
дополнительный hostname к A записи, так называемый glue, которая дает IP
адрес сервера.
CNAME
Ассоциирует псевдоним хоста с его каноническим hostname.
Каноническиий hostname - главный файл, который обеспечивает А запись;
псевдонимы просто связаны с этим именем CNAME записью, но не имеют
собственные записи.
- 118 -
PTR
Этот тип записи используется, для того, чтобы соединить имя в
Addr.arpa области с hostnaoes. Это используется для обратного отображения
IP адресов к hostnames. Данный hostname должен быть каноническим hostname.
MX
Эта RR объявляет преобразователь почты для области. Для чего надо
иметь преобразователи почты, обсуждено в разделе 14.4.1 в главе 14..
Синтаксис MX записи следующий:
[domain] [ttl] [class] MX preference host
host объявляет преобразователь почты для области. Каждый
преобразователь почты предпочитает целое число, связанное с этим хостом.
Агент переноса почты, то кто желает доставить почту к области, будет
перебирать все хосты, не имеющие MX записей в этой области, пока
все не пойдет успешно. Сначала будет пробоваться тот хост, у которого
самое низкое число, а дальше все хосты с числом по возрастанию (это
число называется-preference value).
HINFO Эта запись предоставляет информацию относительно аппаратных
средств системы и программного обеспечения. Синтаксис этой записи:
[domain] [ttl] [class] HINFO hardware software
Аппаратная область идентифицирует аппаратные средства, используемые
этим хостом. Имеются специальные соглашения, чтобы точно определить ее.
Список подходящих имен дан в "Assigned Numbers'' (RFС 1340). Если область
содержит пробелы, то это надо заключить в двойные кавычки. Имена
областей программного обеспечения используються операционной системой.
И снова, подходящее имя может быть выбрано из "Assigned Numbers'' RFC.
7.2.3 Запись главных файлов.
- 119 -
Рисунки 7.2.3, 7.2.3, 7.2.3, и 7.2.3 дают примерные файлы для
названия сервера в brewery, размещенном на vlager. Вследствие характера
обсуждаемой сети (единственная локальная вычислительная сеть), пример
- довольно простой. Если ваши требования чересчур сложны, и Вы не
можете запустить named, то вам поможет "DNS and BIND'' by Cricket Liu and
Paul Albitz ([GETST "liu-dns"]).
& "
Кэш файл named.ca, который вы увидите на рисунке 7.2.3, показывает
пример hint записи для root name сервера. Типичный кеш файл обычно
описывает около дюжины серверов, или около того. Вы можете получить текущий
список серверов для root области, используя nslookup, описанный ближе к
концу этой главы.(3)
;
; /var/named/named.ca Cache file for the brewery.
; We're not on the Internet, so we don't need
; any root servers. To activate these
; records, remove the semicolons.
;
; . 99999999 IN NS NS.NIC.DDN.MIL
; NS.NIC.DDN.MIL 99999999 IN A 26.3.0.103
; . 99999999 IN NS NS.NASA.GOV
; NS.NASA.GOV 99999999 IN A 128.102.16.10
Рисунок 10. Файл named.ca.
7.2.4 Проверка установки сервера(Name Server Setup).
3. Заметьте, что Вы не сможете сделать запрос для Вашего сервера
на root серверы, если Вы не имеете какие-нибудь root server hints:
Захватите 22! Чтобы выйти из этой дилеммы, Вы можете также попробовать
заставите nslookup использовать другой сервер, или Вы можете использовать
примерный файл на рисунке 7.2.3, и затем получить полный список
подходящих серверов.
- 120 -
;
; /var/named/named.hosts Local hosts at the brewery
; Origin is vbrew.com
;
@ IN SOA vlager.vbrew.com. (
janet.vbrew.com.
16 ; serial
86400 ; refresh: once per
day
3600 ; retry: ong howr
3600000 ; expire: 42 days
604800 ; minimum: 1 week
)
IN NS vlager.vbrew.com.
;
; local mail is distributed on vlager
IN MX 10 vlager
;
; loopback address
localhost. IN A 127.0.0.1
; brewery Ethernet
vlager IN A 191.72.1.1
vlager-if1 IN CNAME vlager
; vlager is also news server
news IN CNAME vlager
vstout IN A 191.72.1.2
vale IN A 191.72.1.3
; winery Ethernet
vlager-if2 IN A 191.72.2.1
vbardolino IN A 191.72.2.2
vchianti IN A 191.72.2.3
vbeaujolais IN A 191.72.2.4
Рисунок 11. Файл named.hosts.
Существует прекрасное средство для проверки действия установки
- 121 -
Вашего сервера(server setup). Оно называется nslookup, и может быть
использовано и в интерактивном режиме и из командной строки. В последнем
случае, Вы просто вызываете ее как
nslookup hostname
и она сделает запрос на сервер, определенный в resolv.conf, для
hostname. (Если эти имена файла больше чем один сервер, nslookup выберет
какой-нибудь один)
;
; /var/named/named.local Reverse mapping of 127.0.0
; Origin is 0.0.127.in-
addr.arpa.
;
@ IN SOA vlager.vbrew.com. (
joe.vbrew.com.
1 ; serial
" " 360000 ; refresh: 100 hrs
3600 ; retry: one hour
3600000 ; expire: 42 days
; minimum: 100 hrs
)
IN NS vlager.vbrew.com.
1 IN PTR localhost.
Рисунок 12. Файл named.local.
Интерактивный режим, является намного более захватывающим. Кроме
того при просмотре индивидуальных хостов, Вы можете сделать запрос для
любого типа DNS записи, и перенести зональную информацию для области.
Когда он вызывается без аргумента, nslookup отобразит название
используемого сервера, и вступить в интерактивный режим. В " > "
приглашении(prompt), Вы можете ввести любое имя для которого должен быть
сделан запрос. По умолчанию, он опросит класс A записи, содержащий IP
- 122 -
адреса в отношении названия области.
Вы можете изменить этот тип, используя "set type=type", где
type(тип) является одним из исходных названий записи, описанных выше в
разделе 7.2, или ANY.
Например, у Вас мог бы получиться следующий диалог:
;
; /var/named/named.rev Reverse mapping of our IP
addresses
; Origin is 72.191.in-addr.arpa.
;
@ IN SOA vlager.vbrew.com. (
joe.vbrew.com.
16 ; serial
86400 ; refresh: once per
day
3600 ; retry: one hour
3600000 ; expire: 42 days
604800 ; minimum; 1 week
)
IN NS vlager.vbrew.com.
; brewery
1.1 IN PTR vlager.vbrew.com.
2.1 IN PTR vstout.vbrew.com.
3.1 IN PTR vale.vbrew.com.
; winery
1.2 IN PTR vlager-if1.vbrew.com.
2.2 IN PTR vbardolino.vbrew.com.
3.2 IN PTR vchianti.vbrew.com.
4.2 IN PTR vbeaujolais.vbrew.com.
Рисунок 13. Файл named.rev.
- 123 -
$ nslookup
Default Name Server: rs10.hrz.th-darmstadt.de
Address: 130.83.56.60
> sunsite.unc.edu
Name Server: rs10.hrz.th-darmstadt.de
Address: 130.83.56.60
Non-authoritative answer:
Name: sunsite.unc.edu
Address: 152.2.22.81
Если Вы попробуете сделать запрос на имя, которое не имеет
никакого связанного IP адреса, но другие записи были найдены в DNS базе
данных, то nslookup сообщит об ошибке: "No type A records found''. Однако,
Вы можете заставить сделать запрос для записей других типов (не А), введя
"set type" команду. Например, чтобы получить SOA запись unc.edu, Вы бы
ввели:
> unc.edu
*** No address (A) records available for unc.edu
Name Server: rs10.hrz.th-darmstadt.de
Address: 130.83.56.60
> set type=SOA
> unc.edu
Name Server: rs10.hrz.th-darmstadt.de
Address: 130.83.56.60
Non-authoritative answer:
unc.edu
origin = ns.unc.edu
& mcil addr = shava.ns.unc.edu
serial = 930408
refresh = 28800 (8 hours)
- 124 -
retry = 3600 (1 hour)
expire = 1209600 (14 days)
minimum ttl = 86400 (1 day)
Authoritative answers can be found from:
UNC.EDU nameserver = SAMBA.ACS.UNC.EDU
SAMBA.ACS.UNC.EDU internet address = 128.109.157.30
Таким образом Вы можете сделать запрос для MX записей, и т.д.
Использование типа ANY вернет все исходные записи, связанные с данным
именем.
> set type=MX
> unc.edu
Non-authoritative answer:
unc.edu preference = 10, mail exchanger =
lambada.oit.unc.edu
lambada.oit.unc.edu internet address = 152.2.22.80
Authoritative answers can be found from:
UNC.EDU nameserver = SAMBA.ACS.UNC.EDU
SAMBA.ACS.UNC.EDU internet address = 128.109.157.30
Практическое применение nslookup, помимо отладки, - получить текущий
список root серверов для файла named.ca. Вы можете сделать это,
запрашивая все типы NS записей, связанные с root областью:
> set typ=NS
> .
Name Server: fb0430.mathematik.th-darmstadt.de
Address: 130.83.2.30
Non-authoritative answer:
(root) nameserver = NS.INTERNIC.NET
(root) nameserver = AOS.ARL.ARMY.MIL
(root) nameserver = C.NYSER.NET
- 125 -
(root) nameserver = TERP.UMD.EDU
(root) nameserver = NS.NASA.GOV
(root) nameserver = NIC.NORDU.NET
(root) nameserver = NS.NIC.DDN.MIL
Authoritative answers can be found from:
(root) nameserver = NS.INTERNIC.NET
(root) nameserver = AOS.ARL.ARMY.MIL
(root) nameserver = C.NYSER.NET
(root) nameserver = TERP.UMD.EDU
(root) nameserver = NS.NASA.GOV
(root) nameserver = NIC.NORDU.NET
(root) nameserver = NS.NIC.DDN.MIL
NS.INTERNIC.NET internet address = 198.41.0.4
AOS.ARL.ARMY.MIL internet address = 128.63.4.82
AOS.ARL.ARMY.MIL internet address = 192.5.25.82
AOS.ARL.ARMY.MIL internet address = 26.3.0.29
C.NYSER.NET internet address = 192.33.4.12
TERP.UMD.EDU internet address = 128.8.10.90
NS.NASA.GOV internet address = 128.102.16.10
NS.NASA.GOV internet address = 192.52.195.10
NS.NASA.GOV internet address = 45.13.10.121
NIC.NORDU.NET internet address = 192.36.148.17
NS.NIC.DDN.MIL internet address = 192.112.36.4
Полная система команд, доступных с nslookup может быть получена при
использовании команды help изнутри nslookup.
7.2.5 Другие полезные инструментальные средства
Имеется несколько инструментальных средств, которые помогут Вам с
Вашими задачами как BIND администратор. Я кратко опишу два из них.
Пожалуйста обратитесь к документации, которая прилагается с этими
инструментальными средствами для выяснения того, как их использовать.
hostcvt - средство, которое помогает Вам с Вашей начальной
- 126 -
BIND конфигурации, преобразовывая ваш /etc/hosts файл в главный файл для
named. Оно генерирует оба и прямое (A) и обратное отбражение (PTR), и
заботится о псевдонимах и т.п. Конечно, оно не будет делать всю
работу за Вас, поскольку Вы можете все еще захотеть настроить значения
блокировки по втемепи в SOA записи сами, например, или прибавить MX запись
и т.п. Но оно может помочь сохранить Вам несколько таблеток аспирина.
Hostcvt - часть BIND источника, но может также быть использован как
автономный пакет на несколько Linux FTP серверах.
После установки вашего сервера, Вы можт быть захотите
проверить Вашу конфигурацию. Идеальным (и, по моему мнению тоже)
средством для этого является dnswalk, perl-based пакет который
прогуливается по вашей DNS базе данных, выискивая общие ошибки и
проверяет совместимость информации. Dnswalk был выпущен на
comp.sources.misc недавно, и должен быть доступен на всех FTP, которые
архивируют эту группу.
8. Последовательная линия IP
Порядковые протоколы линии связи, SLIP и PPP, обеспечивают
Internet connectivity для плохой связи. Кроме модема и
последовательной оборудованной панели с FIFO буфером, никакие аппаратные
средства не нужны. Использование его - не намного усложняется чем
использование mailbox, и поэтому увеличивается число частных организаций,
которые предлагают телефонный вызов по номеру IP за доступную
стоимость каждому.
Имеются оба драйвера доступные для Linux- SLIP и PPP. SLIP был
там в течение долгого времени, и работает достаточно неплохо. А PPP
драйвер был разработан совсем недавно MIchael Callahan и Al Longyear.
Этот драйвер будет описан в следующей главе.
8.1 Общие требования.
Для того, чтобы использовать SLIP или PPP, Вы должны
сконфигурировать некоторую базисную работу с сетями, как описано в
- 127 -
предыдущих главах. Наконец Вы должны установить looback interface, и
обеспечить для name resolution. При соединении с Internet, Вы несомненно
пожелаете использовать DNS. Самая простая опция - поместит адрес
сервера в Ваш resolv.conf файл; этот сервер сделает запрос как только
SLIP связь будет активизированна.
Однако, это решение не оптимально, потому что все поиски имен будут
все еще проходить через вашу SLIP/PPP связь. Если Вы волнуетесь
относительно ширины зоны, которую она требует, то Вы может также установить
cache-only сервер. Он действительно не обслуживающий, он только действует
как переключатель для всех DNS запросов, произведенных на Вашем хосте.
Преимущество этой схемы - то, что она создает кэш, так, чтобы
большинство запросов должны быть посланы через последовательные линии
только один раз. Named.boot файл для cache-only серверов, выглядит так:
; named.boot file for caching-only server
directory /var/named
primary 0.0.127.in-addr.arpa db.127.0.0 ; loopback
net
cache . db.cache ; root
servers
В дополнение к этому файлу, Вы также должны установить
db.cache файл с подходящим списком root серверов. Это описывается
ближе к концу главы "Конфигурация решающего устройства".
8.2 SLIP Операция.
Телефонный вызов IP серверов часто предлагает SLIP обслуживание
через специальные пользовательские account(ы). После login в такой account,
Вы не входите в общую оболочку; взамен программа или script оболочки -
отключат SLIP драйвер серверов последовательной линии и
сконфигурируют соответствующий сетевой interface. Затем Вы должны сделать
тоже самое в конце связи.
- 128 -
На некоторых операционных системах, SLIP драйвер -- user-space
программа; под Linux, это - часть ядра, которая делает его намного
быстрее. Требуется, однако, чтобы порядковая линия явно была бы
преобразована в SLIP режим. Это выполнено посредством tty line
discipline, SLIPDISC. Пока tty находится в обычной line discipline
(DISC0), изменятся данные только с процессвми пользователя, используя
normal read (2) и write(2) вызовы, SLIP драйвер - отключен для записи
или чтения из tty, пока все данные, поступающие на серейный порт,
будут пропущены SLIP драйвером.
SLIP драйвер непосредственно понимает число разновидностей на
SLIP протоколе. Кроме обычного SLIP, он также понимает CSLIP,
который выполняется так называемым Van Jacobson header compression на
выходящих IP блоков.(1) Дополнительно, имеются шести-битовые версии для
каждого из этих протоколов.
Простой способ преобразовать последовательную линию в SLIP режим
- использовать slattach. Допустим, что у Вас есть модем на /dev/cua3, и
Вы удачно подсоеденились на SLIP сервер. Вы затем бы выполнили:
#slattach /dev/cua3 &
Это включит line discipline cua3 к SLIPDISC, и подсоединит ее к
одному из interface SLIP сети. Если это ваша первая активная SLIP связь,
то линия будет подсоединена к sl0; вторая была бы подсоединенп к sl1, и
так далее. Текущие ядра поддерживают до восьми одновременных SLIP связей.
1. Van Jacobson header compression описан в RFC 1441.
Заданное по умолчанию оформление пакета, выбранное slattach -
CSLIP. Вы можете выбрать любой другой режим, используя -p переключатель.
Для того, чтобы использовать normal SLIP (no compression), Вы должны
использовать
# slattach -p slip /dev/cua3 &
- 129 -
Другие режимы - cslip, slip6, cslip6 (для шести-битовой версии
Slip(а)), и adaptive для адаптивного SLIP. Последние оставляют это для
ядра, чтобы выяснить, который тип оформления пакета SLIP использует remote
end.
Заметьте, что Вы обязаны использовать такое же оформление, какое
имеет Ваш peer. Например, если cowslip использует CSLIP,то Вы должны
использовать его же. Симптомы рассогласования будут такие, что ping
незначительному хосту не вернет блоки огратно. Если другой хост pings
Вас, то Вы можете увидеть сообщение типа "Can't build ICMP header'' на
вашем мониторе. Один способ избежать эту неприятность - надо
использовать adaptive SLIP.
Фактически, slattach не только не позволяет Вам отключить SLIP, но
и не позволяет отключает другие протоколы, которые используют
последовательную линию также, как и PPP или KISS (другой протокол,
используемый людьми в ham radio). Для деталей, обратитесь пожалуйста к
slattach инструкции стр. 8.
После передачи линии SLIP драйверу, Вы должны сконфигурировать
сетевой interface. И снова, мы используем стандарт ifconfig и route
команды. Предположим, что из vlager мы соединилисьс сервером crowslip.
Тогда Вы должны выполнить:
# ifconfig sl0 vlager pointopoint cowslip
# route add cowslip
# route add default gw cowslip
Первая команда конфигурирует interface как point-to-point связь к
cowslip, в то время как вторая и третья команды прибавляет route к
cowslip и задает по умолчанию маршрут, используемый cowslip как ворота.
При демонтаже SLIP связи, Вы сначала должны удалить все маршруты
cowslip, используя route c del опцией, уберите interface, и передаете
slatch сигнал hangup(повесить трубку). Впоследствии Вы должны hangup
модем, использующий Вашу терминал программу:
- 130 -
# route del default
# route del cowslip
# ifconfig sl0 down
# kill -HUP 516
8.3 Использование dip
Теперь это все просто. Однако, Вы могли бы захотеть
автоматизировать вышеупомянутые шаги так, чтобы Вы только вызывли бы
простую команду, которая выполняет все те шаги, показанные выше. Это - то,
для чего нужен dip. (2) Текущее версия этого выпуска - версия 3.3.7.
Онаисправлялась несколькими людьми, поэтому Вы уже больъе нз сможете
говорить о dip как о программе. Эти различные элементы развития будут
"обнадеживающе" слиты в будущей версии.
Dip обеспечивает интерпретатор простым языком, который обрабатывает
модем для Вас, преобразуя линию в SLIP режим, и конфигурируя interface.
Это довольно примитивно и ограниченно, но вполне подходяще для
большинства случаев. Новая версия dip(а) может описать большое количество
многосторонних языков в один день.
Чтобы было возможным сконфигурировать SLIP interface, dip требует
root привелегию. Это теперь было бы соблазнительно для того, чтобы сделать
dip setuid к root, таким образом Все пользователи могли бы соединиться с
некоторым SLIP сервером без необходимости прдеоставления им root
доступа. Это очень опасно, потому что при установке фиктивных
interface(ов) и заданных по умолчанию маршрутов dip может разрушить
направление на вашей сети. Даже еще хуже, это даст вашим пользователям
приоритет на подсоединение к любым SLIP серверам, и начать опасную атаку
на Вашу сеть. Так, если Вы хотите позволить Вашим пользователям
запустить SLIP связь, напишите маленькие программки для каждого
предполагаемого SLIP сервера, и вызовите dip со специфическим
script(ом), который установит связь. Эти программы могут быть затем
безопасно сделаны setuid root. (3)
8.3.1 Типовой Script(сценарий).
- 131 -
Типовой script аоказан на рисунке 8.3.1. Он может использоваться для
связи с cowslip, вызывая dip со script именем как аргумент:
2. Dip подразумевается Dialup IP. Он был написан Fred van Kempen.
3. Diplogin может (или должен) быть запущен setuid(ом). См. раздел в
конце этой главы.
# Sample dip script for dialing up cowslip
# Set local and remote name and address
get $local vlager
get $remote cowslip
" port cua3 # choose a serial port
speed 38400 # set speed to max
modem HAYES # set modem type
reset # reset modem and tty
flush # flush out modem response
# Prepare for dialing.
send ATQ0V1E1X1\r
wait OK 2
if $errlvl != 0 goto error
dial 41988
if $errlvl != 0 goto error
wait CONNECT 60
if $errlvl != 0 goto error
# Okay, we're connected now
sleep 3
send \r\n\r\n
wait ogin: 10
if $errlvl != 0 goto error
send Svlager\n
wait ssword: 5
- 132 -
if $errlvl != 0 goto error
send hey-jude\n
wait running 30
if $errlvl != 0 goto error
# We have logged in, and the remote side is firing up
SLIP.
print Connected to $remote with address $rmtip
default # Make this link our default
route
mode SLIP # We go to SLIP mode, too
# fall through in case of error
error:
print SLIP to $remote failed.
Рисунок 14. Типовой dip script.
# dip cowslip.dip
DIP: Dialup IP Protocol Driver version 3.3.7 (12/13/93)
Written by Fred N. van Kempen, MicroWalt Corporation.
connected to cowslip.moo.com with addr 193.174.7.129
#
После соединения с cowslip и включением SLIP, dip отделится от
терминала и отойдет к предоставлению возможности SLIP связи. Вы сможзте "
затем начать использовать обычные сетевые услуги на SLIP связи. Чтобы
завершить связь, просто вызовите dip c опцией -k. Это пошлет hangup
сигнал dip процессу, используя id dip запись в /etc/dip.pid: (4)
# kill -k
На dip script языке, ключевые слова имеющие префикс с символом $
обозначают различные имена. Dip имеет предопределенное множество
переменных, которые будут будут перечислены ниже. $remote и $local,
- 133 -
например, содержат hostnames локального и незначительного хоста,
вовлеченных в SLIP связь.
Первых два оператора в типовом script - получают команды, которые
являются dip способом установки переменных. Здесь, локальный и
незначительный hostname установленн к vlager и cowslip, соответственно.
Следующие пять операторов устанавливают линию терминала и модема.
Reset посылает reset строку к модему; для Hayes-совместимых модемов,
это команда ATZ. Следующий оператор игнорирует реакцию модема, так что
login chat в линиях работал правильно. Сhat - довольно прост: он
просто набирает номер 41988, номер телефона cowslip, и подсоединятся
в account Svlager через пароль hey-jude. Wait команда заставит dip
ждать строку, данную как его первый аргумент; номер, данный как второй
аргумент делает wait time, если никакая строка не была получена. If команды
разбросаны в процедуре входа в систему, и проверяют то, что никакая ошибка
не появилась при выполнении этой команды.
Итоговые(final) команды, выполненные после logging, заданы по
умолчанию, которые заставят SLIP связать заданный по умолчанию маршрут
со всеми хостами, и режимом, который отключает SLIP на линии и
конфигурирует interface и таблицу маршрутов(routing tables) для Вас.
4. См. newsgroup alt.tla для более палиндромической забавы с
акронимами с тремя символами.
8.3.2 Dip ссылка.
"Хотя широко используемый, dip не был еще очень хорошо описан.
Поэтому, в этом разделе мы дадим ссылку для большинства dip команд. Вы
можете получить краткий обзор всех команд, вызывая dip в test режиме, и
вводя help команду. Для того, чтобы выяснять относительно синтаксиса
команды, Вы можете набрать его без каких-либо аргументов; конечно это не
работает с командами, которым не нужны никакие аргументы.
$ dip -t
- 134 -
DIP: Dialup IP Protocol Driver version 3.3.7 (12/13/93)
Written by Fred N. van Kempen, MicroWalt Corporation.
DIP> help
DIP knows about the following commands:
databits default dial echo flush
get goto help if init
mode modem parity print port
reset send sleep speed stopbits
term wait
DIP> echo
Usage: echo on|off
DIP>
На всем протяжении, примеры, которые выделяют DIP> prompt
показывают, как ввести команду в test режиме, и что output
производится. Примеры, испытывающие недостаток в prompt должны
приниматься как script отрывок.
8.3.2.1 Команды Модема.
Имеется ряд rоманд, для которых dip обеспечивает конфигурацию
вашей последовательной линии и модема. Некоторые из них - очевидны,
такие как порт, который выбирает последовательный порт, и
быстродействие, биты данных, стоповые биты, и четность, которые
устанавливают общие параметры линии.
Команда модема выбирает тип модема. В настоящее время,
единственый поддерживаемый тип - HAYES. Вы должны обеспечить dip типом
модема, или он откажется набирать номер и выполнять reset команды. Reset
команда посылает reset строку на модем; используемая строка зависит от
избраннпго вами типа модема. Для Hayes-совместимых модемов, это - ATZ.
Flush code может использоваться для того, чтобы убрать все реакции,
которые модем посылает so far. Иначе chat script мог бы быть спутанным,
потому что он читает OK реакции из более ранних команд.
- 135 -
Команда init выбирает initialization строку, которую нужно набрать
перед набором номера. Значение по умолчанию для Hayes модемов - "ATE0 Q0 V1
X1'', которая включает отображение на экране команд и long result code, и
выбирает набор вслепую (нет проверки тона шкалы).
Команда dial в конце посылает initialization строку на модем и
набирает номер системы. Заданная по умолчанию dial команда для Hayes
модемов - ATD.
8.3.2.2 echo и term.
Команда ECHO служит как помощь в отладке, в которой использование
ECHO ON делает dip ECHO на консоли и все посылает к порядковому
устройству. Он может быть выключен снова, набирая ECHO OFF.
Dip также позволяет Вам оставить script режим временно и
вступить в terminal режим. В этом режиме, Вы можете использовать dip точно
так же как и обычную terminal программу, пишущей в последовательную линию
и читющей из нее. Чтобы оставить этот режим, введите " Ctrl-] ".
8.3.2.3 Get Команда.
Get команда - dip способ установки переменной. Самая простая
форма - установить переменную как константу, как это делалось в
вышеупомянутом примере. Вы можете, также запросить пользователя для
входа определяя ключевое слов вместо значения:
DIP> get $local ask
Enter the value for $local:
Третий метод состоит в том, чтобы попробовать получить
значение от отдаленного хоста. Причудливо, на первый взгляд, но это очень
полезно в некоторых случаях: некоторые SLIP серверы не позволяют Вам
использовать Ваш собственный IP адрес на SLIP связи, но будет
приписывать Вам один из объединения адресов всякий раз, когда Вы
- 136 -
набираете номер, печатая сообщение, которое информирует Вас относительно
адреса к которому Вы были назначены. Если просмотры сообщения - что -
нибудь вроде этого ``Your address: 193.174.7.202'', то следующий
фрагмент dip кода допустил бы Вас до подбора адреса:
wait address: 10
get $locip remote
8.3.2.4 Print команда
Это команда к ECHO тексту к dip консоли. Любая из dip переменных
может использоваться в print командах, такие как:
DIP> print Using port $port at speed $speed
Using port cua3 at speed 38400
8.3.2.5 Переменные имена(Variable Names)
Dip только понимает предопределенное множество переменных.
Переменное имя всегда начинается с символа доллар и должен быть написан в
нижнем регистре.
$local и $locip переменные содержат название локального имени хоста
и IP адреса. Установка hostname заставляет dip сохранить каноническиий
hostname в $local, в то же самое время приписывая $locip соответствующий
IP адрес. Аналогичная вещь случается при установке $locip.
$remote и $rmtip переменные делают тоже самое для отдаленных хостов
и адресов. $mtu содержит MTU значение для соединения.
Эти пять переменных - единственые, которые могут быть
назначены непосредственно используя get команду. Хост других переменных
может быть только установлен через соответствующие команды, но может
использовать и print опрераторы; это - $modem, $port, и $speed.
$errlvl - переменная, через которую Вы можете обращаться к
- 137 -
результату
последней выполненой команды. Уровень ошибки 0 указывает на успех,
в то
время как ненулевое значение обозначает ошибку.
8.3.2.6 If и Goto Команды
If команда - более условная штука, чем то что обычно подрузамеваят
под
if. Синтаксис:
if var op number goto label
где выражение должно быть простым сравнением между одной из
переменных $errlvl, $locip, и $rmtip. Второй операнд должен быть целым
числом; оператор op может быть один из ==,!=, <,>, < =, и > =.
Команда goto делает выполнение из script continue строки, несущей
эту метку. Метка должна появиться как первый токен в линии, и немедленно
должна оканчиваться двоеточием.
8.3.2.7 send, wait и sleep
Эти команды выполняют простые chat scripts в dip. Send
выводит его аргументы на последовательную линию. Он не поддерживает
переменные, но понимает все C-style backslash character sequences типа
\n и \b. Знак тильды (~) используется как сокращение для каретки
return/newline.
wait берет слово как аргумент, и просматривает весь вход
на последовательной линии, пока он не распознает это слово. Слово само
по себе непосредственно не может содержать пробелы. Выборочно Вы можете
дать wait timeout value как второй аргумент; если ожидаемое слово не
получено внутри в течении заданного времени, команда возвратится со
значением $errlvl равным 1.
- 138 -
Sleep оператор может быть использован для того, чтобы ждать
некоторое количество времени, например, patiently ждет любую
login последовательность для завершения. И снова, интервал определен в
секундах.
8.3.2.8 mode и default
Эти команды используются для того, чтобы переключить последовательную
линию в SLIP режим и сконфигурировать interface.
Mode команда - последняя команда, выполненная dip перед гонгом в
daemon режиме. Пока ошибка не появляется, команда ничего не возвращает.
Mode берет название протокола как аргумент. Dip постоянно распознает
SLIP и CSLIP как подходящие имена. Текущая версия dip не понимает adcptive
SLIP.
После отключения SLIP режима на последовательной линии, dip
выполняет ifconfig для того, чтобы сконфигурировать interface как
двухточечную связь(point-to-point link), и вызвать маршрут к
множеству маршрутов незначительного хоста.
Если, кроме того, script выполняет заданную по умолчанию команду
перед mode, то dip также задаcт по умолчанию точку маршрута на SLIP связь.
8.4 Запуск в server режиме
Установка вашего SLIP клиента была трудной частью.
Выполнение противоположного, а именно конфигурирование вашего хоста для
того, чтобы действовать как SLIP сервер, - намного проще.
Единственный способ сделать это - использовать dip в server режиме,
который может быть достигнут, вызывая его как diplogin. Его главный
файл конфигурации - /etc/diphosts, который присоединяет login имена к
адресу этого хоста. В качестве альтернативы, Вы можете также
использовать sliplogin, BSD-производное средство, которое описывает более
- 139 -
гибкую схему конфигурации, которая позволяет Вам выполнить shell scripts
всякий раз, когда хост соединяется и разъединяется. В настоящее время это
происходит на Бете.
Обе программы требуют, чтобы Вы установили один login account на
каждого SLIP клиента. Например, представте что Вы обеспечиваете SLIP
обслуживание Arthur Dent в Dent.beta.com, Вы могли бы создать account
названный dent, добавляя следующюю строку к вашему файлу пароля(passwd
file):
dent:*:501:60:Arthur Dent's SLIP account:/tmp:/usr/sbin/diplogin
Впоследствии, Вы должны были бы установит пароль Dent(а), утилиту
passwd.
Теперь, когда dent подключен, dip запустится как сервер. Чтобы
определить, действительно ли ему разрешено использовать SLIP, нужно
найти имя пользователя в /etc/diphosts. Этот файл подробно описывает&
птава доступа и параметры соединения для каждого SLIP пользователя.
Типовая запись для dent могла бы быть похожа на:
dent::dent.beta.com:Arthur Dent:SLIP,296
Первая из отделяемых двоеточием областей - имя пользователя под
которым он должен войти. Вторая область может содержать дополнительный
пароль (см. ниже). Третья - hostname или IP адрес вызываемого хоста.
Далее идет информационная область без специального значения (пока
еще). Последняя область описывает параметры соединения. Это - список,
отделенный запятыми, определяющий протокол (в настоящее время один из SLIP
и CSLIP), следуя за MTU.
Когда dent входит в систему, diplogin извлекает информацию
относительно него из diphosts файла, и, если вторая область не пуста,
подсказывает " Пароль внешней защиты ''. Строка, введенная пользователем -
сравнивается с (нешифрованным) паролем из diphosts. Если они не
соответствуют, то попытка входа в систему будет отклонена.
- 140 -
Это связь остается установленной, пока пользователь не
отсоединяется, или модем не бросает линию. Diplogin затем возвратит линию
к нормальной discipline line и выйдет.
Diplogin требует привилегии супер-пользователя. Если Вы
запустили dip setuid root, то Вы должны сделать diplogin отдельной
копией dip(а) вместо простой связи. Diplogin может затем быть сделан
setuid, без воздействия на состояние dip непосредственно.
9. Двухточечный Протокол(point-to-point protocol)
9.1 Распутывающий P's
Точно так же как SLIP, PPP - протокол для того, чтобы посылать
датаграммы через последовательную связь, но он адресует пару вышеупомянутых
неточностей. Он позволяет сообщающиемся сторонам обсудить опции, такие как
IP адрес и максимальный датаграмный размер во время запуска, и
обеспечивает разрешение клкента. Для каждой из этих возможностей, PPP
имеет отдельный протокол. Ниже, мы кратко рассмотрим эти базисные
стандартные блоки PPP. Это обсуждение далеко не полно; и если Вы
хотите выяснить что-либо относительно PPP, то я настоятельно
рекомендую Вам прочитать спецификацию в RFC 1548, также как и dozen или
companion RFCs. (1)
В самой основе PPP лежит управление передачей данных высокого
уровня, сокращенно HDLC(High-Level Data Link Control Protocol),(2),
который определяет границы вокруг ндивидуальных структур PPP, и
обеспечивает 16 разрядов контрольной суммы. В противоположность более
примитивному оформлению SLIP пакета, PPP способен к захвату блоков из
других протоколовтаких как IP типа IPX Novell's, или Appletalk. PPP
достигает этого, добавляя область протокола к основному HDLC.
LCP(Link Control Protocol), Протокол управления связи,
используется на вершине HDLC для оговора опций, имеющих отношение к
каналу связи, типа Maximum Receive Unit (MRU), которая заявляет
- 141 -
максимальный размер датаграммы одной стороны связи.
Важный шаг в стадию конфигурации связи PPP клиентского разрешения.
Хотя это не обязательно, это действительно должно было бы быть для dial-
up линий. Обычно, вызываемый хост просит клиента зарегестрировать
себя, доказывая, что он знает некоторый секретный ключ. Если клиент
набрал неправильный ключ, то связь будет прервана. С PPP, разрешение
работает обеими способами; то есть вызывающий может также просить,
чтобы сервер опознал себя. Эти процедуры установления подлиности не
зависят друг от друга. Имеются два протокола для различных типов
разрешения, которые мы обсудим позже. Они именованы "Протоколом
Установления Подлинности Пароля", или PAP(Password Authentication
Protocol ), или CHAP(Challenge Handshake Authentication Protocol).
Каждый сетевой протокол, который разбит поперек канала связи,
пожобно IP, AppleTalk, и т.д, сконфигурирован динамически, используя
соответствующую Network Control Protocol (NCP). Например, чтобы послать
IP датаграммы поперек
1. Релевантные RFCs перечислены в Annoted Bibiliography в конце
этой книги.
2. Фактически, HDLC- намного более общий протокол,
изобретенный Международной организацией по стандартизации
связи, оба PPPs должны сначала обсудить, который из IP адресов
каждый из них использует. Протокол управления, используемый для
этого - IPCP, the Internet Protocol Control Protocol.
Помимо посылки стандарта IP датаграммы поперек связи, PPP
также поддерживает Van Jacobson header compression IP датаграмм. Это -
метод для того, чтобы сократить заголовки TCP блоков к всего трем байтам.
Это также используется в CSLIP, и - больше относится к VJ header
compression. Использование сжатия может быть заключено в лимите времени
запуска через IPCP.
9.2 PPP на Linux
- 142 -
На Linux, PPP функциональные возможности расщеплены на две части,
low-level HDLC драйвер, который размещен в ядре, и пространство
пользователя pppd daemon, которое обрабатывает различные протоколы
управления. Текущее разъединение PPP для Linux - linux-ppp-1.0.0, которое
содержит ядро PPP модуля, pppd, и программа, именованная chat
используется для того, чтобы выполнить отдаленную связь.
PPP kernel драйвер был написан Michael Callahan. Pppd был
выведен из PPP реализации для Sun и 386BSD машин, который был написан
Drew Perkins и другими, и поддерживается Paul Mackerras. Это было
предоставлено к Linux Al Longyear. (3) chat был написан Karl Fox.(4)
Точно так же как и SLIP, PPP выполнен посредством специальной
line discipline. Для того, чтобы использовать последовательную линию как
PPP связь, Вы сначала должпы уутановить связь над вашим модемом как
обычно, и впоследствии преобразовать линию к PPP режиму. В этом методе,
все входящие данные проходят через PPP драйвер, который проверяет
входящие HDLC структуры для соответствия (каждая HDLC структура
несет 16 битов контрольной суммы). В настоящее время, он способен к
выбору, используя Van Jacobson header compression. Как только Linux
поддерживает IPX, PPP драйвер будет расширен для того, чтобы обрабатывать
IPX блоки.
Kernel драйверу помогает pppd, PPP daemon, который выполняет
целую инициализацию и опознавательный период, который является необходимым
перед тем, как фактическое сетевое движение может быть послано поперек
связи. Поведение Pppd может подстраиваться, используя ряд опций. PPP -
комплексный, невозможно описать все из них в единственной главе.
3. Оба автора сказали, что они будут очень заняты некоторое время для
того, чтобы вернуться. Если Вы имеете какие-либо вопросы относительно PPP
в общем, то Вам лучше всего спросить бы людей относительно NET
канала Linux activists mailing list..
4. Karl@morningstar.com.
- 143 -
Эта книга, однако, не может покрывать все аспекты pppd, но
даст Вам полное введение. Для более подробной информации, обратитесь к
страницам инструкции и файлам README на pppd исходном распространении,
которое должно помочь Вам отсортировать большинство вопросов, эта глава
объясняет как это сделать. Если у Вас остаются проблемы даже после
чтения всей документации, то Вы должны обратиться к newsgroup
сomp.protocols.ppp для справки, которая является местом где Вы узнаете
многое о pppd.
9.3 Запуск pppd
Когда Вы хотите соединитьcя с Internet через PPP связь, Вы
должны
установить базисные возможности работы с сетями типа возврата
цикла, и решающего устройства. Оба были описаны в предыдчщих"
главах. Имеются некоторые вещи, которые нужно упоминать относительно
использования DNS над последовательной связью; пожалуйста обратитесь к
SLIP главе для описания.
Как вводный пример того, как устанавливать PPP связь с pppd,
представте, что Вы - во vlager снова. Вы уже соеденились с сервером по
телефону, c3po, и зарегистрировались на ppp account. C3po уже
запустила свой PPP драйвер. После выхода из коммуникационных программ,
которые Вы используете для соединения по телефону, Вам необходимо выполнить
следующую команду:
# pppd /dev/cua3 38400 crtscts defaultroute
Это переместит последовательную линию cua3 к PPP режиму и
установит IP связь с c3po. Скорость передачи, используемая на
последовательном порте будет 38400bps. Опция crtscts включает аппаратное
рукопожатие на порт, который должен работать на скорости более чем 9600
бит\сек.
Первую вещь, которую pppd делает после запуска - договориться о
некоторых характеристиках связи, используя LCP. Обычно, заданное по
умолчанию множество опций, о котором pppd попробует договориться, так что
мы не будем подробно вдаваться в это. Мы возвратимся к LCP более
- 144 -
подробно несколько позже.
В настоящее время, мы также принимаем, что c3po не требует
какого-либо установление нашей подлинности, так что период
конфигурации завершен успешно.
Pppd будет договариваться о IP параметрах с peer используя
IPCP, IP управляет протоколом. Так как мы не точно определяли IP
адрес к pppd выше, то он попробует использовать адрес,
полученный при наличии решающего устройство, при просмотре локального
hostname. И затем объявят этот адрес друг другу.
Обычно, ничего не случается с этими значениями по умолчанию. Даже
если Ваша машина находится в Ethernet, Вы можете использовать тот же самый
IP адрес для обоих. и для Ethernet, и для PPP interface. Но тем не
менее, pppd позволяет Вам использовать различные адреса, или даже
спрашивать Вашего peer для того, чтобы использовать некоторый
специфический адрес. Эти опции обсуждены далее.
После прохождения IPCP периода установки, pppd подготовит Ваш
host's networking layer для того, чтобы использовать PPP связь. Сначала
будет сконфигурированн PPP сетевой interface как point-to-point связь,
используя ppp0 для первой PPP cвязи, которая является активной, ppp1 для
второй, и так далее. Затем, он установит маршрутную таблицу, которая
указывает на хост в другом конце связи. В примере, показанном выше,
pppd сделает заданный по умолчанию сетевой маршрут к c3 опциии
defaultroute. (5) Он азаставляет все датаграммы к хостам не на
вашей локальной сети быть посланными к C3po. Имеется ряд различных
маршрутов, которые pppd поддерживает, которые мы обсудим позже в этой
главе.
9.4 Использование файлов опций
Прежде чем pppd проанализирует аргументы командной строки, он
просмотрит несколько файлов для опций, заданных по умолчанию. Эти
- 145 -
файлы могут содержать любые подходящие аргументы командной строки,
распространяющиеся поперек произвольного числа линий. Комментарии
представлены своими специальными знаками.
Первый файл опций - /etc/ppp/options, который всегда просматривается
тогда, когда запускается pppd. При использовании этого для установки
некоторых глобальных значений по умолчанию - хорошая идея, потому что это
позволит Вам сохранить пользователей от выполнения нескольких вещей,
которые могут поставить под угрозу защиту. Например, чтобы pppd запросил
некоторый вид установления подлинности (или PAP или CHAP) от peer, Вы бы
добавили опцию auth к этому файлу. Эта опция необходима для того,
чтобы стало невозможно установить PPP связь с любой системой, которая
не в наших опозназательных базах данных.
Другой файл опций, который читается после /etc/ppp/options -
рpprc в исходном каталоге пользователя. Он позволяет каждому
пользователю точно определить ее собственное множество опций по умолчанию.
Типовой файл /etc/ppp/options мог бы выглядеть следующим образом:
5. Заданный по умолчанию сетевой маршрут может быть только
установлен, если ни один из них не установлен.
# Global options for pppd running on vlager.vbrew.com
auth # require authentication
usehostname # use local hostname for CHAP
lock # use UUCP-style device locking
domain vbrew.com # our domain name
Первыя две из этих опций обращаются к установлению подлинности и
будут объяснены ниже. Ключевое слово блокировки заставит pppd уступить
стандарту UUCP метод блокировки устройства. С этим собранием, каждый
процесс, который обращается к последовательному устройству, скажем
/dev/cua3, создает файл блокировки, названный LCK.. cua3 в UUCP катологе,
чтобы сообщить, что это устройство находится в использовании. Необходимо
предотвратить любые другие программы типа minicom или uuci локального
- 146 -
устройства в то время как используется PPP.
Причина в обеспечении этой опцией в глобальном конфигурационном
файле - то, что опции типа тех, что были показанны выше не могут быть
отменены, и они обеспечивают приемлемый уровень защиты. Заметьте
однако, что некоторые опции могут быть отменены позже; один такой пример
-соединить строку.
9.5 Набор номера с chat
Одна из вещей, которая может испугать Вас как неудобная в
вышеизложенным примере - то, что Вы должны установить связь вручную прежде,
чем Вы могли бы запустить pppd. В отличие от dip, pppd не имеет
собственный script язык для набора незначительной системы и регистрации,
но полагается на некоторую внешнюю программу или shell script для того,
чтобы сделать это. Команда, которая будет выполнена может быть дана
pppd с connect командой line option. Pppd переназначит вход и выход
к последовательной линии. Одна полезная программа для этого - expect,
написанная Don Libes. Она имеет очень мощный язык основанный на Tcl, и
была разработана точно для этого сорта приложения.
Pppd пакет идет с подобной программой называемой called chat,
которая позволяет Вам определить UUCP-style chat script. В основном, chat
script состоит из чередующихся последовательности строк, которые мы
ожидаем получить от отдаленной системы, и ответов, которые мы должны
послать. Мы будем называть expect и send строки, соответственно. Это
типичная выборка из chat script;
ogin: b1ff ssword: s3kr3t
Он сообщает chat чтобы ждать отает из отдаленной системы для того,
чтобы послать login prompt, и вернуть login имя b1ff. Мы только ждем ogin:
так чтобы было все равно стартует ли login prompt с верхнего регистра или с
нижнего регистра I, или приходит искаженным. Следующяя строка - expect
string снова, которая заставит chat ждать пароль, и посылать свой пароль в
ответ.
- 147 -
Вот это в основном и все то, для чего предназначен chat scripts.
Полный script для соединения с PPP сервером, несомненно должен
включать соотствующие команды модема. Представте, что ваш модем
понимает Hayes команды, и номер телефона сервера был 318714. Полный
вызов chat для установки связи с c3po был бы:
$ chat -v '' ATZ OK ATDT318714 CONNECT '' ogin: ppp word: GaGariN
По определению, первая строка должна бы быть expect строкой, но так
как модем не будет говорить что - нибудь прежде, чем мы пнули его, мы
сделаем chat так, чтобы он сначала ожидал, опрзделкв пустую строку. Мы
продолжаем и посылаем ATZ, reset команда для Hayes-совместимых модемов, и
ждем реакцию (OK). Следующая строка посылает dial команду с номером
телефона для chat, и ожидает сообщение CONNECT в ответ. За этим следует
пустая строка снова, потому что мы не хотим посылать, но лучше подождать
для быстрого входа в систему. Остаток от chat script работает точно так,
как описано выше.
Опция -v делает caht log all activities к syslog daemon's local2
facility. (6)
Определение chat script на командной строке несет оправданный риск,
потому что пользователи могут просматривать командную строку
процессов с использованием ps команды. Вы можете избежать этого, помещая
chat script в файл, скажем dial-c3po. Вы можете заставить chat прочесть
script из файла вместо командной строки, давая ему опцию -f,
сопровождаемой именем файла. Завершением колдовства над pppd теперь
выглядело бы следующим образом:
# pppd connect "chat -f dial-c3po" /dev/cua3 38400 -detach \
crtscts modem defaultroute
6. Если Вы редактируете syslog.conf так, чтобы переназначить
эти log сообщения к файлу, удостоверитесь, что этот файл не всемирно
читаемый, так как chat также регестрирует введенный chat script по
умолчанию - включая пароли и все.
- 148 -
Помимо соединяющейся опции, которая определяет dial-up script, мы
добавили еще две опции к командной строке: - detach, которая сообщает
рppd не отделяться от консоли и стать процессом предпосылки. Ключевое
слово модема заставит его выполнить некоторые модем-определенные
действия на последовательном устройстве, подобно "повесить трубку"
прежде и после вызова. Если Вы не используете это ключевое слово, pppd не
будет определять DCD линию, и будет не обнаруженна неожиданно.
Примеры, показанные выше были довольно просты; chct позволяет
учитывать намного более комплексные chat script. Одна очень полезная
особенность - способность к точному определению строки на которой можно
прервать chat с ошибкой. Типичные аварийные строки - BUSY, или NO
CARRIER, которые ваш модем обычно генерирует, когда вызываемый номер
занят, или не поднимают трубку. Для того, чтобы сделать chat
распознающим их немедленно, скорее быстрее чем выйдет время, Вы можете
определить начало script, используя ключевое слово ABORT.
$ chat -v ABORT BUSY ABORT 'NO CARRIER' '' ATZ OK ...
В подобном режиме, Вы можете изменить значение блокировки по
времени для частей chat scripts, вставляя TIME OUT опции. Для
деталей, пожалуйста обратитесь к chat(8) справочника.
Иногда, вы может быть захотели бы иметь некоторый вид условного
извлечения частей chat script. Например, когда Вы не получаете
отдаленный end'slogin prompt, возможно Вы можете захотеть послать BREAK,
или возврат каретки. Вы можете достичь этого, присоединяя sub-script к
expect строке. Она состоит из последовательности send- и expect- строк,
точно таких же как и полный script непосредственно, который отделен
дефисами. Sub-script выполняется всякий раз, когда expected строка когда
не было ничего получено. В примере изложенном выше, мы модифицировали бы
chat script следующим образом:
ogin:-BREAK-ogin: ppp ssword: GaGariN
Теперь, когда chat не видит, что отдаленная система посылает
- 149 -
быстрый вход в систему, sub-script выполняется сначала посылая BREAK, и
затем ожидает для входа в систему снова. Если prompt теперь появится,
то script будет продолжаться как обычно, иначе это прервется с ошибкой.
9.6 Отладка вашей PPP установки
По умолчанию, pppd регестрирует любые предупреждения и сообщения
об ошибках к syslog's daemon facility. Вы должны добавить записю "
в syslog.conf, которая переназначит его к файлу, или даже к консоли,
иначе syslog просто отбросит эти сообщения. Следующая запись
посылает все сообщения к /var/log/ppp-log:
daemon.* /var/log/ppp-log
Если ваша PPP установка не работает, при просмотре этого log файла,
то он должен дать Вам подсказку, что что-то идет неправильно. Если это не
помогает, то Вы можете включить особо отлаживающийся вывод, используя
опцию отладки. Это делает pppd log с содержанием из всех управляющих
блоков, посланных или полученных к syslog. Все сообщения будут идти к
daemon facility.
В заключение, наиболее решительная особенность - отключение
kernel-level отладки, вызывая pppd с опцией kdebug. Она
сопровождается числовым аргументом, который является поразрядным ИЛИ
следующих значений: 1 для общих сообщении отладки, 2 для печати
содержания всей входящей HDLC структуры, и 4 для того, чтобы сделать
драйвер принтера выходящим на HDLC структуру. Для того, чтобы захватить
kernel отлаживающее сообщения, Вы должны также запустить syslogd daemon,
кот или klogd daemon. Каждый из них направляет kernel отладку к syslog's
kernel facility.
9.7 IP опции конфигурации
IРCP используется для того, чтобы обговорить пару IP
параметров в конфигурационной связи. Обычно, каждый peer может
посылать IPCP запрос конфигурации, указывая, которая переменная хочет
- 150 -
измениться из значений заданных по умолчанию, и к какому значению.
После получения, отдаленный end осматривает каждую опцию, и подтверждает
или отклоняет ее.
Pppd дает Вам множество управления, относительно IPCP опций, которые
будут пытаться вести переговоры. Вы можете настроить ее через различные
опции командных строк, которые мы обсудим ниже.
9.7.1 Выбор IP адресов
В примере выше, у нау был pppd, связывающейся с c3po и
устанавливающий IP связь. Никакие условия не принимались для того, чтобы
выбрать частный адрес IP на любом конце связи. Взамен, мы выбрали адрес
vlager's как локальный адрес IP, и позволяем c3po обеспечить себя
собственным. Иногда это полезно иметь контроль над тем , какой адрес
используется на одном или на другом конец связи. Pppd поддерживает
отдельные разновидности этого.
Чтобы просить о частных адресах, Вы вообще обеспечиваете pppd
следующеми
опциями:
local addr:remote addr
Где local addr и remote addr могут быть определены или в dotted
quad notation, или как hostnames.(7) Это заставит pppd попытаться
использовать первый адрес как собственный адрес IP, и второй как
peer. Если peer отклоняет любой из них в течение IPCP переговоров,
никакая связь IP не будет установленна. (8)
Если Вы хотите установить локальный адрес, но принимаете любой
адрес, который использует peer, Вы просто не учитываете remote addr
part. Например, для того, чтобы vlager использовал IP адрес 130.83.4.27
вместо собственного, Вы бы дали ему 130.83.4.27: на командной строке.
Подобно установки remote адресов только, Вы покинули бы локальную
область адреса.
- 151 -
Используя значение по умолчанию, pppd затем использует адрес,
связанный с вашим hostname.
Некоторые PPP серверы, которые обрабатывают множество клиентов,
приписывают адреса динамически: адреса назначены системам только когда
существует обращение и требуются после того, как они прекратили
регистрироваться снова. Когда происходит соединение с таким
сервером, Вы должны удостовериться, что pppd не запрашивает какой-
либо IP адрес из сервера, но когда адрес будет принят сервер попросит Вас,
чтобы Вы его использовали. Это означает то, что Вы не должны определить
того, Вы должны использовать опцию noipdefault, которая заставит pppd
ждатю pegr, чтобы обеспечить адрес IP вместо использования адреса
локального хоста.
7. Использование hostnames в этой опции имеет следствия на
CHAP установления подлинности. Пожалуйста обратитесь к разделу на CHAP.
8. Вы можете позволить peer PPP отменить ваши идеи относительно IP
адресов, давая pppd ipcp-accept-local и ipcp-accept-remote опции.
Пожалуйста обратитесь к руководству для выяснения деталей.
9.7.2 Направление через связь PPP
После установки сетевого interface, pppd будет устанавливать хост
маршрут только к своему peer. Если remote хост находится на LAN, Вы
обязательно захотите быть способным соединится с хостами множествами
"позади" Вашего peer; то есть сетевой маршрут должен быть установлен.
Мы уже видели, что pppd можно попросить уствновить заданный по
умолчанию маршрут, используяю опцию defaultroute. Эта опция очень полезна
если PPP сервер, с которым Вы связались будет действовать как ваши
Internet ворота.
Обратный случай, где ваша система действует как ворота для
единственного хоста, является также относительно простым для того, чтобы
быть выполненым. Например, возьмите некоторых служащих в Virtual
Brewery, чья локальная машина называется loner. При соединении с vlager
- 152 -
через PPP, он использует адрес на подсети Brewery. В vlager, мы можем
теперь дать pppd опцию proxyarp, которая установит полномочную ARP
запись для loner. Это автоматически сделает loner доступным для всех
и в Winery.
Однако, вещи далеко не всегда просты как это иногда кажется, например
когда Вы соединяете две LAN. Это обычно требует добавления специального
сетевого маршрута, потому что эти сети могут иметь свой маршрут
заданный по умолчанию. Кроме того, имея обоих peer использование связи PPP
как маршрут заданный по умолчанию генерировало бы цикл, где блоки к
некзвеутным адресатам будут пинаться между peer пока их time-to-live
истечет.
Как пример, предположите, что Virtual Brewery открывает
ветвь в каком-нибудь другом городе. Подразделение запускает
собственную Ethernet используя IP сетевой номер 191.72.3.0, который
является подсетью 3 из Brewery класса B сети. Они хотят соединиться с
Brewery's main Ethernet via PPP для тго, чтобы модифицировать базы данных
заказчиков, и т.д. Снова, vlager действует как ворота; peer вызывается
sub-etha и имеет адрес IP 191.72.3.1..
Когда sub-etha соединится с vlager, она примет заданный по
умолчанию маршрут к vlager как обычный. На vlager, мы будем должны
установить сетевой маршрут для подсети 3, который проходит к sub-etha. Для
этого, мы используем особенность pppd, не обсужденного пока - ip-в
готовности команды. Это shell script или программа, размещенная в
/etc/ppp, которая выполнена после того, как PPP interface был
сконфигурирован. Когда он существует, это вызывается со следующими пар
ip-up iface device speed local addr remote addr
Где iface называет сетевой interface используемым, device - тропа
файла последовательного устройства используемого (/dev/tty, если
stdin/stdout используется), и speed - быстродействие устройства. Local
addr и remote addr дают IP адреса, используемые в обоих концах связи
в dotted quad notation. В нашем случае, ip-up script, может содержать
- 153 -
следующий кодовый фрагмент:
#!/bin/sh
case $5 in
191.72.3.1) # this is sub-etha
route add -net 191.72.3.0 gw 191.72.3.1;;
esac
exit 0
В подобном режиме, /etc/ppp/ip-down используется для того, чтобы
отменить все действия ip-up после того, как связь PPP была демонтирована
снова.
Однако, схемж матшрутов еще не полна. Мы установили маршрут входов
таблицы на оба PPP хоста, но пока, все другие хосты на обих сетях не знают
ничего относительно связи PPP. Это не большая проблема, если все
хосты в подразделении имеют свои, заданные по умолчанию маршруты в sub-
etha, и все хосты в Brewery направляются к vlager по умолчанию. Если это
не так, то ваша единственная опция будет использовать daemon маршрут
подобно воротам. После создания сетевого маршрута передал бы по радио
новый маршрут ко всем хостам на присоединенной подсети.
9.8 Опции управления связью
Выше, мы уже столкнулись с LCP, Протоколом Управления Связи,
который используется для того, чтобы заключить характеристики связи, и
проверить связь.
Две наиболее важных опции, которые могут быть заключены LCP -
максимум получает единицу и Асинхронное Отображение Управляющего символа.
Имеется ряд других LCP опций конфигурации, но они слишком
специализированны для обсуждения их здесь. Пожалуйста обратитесь к RFC
1548 для описания этого.
Асинхронное отображение управляющего символа, разговорно
называемого async отображение, используется на асинхронных связях типа
- 154 -
телефонных линий для опознавания управляющих символов, которых
нужно найти (заменить специфической последовательностью с двумя
характерами). Например, Вы может быть захотите избежать XON и XOFF,
используемые для рукопожатия программного обеспечения, потому что
некоторый плохо сконфигурированный модем мог бы удушить получения стоп-
сигнала. Ctrl-] (telnet символ ESC). PPP позволяет Вам выходить из любого
из знака с ASCII кодировкой от 0 до 31, точно определяя их в аsync
отображении.
Async отображение - растр шириной 32 бита, с самым младшим
битом, соответствующим ASCII NUL знаку, и старшим битом соответствующим 31
ASCII. Если бит установлен, то оп сообщает соответствующему знаку, который
должен выйти перед посылкой через связь. Первоначально, async
отображение - множество к 0xffffffff, то есть все управляющие символы
будут esaped.
Для того, чтобы сообщить вашему peer, что это он не должен
escaped все управляющие символы, а только несколько из них, Вы можете
точно определять новый asyncmap к pppd используя опцию asyncmap. Например,
если только ^S и ^Q (ASCII 17 и 19, обычно используемый для
старт-сигнала(XON) и стоп-сигнала(XOFF)) должно быть escaped, то Вам
надо использовать следующую опцию:
Asyncmap 0x000A0000
Максимум получает единицу, или MRU, сообщает peer максимальный размер
HDLC рамки, которую мы хотим получить. Хотя это может напомнить Вам
значение MTU (Максимальная Порция обмена), то эти два имеет немного
общего. MTU - параметр kernel устройства работы с сетями, и
описывает максимальную структуру inerface делая его способным к обработке.
MRU более, чем совета к remote end для того, чтобы не генерировать любой
фрейм больший чем MRU; interface должен однако быть способен 1500 байт.
Выбор MRU не такой большой вопрос того что как связь способна к
пересылке, но того, что даст Вам самый лучший throughput. Если Вы
имеете в виду интерактивные приложения над связью, то установки MRU к
значениям всего 296 - хорошая идея, так, чтобы случайный больший блок
(говорят, из FTP сеанса) не сделал бы ваш курсор "jump''. Чтобы сообщить
- 155 -
pppd чтобы он запросил MRU 296, Вы бы дали ему опцию mru 296. Малый
MRUs, однако, только имеет смысл, если Вы не имеете эту опцию (это
отключается по умолчанию).
Pppd понимает также пару LCP опций, которые конфигурируют полное
поведение процесса переговоров, типа максимального номера из запросов
конфигурации, которые могут быть обменены перед тем как связь будет
прервана.
&
" В заключение, имеются две опции, которые обращаются к LCP ECHO
сообщениям. PPP определяет эти два сообщения, запрос ECHO и ответ ECHO.
Pppd использует эту особенность, чтобы проверить, действует ли связь все
еще. Вы можете отключить это используя опцию lcp-echo-interval
вместе со временем мгновенно. Если никакие структуры не получены от
отдаленного хоста внутри этого интервала, то pppd сгенерирует запрос ECHO,
и будет ожидает, какой ECHO ответ peer возвратит. Если peer не
возвращает ответ, то связь будет прервана после некоторого числа
посланных запросов. Этот номер может быть установлен используя опцию
lcp-echo-failure. По умолчанию, эта особенность отключена в целом.
9.9 Общие рассмотрения защиты
Плохо сконфигурированный PPP daemon может быть разрушителен для
защиты. Это может быть так плохо, как разрешение подсоединиться
любому человеку со своего компьютера в Вашу Ethernet (и это очень плохо).
В этом разделе, мы обсудим несколько критериев, которые должны сделать
вашу PPP конфигурацию безопасной.
Одна проблема с pppd - то, что конфигурация сетевого устройства и
таблицы маршрутов требуют привилегии root. Вы будете обычно
разрешать эту сложность, выполняя setuid root. Однако, pppd
позволяет пользователям установить различные защита-релевантные опции.
Для защиты против любого нападения, пользователь может манипулировать
этими опциями, Вам предложат установить пару значений по умолчанию
в глобальном файле /etc/ppp/options, подобно тем показанным в типов
9.4. Некоторые из них, типа опознавательных опций, не могут быть
- 156 -
отменены пользователем, и так что они обеспечивают приемлемую защиту против
манипулирований.
Конечно, Вы должны защитить себя от систем, с которыми PPP также
общается. Чтобы отразить хосты, Вы должны всегда иметь некоторый вид
установления подлинности от вашего peer. Дополнительно, Вы не должпы
позволять иностранным хостам использовать любой адрес IP какой они
выберут, но ограничьте их по крайней мере несколькими. Следующий раздел
будет связам с этими проблемами.
9.10 Установление подлинности с PPP
.10.1 CHAP против PAP
С PPP, каждая система может требовать, чтобы peer опознал себя
используя однин из двух опознавательных протоколов. Они - (PAP), и
(CHAP). Когда связь установлена, каждый может запросить другой, чтобы
опознать себя, независимо от того, является ли это caller или callee. Ниже
я буду говорить о "клиенте " и " сервере " когда я захочу сделать различие
между системой опознания и authenticator. PPP daemon может спрашивать
peer отно подлинности, посылая однако другой LCP запрос конфигурации,
опознавающий желаемый протокол.
PAP в основном работает в том же самом способ как нормальная
процедура входа в систему. Клиент опознает себя, посылая имя пользователя и
пароль ксерверу, который сравнивается с базой данных секретов. Этот
метод легкоуязвим к eavesdroppers, который может попытаться получить
пароль, слушая последовательную линию, и к повторению испытания и решения
ошибки.
CHAP не имеет этих недостатков. С CHAP, authenticator (то
есть сервер) посылает беспорядочно сгенерированную " challenge''
строку к клиенту, наряду с hostname. Клиент использует hostname для
того, чтобы искать соответствующий шифр, объединяя это с challenge, и
шифруя строку, используя однонаправленную hashing function. Результат
будет возвращен на сервер наряду с hostname клиента. Сервер теперь
выполняет то же самое вычисление, и подтверждает клиента.
- 157 -
Другая особенность CHAP - то, что он не требуется опознания клиента
для опознания самого себя при запуске, но посылает challenges в
определенные промежутки времени, чтобы удостовериться не был клиент
заменен "злоумяшлепником ", например, только переключая телефонные
линии.
Pppd хранит секретные ключи для CHAP и PAP в двух отдельных
файлах, вназываемых /etc/ppp/chap-secrets и pap-secrets соответственно.
Входом отдаленного хоста в один или другой файл, Вы имеете хороший контроль
над CHAP или PAP предназначенный для этого, чтобы опознать нас с нашим
peer, и наоборот.
По умолчанию, pppd не требует установления подлинности от remote,
но соглашается опознавать себя когда запрошено remote. Так как CHAP
намного более сильна чем PAP, pppd пробует использовать вышеупомянутый
всякий раз, когда это возможно. Если peer этого не поддерживает, или если
pppd не может найти CHAP шифр для remote системы в файле шифров chap, он
возвращается к PAP. Если он имеет PAP шифр для peer также, то он
откажется опознавать в целом, и как следствие, связь закроется.
Это поведение может быть изменено отдельными способами. Например,
когда дается auth ключевое слово, pppd требует, чтобы peer опознал сам
себя. Pppd согласится использовать или CHAP или PAP для этого, как только
это будет имеет шифр для peer в CHAP или в базе данных PAP
соответственно. Имеются другие опции, чтобы включить или выключить
частный опознавательный протокол, но я не буду описывать их здесь.
Пожалуйста обратитесь к pppd (8) для деталей.
Если все системы, с которыми Вы говорите PPP, соглашаются опознавать
самих себя с Вами, Вы должны поместить опцию auth в глобальный
файл /etc/ppp/options и определить пароли для каждой системы в файле
шифров chap. Если система не поддерживает CHAP, добавьте запись к файлу
pap шифров. Таким образом, Вы можете удостовериться в том, что никакая
неопознанная система не соединяется с Вашим хостом.
- 158 -
Следующие два раздела обсуждают два PPP файла шифров, pap-
secrets и chap-secrets. Они размещзны "в /etc/ppp и содержат тройки
клиентуры, серверов и паролей, необязательно сопровождаемых списком из
адресов IP. Интерпретация клиента и областей сервера отлична для CHAP или
PAP, и также зависит от того, опознаем ли мы себя самостоятельно с peer,
или потребуем опознать сервер непосредственно с нами.
9.10.2 Файл шифров CHAP
Когда это должно опознать себя с некоторым сервером, используя CHAP,
рppd ищет файл шифров PAP для записи с клиентской областью равной
локальному hostname, и области сервера равной к remote hostname
посланный в CHAP Challenge. При требовании peer к опознаванию себя, роли
просто поменялись: pppd будет затем искать запись с клиентской
областью приравненной к отдаленному hostname (посланный в CHAP ответ
клиенту) и область сервера приравненной локальному хосту.
Следующее - типовой файл шифров chap для vlager: (9)
# CHAP secrets for vlager.vbrew.com
#
# client server secret addrs
#-------------------------------------------------------------------
---
vlager.vbrew.com c3po.lucas.com "Use The Source Luke"
vlager.vbrew.com
c3po.lucas.com vlager.vbrew.com "riverrun, pasteve"
c3po.lucas.com
* vlager.vbrew.com "VeryStupidPassword"
pub.vbrew.com
При установлении PPP связи с c3po, c3po запрашивает vlager опознать
себя, используя CHAP, посылая CHAP challenge. Pppd затем просматривает chap
шифры для записи с клиентской областью, приравненой к vlager.vbrew.com и
областью сервера приравненной к c3po.lucas.com, (10) и находит
- 159 -
первую линию, показанную выше. Затем производится CHAP ответ от challenge
string и шифра (Используйте Источник Luke), и посылает от c3po.
В то же самое время, pppd составляет CHAP challenge для c3po,
содержащую уникальную challenge string, и пплноутью квалифицированный
hostname vlager.vbrew.com. C3po создает CHAP ответ способом, который мы
только что обсудили, и возвращает это к vlager. Pppd теперь извлекает
клиентский hostname (c3po.vbrew.com) из ответа, и поисков файлов шифра chap
для линии, соответствующей c3po как клиент, и vlager как сервер. Вторая
линия делает так что pppd объединяет CHAP challe pasteve, шифрует их,
и сравнивает результат с с3po CHAР ответа.
Произвольная четвертая область перечисляет адреса IP, которые
являются для клиентуры, именованной в первой области. Адреса могут быть
даны в dotted quad notation или как hostnames, которые разысксканы с
помощью решающего устройства. Например, если запрос c3po, на использование
IP адреса во время IPCP переговора, который не в этом списке, запрос будет
отклонен, и IPCP будет выключено. В типовойфайле, показанном выше, с3po
следовательно будет ограничен использованием собств Если область адреса
пуста, любые адреса будут позволяться, значение которых -
предотвращает использование IP с клиентом.
Третья линия в примере файле шифров chap позволяет любому хосту
установить связь PPP с vlager потому что клиент или область сервера
соответствует hostname. Единственое требование - то, что он знает пароль,
и использует адрес pub.vbrew.com. Вход с групповым символом hostnames
может появится где-нибудь в файле шифров, так как pppd будет всегда
использовать наиболее специфическую запись, которая применяется к паре
сервера / клиента.
9. Двойные кавычки - не часть пароля, они просто служат для того,
чтобы защитить незаполненное пространство внутри пароля.
10. Этот hostname принимается из CHAP challenge.
Имеются некоторые слова, которые нужно упоминуть относительно
способа, которым pppd достигает hostnames: он ищет в файле шифров.
- 160 -
Как было объяснено прежде, отдаленный hostncme всегда обеспечивается
peer в CHAP Challenge или в Response packet. Локальный hostname будет
получен, если вызвать gethostname функцию (2) по умолчанию. Если Вы
установили название системы Вашему неквалифицированному hostname, то Вы
должны обеспечить его pppd областью.
# pppd ...domain vbrew.com
Это конкатенирует название Brewery области к vlager для всех
установленых подлинностью действия. Другие опции, которые модифицируют
progpppd's idea относительно локального hostname - usehostname и name.
Когда Вы даете локальный IP адрес на командной строке, использующей
"local:varremote", и local - название вместо dotted quad, pppd
использует это как локальный hostname. Для деталей, пожалуйста
обратитеськ pppd странице справочника (8).
9.10.3 Файл шифров PAP.
Файл шифров PAP очень похожа на тот, который используется CHAP.
Сначала две области всегда содержат название пользователя и название
сервера; третья часть задерживает шифр PAP. Когда remote посылает
опознающийся запрос, рppd использует запись, которая имеет область
сервера равной локальному hostname, и область пользователя
приравненной к имени пользователя, посланному в запросе. Когда
опознание себя с peer произойдет, pppd выберет шифр, который будет послан
из линии с область приравненной к локальному имени пользователя, и
областью сервера приравненной к remote hostname.
Типовой файл шифров PAP мог бы выглядить следующим образом:
# /etc/ppp/pap-secrets
#
# user server secret addrs
vlager-pap c3po cresspahl vlager.vbrew.com
c3po vlager DonaldGNUth c3po.lucas.com
Первая линия используется для того, чтобы опознать нас когда мы
говорим с с3ро.
- 161 -
Вторая линия описывает, как пользователь именнованняй c3po, должен
быть опознаным непосредственно с нами.
Имя vlager-pap в столбце, который является именем пользователя, мы
посылаем к c3po. По умолчанию, pppd выберет локальный hostname как имя
пользователя, но Вы можете также определить различные названия, давая опцию
пользователя, сопровождаемую эти именем.
При выборе записи из файла шифров PAP регистрируются для
установления подлинности с peer, pppd должен знать название remote хоста.
Поскольку это не имеет способа нахождения того, что Вы должны точно
определить на этой командной строке, используяе remotename ключевого
слова, сопровождаемого hostname peer. Для образца, как использовать
вышеупомянутую запись для установления подлинности с c3po, мы добавляем
опцию следования к командной строке pppd's:
\#{} pppd ... remotename c3po user vlager-pap
В четвертой области (и все следующие области), Вы можете точно
определить какие адреса IP разрешены для того частного множества, точно как
и в файле шифров CHAP. Peer может затем только запроситьь адреса из этого
списка. В типовом файле, мы требуем, чтобы c3po использовал реальный адрес
IP.
Заметьте, что PAP довольно слабый опознавательный метод, и это
предполагает всякий раз, когда Вы используете CHAP, если это возможно.
Мы не будем следовательно описывать PAP в деталях здесь; если Вы
заинтересованы в использовании PAP, Вы найдете несколько больше в pppd
странице справочника (8).
9.11 Конфигурирование PPP сервера
При запуске pppd, поскольку сервер - только сущность
добавления соответствующей опции к командной строке. Было бы
идеальным, если Вы создали бы специальный account, скажем ppp, и
- 162 -
дадите этому script или программе как оболочке входа в систему,
которая вызывает pppd с этими опциями. Например, Вы бы добавили
следующую линия к /etc/passwd:
"
ppp:*:500:200:Public PPP Account:/tmp:/etc/ppp/ppplogin
Конечно, Вы можете захотеть использовать более
универсальные uids и gids чем те, что показанны выше. Вы также были бы
должны установить пароль для вышеупомянутого account, использующего команду
passwd.
Ppplogin script может быть выглядить следующим образом:
#!/bin/sh
# ppplogin - script to fire up pppd on login
mesg n
stty -echo
exec pppd -detach silent modem crtscts
Команда mesg блокирует других пользователей, чтобы записать к
tty, используя, на пример, команду записи. Команда stty выключает
знако-отображение на экране. Это необходимо, потому что иначе peer все
посылал бы используя отображение на экране. Наиболее важная опция pppd,
данная выше -detach, потому что это предотвращает pppd от отсоединения
из управления tty. Если мы не точно определим эту опцию, это будет идти
к предпосылке, создания shell script exit. Это было к зависанию. Silent
опция заставляет pppd ждать, пока он не получит блок от системы вызова
прежде, чем это начинает посылать. Это предотвращает от блокировки
по времени, когда система вызова медлена в обслуживании PPP наблюдать
DTR линию, чтобы видеть, понизил ли peer связь, и crtscts включает
аппаратное рукопожатие.
Помимо этих опций, Вы могли бы захотеть вынудить некоторый вид
опознания, например, точно определяя auth на командной строке pppd's, или в
глобальном файле опций. Руководство также обсуждает более специфические
опции для вкл. или выкл. индивидуальных опознавательных протоколов.
- 163 -
10. Различные сетевые приложения
После успешной установки IP и решающего устройства, Вы должны
обратиться к услугам обеспечивающим хорошую работу над сетью. Глава
начинается с конфигурачия пескольких простых сетевых приложений, включая
Inetd сервер, и программы из rlogin совокупности. Незначительная
процедура обращения связывает, с помощью интерфейса, эти услуги
подобно Сетевой Файловой системе (NFS). Сетевая Информационная Система
(NIS) основана на том же самом, имела дело с briefly. Конфигурация NFS
и NIS, однако берущяя большое количество памяти, будет описана в отдельных
главах. Это применяется к электронной почте и netnews также.
Конечно, мы не можем описать все сетевые приложения в этой книге.
Если Вы хотите устанавить то, которое не обсуждается здесь, подобно
переговорам, gopher, или xmosaic пожалуйста обратитесь к руководству для
деталей.
10.1 Inetd супер-сервер
Часто, услуги предоставляются так называемыми daemons. Daemon
является программой, которая открывает некоторый порт, и связь. Если это
происходит, это создает дочерний процесс, который принимает связь, в то
время как основной продолжает ждать дальнейших запросов. Это понятие имеет
недостаток что для каждого предлагаемого обслуживания, daemon должен
запускать те, которые слушают порте для связи, для которых это вообще
означает потери способов системы подобно пространст
Таким образом, почти вся Un*x инсталляция запускает " супер-
сервер ", который создает гнезда для ряда услуг, и слушает на них
одновременно при использовании отобранного системного вызова (2).
Когда отдаленный хост запрашивает одну из услуг, супер-сервер замечает
этот и порождает другой сервер, точно установленный для этого порта.
Супер-сервер, обычно используемый - inetd, Internet Daemon. Это
начинается при начальной загрузке системы, и берет список услуг, к
- 164 -
которым он обращается из файла запуска, именованной /etc/inetd.conf. В
дополнение к тем вызываемым серверам, там есть ряд тривиальных услуг,
которые являются на сформировавшимся inetd, неппсрежственно вызываемым
внутренние услуги. Они включают chargen который просто генерирует ряд
знаков, и daytime который возвращают system's idea
Запись в этой картотеке состоит из единственной линии,
сделанной из следующей области:
service type protocol wait user server cmdline
Значение каждой области следующие:
Service дает сервисное имя. Service name должно быть переведено к
номеру порта, просматривая в файле services. Этот файл будет описан в
разделе 10.3.
type определяет тип гнезда, любой поток (для связь-
ориентируемых протоколов) или dgram (для датаграмных протоколов). TCP
основанна на услугах, которые должны всегда использовать поток, в
то время как UDP-основанные услуги должны всегда использовать dgram.
Protocol называется протоколом переноса, используемым
обслуживанием. Это должно быть подходящим названием протокола, найденное в
файле протоколов, также объяснено ниже.
wait эта опция применяется только на dgram гнездах. Это может быть
также wait или nowait. Если wait определен, то inetd только выполнит один
сервер для точно установленного порта в любое время. Иначе, это
немедленно продолжит слушать на порте после извлечения сервера.
Это полезно для "единственно - связнных " серверов, которые
читают все входящие датаграммы, и затем выходят. Большинство RPC серверов
имеет этот тип и должны следовательно точно определить wait.
Противоположный тип, "многопоточные " серверы, позволяет безграничному
числу образцов, чтобы быть запущенными одновременно; но это редко когда
- 165 -
используется. Эти серверы должны точно определить nowait.
Гнезда потока должны всегда использовать nowait.
User это является идентичностью входа в систему пользователя,
объясненный ниже. Это будет часто root user, но некотпрые" услуги могут
использовать различные account. Это - очень хорошая идея к
применению принципа наименьшего количества привилегии здесь, который
заявляет что Вы не должны запускать команду ниже привилегированного
account если программа не требует этого для присущего функционирования. Для
примера, NNTP сервер новостей будет запускать новости, пока ус риск
защиты (типа tftp, или finger) будут управляться как nobody.
server дает полный путь программы сервера, которая будет выполнена.
cmdline это- командная строка, которую нужно запустить на
сервере. Она включает аргумент 0, который является названием команды.
Обычно, это не будет названием программы сервера, если программа ведет
себя по-другому, когда вызывается с различным именем.
Эта область пуста для внутренних услуг.
Типовой inetd.conf файл изображен на рисунке 10.1. Finger
service прокомментированног так чтобы это было не доступно. Это часто
выполняется из соображений безопасности, потому что может использоваться
нападавшими для того, чтобы получить имя пользовател и на вашей системе.
Tftp имзображено прокомментированным также. Tftp осуществляет
Примитивный Протокол Передачи файла, который позволяет передавать любые
всемирно - читаемые файлы из вашей системы без пароля. Это особенно вредно
для файла /etc/passwd, даже более того, когда Вы не используйте теневой
пароль.
TFTP обычно используется клиентурой без диска и X терминалами при
загрузке их кода из сервера при начальной загрузке. Если Вы должны
запустить tftpd для этой проблемы, удостоверитесь, что ограниченная
- 166 -
область действия к директориям клиентов будет восстановлена из файлов,
добавляя те названия каталогов к команде tftpd's линии. Это показано во
второй tftp линии в примере.
10.2 Tcpd средства управления доступом
"
Начиная с открытия компьютера к сети средство вовлекает много
защиты, приложения разработанные так, чтобы принять меры против типов
решения. Некоторые из этих, однако, могут быть flawed (наиболее
решительно демонстрированными RTM Internet worm), или могут не
различаться между безопасными хостами, из которых просьбы о частном
обслуживании будут приняты, и опасными хостами, чьи запросы должны быть
отклонены. Мы уже кратко обсуждали finger и tftp услуги выше.
#
# inetd services
ftp stream tcp nowait root /usr/sbin/ftpd in.ftpd -l
telnet stream tcp nowait root /usr/sbin/telnetd in.telnetd -
b/etc/issue
#finger stream tcp nowait bin /usr/sbin/fingerd in.fingerd
#tftp dgram udp wait nobody /usr/sbin/tftpd in.tftpd
#tftp dgram udp wait nobody /usr/sbin/tftpd in.tftpd
/boot/diskless
login stream tcp nowait root /usr/sbin/rlogind in.rlogind
shell stream tcp nowait root /usr/sbin/rshd in.rshd
exec stream tcp nowait root /usr/sbin/rexecd in.rexecd
#
# inetd internal services
#
daytime stream tcp nowait root internal
daytime dgram udp nowait root internal
time stream tcp nowait root internal
time dgram udp nowait root internal
echo stream tcp nowait root internal
echo dgram udp nowait root internal
discard stream tcp nowait root internal
- 167 -
discard dgram udp nowait root internal
chargen stream tcp nowait root internal
chargen dgram udp nowait root internal
Рис. 15. /etc/inetd.conf file.
ограничить доступ к этим услугам " доверенные множества " только,
которые невозможны с обычной установкой, где inetd обеспечивает эту
защиту всей клиентуре.
&Полззное средство для этого - tcpd, (1), так называемый daemon
wrapper. Для ТСP услуги Вы хотите проконтролировать или защищать его,
вызывая вместо его программу сервера. Tcpd регестрирует запрос к syslog
daemon, проверяя позволяют ли remote хосту использовать обслуживание, и
только если это будет выполнено в реальной программе сервера. Заметьте,
что это не работа с udp-основанными услугами.
Например, чтобы перенести finger daemon, Вы должны изменить
corresponding линию в inetd.conf
1. Написано Wietse Venema, wietse@wzv.win.tue.nl.
# wrap finger daemon
finger stream tcp nowait root /usr/sbin/tcpd in.fingerd
Без добавления какого-либо access контроля, это появится у клиенту
точно также как и обычная установка finger, за исключением того, что
любые запросы будут регистрироваться к syslog's auth facility.
Управление доступом выполнено посредством двух файлов,
называемых /etc/hosts.allow и /etc/hosts.deny. Они содержат разрешение
входов и отрицание доступа, соответственно, к некоторым услугам и хостам.
Когда tcpd обрабатывает просьбу о обслуживании finger от
клиентского хоста, именованного Biff.foobar.com, он просматривает
hosts.allow и hosts.deny (в этом порядке) для соответствующей записи и
сервисного и клиентского хоста. Если запись соответствия была найдена в
- 168 -
тся, независимо от любой записи в hosts.deny. Если соответствие
найдено в hosts.deny, то запрос будет отклонен закрывая связь.схему.
Если никакое соответствие не найдено вообще, запрос будет принят.
Входы в файл доступа выглядят следующим образом:
Servicelist: hostlist [: shellcmd]
Servicelist - список сервисных имен из /etc/services, или ключевое
слово ALL. Чтобы соответствовать всем услугам за исключением finger и
tftp, используйте "ALL"EXCGPT finger, tftp''.
Hostlist - список имен хостов или адресов IP, или ключевых слов ALL,
LOCAL, или UNKNOWN. ALL соответствует любой хост, в то время как
LOCAL соответствует имя хоста, не содержащие точку.(2) UNKNOWN
соответствует любым множествам чьи названия или адреса ошибочны.
Name string, начинающееся с точки соответствует всем хостам, чьи
области является равными этому названию. Например,.foobar.com пара -
Biff.foobar.com. Имеются также условия для IP сетевых адресов и
подсет к странице справочника (5) для деталей.
Для того, чтобы отказать в доступе к finger и tftp услугам, кроме
локальных хостов, поместите следующее в /etc/hosts.deny, и сделайте
пустым /etc/hosts.allow:
2. Обычно только локальные имена хостов, полученные из поисков в
/etc/hosts не содержать никакой точки.
in.tftpd, in.fingerd: ALL EXCEPT LOCAL, .your.domain
Произвольная shellcmd область может содержать командную оболочку,
чтобыбыть вызванной, когда запись согласована. Это полезно установить
ловушку, которая может разоблачить потенциальных нападавших:
in.ftpd: ALL EXCEPT LOCAL, .vbrew.com : \
echo "request from %d@%h" >> /var/log/finger.log; \
- 169 -
if [ %h != "vlager.vbrew.com" ]; then \
finger -l @%h >> /var/log/finger.lы отличны.
Область псевдонимов позволяет точно определить альтернативные имена
для того же самого обслуживания.
Обычно, Вы не должны менять файл услуг, который приходит
Наряду с сетевым программным обеспечением на вашей Linux системе.
Однако, мы даем малую выборку из того файла ниже.
# The services file:
#
# well-known services
echo 7/tcp # Echo
echo 7/udp #
discard 9/tcp sink null # Discard
discard 9/udp sink null #
daytime 13/tcp # Daytime
daytime 13/udp #
chargen 19/tcp ttytst source # Character Generator
chargen 19/udp ttytst source #
ftp-data 20/tcp # File Transfer Protocol (Data)
ftp 21/tcp # File Transfer Protocol
(Control)
telnet 23/tcp # Virtual Terminal Protocol
smtp 25/tcp # Simple Mail Transfer Protocol
nntp 119/tcp readnews # Network News Transfer
Protocol
#
# UNIX services
exec 512/tcp # BSD rexecd
biff 512/udp comsat # mail notification
login 513/tcp # remote login
who 513/udp whod " # remote who and uptime
shell 514/tcp cmd # remote command, no passwd
used
- 170 -
syslog 514/udp # remote system logging
printer 515/tcp spooler # remote print spooling
route 520/udp router routed # routing information protocol
Заметьте, что, например, обслуживание ECHO предлагается на порте
7 для обоих и TCP и UDP, и этот порт 512 используется для двух различных
услуг, а именно для СИСТЕМЫ СПУТНИКОВОЙ СВЯЗИ КОМСАТ daemon (которые
сообщают пользователям относительно новой почты, смотри xbiff(1x)), над
UDP, и для remote execution (rexec(1)), используя TCP.
#
# Internet (IP) protocols
#
ip 0 IP # internet protocol, pseudo protocol
number
icmp 1 ICMP # internet control message protocol
igmp 2 IGMP # internet group multicast protocol
tcp 6 TCP # transmission control protocol
udp 17 UDP # user datagram protocol
raw 255 RAW # RAW IP interface
10.4 Дистанционное управление
Очень общий механизм для клиент-сервера приложения обеспечивается
RPC, пакетом дистанционного управления. RPC был разработан Sun
Micrsystems, и эта система - набор инструментальных средств и библиотечных
функций. Важные приложения, сформированны на вершине RPC - NFS, Network
Filesystem, и NIS, Network Information System, обе из которых будут
представлены в следующих главах.
RPC сервер состоит из системы процедур того, что клиент может
обратится, посылая RPC запрос к серверу, наряду с параметрами
процедуры. Сервер вызовет обозначенную процедуру по защите клиента,
вручая обратно возвращаемое значение, если имеется любое. Чтобы быть
машинно-независимыми, зсе жанные, обмененные между клиентом и сервером
- 171 -
преобразованны к так называемому Внешнему Представлению Данных
(XDR) отправителю, и преобразованны обратно к машинно - локальному
Иногда, уточнения к RPC приложению вводят несовместимые
изменения в процедуре call interface. Конечно, при простом изменение
сервер разрушил бы все приложение, которые все еще ожидают original
behavior. Следовательно, RPC программы имеют номера версии, приписываемые
к ним, обычно начинающийся с 1, и с каждой новой версией RPC свяжит с
помощью интерфейса этот счетчик. Часто, сервер может предлагать несколько
версий одновременно; клиентура затем указывает номером версии версии они
хотят использовать.
Сетевая связь между RPC серверами и клиентурой - особая. RPC
сервер предлагает один или более системных процедур; каждое множество
называется программой, и однозначно идентифицировано номером
программы. Имена обслуживания отбора списка существуют для того,
чтобы запрограммировать числа обычно сохраняемые в /etc/rpc, выборка
которого воспроизведена ниже ра рисунке 10.4
В TCP/IP сетях, перед авторами RPC стояла задача программирования
чисел к обобщенным сетевым услугам. Они выбрали - иметь каждый
сервер, обеспечивающий, и TCP и UDP порт для каждой программы и каждой
версии. Вообще, RPC приложения используют UDP посылку данных, и
возвращаются обратно к TCP тогда, когда данные, которые будут переданы не
впишутся в единственную UDP датаграмму.
Конечно, клиентские программы должны иметь способ выяснить который
из них порт отображения номера программы. Использование файла
конфигурации для этого, был бы слишком негибки; с тех пор RPC
приложения не используют зарезервированные порты, не имеется никакой
гарантии, что порт первоначально подразумевал использоваться наше
приложепие "баз данных. Следовательно, RPC приложения выбирают любой
порт который, они могут получить, и зарегистрировать это с так
называемым por действия - как обслуживание broker для всех RPC
серверов, выполняющиеся на машине: клиент, который хочет войти в контакт с
обслуживанием с данным номером программы сначала сделает запрос
- 172 -
portmapper на числа порта обслуживание, которые могут быть достигнуты.
Этот метод имеет частичный недостаток, что это вводит единственную
точку отказа, очень похожую на inetd daemon. Однако, этот случай немного
хуже, потому что когда portmapper умирает, вся RPC информация порта
теряется; это обычно значит, что Вы должны перезапустить все RPC серверы
вручную, или перезагрузить целую машину.
На Linux, portmapper называется rpc.portmap и постоянно
находится в /usr/sbin. Кроме уверения того, что это начато из rc.inet2,
рortmapper не требует любой работы по конфигурации.
10.5 Конфигурирование r команд
Имеется ряд команд для выполнения команд на remote хосте. Они -
rlogin, rsh, rcp и rcmd. Они все порождают оболочку на remote хосте и
позволяют пользователю выполнять команды. Конечно, клиент должен иметь
account на хосте, где команда должна быть выполнена. Таким образом все
эти команды выполняют процедуру разрешения. Обычно, клиент сообщяет
название входа в систему пользователя на сервер, который
#
# /etc/rpc - miscellaenous RPC-based services
#
portmapper 100000 portmap sunrpc
rstatd 100001 rstat rstat svc rup perfmeter
rusersd 100002 rusers
nfs 100003 nfsprog
ypserv 100004 ypprog
mountd 100005 mount showmount
ypbind 100007
walld 100008 rwall shutdown
yppasswdd 100009 yppasswd
bootparam 100026
" ypupdated 100028 ypupdate
- 173 -
Рис. 16. A sample /etc/rpc file.
по очереди запрашивает пароль, который утвержден обычным способом.
Иногда, однако, желательно ослабить проверки разрешения для
некоторых пользователей. Например, если Вы часто должны регистрироваться
в других машинах на вашей локальной вычислительной сети, Вы могли бы
захотеть быть признанным без ввода пароля каждый раз.
Отключение разрешения желательно только на малом числе хостов, чьи
базы данных паролей синхронизированы, или для малого числа из
привилегированных пользователей, которые должны обращаться к
многим машинам для административной причины. Всякий раз, когда Вы
хотите позволять людям регестрироваться на вашем хосте при
необходимости точно определить идентичность входа в систему или пароль,
удостоверитесь, что Вы не делаете ошибку предоставляя доступ кому-нибудь
еще.
Имеются два способа блокировать разрешение, для того чтобы проверить
r команды. Каждый - для супер пользователя, чтобы позволить
некоторым или всем пользователям зарегестрироваться без пароля. Этот
доступ управляется картотекой вызываемой /etc/hosts.equiv. Это содержит
список множеств и имен пользователя, которые рассматриваются
эквивалентными пользователям на локальном хосте. Альтернативная опция -
для пользователя - предоставление другим пользователям на некоторых х
быть перечислены в файле.rhosts в директории пользователя. Для
соображений безопасности, эта картотека должна принадлежать пользователю
или супер пользователю, и не должна быть symbolic link, иначе это будет
игнорирован
Когда клиент запрашивает r обслуживание, ее хост и название
пользователя ищются в файле /etc/hosts.equiv, и затем в файле.rhosts
пользователя. Как - пример, предположим, что janet работает "
гауссе и пытается зарегестрироваться в joe's account на euler. Следуя
далее, мы обратимся к Janet как клиентскому пользователю, и к Joe как к
Локальному пользователю.
- 174 -
Теперь, когда типы Janet
$ Rlogin -l joe euler
на гауссе, сервер сначала проверил бы hosts.equiv (4),
предоставлен ли Janet свободный доступ, и если нет, то он попробует
просмотреть.Rhosts в исходном каталоге joe's.
Файл hosts.equiv на euler походит на это:
gauss
euler
-public
quark.physics.groucho.edu andres
Запись состоит из названия хоста, необязательно сопровождаемого
именем пользователем. Если название множества появляется везде, то
все пользователи от того множества будут допущены к их локальным acount
без любых проверок. В вышеизложенном примере, Janet позволили
бы зарегестрироваться в ее account janet когда выходит из гаусса, и тот
же самый применяется любому другому пользователю за исключением root
Однако, если Janet захочет зарегестрироваться как joe , пароля как обычно.
Если название хоста сопровождается названием пользователя, как
и в последней линии вышеупомянутой типовой картотеки, то этому
пользователю будет дан пароль-свободный доступ ко всем accont за
исключением accony\t root.
Имени хоста может также предшествовать знак "минус", как на
записи "-общий". Это требует разрешения на все account на общем,
независимо от того, что пользователи единичного права предоставляют в их
картотеке.rhosts.
3. В NFS среде окружения, Вы были бы должны дать этому защиту 444,
потому что супер пользователь часто ограничивает в доступе к файлам на
дисках, установленных через NFS.
4. Заметить, что файл hosts.equiv не обыскан когда кто -то делает
попытку к регистрации как root.
- 175 -
" / 165 -
Форматфайла.rhosts идентичен таковому hosts.equiv, но значение
немного отлично. Рассмотрите Joe's.rhosts файл на Euler:
chomp.cs.groucho.edu
gauss janet
Первая запись допускает, что joe освобождают acess при
регистрации из Chomp.cs.groucho.edu, но не воздействуют на права любого
другого account на euler или chomp. Вторая запись - небольшое изменение
этого, в котором предоставляется janet свободный доступ к account Joe
при регистрации из гаусса.
Заметьте, что название хоста клиента получено обратным отбором.
Адрес вызывающего оператора к названию, так, чтобы эта особенность
failed с хостами к решающему устройству. Имя хоста клиента
рассматривается в соответствии с названим в хостах зарегистри рованных в
одном из следующих случаев:
+ Каноническиое имя хоста клиента (не псевдоним) буквально
соответствует имени хоста в файле.
+ Если имя хоста клиента - полностью квалифицированно, то название
области (типа возвращенного решающим устройством, когда Вы имеете
выполняющую DNS), не соответствует имени хоста в множествах файлов, это
сравнивается с тем именем хоста, расширенным с локальным названием
области.
11. Сетевая информационная система
Когда Вы запускаете локальную вычислительную сеть, ваша цель -
обеспечить среду окружения вашим пользователям, которая делает сеть
очевидной. Важен stepping stone к этому концу должен хранить
насущными данные типа пользователя синхронизированные между всеми
- 176 -
множествами. Мы видели перед этим, что для решенияимени хоста, мощное и
сложное обслуживание существует, являющееся DNS. Для других задачи, имеется
нет такого специализированного обслуживания. Кроме того, если В малой
локальной вычислительной сетью с no Internet activity, устанавливая DNS
может показаться утояыим затруднение для многих администраторов.
Это - то, почему Sun разрабатывало NIS, Сетевую Информационную
Систему. NIS обеспечивает обобщенные средства доступа к базе данных,
которые могут использоваться для дизинформации данных типа этого,
содержали в passwd и группах файлах всех множествах на вашей сети. Это
заставит сеть появиться только как единственная система, с теми
же самыми account на всех множествах. В подобном режиме, Вы может
использовать NIS, чтобы распределить hostname информационную форму
/etc/hos сети.
NIS основан на RPC, и включает сервер, client-side библиотеку, и
несколько административных инструментальных средств. Первоначально, NIS
назывался Желтые Страницы, или YP, который все еще широко
используется, чтобы неофициально обратиться к этой услуге. С другой
стороны, Желтые Страницы - марка изготовителя Британской Телесвязи,
которая требует от Sun убрать то название. Поскольку вещи идут, некоторый
стержень имен с людьми, и так YP живет на префиксе к именам больш команд
типа ypserv, ypbind, и т.д. Сегодня, NIS доступны для виртуально всего
Un*ces и там даже свободно реализуется. Каждый - из BSD разъединения
Сеть -2 выпуск, и был получен из общей пожертвованной реализации сноски
области Sun. Библиотечная клиентская цифра из этого разъединения была в GNU
Libc в течение длительного времени, в то время как административные
программы только недавно пренесенные к Linux Swen Thmmler. (1) NIS
сервер - отсутствуетиз реализации сноски. Tobias Reber написал другой
NIS пакет, е средства и сервер; это называется yps. (2)
В настоящее время(постоянно), полная перезапись цифры NIS, называемой
NYS, сделанная Peter Eriksson, (3), который поддерживает оба, и plain
NIS и Sun's much пересмотренным NIS.
1. swen@uni-paderborn.de. NIS клиентура доступнаы как yp-
linux.tar.gz из sunsite.unc.edu в СИСТЕМА / СЕТЬ. 2. Текущая верчия *от
этой записи) - yps-0.21 и может быть получена из ftp.lysator.liu.se в
- 177 -
/pub/NYS каталоге. 3. pen@lysator.liu.se.
+. NYS не только обеспечивает множество NIS инструментальных
средств и сервера, но и также прибавляет новое множество
библиотечных функций, которые будут наиболее возможными для того, чтобы
попасть в стандарт libc в конечном счете. Это включает новую
конфигурационную схему порции hostname решения, которое заменяет
текущую схему использованную host.conf. Особенности этих функций
будут обсуждены ниже.
Эта глава сосредоточится на NYS скорее чем на двух других
пакетах, к которому я буду относить как " традиционную " NIS цифру. Если
Вы хотите запустить этих пакетов, то команд, описанных в этой главе
может быть не достаточно. Чтобы получать дополнительн ую информацию,
пожалуйста найдите стандартную книгу по NIS, типа NFS Hal Stern's и NIS
(см. [GETST "строгий - nfs"]).
В настоящее время, NYS - все еще развивается, и следовательно
стандартные Linux утилиты типа сетевых программ или входа в систему
программ, еще не знает NYS схему конфигурации. Пока NYS соединяется в
mainstream libc Вы должны перетранслировать все эти binaries, если Вы
хотите заставить их использовать NYS. В любом из этих приложений
формирования файла, точно определите -lnsl как последнюю опция libc к
компоновщику. Это связывается на релевантных функциях из libnsl, NYS
стандарной библиотекы для C.
11.1 Знакомство с NIS
NIS хранит информацию баз данных, находящихся в так
называемых отображениях, содержащих keyvalue pairs. Отображения
сохранены на центральном хосте, выполняющем NIS сервер, из которого
клиентура может отыскивать информацию через различные RPC вызовы.
Совершенно часто, отображения сохранены в файлах DBM. (4)
Отпбражения сами по себе обычно генерируются из текстовых файлов
типа /etc/hosts или /etc/passwd. Для некоторых файлов, отдельные
- 178 -
отображения - созданы, один для каждого типа клавиши. Например, Вы
можете искать хост файл для имени хоста также как для адреса IP.
Соответственно, два NIS отображения получены из файла, вызываемый
hosts.byname и hosts.byaddr, соответственно. Таблица 11.1 списков общих
отображений и файлов из кооторых они сгенерированны.
4. DBM - простая библиотека управления базой данных которая
использует метод хеширования, чтобы ускорить операцию исследования. Имеется
свободная DBM реализация из GNU проектируемая вызываемой Gdbm, который
является частью большинства Linux распространен ия.
-----------------------------------------------------------
+-----------------+---------------------------------------+
|Master File | Map(s) |
+-----------------+---------------------------------------+
+-----------------+---------------------------------------+
|/etc/hosts | hosts.byname hosts.byaddr |
|/etc/networks | networks.byname networks.byaddr |
|/etc/passwd | passwd.byname passwd.byuid |
|/etc/group | group.byname group.bygid |
|/etc/services | services.byname services.bynumber |
|/etc/rpc | rpc.byname rpc.bynumber |
|/etc/protocols | protocols.byname protocols.bynumber |
|/usr/lib/aliases | mail.aliases |
+-----------------+---------------------------------------+
+-----------------+---------------------------------------+
Таблица 1. Некоторый стандарт NIS отображения и соответствующие
чайлы.
Имеются другие файлы и отображения, которые Вы можете найти в
любом NIS пакете или другом. Они могут содержать информацию для
приложений не обсуждаемых в этой книге, типа bootparams отображения,
которое может использоваться некоторыми BOOTP серверами, или подобно
которому в настоящее время не имеют любую функцию в Linux
(Ethers.byname и ethers.byaddr отображения).
- 179 -
Для некоторых отображений, люди обычно используют прозвища,
которые являются короткими следовательно проще. Получать полный список
прозвищ понимаемый вашими NIS инструментальными средствами, запустите
следующую команду:
$ ypcat -x
NIS map nickname translation table:
"passwd" -> "passwd.byname"
"group" -> "group.byname"
"networks" -> "networks.byaddr"
"hosts" -> "hosts.byname"
"protocols" -> "protocols.bynumber"
"services" -> "services.byname"
"aliases" -> "mail.aliases"
"ethers" -> "ethers.byname"
"rpc" -> "rpc.bynumber"
"netmasks" -> "netmasks.byaddr"
"publickey" -> "publickey.byname"
"netid" -> "netid.byname"
"passwd.adjunct" -> "passwd.adjunct.byname"
"group.adjunct" -> "group.adjunct.byname"
"timezone" -> "timezone.byname"
NIS сервер традиционно называется ypserv. Для средней сети
единственного сервера обычно хватает; большие сети могут выбирать несколько
серверов на различных машинах и различных сегментах сети, чтобы уменьшить
загрузку на машинах сервера и программах маршрутизации. Они
синхронизированы, делая один из них главным сервером, к другие
подчиненными серверами. Отображения будут созданы только на master
server's host. Оттуда, они распределены всем slaves/
Вы отметили, что мы говорили относительно " сети " очень
неопределенно все время; конечно имеется отличительное понятие в NIS,
которое относится к такой сети, и которая является системой всех хостов
та часть их данных конфигурации системы сделанны через NIS: NIS
- 180 -
область. К сожалению, NIS области не имеют абсолютно ничего общего с
областями, с которыми мы столкнулись в DNS. Избегая любой
неоднозначности через эту главу, я буду всегда точно определять который
тип области
NIS области имеют совершенно административную функцию только. Они
обычно невидимы для пользователей, кроме разделения паролей между всеми
машинами в области. Следовательно, название, данное NIS области
релевантно только администраторам. Обычно, любое название будет как
длинный поскольку это отлично от любого другого NIS названия области на
вашей локальной сети. апример, администратор в Virtual Brewery может
создайть две NIS области, одну для Brewery непосредственно, и о
которыу она называет brewery и winery, соответственно. Другая
совершенно общая схема для того, чтобы просто использовать DNS
название области для NIS. Чтобы установить и показать NIS название
области вашего множества, domainname. Когда она вызывается без любого
аргумента, это печатает текущее NIS название области; к множеству названия
области, Вы должны стать супер пользователеми ввести:
# domainname brewery
NIS области определяют, какой NIS сервер-приложение сделает
запрос. Например, программа входа в систему на множестве в Winery должна,
сделать запрос NIS сервера Winery (или один из них, если они там были
отделены) для информации пароля пользователя; в то время как приложение на
Brewery host должно приклеится к серверу Brewery'.
Одна тайна, которая пстазтся все еще не решенной, а именно, как
клиент узнает с каким сервером он соединен. Самое простое приближение
было бы иметь файл конфигурации, который называет хост, чтобы найти
сервер. Однако, это приближение было бы довольно негибко, потому что
это не позволяет клиентуре использовать различные серверы (из той
же самой области, конечно), в зависимости от их доступности.
Следовательно, традиционный NIS implementations полагаются на специальный
d чтобы обнаружить подходящий NIS сервер в их NIS области. Перед
способностью выполнить любой NIS
- 181 -
Запрос, любое приложение, сначала выясняти от ypbind который
сервер используется.
Ypbind исследует серверы, передавая к локальной IP сети; сначало
первый ответ принят, чтобы быть потенциально самым быстрым и будет
использоваться во всех последовательных запросах NIS. После того, как
некоторый интервал истек, или если сервер становится недоступным, ypbind,
исследует активные серверы снова.
Теперь, спорная точка относительно динамического связывания - то,
что Вы редко нуждайтесь в этом, и что это вводит задачу защиты:
ypbind слепо верит, кто бы ни отвечаел, который мог бы быть NIS сервером
также как и "злоумышленник". Само собой разумеется это становится
затруднением - если Вы управляете вашими базами данных паролей над NIS.
Для принятия мер против этого, NYS не использует ypbind по умолчанию, но
подбирает сервер для имени хостаиз файла конфигурации.
11.2 NIS против NIS +
NIS и NIS + принимают участие немногим больше чем их название и общая
цель. NIS + структуирован полностью различным способом. Вместо плоского
названия пространство с разделенными NIS областями, это использует
иерархическое название, оставляют промежутки подобные к таковому DNS.
Вместо отображений, так называемых таблиц используются то, что составлено
из строк и столбцов, где лаждая строка представляет предмет в NIS + базе
данных, в то время как столбцы покрывают те реквизит + знает и заботится
относительно них. Каждая таблица для данный NIS + - область
включающяя таковых родительских областей. Кроме того, запись в таблице
может содержать связь с другой таблице. Эти особенности делают его
возможным к получении информации многими способами.
Традиционный NIS имеет RPC номер версии 2, в то время как NIS + -
версию - 3.
NIS + не кажется, очень широко используемым однако, и я
действительно не знаю многого относительно этого. (Хорошо, почти ничего).
По этой причине, мы не будет связываться с этим здесь. Если Вы
- 182 -
заинтересованы в изучении большего, пожалуйста обратитесь к NIS Sun +
справочника администратора ([GETST "nisplus"]).
11.3 Клиентская Сторона NIS
Если Вы знакомы с записью или перенесением приложений сети, Вы
обязательно заметите, что большинство NIS отображений, перечисленных выше
соответствуют библиотеке функций в библиотеке C. Например, чтобы
получить passwd информацию, Вы используете getpwnam (3) и getpwuid
функции (3) которая возвращает информацию счета, связанная с данным
именем пользователя или численной идентичностью пользователя. При
нормальных обстоятельствах, эти функции будут выполнены при запросе
по на стандартном файле, типа /etc/passwd.
Nis-знающяя реализация этих функций, однако, будет модифицированна, и
место обращения RPC для того, чтобы иметь NIS сервер для поиска имен
пользователя или идентичность. Это случается полностью с приложением.
Функция может также "конкатенировать " NIS отображение или " заменить "
первоначальную картотеку с этим. Конечно, это не относится к реальной
модификации файла, это только означает то, что он появляется к приложению
как если бы файл был бы заменен или конкатенирован.
Для ттадиционных NIS реализаций, там использовались общие
условия, относительно которых замененные отображения, и которые были
конкатенированы к исходной информации. Некоторые, подобно passwd
отображениям, требуемым kludgy modifications картотеки passwd, который,
когда выполнен неправильно, обнаружил бы защиту. Чтобы избежать этого
pitfalls, NYS использует общую схему конфигурации это определяет,
использует ли частное множество клиентских функций первоначальную
карто и в каком порядке. Это будет описанный позже.
11.4 Запуск NIS Сервера
После такого многого теоретического techno-babble, это - время,
чтобы очитстить наши руки от грязной работы с конфигурации. В этом
разделе, мы опишем конфигурацию NIS сервера. Если имеется уже NIS запуск
- 183 -
сервера на вашей сети, Вы не должны будете установить ваш собственный
сервер; в этом случае, то Вы можете безопасно пропускать этот раздел.
<> Note that if you are just going to experiment with the
server, make sure you don't set it up for a NIS domain
name that is already in use on your network. This may
disrupt the entire network service and make a lot of peo-
ple very unhappy, and very angry.
В настоящее время используются два NIS сервера, свободно
доступные для Linux, один содержится в yps пакете Tobias Reber's, и
другой в Peter Erikson's ypserv package. Это не должно иметь
значение, который Вы запускаете, независимо
от того, используете ли Вы NYS или NIS клиентский код, который
находится в libc в настоящее время. Во время этой записи, цифра для
обработки NIS подчиненных серверов, кажется, более полной в yps. Так что,
если Вы должны иметь дело с подчиненными серверами, yps мог бы быть лучшим
выбором.
После установки программы сервера (ypserv) в /usr/sbkn, Вы должны
создать каталог, который будет проводить отображение, регистрируемо
на Вашем сервере. При установке NIS области для brewery domain,
отображения шло бы к /var/yp/brewery. Сервер определяет обслуживало ли это
частную NIS область, проверяя есть ли каталог отображений. Если Вы
блокируете обслуживание для некоторой NIS области, удостоверитесь удален
ли каталог также.
Отображения обычно сохраняются в картотеках DBM, чтобы ускорить
поиски. Они создаются от главы, регистрирующей использование программ,
называемой makedbm (для Tobias' сервер) или dbmload (для сервера
Peter's). Они не могут быть изменчивыми. Преобразовани е главы
регистрирует в форму parseable dbmload обычно требуя некоторого awk
или sed, которые имеют тенденцию, чтобы быть немного утомительными к
типу. Следовательно, Peter Eriksson's Ypserv пакет содержит Формирование
который делает всю работу за Вас. Вы должны установить это как
- 184 -
Формирование файла в вашем отображении, и отредактировать это, чтобы
отразить отображения которые Вы хотите распределить. В вершине
файла Вы наход услуги Ypserv. По умолчанию, просмотры линии что -
нибудь вроде этого:
all: ethers hosts networks protocols rpc services passwd group netid
Если Вы не хотите производить ethers.byname и ethers.byaddr
отображения, например, просто удалите предпосылку эфиров из этого
правила.Чтобы проверить вашу установку, это может удовлетворять тому,
чтобы начать с только одного или двух отображении, подобно услугам. *
Отображения.
После редактирования Формирования файла, в то время как Вы
находитесь в каталоге отображений, набирите "make". Это автоматически
генерирует и устанавливать отображения. Вы должны удостовериться, чтобы
модифицировать отображения всякий раз, когда Вы изменяете главный файл,
иначе изменения останутся невидимыми для сети.
Следующий раздел объясняет, кгк конфигурировать NIS клиентский код.
Если ваша установка не работает, Вы должны пробовать выяснить или любые
запросы достигнут вашего сервера или нет. Если Вы точно определяете
команду -D, флажок линии к NYS серверу, то это печатает сообщения отладки
на консоли относительно всех входящих запросов NIS, и возвращенных
результатов. Они должны дать Вам подсказку относительно того, где задача
находится. Tobias' сервер не имеет никакой такой опци
11.5 Установка NIS Клиента с NYS
Через остаток от этой главы, мы опишем конфигурацию NIS клиента.
Ваш первый шаг должен быть - сообщить NYS который сервер
использован для NIS обслуживания, устанавливая это в файле конфигурации
/etc/yp.conf. Очень прост типовой файл для множества сети Winery's может
выглядеть следующим образом:
- 185 -
# yp.conf - YP configuration for NYS library.
#
domainname winery
server vbardolino
Первая формулировка сообщает всей NIS клиентуре, что они
принадлежат к Winery NIS области. Если Вы упускаете эту линию, NYS
использует название области, которой Вы приписывали вашу систему через
команду domainname. Сервер формулировки называется NIS сервером. Конечно,
IP адреса адресуются к vbardolino, и должны быть хостом в файле хоста; в
качестве альтернативы, Вы можете использовать адрес IP непосредственно с
формулировкой сервера.
В форме, показанной выше, команда сервера сообщает, чтобы NYS
использовал именованный сервер любой NIS области которой может быть. Если,
однако, Вы перемещаете вашу машину между различными NIS областями
часто, то Вы возможно захотите сохранить информацию для отдельных
областей в картотеке yp.conf. Вы можете иметь информацию относительно
серверов для различных NIS областей в Yp.conf, прибавляя NIS название
области к формулировке сервера. Для образца, Вы могли бы измен"типовой
файл для портативной ЭВМ, чтобы это выглядило подобно этому:
# yp.conf - YP configuration for NYS library.
#
server vbardolino winery
server vstout brewery
Это позволяет Вам выдать портативную ЭВМ в любой из двух областей,
просто при установке желательной NIS области при начальной загрузке
введите команду названия.
После создания этого базисного файла конфигурации, и уверенности
в том это - всемирно - читаемый, Вы запустить ваш первый критерий,
чтобы проверить, можете ли Вы подсоединиться к вашему серверу.
Удостоверитесь, что выбрано отображение вашего сервеа, подобно
- 186 -
hosts.byname, и испытанию, чтобы восстановить, используя ypcat утилиту.
Ypcat, подобно всем другим административным NIS инструментальным
средствам, должен жить в /usr/sbin.
# ypcat hosts.byname
191.72.2.2 vbeaujolais vbeaujolais.linus.lxnet.org
191.72.2.3 vbardolino vbardolino.linus.lxnet.org
191.72.1.1 vlager vlager.linus.lxnet.org
191.72.2.1 vlager vlager.linus.lxnet.org
191.72.1.2 vstout vstout.linus.lxnet.org
191.72.1.3 vale vale.linus.lxnet.org
191.72.2.4 vchianti vchianti.linus.lxnet.org
Вывод, который Вы получаете, должен быть на подобие вышепоказанного.
Если Вы получаете сообщение об ошибках взамен, которое говорит "Can't
bind to server which serves domain" или что-нибудь на подобие, затем
или NIS название области, которое не имеет сервер соответствия,
определенный в yp.conf, или сервер - unreachable по некоторым
причинам. В последнем случае, удостоверитесь в том, что ping множеству
производится положительный результат, и что это действительно запу Вы
можете проверить последний, используя rpcinfo, который должен произвести
следующий вывод:
# rpcinfo -u serverhost ypserv
program 100004 version 2 ready and waiting
11.6 Выбор правых отображений
Удостоверьтесь в том, что Вы можете достичь NIS сервера, Вы должны
решить который конфигурационный файл, чтобы заменить или увеличить с
NIS отображениями. Обычно, Вы захотите использовать NIS отображения
для множества и функций поиска пароля. Вышеупомяну тый особенно полезен,
если Вы не запускаете BIND. Последний разрешает всем
пользователям зарегестрироваться на их account из любой системы в NIS
области; это обычно требует разделения центрального /местного к Это
объяснено подробно в разделе 11.7 ниже. Другое отображение, подобно
services.byname, не такое драматическое увеличение, но сохраняют Вас
- 187 -
от некоторой работы редактирования, если Вы устанавливаете любые
сетевые приложения которые используют сервисное название, то это не в
стандартном файле услуг.
Вообще, Вы хотите иметь некоторую свободу выбора когда поиск-
функция использует локальные файлы, и когда это делает запрос NIS
сервера. NYS позволяет Вам сконфигурировать порядок, в котором функция
обращается к этим услугам. Это управляется через картотеку
/etc/nsswitch.conf, который замещает обслуживание названия, но
конечно не ограничивает название обслуживание. Для любой из функций
поиска данных это содержит линию, именующие услуги, чтобы использовать.
Правильный порядок услуг зависит от типа данных. Это вряд ли
то, что services.byname отображение будет содержать отличие входов
из тех в локальном файле услуг; это может только содержать больше. Так
хороший выбор может быть, чтобы сделать запрос локальных файлов сначала, и
проверять NIS только если сервисное название не было найдено. Hostname
информация, с другой стороны, может изменятся пченю часто, так, чтобы DNS
или NIS сервер всегда имел наиболее точный accoun файл сохран как
дублиррование, если DNS и NIS терпел неудачу. В этом случае, Вы захотели
бы проверить локальный последний файл.
Пример ниже показывает, как сконфигурировать gethostbyname
(2), gethostByaddr (2), и getservbyname функции (2) как описано выше. Они
будут перечисленны как услуги по очереди; если поиск идет хорошо, то
результат будет возвращен, иначе следующее обслуживание осуждено.
# small sample /etc/nsswitch.conf
#
hosts: nis dns files
services: files nis
Полный список услуг, которые могут использоваться с записью в
Nsswitch.conf файле показыны ниже. Фактические отображения, файлы,
серверы и вещи, которые делают запрос зависят от названия записи.
- 188 -
Nisplus или nis + использует NIS + сервер для этой области.
Локализация сервера получена из картотеки /etc/nis.conf.
Nis Использует текущий NIS сервер этой области. Локализация сервера
делал запрос, сконфигурированный в картотеке yp.conf как показано в
предыдущем разделе. Для записи множеств, отображения Hosts.byname и
hosts.byaddr делают запрос.
-176 -
dns использует DNS сервер. Этот служебный тип полезен только для
записи хоста. Сервера делающие запрос, все еще определяются в соответствии
cо стандартом resolv.conf файла.
files использует локальный файл, такой как /etc/hosts файл для хост
записи.
dbm ищет информацию из DBM файлов, размещенных в /var/dbm. Имя,
используемое для файла - соответствующего NIS отображение.
В настоящее время, NYS поддерживает следующие nsswitch.conf записи:
hosts,
networks, passwd, group, shadow, gshadow, services, protocols, rpc, и
др. Другие записи возможно могут быть добавленны.
Рисунок 11.6 показывает более полный пример, который демонстрирует
другую
&осогенность nsswitch.conf: ключевое слово [NOTFOUND=return] в записях
хостов сообщила бы NYS - вернуться, если желаемый пункт не был найден в NIS
или в DNS база данных. То есть NYS продолжит искать локальные файлы, только
если обращения к NIS и DNS серверам терпят неудачу по какой-либо другой
причине. Локальные файлы будут затем только использоваться при начальной
загрузке и как backup, когда NIS сервер выключен.
11.7 Использование passwd и группы Maps
Одно из главных приложений NIS находится в синхронизации пользователя
и account информации относительно всех множеств в NIS области. К концу, Вы
- 189 -
обычно хранит только малый локальный файл /etc/passwd, к которому
добавлена site-wide информация из NIS отображений. Однако, просто
предоставления возможности NIS поиска для этого обслуживания в
nsswitch.conf не вполне достаточно.
Полагаясь на информацию пароля, распределенную NIS, Вы сначала должны
удостовериться, что числовая идентичность пользователя всех пользователей,
которые у Вас есть в Вашем локальном passwd файлесоответствуют идеи NIS
сервера относительно идентичности пользователя. Вы возможно захотите
использовать это для других целей также, подобно установке NFS значений от
других хостов на вашей сети.
# /etc/nsswitch.conf
#
hosts: nis dns [NOTFOUND=return] files
networks: nis [NOTFOUND=return] files
services: files nis
protocols: files nis
rpc: files nis
Рисунок 17. Примерный nsswitch.conf файл.
Если любая из числовых идентичности в /etc/passwd или /etc/group
отклоняется от тех, которые в maps, то Вы должны скорректировать файл
ownerships для всех файлов, которые принадлежат этому пользователю. Сначала
Вы должны заменить все uids и gids в passwd и в группах новых значений;
затем найдите вуе фвйлы, которые принадлежат пользователям и былы только
что изменены, и в заключение замените их ownerships. Примите новости
используемые для того, чтобы иметь идентичность пользователя была бы 9, и
okir имел бы идентичность пользователя 103, которые были заменены на
некоторое другое значение; Вы могли бы затем выпорлнить следующие команды:
# find / -uid 9 -print >/tmp/uid.9
# find / -uid 103 -print >/tmp/uid.103
# cat /tmp/uid.9 | xargs chown news
- 190 -
# cat /tmp/uid.103 | xargs chown okir
Важно то, что Вы выполняете эти команды с новым, установленным passwd
файлом, и что Вы собираете все имена файлов прежде, чем Вы изменените
ownership любого из них. Для того, чтобы модифицировать ownerships группы
файлов, Вы должны использовать похожую команду.
Сделав это, численный uid's и gid's на вашей системе согласиться с
теми хостами, которые расположенны в Вашей NIS области. Следующий шаг будет
- прибавить линии конфигурации к nsswitch.conf, который включают NIS поиски
для пользователя и информации группы:
# /etc/nsswitch.conf - passwd and group treatment
passwd: nis files
group: nis files
Это заставляет команду входа в систему, и всех ее друзей сначала
сделать запрос NIS maps, когда пользователь пробует log in, и если этот
поиск терпит неудачу - обратно обращается к локальным файлам. Обычно, Вы
удалите почти всех пользователей из Вашего локального файла, и только
оставите записи для root и generic accounts подобно почте. Это потому, что
некоторые насущные задачи системы могут требовать к map uids имя
пользователя или наоборот. Например, административный cron job может
выполнить команду su, для того чтобы временно стать новостями, или UUCP
подсистема может отправлять по почте отчет состояния. Если новости и
uucp не имеют вход в локальный файл passwd, то эти jobs будут, к сожалению,
терпеть неудачу в течение&NIS"brownout.
Имеются две большие проблемы: с одной стороны, установка, как уже
было описано в начале, до сих пор работает только для наборов программ
входа в систему, которые не используют теневой пароль, подобно тем, что
включены в util-linux пакет. Путаница при использовании теневых паролей с
NIS будет объяснена ниже. С другой стороны, команды входа в систему - не
единственые, которые обращаются к passwd файлу - посмотрите на команду ls,
которую большинство людей использует почти постоянно.
- 191 -
При выполнении длинной распечатки, ls выделит символические имена для
пользователя и группу владельцев файла; то есть для каждого uid и gid это
представляет собой целую схватку, это должно сделать запрос на NIS сервер,
только один раз. Это ужасно замедлит выполнение, если ваша локальная сеть -
clogged, или, еще хуже, когда NIS сервер не на той же самой сети, для
этого датаграммы должны пройти через программу маршрутизации.
Но пока это еще не вся история. Вообразите, что случится если
пользователь захочет изменить свой пароль. Обычно, она вызовет passwd,
который считает новый пароль и модифицирует локальный файл passwd. Это
невозможно сделать с NIS, так как с тех пор файл локально больше не
доступен, но если пользователи подсоединились к NIS серверу, и вдруг
захотели изменить пароль, то дляч этого, к сожалению нет опции. Поэтому,
NIS обеспечивает отпуск в замене для passwd, называемого yppasswd, который
делает аналогичную вещь в присутствии NIS. Для изменения пароля на хост
сервере, но в контакт с yppasswdd daemon на том же самом хосте через RPC, и
обеспечивает его модифицируемой информацией пароля. Обычно, Вы
устанавливаете yppasswd для нормальной программы, делая что - нибудь вроде
этого:
# cd /bin
# mv passwd passwd.old
# ln yppasswd passwd
В то же самое время Вы должны установить rpc.yppasswdd на сервер и
запустить его из rc.inet2. Это эффективно слроет любые искожения NIS от
ваших пользователей.
11.8 Использование NIS с Shadow Support
Не имеется никакой NIS поддержки для мест, которые используют теневой
вход в систему набора программ. John F. Haugh, автор теневого набора
программ, недавно выпущенной версии теневых библиотечных функций, описанных
GNU библиотекой GPL к comp.sources.misc. Это уже имеет некоторую поддержку
- 192 -
для NIS, но она пока еще не полна, и файлы пока еще не добавлены к
стандарной библиотеке для C. С другой стороны, при публикации информации из
/etc/shadow через NIS вид поражения цели теневого набора программ.
Хотя NYS функции поиска пароля не используют shadow.byname map или
что - либо аналогичное, очевидно NYS поддерживает использование локального
/etc/shadow файла. Когда NYS реализация getpwnam обращается к просмотру
информации, связанной с данным login именем, средства, точно определенные
passwd записью в nsswitch.conf делают запрос. Nis обслуживание будет просто
искать имя в passwd.byname map на NIS сервере. Обслуживание файлов, однако,
проверит, существует ли /etc/shadow, и если существует, то попробует
открыть это. Если ни один из файлов не присутствует, или если пользователь
не имеет привилегию root, то происходит возвращение к обычной работе поиска
информации пользователя в /etc/passwd. Однако, если теневой файл существует
и может быть открыт, то NYS извлечет пароль пользователя из shadow.
Getpwuid функция соответственно выполняется. В этом режиме, binaries,
компилируемый с NYS, будет иметь дело с локальной установкой теневого
набора программ.
11.9 Использование традиционного NIS кода.
Если Вы используете код клиента, который находится в стандарте libc,
то конфигурация NIS клиента немного отлична. С одной стороны, это
использует ypbind daemon для того, чтобы передать информацию для активных
серверов скорее чем считывать эту информацию из файла конфигурации. Вы
следовательно должны удостоверится в том, что бужет запущен ypbind при
начальной загрузке. Он должен быть вызван после установленной NIS области,
и RPC portmapper тоже должен быть запущен. Вызов ypcat нужен для того,
чтобы проверить работает ли сервер так, как он должен (см. выше).
Недавно, имелось некоторое число bug reports, которые сообщают, что
NIS терпит неудачу, сообщая при этом: "clntudp create: RPC: portmapper
failure - RPC: unable to receive''.
Это все из-за несовместимого изменения в способе, как ypbind
связывается с библиотечными функциям. Получая последние источники для NIS
- 193 -
утилит и перетранслируя их, должна быть исправлена эта задача. (5)
Также, способ традиционного NIS решает это, как соединить NIS
информацию с этим из локальных файлов отклоняемую от используемого NYS.
Например, чтобы использовать NIS отображение пароля, Вы должны включить
следующую линию где-нибудь в Вашем /etc/passwd map:
+: *:0:0:::
Это маркирует место где функции поиска пароля "вставляют" NIS
отображения. Вставка подобной линии (минус последние два двоеточия) в
/etc/group делают тот же самое для group. * maps. Для того, чтобы
использовать hosts.* maps, распределенные NIS, измените order line в
host.conf файле. Например, если Вы хотите использовать NIS, DNS, и файл
/etc/hosts (в том порядке), то Вы должны изменить эту линию на:
order yp bind hosts
Традиционная NIS реализация не поддерживает никакие другие
отображения в настоящее время.
5. Источник для yp-linux может быть получен из ftp.uniрaderborn.de в
каталоге /pub/Linux/LOCAL.
12. Сетевая файловая система (NFS)
NFS, the network file system, является возможно наиболее видной
сетью услуг, использующей RPC. Это позволяет обращаться к файлам на
отдаленных хостах точно
тем же самым способом, как пользователь обратился бы к любым"
локальным файлам. Сделано возможным смешением kernel функциональных
возможностей на клиентской стороне (которая использует отдаленную файловую
систему) и NFS сервер на стороне сервера (который обеспечивает файл
данных). Этот доступ к файлу полностью очевиден клиенту, и работает через
все разнообразие серверов и архитектуры хостов.
- 194 -
NFS предлагает ряд преимуществ:
+ Данные, к которым обращаются все пользователи, могут быть сохранены
на центральном хосте, с клиенами устанавливающими этот каталог при
начальной загрузке. Например, Вы можете сохранить все accounts
пользователей на одном хосте, и иметь все хосты на Вашем сетевом mount
/home от того хоста. Если оно установлено бок о бок с NIS, то пользователи
могут затем войти в любую систему, и все еще работать на одном множестве
файлов.
+ Данные, потребляющие большие количества дискового пространства
могут быть сохранены в единственном хосте. Например, все файлы и программы
относящиеся к LaTeX и METAFONT могут быть сохранены и поддерживаться в
одном месте.
+ Административно-управленческая информация может быть сохранена в
адинственном хосте. Нет нужды использовать rcp для того, чтобы установить
тот же самый глупый файл на 20 различных машин.
Linux NFS - в значительной степени работа Rick Sladkey, (1), кто
написал NFS
kernel код и большие части NFS сервера. Последний, выводил из unfsd
пространства пользователя NFS сервер, первоначально написанный Mark Shand,
и hnfs Harris NFS сервер, написанный Donald Becker.
Давайте теперь посмотрим том, как NFS работает: клиент может
запросить установить каталог от отдаленного хоста на локальном каталоге тем
же способом, и он может установить физическое устройство. Однако,
синтаксис, используемый для того, чтобы точно определить отличен ли
отдаленный каталог. Например, чтобы mount /home хост vlager к /users на
vale, администратор выпустил бы следующую команду на vale: (2)
"
1. Rick может быть найден в jrs@world.std.com.
# mount -t nfs vlager:/home /users
- 195 -
mount затем попробует соединиться с mountd, устанавленный с daemon на
vlager через RPC. Сервер проверит, разрешается ли vale повысить каталог, и
если так, вернет это к file handle. Этот handle файл будет использоваться
во всех последовательных запросах к картотекам ниже /users.
Когда кто -то обращается к файлу над NFS, kernel места RPC вызовут
nfsd (NFS daemon) на машине сервера. Это обращение берет handle файл, имя
файла, к которому обращаются, и user's user и идентичность группы как
параметры. Они используются в определении прав доступа к точно
определенному файлу. Чтобы предотвратить от несанкционированного чтения или
модифицирования файла, пользователь и идентичность группы должны быть теме
же самыми на обоих хостах.
На большинстве Un*x реализаций, NFS функциональные возможности обоих
клиентов и сервер выполнены как kernel уровень daemons, которые начаты из
пространства пользователя при начальной загрузке системы. Они - NFS daemon
(nfsd) на хосте сервера, и блок ввода - вывода Daemon (biod) выполняющийся
на клиентском хосте. Чтобы улучшить производительность, biod выполняет
асинхронный ввод - вывод, используя чтение - вперед и запись-назад; также,
несколько nfsd daemons обычно запускается совместно.
NFS реализация Linux, немного отлична в этом самом клиентском коде,
крепко объединена в файловой системе (VFS) уровень ядра и не требует
дополнительного управления через biod. С другой стороны код сервера
запускается полностью в пространстве пользователя, так, чтобы при запуске
нескольких копий сервера в одно и то же время было бы почти невозможным из-
за синхронизации. Linux NFS, в настоящее время также существует отсутствие
чтения - вперед и записи-назад, но Rick Sladkey планирует исправит этот
недостатолк в ближайшее время. (3)
Самая гольъая проблема с Linux NFS кодом - то, что Linux kernel
версии 1.0 не способен распределить память в кусках больших чем 4k; как
следствие, сетевой код не может обрабатывать датаграммы большие чем
приблизительно 3500 байтов после вычитания размера заголовка и т.д. Это
значит, что передача к и из NFS daemons выполняющейся на системах, которые
используют большие UDP датаграммы по умолчанию (например 8k на SunOS)
- 196 -
должны быть уменьшенны в размере искуственно. Этот причиняет вред
характеристике под влиянием некоторых обстоятельств. (4) Этот предел входит
в поздние Linux-1.1 ядра, и клиентский код был
модифицирован для того, чтобы пользоваться этим преимуществом.
2. Заметьте, что Вы можете опустить -t nfs аргумент, потому что mount
видит из двоеточия то, что это определяет NFS объем.
3. Задача с write-behind - то, что kernel буфер кэша индексирован
парами device/inode, и следовательно не может использоваться для nfs-
установленных файловых систем.
12.1 Подготовка NFS
Прежде, чем Вы можете использовать NFS, будь это сервер или клиент,
Вы должны удостовериться, что Ваше ядро имеет NFS поддержку, компилируемую
в. Более новые ядра для этого имеют простой интерфейс на proc файловой
системе, файл /proc/filesystems, который Вы можете отобразить используя
cat:
$ cat /proc/filesystems
minix
ext2
msdos
nodev proc
nodev nfs
Если nfs отсутствует из этого списка, то Вы должны скомпилировать
Ваше собственное ядро с включенным NFS. Конфигурирование kernel сетевых
опций объяснено в разделе " Kernel конфигурация " главы 4 ..
Для более старых ядер до 1.1 Linux, самый простой способ выяснять
имеет ли ваше ядро включенную NFS поддержку - фактически попробовать
установить NFS файловую систему. Для этого, Вы могли бы создать каталог
ниже /tmp, и&поптобовать установить локальный каталог на нем:
- 197 -
# mkdir /tmp/test
# mount localhost:/etc /tmp/test
Если эта попытка установки выдает сообщениее об ошибках выводя, "fs
type nfs no supported by kernel'', то Вы не должны делать новое ядро с
включенной NFS. Любые другие сообщения об ошибках полностью безобидны, так
как Вы пока еще не сконфигурировали NFS daemons на вашем множестве.
12.2 Установка NFS значения
4. Как мне объяснил Alan Cox: NFS спецификация требует сервер к
потоку при каждой записи на диск прежде, чем он успевает вернуть
подтверждение. Так как BSD ядра только способны к, установленным по размеру
страницей, записям (4K), записанным по 4 куска по 1k каждый в bsd-based
NFS, серверу получает в результате 4 операции записи по 4k каждый.
NFS значения (5) установлены таким же способом, как и обычные
файловые системы
установленны. Вы вызываете mount, используя следующий синтаксис:
# mount -t nfs nfs volume local dir options
Nfs значение дано как отдаленный хост: отдаленная директория. С тех
пор как эта совокупность условных знаков является уникальной в NFS файловых
системах, то Вы можете не учитывать nfs опцию -t.
Имеется ряд дополнительных опций, которые Вы можете точно определить
установив над mounting NFS значение. Они могут также быть даны -o
переключателем в командной строке, или в области опций /etc/fstab записей
для значения. В обоих случаях, составные опции отделены друг от друга
запятыми. Опции, точно определенные на командной строке всегда отменяют те,
что были даны в файле fstab.
Типовая запись в /etc/fstab могла бы быть такой:
- 198 -
# volume mount point type options
news:/usr/spool/news /usr/spool/news nfs timeo=14,intr
Этот значение может затем быть установлено при использовании
# mount news:/usr/spool/news
В отсутствии fstab записи, NFS устанавливает просмотр вызовов
большинства uglier. Например, предположим, что Вы устанавливаете home
каталоги Ваших пользователей
из машины, называемой moonshot, которая использует заданный по
умолчанию размер блока равный 4k для операции чтения - записи. Вы могли бы
уменьшить размер блока до 2k, чтобы подойти под размер Linux(овских)
датаграмм введя следующую команду:
# mount moonshot:/home /home -o rsize=2048,wsize=2048
5. Никто не говорит "файловая система", потому что здесь не
существует подходящей файловой системы.
Список всех допустимых опций полностью описан в руководстве по
Nfs(5), которая идет вместе с Rick Sladkey's NFS-aware mount tool,
который может быть найден в Util-linux пакете Rik Faith). Следующее -
незавершенный список тех, которые Вы возможно захотели бы использовать:
rsize=n и wsize=n - они точно определяют датаграмный размер,
используемый NFS
клиентурой при чтении и записи запросов, соответственно. В
настоящее время они определенны по умолчанию - 1024 байтам,
из-за предела на UDP размере датаграммы, описанном выше.
timeo=n - это устанавливает время (в десятках секунд), сколько NFS
клиент будет ждать запрос,
чтобы завершить работу. Значения по умолчанию - 0.7 секунды.
hard - точно маркирует этот объем как hard-mounted. Это включено по
- 199 -
умолчанию.
soft - soft-mount драйвер ( противоположный hard-mounted).
intr - позволяет сигнализировать о том, что надо прервать NFS вызов.
Полезно для прерывания выполнения, когда сервер не
отвечает.
Кроме rsize и wsize, все эти опции обращаются к клиенту, если сервер
стал временно недостижим. Они работают вместе следующим способом: всякий
раз, когда клиент ппсылвет запрос к NFS серверу, он ожидает, что операция
закончится после данного интервала (точно установленным в опции блокировки
по времени). Если никакого подтверждения не получено внутри этого
промежутка времени, то появится так называемая minor timeout
(незначительная остановка по времени), и операция повторится, но уже с
интервалом блокировки по времени вдвое большим. После достижения
максимальной блокировки по времени - 60 секунд, происходит глобальная
блокировка по времени.
По умолчанию, глобальная блокировка по времени заставит клиента
напечатать сообщение на консоль и начинать все снова. В принципе это может
продолжаться вечно. Значения, которые упрямо повторяют операцию до тех пор
пока сервер не становится доступным, называются hard-mounted. В
противоположность им, soft-mounted значения генерируют ошибку ввода -
вывода для вызова процесс всякий раз, когда происходит глобальная
блокировка по времени. Из-за того, что write-behind вводится буферным
кэшем, то это условие ошибки не распространяется непосредственно на процесс
прежде, чем это вызовет функцию записи 2 в следующий раз, так как программа
никогда не сможет убедиться в том что операция записи к soft-mounted
значению имела место вообще.
Поставили ли Вы hard- или soft-mount значение - это не только вопрос
вкуса, но также и то, что Вы должны сделать с тем сортом информации,
которую Вы хотите получить от этого значения. Например, если Вы
устанавливаете ваши Х программы NFS, Вы конечно не хотели бы, чтобы ваш X
сеанс шел бы "бешено" только потому, что кто -то привел сеть к останову,
- 200 -
запустив семь копий xv в одно и тоже время, или скажем, вытащив Ethernet
разъем на некоторый момент. Используя hard-mounting, Вы удостоверяетесь в
том, что ваш компьютер будет ждать, пока не появится возможность заново
восстановить контакт с вашим nfs-сервером. С другой стороны, non-critical
данные, типа nfs-mounted news partititons или FTP врхив может быть также
soft-mounted, так что это не повесит ваш сеанс в случае, если отдаленная
машина должна стать временно "недостигаемой", или просто быть выключенной.
Если ваша сетевая связь с сервером - flakey или проходит через программу
маршрутизации, то Вы может также увеличивать начальную блокировку по
времени, используя опцию timeo, или hard-mount значение, но позволяйте
сигнализировать прерывание вызова NFS, так чтобы Вы могли прервать любой
hanging file access.
Обычно, mountd daemon будет иным способом следить, которые каталоги
были установлены, и какими хостами. Эта информация может быть отображена
при использовании программы showmount, которая также включена в NFS пакет
сервера. Linux mountd не делает этого.
12.3 NFS daemon(область)
Если Вы хотите обеспечить NFS обслуживание другим хостам, то Вы
должны запустить nfsd и mountd daemons на вашей машине. Как rpc-основанные
программы, они не управляются inetd, но запускаются при начальной загрузке,
и регестрируют сами себя непосредственно с portmapper. Следовательно, Вы
должны удостовериться в том, что они запущенны только после того, как
rpc.portmap выполнилось. Обычно, Вы должны включить следующие две линии в
вашем rc.inet2 script:
if [ -x /usr/sbin/rpc.mountd ]; then
/usr/sbin/rpc.mountd; echo -n " mountd"
fi
if [ -x /usr/sbin/rpc.nfsd ]; then
/usr/sbin/rpc.nfsd; echo -n " nfsd"
if
Информация монопольного использования файлов NFS daemon обеспечивает
своей клиентуре, обычно содержащей только численного пользователя и
идентичность группы. Если и клиент и сервер подсоединят того же самого
- 201 -
пользователя и группу имен с этой самой численной идентичностью, то им
обязательно скажут разделить то же самое пространство uid/gid. Для примера,
когда Вы используете NIS, чтобы распределить passwd информацию всем хостам
на вашей LAN.
&
" В некоторых случаях, они не соответствуют. Достаточно
модифицированного uid's и gid's клиента, чтобы соответствовать таковому
серверу, Вы может использовать ugidd mapping daemon, чтобы работать
вокруг этого. Использование map daemon опцию объяснено ниже, Вы может
сообщить nfsd отобразить uid/gid пространство сервера к пространству
uid/gid клиента при помощи ugidd на клиента.
ugidd - rpc-основанный сервер, и запущен из rc.inet2 точно также как
и nfsd и mountd.
if [ -x /usr/sbin/rpc.ugidd ]; then
/usr/sbin/rpc.ugidd; echo -n " ugidd"
fi
12.4 файл экспорта
В то время как вышеупомянутые опции обращаются к NFS конфигурации
клиента,
имеется различное множество опций на стороне сервера при выборе
конфигурации
per-client. Эти опции должны быть установленны в /etc/exports файле.
По умолчанию, mountd не позволяет кому угодно устанавливать каталоги
из локального хоста, которое является довольно разумной позицией. Для того,
чтобы разрешить одному или большему количеству хостов установливать nfs
каталог, то это должно быть экспортированно, то есть должно быть определено
в файле экспорта. Типовой файл может выглядеть следующим образом:
# exports file for vlager
/home vale(rw) vstout(rw) vlight(rw)
/usr/X386 vale(ro) vstout(ro) vlight(ro)
- 202 -
/usr/TeX vale(ro) vstout(ro) vlight(ro)
/ vale(rw,no root squash)
/home/ftp (ro)
Каждая линия определяет каталог, и хост, которому позволенно
установить его. Имя хоста - обычно полностью квалифицированное название
области, но может содержать * и ? универсальные символы, которые действуют
способом при котором они действуют сомместно с Bourne оболочкой. Например,
lab*.foo.com соответствует lab01.foo.com также как и laber.foo.com. Если
никакое имя хоста не дано, как с каталогом /home/ftp в приоере выше, то
любому хосту позволено установить этот каталог.
При проверке клиентского хоста против файла экспорта, mountd будет
искать hostname клиента используя gethostbyaddr(2) вызов. С DNS, этот вызов
возвращает каноническиий hostname клиента, так что Вы должны удостовериться
в том не используется ли псевдонимы в экспорте. Без использования DNS,
возвращенное имя -
первый hostname, найденный в файле хоста, которая соответствует
адресу клиента.
Имя хоста сопровождается произвольным, отделенным запятой, списком
флагов, приложенных в скобках. Эти флаги могут принимать следующие
значения:
insecure - разрешает не-опознанный доступ из этой машины.
unix-rpc - требует unix-области RPC установление подлинности из этой
машины.Оно просто
требует, чтобы все запросы происходили из зарезервированного
internet порта (то есть номер порта должен быть меньше чем 1024). Эта
опция определена по умолчанию.
secure-rpc - требует secure RPC установления подлинности от этой
машины. Это пока еще
не осуществленно. См. Sun's документацию по Secure RPC.
- 203 -
kerberos - требует Kerberos установления подлинности на доступ из
этой машины. Это тоже
пока еще не осуществленно. См. MIT документацию по Kerberos
опознавательной системе.
root squash - это особенность защиты, которая отвергает super user на
точно
установленных хостах любых специальных прав доступа, отображая
запросы из uid
0 на клиенте к uid 65534 (-2) на сервер. Этот uid не должен
быть связан ни с каким пользователем.
no root squash - не делает запросы отображения из uid 0. Эта опция
включена по
умолчанию.
ro - устанавливает значение read-only на файловую архитектуру. Эта
опция включена по умолчанию.
rw - устанавливает значение rgad-write на файловую архитектуру.
link relative - преобразовывает абсолютные символьные связи (где link
contents начинается с наклонной черты вправо) в относительные связи вводя
необходимое число ../, чтобы добраться из каталога содержащего связь к root
на сервере. Эта опция имеет смысл только тогда, когда целая файловая
система хоста установлена, или некоторые из связей не могли бы быть нигде,
или даже хуже, файлы на которые они никогда не указывали.
Эта опция определена по умолчанию.
link absolute оставляет вся символьные связи какими они и были
(нормальное поведение для Sun-supplied NFS серверов).
map identity - map identity опция сообщает серверу, чтобы он принял
того клиента, который использует теже самые uid's и gid's как и сервер. Эта
- 204 -
опция определена по умолчанию.
map daemon Эта опция сообщает NFS серверу принять, что клиента и
сервер не разделяют то же самое пространство uid/gid. nfsd затем построит
список идентичности отбора между клиентом и сервером, запрашивая client's
ugidd daemon.
Ошибка, анализирующая файл экспорта сообщает daemon syslogd's
оборудованию всякий раз, когда nfsd или mountd запущен.
Заметьте, что имена хостов получены из IP адреса клиента обратным
отбором, так что Вы должны иметь правильно сконфигурированное решающее
устройство. Если Вы используете BIND и очень security-conscious, то Вы
должны включить spoof проверку в Вашем host.conf файле.
12.5 Linux Automounter
Иногда, это расточительно для установки всех NFS значений
пользователей, к которым возможно хотят обратиться.; или же из-за острого
числа зачений которые должны быть установленны, или из-за времени, которое
требовалось бы при запуске. Жизнеспособный вариантдля этого - так
называемый automounter. Это - daemon, которая атоматически и понятно
устанавливает любое NFS значение как необходимо, и неустанавливает их ,
если они не были использованны в течении некоторого времени. Одна из умных
вещей относительно automounter - то, что возможно установить определенное
значение из любых мест. Например, Вы можете сохранить копии Ваших Х
программ и файлов поддержки на двух или трех хостах, и все
другин хосты устанавленные через NFS. При использовании automounter,
Вы можете точно определить всех трех из них, чтобы быть установленными на
/usr/X386; automounter затем попробует установить любой из них, пока одна
из попыток установки не преуспевает.
Automounter, обычно используемый с Linux называется amd. Сначала он
был написан Jan-Simon Pendry и был перенесен на Linux Rick Sladkey. Текущая
версия amd-5.3.
- 205 -
Описание amd - вне этой главы; для хорошего описания, пожалуйста,
обратитесь к источникам; они содержат файл texinfo с очень подробной
информацией.
13. Управление Taylor UUCP
13.1 Хронология
UUCP был разработан в конце семидесятых Mike Lesk в AT&T Bell
Laboratories, чтобы обеспечить простое соединение по модему. Так как
большинство людей, которые хотят иметь email и новости Usenet на своей
домашней машине все еще связываются через модемы, UUCP стал очень
популярен. Хотя имеется много реализаций, разработанных для различных
аппаратных платформ и операционных систем, все они совместимы с высокой
степенью.
Однако, как это случилось с большинством программного обеспечения,
которое так или иначе стало "стандартом" за эти годы, нет такого UUCP,
который можно было бы назвать подлинным UUCP. Он подвергался постепенному
процессу эволюции начиная с первой версии, которая была разработана в
1976.В настоящее время имеются две основных разновидности, которые
отличаются в основном поддержкой аппаратных средств и конфигурацией.Крпме
них существуют различные реализации, немного отличающиеся деталями
элементами.
Одна разновидность - это так называемая " Версия 2 UUCP ", которая
датируется 1977 годом и реализована Mike Lesk, David A. Novitz, и Greg
Chesson. Она все еще используется, хотя и устарела. Недавние реализации
Версии 2 обеспечивают многие из возможностей более новой разновидности
UUCP.
Вторая разновидность была разработана в 1983, и обычно упоминается
как BNU (Basic Networking Utilities(базисные утилиты работы с сетями)),
HoneyDanBer UUCP, или HDB для краткости. Название получено из имен авторов,
P. Honeyman, D. A.Novitz, и B. E. Redman. HDB был задуман, чтобы устранить
некоторые из неточностей Версии 2 UUCP. Например, были добавлены новые
протоколы передачи, и буферный каталог был разбит так, что теперь имеется
- 206 -
каталог для каждого компьютера, с которым Вы связываетесь через UUCP.
Реализация UUCP, в настоящее время распространяемого с Linux - Taylor
UUCP 1.04, (1), является версией,которую описывает эта глава. Версия Taylor
UUCP 1.04 была выпущена в феврале 1993. Кроме традиционных файлов
конфигурации, Taylor UUCP может быть скомпилирована так , чтобы понимать
новый стиль - a.k.a. " Taylor " - файлы конфигурации.
Версия 1.05 была выпущена недавно, и скоро будет поставляться на
большинстве дистрибутивов. Различия между этими версиями обычно затрагивают
возможности, которые Вы никогда не будете использовать, так что Вы сможете
конфигурировать Taylor UUCP 1.05 используя информацию из этой книги.
1.Написано Ian Taylor, 1993.
С большинства дистрибутивов Linux, Taylor UUCP обычно компилируется
совместимым с BNU, или Taylor схемой конфигурации, или с обоими. Так как
последний намного более гибок, и, возможно, проще для понимания, чем
довольно часто запутанные файлы конфигурации BNU, ниже я буду описывать
схему Taylor.
Цель этой главы не в том, чтобы дать Вао исчерпывающее описание опций
командной строки для команд UUCP, а в том, чтобы дать Вам введение в
установку работающего узла UUCP. Первый раздел дает введение в то, как
UUCP осуществляет удаленное выполнение и передачу файла. Если Вы не новичок
в UUCP, Вы можете пропустить этот раздел и перейти к разделу 13.3, который
объясняет различные файлы, используемые для установки UUCP.
Мы примем, что Вы знакомы с пользовательскими программами набора
программ UUCP - uucp и uux. Для описания обратитесь пожалуйста к страницам
руководства.
Кроме общедоступных программ - uux и uucp, набор программ UUCP
содержит ряд команд, используемых только для административных целей. Они
используются для контроля траффика UUCP через ваш узел, удаления старых
регистрационных файлов, или для компиляции статистики. Они не будут описаны
здесь, потому что они периферийные к основным задачам UUCP. Кроме того, они
хорошо документированы и довольно легки для понимания. Однако, имеется
третий класс, который включает рабочие программы UUCP. Они называются
uucico (где cico обозначает copy-in copy-out), и uuxqt, которая выполняет
- 207 -
работы, посланные из удаленных систем.
13.1.1 Подробная информация о UUCP
Если Вы в этой главе не найдете то, что хотите, прочитайте
документацию,которая поставляется с пакетом. Это набор texinfo файлов,
которые описывают установку с использованием Taylor схемы конфигурации.
Texinfo может быть преобразован в DVI и GNU файлы информации, использующим
tex и makeinfo, соответственно.
Если Вы хотите использовать файлы конфигурации BNU (или даже Версии
2), есть очень хорошая книга - " Управление UUCP и Usenet " ([GETST
"reilly-uucp"]). Другой хороший источник информации об UUCP для Linux -
Vince Skahan's UUCP-HOWTO , который можно взять на comp.os.linux.announce.
Имеется также newsgroup для обсуждения UUCP - comp.mail.uucp. Если у
Вас есть специфические вопросы о Taylor UUCP, может быть лучше задать их
тжм, чем на группах comp.os.linux.
13.2 Введение
13.2.1 Обзор Передач UUCP и удаленного запуска
Ключ к пониманию UUCP - понятие задачи. Каждая передача, которую
пользователь инициализирует с помощью uucp или uux, называется задачей.
Она состоит из программы,которая будет выполнена на удаленной системе, и
набора файлов, которые будут перемещены между системами. Одна из этих
частей может отсутствовать.
Например,примем, что на вашей ЭВМ Вы выдали следующую команду,
которая заставляет UUCP копировать файл netguide.ps на ЭВМ pablo, и
выполнить команду lpr, чтобы напечатать файл.
# $ Uux -r pablo! Lpr! Netguide.ps
UUCP не вызывает удаленную систему немедленно, чтобы выполнить задачу
(иначе Вы могли это сделать kermit). Вместо этого он временно сохраняет
описание задачи на удаленной системе. Это называется буферизацией задачи.
Каталог, в котором сохраняется задача,называется буферным каталогом и
- 208 -
обычно находится в /var/spool/uucp. В нашем примере, описание задачи
содержало бы информацию относительно удаленной команды, которая будет
выполнена (lpr), пользователя, который запросил выполнение, и пары других
предметов. В дополнение к описанию задачи, UUCP должен сохранить входной
файл (netguide.ps).
Точное расположение и наименование буферных файлов может изменяться
в зависимости от некоторых опций времени компиляции. HDB-совместимые UUCP
вообще сохраняют буферные файлы в каталоге, именованном
/var/spool/uucp/site, где site - имя удаленной машины. Скомпилированный для
Taylor конфигурации, UUCP создаст подкаталоги в /var/spool/uucp/site для
различных типов буферных файлов.
Через определенные интервалы UUCP связывается с удаленной системой.
Когда соединение установлено, UUCP передает файлы, описывающие задачу, плюс
все входные файлы. Входящие задачи не будут выполнены немедленно, а только
после разрыва уоединения . Это делает программа uuxqt, которая также
заботится о пересылке любых задач, если они предназначены для другой
машины.
Для различия между важными и менее важными задачами, UUCP с каждой
задачей связывает уровень приоритета . Это - один знак, в пределах от 0 до
9, от А до Z, и через z, в уменьшающемся старшинстве. Почта обычно
записывается в буферный файл с приоритетом B или C, в то время как новости
записываются с приоритетом N. Работы с более высоким приоритетом передаются
раньше. Приоритеты могут быть назначены используя опцию -g при вызове uucp
или uux.
Вы можете также запретить передачу задач с приоритетом ниже данного в
определенное время. Это также называется максимальным приоритетом буфера,
позволяемым в течение диалога ( по умолчанию z). Обратите внимание на
терминологическую неоднозначность : файл перемещен только, если он имеет
приоритет выше максимального приоритета буфера.
13.2.2 Внутренние работы uucico
Чтобы понять, почему uucico должен знать некоторые вещи, приведем
быстрое описание того, как фактически происходит соединение с удаленной
системой.
Когда Вы выполняете uucico -s система из командной строки, сначала
происходит физическое соединение.Принимаемые действия зависят от типа
открываемого соединения. Например, при использовании телефонной линии, она
- 209 -
должна найти модем, и набрать номер.Если используется TCP, uucico должна
вызвать функцию gethostbyname (3), чтобы преобразовать имя в сетевой адрес,
выяснить, какой порт открывать, и связать адрес с соответствующим
гнездом(socket).
После того, как соединение было установлено, должна выполниться
процедура идентификации пользователя. Она состоит из запроса удаленной
системой, имени, и, возможно, пароля.Все это называется "login chat".
Процедура идентификации выполняется или обычным getty/login набором
программ, или - на гнездах TCP - непосредственно uucico . Если разрешение
на вход получено, удаленная систзма запускает uucico. Локальная копия
uucico, которая инициализировала соединение, назначается главной, удаленная
- подчиненной.
Затем следует фаза рукопожатия(handshake phase): главный посылает
cвое hostname и некоторые флаги. Подчиненная система проверяет, имеет ли
hostname право входить в неё, посылать и принимать файлы, и т.д.. Флаги
описывают (кроме всего прочего) максимальный приоритет буферизации
передаваемых файлов. Если возможно, счет диалога, или проверка порядкового
номера обращения происходит здесь. Благодаря этой возможностью, оба
поддерживают счет успешных соединений, которые сравниваются. Если они не
соответствуют, рукопожатиe прерывается. Это помогает защищать себя от
самозванцев.
В заключение, uucico пытаеться установить общий протокол передачи.
Этот протокол обеспечивает способ перемещения данных, проверку на
непротиворечивость, и повторную передачу в случае ошибки. Имеется
потребность в различных протоколах из-за отличающихся типов обеспечиваемых
соединений. Например, телефонные линии требуют " безопасный " протокол,
который включает в себя жестокую проверку ошибок, в то время как передача
TCP по существу надежна и может использовать более эффективный протокол,
который предшествует наиболее тщательной проверке ошибок.
После того,как рукопожатие устновлено,начинается фактическая фаза
передачи . Обе системы включают выбранный драйвер протокола. Драйверы,
возможно, выполняют свою специфическую инициализацию.
Сначала главная система посылает все файлы, поставленные в очередь
для передачи на удаленную систему, приоритет буферизации которых является
- 210 -
достаточно высоким. Когда передача завершена, она сообщает об этом
подчиненной системе, подчиненный может теперь отключиться или принимать
диалог. Это - изменение ролей(назначений): теперь удаленная система
становится главной, а локальная становится подчиненной. Новый хозяин теперь
посылает файлы. Когда передача завершена, обе программы обмениваются
заключительными сообщениями, и закрывают соединение.
Мы не будем вникать во все детали: пожалуйста обратитесь или к
исходным текстам или к любой хорошей книге об UUCP для этого.Есть также
действительно старинная статья, касающаяся сети, написанной David A.
Novitz, которая дает детализированное описание протокола UUCP. Taylor UUCP
FAQ также обсуждает некоторые подробности UUCP. Это всегда есть на
comp.mail.uucp.
13.2.3 Опции командной строки uucico
Этот раздел описывает наиболее важные опции командной строки для
uucico. Для полного списка, пожалуйста обратитесь к странице руководства
uucico(1).
-s системный вызов по имени системы, если нет запрета в
соответствии c ограничениями времени обращения.
-S системный вызов по имени системы безоговорочно.
-r1 запукает uucico в режиме главного. Это опция по
умолчанию,когда -s или -S заданы. Опция -r1 заставляет
uucico пробовать вызывать все системы в sys", если не
запрещено обращение и не настало ограничение
времени повторения.
-r0 запускает uucico в режиме подчинённого. Это - значение по
умолчанию,когда -s или -S не заданы. В непривилегированном
режиме, любой стандартный ввод - вывод соединяется с
последовательным портом, порт TCP используется если опция -p
задана.
- 211 -
-x typy, -X type Включают отладку заданного типа.Несколько типов
могут быть разделены запятой.Следующие типы допустимы:
abnormal, chat,handshake,uucp-proto, proto, port, config, spooldir,
execute,incoming, outgoing. Использование all включает все опции
Для совместимости с другими реализациями UUCP,взамен может быть
определен номер, который включает отладку для первых n предметов"из
вышеупомянутого списка.
Отладочные сообщения будут регистрироваться в файле DEBUG в
/var/spool/uucp.
13.3 Файлы Конфигурации UUCP
В отличие от более простых программ передачи файлов, UUCP был
разработан, чтобы обрабатывать все передачи автоматически.Если только все
установлено правильно, ежедневное вмешательство администратора не
необходимо.Вся необходимая информация сохраняется в паре файлов
конфигурации, которые постоянно находятся в каталоге /usr/lib/uucp.
Большинство этих файлов используется только при запросе снаружи.
13.3.1 Нежное Введение в Taylor UUCP
Сказать, что конфигурация UUCP является тяжелой,было бы замалчиванием
темы.Это - действительно запутанная тема, и иногда краткий формат файлов
конфигурации не делает вещи проще (хотя формат Talyor почти просто читается
по сравнению с более старыми форматами в HDB или Версии 2).
Что бы дать Вам понять как взаимодействуют все эти файлы, мы
представим наиболее важное, и будем иметь просмотр в типовых входах этих
файлов. Мы не будем объяснять все подробно; более точные сведения даны в
отдельных разделах ниже.Если Вы хотите установить на вашу машину UUCP,
лучше всего начать с некоторых типовых файлов, и адаптировать их
постепенно.Вы можете выбирать из предложенного ниже,или того,что есть в
вашем дистрибутиве Linux.
Все файлы,описанные в этом разделе хранятся в /usr/lib/uucp или в его
подкаталогах.Некоторые дистрибутивы Linux содержат UUCP binaries, которые
поддерживают и HDB и Taylor конфигурации,и используют различные
- 212 -
подкаталоги для каждого набора файлов конфигурации.Есть обычно README файл
в /usr/lib/uucp.
Чтобы UUCP работал правильно, эти файлы должны принадлежать
собственно пользователю uucp. Некоторые из них содержат пароли и номера
телефона, и следовательно должны иметь прва доступа 600. (2)
Центральный файл конфигурации UUCP - /usr/lib/uucp/config
используется, чтобы установить общие параметры.Наиболее важный из них (и
теперь, единственный), является именем UUCP вашей ЭВМ. В Виртуальном
Пивоваренном заводе, они используют vstout как их ворота UUCP:
# /usr/lib/uucp/config - основной файл конфигурации UUCP
hostname vstout
Следующий важный файл конфигурации - sys файл.Он содержит всю
системно-привязанную информацию об участках сети, с которыми Вы связаны.Она
включает имя участка(ЭВМ),и информацию относительно связи
непосредственно,типа номера телефона при использовании связи
модема.Типичный cценарий (сценарий - коммандный файл - script,далее
сценарий) для модемной связи с pablo:
# /usr/lib/uucp/sys - имена соседей UUCP
#system pablo
system pablo
time Any
phone 123-456
port serial1
speed 38400
chat ogin: vstout ssword: lorca
Port задает порт,который нужно использовать,time определяет время в
которое система может вызываться.Сhat описывает сценарии входа в систему -
последовательность строк,которыми нужно обменяться,чтобы uucico
зарегистрировал в pablo.Мы опишем сценарий входа позже.Команда порта не
называет конкретный файл устройства типа /dev/cua1,но оба имени входят в
файл port.Вы можете назначить любое походящее имя.
2.Обратите внимание, что хотя большинство команд UUCP должно
устанавливать setuid для uucp, Вы должны удостовериться, что программа
uuchk - нет. Иначе пользователи будут способны посмотреть пароли,даже если
они имеют режим 600.
- 213 -
Файл port содержит информацию о связи непосредственно.Для модемной
связи он описывает специальный файл устройства, который нужно использовать,
скорость,и тип оборудования, соединенного с портом.Пример ниже описывает
/dev/cua1 (a.k.a. COM 2),с которым соединен NakWell модем способный к
перздачз на скорости до 38400bps.Имя порта должно соответствовать
имени,данному в файле "sys".
# /usr/lib/uucp/port - UUCP ports
# /dev/cua1 (COM2)
port serial1
type modem
device /dev/cua1
speed 38400
dialer nakwell
Информация,имеющая отношение к программам набора номера
cохраняетсяняется в другом файле,называемом dial.Для каждого типа программы
набора номера он содержит последовательность команд,которые требуются,чтобы
вызвать удаленную машину по номеру телефона.Все это задано как chat
script(сценарий дружеской системы).Пример для вышеупомянутого NakWell мог
бы выглядеть следующим образом:
# /usr/lib/uucp/dial - per-dialer information
# NakWell modems
dialer nakwell
chat "" ATZ OK ATDT\T CONNECT
Строка, начинающаяся с chat определяет дружескую беседу
модема,которая является последовательностью команд, посланных и полученных
от модема, чтобы инициализировать это и делать это,набирают желательный
номер."\T" последовательность будет заменен на номер телефона uucico.
Чтобы в общем показать Вам, как uucico работает с этими файлами
конфигурации, предположим, что Вы дали команду:
$ Uucico -s pablo
Рисунок 18. Взаимодействие Файлов Конфигурации Taylor UUCP.
Первым делом uucico ищет pablo в "sys" файле.Из строки в файле "
- 214 -
sys" для pablo она видит,что должна использовать serial1 порт для установки
соединения.Файл port сообщает ей, что serial1 является портом модема,и что
есть подключенный модем NakWell .
Uucico теперь ищет набор кода,описывающий NakWell модем,и найдя
первый,открывает /dev/cua1 последовательного порта и выполняет "дружескую
беседу" программы набора номера.То есть поуылазт "ATZ", ждет "OK " в
ответ,и т.д.. При столкновении с строкой "\T", он заменяет номер телефона
(123 - 456) извлеченный из системного файла.
После того,как соединение было установлено,Uucico возвращается к
файлу "sys" и выполняет дружескую беседу входа в систему(login chat).В
нашем примере она ждет приглашения "login: " затем послает имя
пользователя (neruda), затем ждет приглашения "password:" ,и посылает
пароль "lorca".
После завершения разрешения, удаленная система активизирует
собственный uucico.Они прводят фазу рукопожатия(handshake phase),описанную
в предыдущем разделе.
Связи и зависимости файлов конфигурации также показаны на рисунке
13.3.1.
13.3.2 Что Должен Знать UUCP
Прежде, чем Вы начинаете писать файлы конфигурации UUCP, Вы должны
уяснить некоторую необходимую информацию.Сначала Вы будете должны
выяснить,к какому последовательному порту присоединен ваш модем.Обычно
порты (DOS) COM1 - COM4 отображают на специальные файлы устройств /dev/cua0
- /dev/cua3.Большинство дистрибутивов, напр. Slackware,создают /dev/modem
ссылку как связь с соответствующим cua * файлом устройства,и конфигурируют
kermit,seyon и т.д. использовать этот обобщенный файл.В этом случае,Вы
должны также использовать /dev/modem в вашей конфигурации UUCP.
Причина для этого то,что все программы используют так называемые
файлы блокировки,чтобы сообщить,когда последовательный порт
используется.Имена этих файлов блокировки - конкатенация строки LCK .. и
имени файла устройства,например LCK .. cua1.Если программы используют
различные имена для одного устройства,они будут быть не в состоянии
распознавать чужие файлы блокировки.Как следствие, они прервут чужие сеансы
начатые в то же самое время.Это - не маловероятное событие,если Вы
планируете чтобы ваш UUCP использовал crontab.Подробности настройки
последовательных портов см. в главе 5 ..
- 215 -
Затем Вы должны выяснить с какой скоростью ваш модем и Linux могут
связыввться и установить максимальную эффективную скорость
передачи.Эффективная скорость передачи может быть намного выше чем
физическая скорость вашего модема.
Например, много модемов посылают и получают данные со скоростью
2400bps (биты в секунду).При использовании протоколов сжатия типа V.
42bis,фактическая скорость передачи может достигать 9600bps.
Конечно,если вы хотите,чтобы UUCP cделал что-нибудь,Вам для вызова
нужен номер телефона системы.Также Вам нужен идентификатор для входа в
систему и возможно пароль для удаленной машины. (3)
Вы также должны знать,как регистрироваться в системе. Например,Вы
должны нажать КЛАВИШУ BREAK прежде, чем подсказка входа в систему
появляется? Что отображается: "login:" или "user:"? Это необходимо для
создания сценария дружеской беседы(chat script),который описывает uucico,
как регистрироваться.Если у Вас возникают затруднения,пробуйте вызывать
систему программой терминала подобно kermit или minicom,и записать
точно,что Вы делаете.
13.3.3 Наименование Места
Как и при работе с TCP/IP сетями,ваша главная ЭВМ(host) должна
иметь имя для UUCP сетей. Пока Вы просто хотите использовать UUCP для
передач файлов или соединения извне непосредственно,или по локальной сети,
это имя не должно удовлетворять никакие стандартам. (4)
3. Если вы собираетесь пробовать UUCP, получите телефонный номер
ближайшего архива. Запишите имя и пароль - они общеизвестны. В
большинстве случаев они что - нибудь вроде /uucp uucp или
nuucp/uucp.
4. Единственое ограничение - то, что имя не должно быть больше чем
7 символов, чтобы не путать ЭВМ с файловыми системами, которые
накладывают узкое ограничение на имя файла.
Однако, если Вы используете UUCP для почты или новостей, Вы должны
подумать о наличиb имени, зарегистрированног в UUCP Mapping project . UUCP
Mapping psojectо описан в главе 14 .., Даже если Вы делите домен, Вы можете
получить официальное имя UUCP для вашего участка сети.
- 216 -
Часто, люди выбирают свое UUCP имя, чтобы соответствовать первому
компоненту имени домена. Предположим, что адрес домена вашей ЭВМ -
swim.twobirds.com, тогда имя главной ЭВМ UUCP было бы swim.Обычно именно
так и бывает.Конечно, Вы можете также использовать любое UUCP имя.
Однако не стоит использовать неквалифицированное имя в адресе
почты, пока Вы не зарегистрировали его как ваше официальное имя UUCP. (5)
В лучшем случае, почта на незарегистрированную ЭВМ UUCP отправится
в мусорную корзину(big black bit bucket). Если Вы используете имя, уже
присвоенное некоторому другому месту, эта почта не будет направлена к тому
месту, и причине начальник почтового отделения никакой конец головных
болей.
По умолчанию, набор программ UUCP использует hostname как имя UUCP .
Это имя обычно устанавливается в сценарие /etc/rc.local. Если ваше имя UUCP
отлично от того, что Вы устанавливаете главным имя , Вы должны использовать
опцию hostname в файле конфигурации, чтобы сообщить uucico о вашем имени
UUCP. Это описано ниже.
13.3.4 Taylor Файлы Конфигурации
Теперь мы вернемся к файлам конфигурации. Taylor UUCP получает
информацию из следующих файлов:
config -Это основной файл конфигурации. Вы можете определить ваше
имя UUCP здесь.
sys - описывает все участки сети, известные Вам. Для каждого
участка, он определяет имя, в какое времяе вызывать его, какой номер
набрать , какое устройство использовать, и как регистрироваться.
port - описывает все доступные порты, вместе с обеспечиваемой
скоростью и программами соединения, которые нужно использовать.
5. UUCP Mapping Project регистрирует все UUCP hostnames во всем
мире и проверяет их на уникальность. Чтобы зарегистрировать ваше имя UUCP,
спросите maintainers ЭВМ, которжя ограбатывает вашу почту; они помогут
Вам с этим.
- 217 -
dial - Описывает программы набора номера, используемые, чтобы
установить телефонное соединение.
Dialcode Содержит расширения для символического сода набора
(dialcodes).
call Содержит имя входа в систему и пароль, который нужно
использовать при вызове системы. Редко используется.
Passwd Содержит имена входа в систему, и системы паролей
используемые при регистрации . Этот файл используется
только, когда uucico делает собственную проверку пароля.
Taylor файлы конфигурации состоят из строк, содержащих пары ключевое
слово - значение. Знак мусора представляет комментарий ,действующий до
конца строки. Чтобы использовать знак мусора просто так , Вы можете ввести
его с наклонной чертой влево( with a backslash).
Есть очень много опций, которые Вы можете изменять в этих файлах
конфигурации. Мы не можем описать все параметры здесь, и заденем лишь
наиболее важные.С их помощью вы сможете сконфигурировать модемную связь
UUCP. Дополнительные разделы описывают изменения, необходимые, если Вы
хотите использовать UUCP поверх TCP /IP или поверх последовательного
соединения. Полная описание дается в Texinfo документах, которые
распространяются вместе с исходным текстом Taylor UUCP.
Если Вы думаете, что сконфигурировали вашу систему UUCP полностью,
можете проверить вашу конфигурацию, используя uuchk (находится в
/usr/lib/uucp). Uuchk читает ваши файлы конфигурации, и печатает
детализированный отчет о значениях , используемых для каждой системы.
13.3.5 Общие Опции Конфигурации - config файл
Скорее всего Вы вообще не будете использовать этот файл, чтобы
- 218 -
описать UUCP hostname. По умолчанию, UUCP использует имя, которое Вы
устанавливаете командой"hostname, но вообще это хорошая идея -
установить имя UUCP явно. Типовой config файл показывается ниже:
# /usr/lib/uucp/config - UUCP main configuration file
Hostname vstout
13.3.6 Как сказать UUCP о других системах - sys Файл
Файл sys описывает системы, о которых ваша машина знает. Anentry
представляется ключевым словом системы; последующий выстраивает в линию к
следующей директиве системы, детализируют параметры, специфические для того
места. Обычно, вход системы определит параметры типа номера телефона и
дружеской беседы входа в систему.
Параметры перед самими первыми значениями по умолчанию набора строки
системы, используемыми для всех систем. Обычно, Вы установите протокол
paramters и т.п. в разделе значений по умолчанию.
Наиболее важные элементы записи подробней описаны ниже .
13.3.6.1 Имя Системы
Каждое имя системы может появляться более только один раз. Если Вы
хотите использовать несколько наборы конфигураций для той же самой системы
(типа различных номеров телефона uucico, должен пробовать по очереди), Вы
можете определять альтернативы. Альтернативы описаны ниже.
6. Старая Версия 2 UUCP не делает широковещательной передачи имени в
начале вызова; однако более новые реализации (а также и Taylor UUCP)
делают это.
13.3.6.2 Номер телефона
Если связь с удаленной системой достигается по телефонной линии, поле
телефона определяет номер, который модем должен набрать для связи. Он может
содержать отдельные лексемы, интерпретируемые процедурой набора uucico's.
- 219 -
Знак '=' означает " ждать вторичный тон набора кода", '_' генерирует
паузу в одну секунду. Например, некоторые телефонные станции сбрасывают,
если Вы не делаете паузу между набором префиксного кода и номера
телефона.
[Я не знгю соответствующий Английский термин для этого , но Вы
знаете, что иногда на частной внутренней телефооной станции компании Вы
должны набрать 0 или 9, чтобы получить выход наружу.]
Любая встроенная символьная строка может использоваться, чтобы скрыть
место-зависимую информацию(например код области). Любая такая строка
транслируется с помощью файла dialcode. Предположим, что Вы имеете
следующий dialcode файл:
# /usr/lib/uucp/dialcode - dialcode translation
Bogoham 024881
Coxton 035119
С такими определениями Вы можете использовать номер телефона типа
Bogoham7732 в файле sys, это делает все немного проще.
13.3.6.3 Опции Port и Speed
Опции Port и Speed используется, чтобы выбрать устройство,
используемое для вызова удаленной системы, и установки максимального
быстродействия. (7) вход системы может использовать или опцию единственные,
или обе опции в конъюнкции. При поиске подходящего устройства в файле port,
только те порты ,могут быть выбраны, которые соответствуют имени порта
и(или) диапазону скоростей.
Вообще, использование опции speed должен удовлетворить. Если Вы
имеете только одно последовательное устройство, описанное в port, uucico
будет всегда выбирать правильно, во всяком случае, так что Вы только должны
дать этому желательное быстродействие. Если у Вас несколько модемов,
присоединенных к вашей системе, Вы все еще часто не хотите к.
7. Скорость в бодах Вашего tty (телетайпа) должна быть по крайней
мере так же высока, как максимально возможная скорость передачи.
- 220 -
Назовите специфический порт, потому что, если uucico находит, что
имеются отдельные пары, это пробует каждое устройство по очереди, пока это
не находит неиспользуемый.
13.3.6.4 Login chat (Дружеская беседа Входв в уистему)
Выше мы уже сталкивались с сценарием дружеской беседы входа в систему
(login chat script), который сообщает uucico, как регистрироваться в
удаленной системе. Он состоит из списка лексем(маркеров), определяя строки,
ожидаемые и посланные локальным процессом uucico. Усилие состоит в том,
чтобы заставить uucico ждать, пока удаленная машина не пошлет приглашение
входа в систему, затем послать имя входа в систему, ждать, пока удаленную
система пошлет приглашение на ввод пароля, и посылать пароль. Ожидание и
посылка строки чередуются. Uucico автоматически добавляет символ \r
возврата каретки к, любой посылаемой строке. Таким образом, простой
сценарий дружеской беседы походил бы на:
login: vstout Password: catch22
Обратите внимание, что поля записи не содержат текста приглашений.
Удостоерьтесь, что вы войдете в систему , даже если система посылает Login
вместо login.
Uucico также учитывает некоторые виды условного выполнения, например
в случае, если getty удаленной машины должен быть сброшен перед посылкой
приглашения. Для этого Вы можете присоединиться под-дружескую(sub-chat)
беседу к ожидающейся строке, смещение черточкой. Sub-chat выполняется
только если основное соединение не удалось, то есть произошла блокировка по
времени. Один из способов использовать эту возможность состоит в том, чтобы
послать BREAK, если удаленная система не отображает приглашение входа в
систему. Следующий пример дает всесторонний сценарий дружеской беседы,
который должен работать и в случае, если Вы должны нажать Enter прежде,
чем войти в систему. Пустая строка ("") говорит UUCP ничего не ждать и
продолжать посылать следующую строку немедленно.
- 221 -
"" \n\r\d\r\n\c login:-BREAK-login: vstout password:
catch22
Имеется пара специальных строк и ESC-символов, которые могут
включаться в сценарий дружеской беседы. Следующее - неполный список
символов, допустимых в сцзнарки: Пустая строка сообщает, чтобы uucico не
ждал ничего,а продолжил посылать следующую.
\t Cимвол табуляции.
\r символ возврата каретки.
\s Пробел. Вы нуждаетесь в нем , чтобы включить пробел в
строку дружеской беседы.
\n перевод строки.
\\ обратный слэш ( Backslash).
В посылаемой строке, следующие ESC-символы и последовательности
допустимы в дополнение к вышеупомянутым:
EOT -символ конца передачи (^D).
BREAK -Символ прерывания .
\c Подавляет посылку возврата каретки в конце строки.
- 222 -
\d Задержка в течение 1 секунды.
\E Дает возможность эхо - проверки.Требует, чтобы
uucico ждал ECHO всего, что это записывает, чтобы читаться в стороне от
устройства прежде, чем это может продолжать дружескую беседу. Это прежде
всего полезно когда используется в дружеских беседах модема (с которым мы
столкнемся ниже). По умолчанию эхо выключено.
\e Отключает проверку эхо.
\K То же самое, что и BREAK.
\p Пауза в долю секунды.
13.3.6.5 Альтернативы
Иногда желательно иметь несколько описаний для входа в одну систему,
например, если система может быть достигнута на различных модемных линиях.
С Taylor UUCP Вы можете делать это, определив так называемую
альтернативу.
Альтернативная строка сохраняет все установки из основной , и
определяет только те значения, которые должны быть отменены в заданной по
умолчанию , или добавиться к ней. Альтернатива - смещение из входа системы
строкой, содержащей ключевое слово altgrnave.
Чтобы использовать два номера телефона для pablo, Вы должны изменить
sys следующим образом:
system pablo
phone 123-456
alternate
phone 123-455
- 223 -
При вызове pablo, uucico теперь сначала наберет 123-456, и ,если
ничего не получается пробует альтернативу. Альтернативный вход сохраняет
все установки из основного входа системы, и изменяет только номер
телефона.
13.3.6.6 Ограничение времени вызова
Taylor UUCP обеспечивает ряд способов,обеспечивающих ограничение
времени обращения с удаленной системы. Вам потребуется сделать это или из-
за ограничений, которае удаленная главная ЭВМ накладывает на услуги в
течение деловых часов, или просто избегать времен с высокими ценами за
услуги. Обратите внимание, что всегда возможно отменить ограничения времени
обращения, запустив uucico с опцией -S или -f.
По умолчанию, Taylor UUCP отвергнет соединения в любое время, так что
Вы должны использовать некоторый вид спецификации времени в файле sys.
Если Вы не очень заботитесь об ограничении времени обращения, Вы можете
определить опцию времени со значением Аny (любой) в вашем файле sys.
Самый простой способ ограничить время обращения - поле времени,
которое сопровождается строкой, состоящей из дня и подполя времени. День
может быть комбинацией Mo, Tu , We, Th, Fr, Sa, Su или Any(любой),
Never(никогда), или Wk для дней недели. Время состоит из двух 24-часовых
значений часов, отделяемых черточкой. Они определяют диапазон, в течение
которого обращения допустимы. Комбинация этих лексем пишется без
интервалов. Любая лексема дня и спецификация времени может быть
сгруппирована вместе с запятыми. Например, время MoWe0300-0730, Fr1805-2000
допускает обращаться в понедельник и среду от 3 д о 7.30 утра, и в пятницу
с 18.05 до 20.00. Когда поле времени охватывает полночь, и написано Mo1830-
0600, это фактически&ознвчает понедельник, между полночью и 6.00 утра, и
между 18.30 пополудни и полночью(понедельника).
Специальные строки Any и Never означают ВСЕГДА и НИКОГДА.
Команда time задает параметр, который описывает время повтора в
минутах. Когда попытка установить соединение не удалась, uucico не
допустит другой попытки вызвать удаленную ЭВМ втечение некоторого
интервала. По умолчанию, uucico использует показательную функцию схемы
backoff , где интервал повтора увеличивается с каждым последующим отказом.
Например, когда Вы определяете, что время повторения 5 минут, uucico
откажется вызывать удаленную систему втечение 5-ти минут после последнего
отказа.
- 224 -
Команда timegrade разрешает Вaм придать максимальную степень
буферизации к плану. Допустим, что Вы имеете следующие команды timegrade во
входе системы:
Timegrade N Wk1900-0700, SaSu
Timegrade C Any
Это допускает задачи с приоритетом буферизации(spoolgrade) C и выше
(обычно почта имеет степень B или C), они будут приняты всякий раз, когда
обращение установлено, в то время как новости (обычно поставленный в
очередь со степенью N) будут перемещены только ночью и в входные.
Точно так же как команда time, команда timegrade берет интервал
повторения в минутах как дополнительный третий параметр.
Однако есть и недостатки высоких приоритетов буферизации:
опция timegrade применяется только к тому, что ваша система посылают;
удаленная система может все еще передать все, что угодно. Вы можете
использовать опцию calltimegrade, чтобы явно запросить послать только
работы выше некоторой данной степени буферизации ; но нет никакой гарантии,
это удовлетворит условиям этого запроса. (8)
Аналогично, timegrade поле не проверяется, когда удаленная система
вызывает вашу, и любые работы, поставленные в очередь для системы вызова
будут ей посланы. Однако, удаленная система может явно запрашивать ваш
uucico, чтобы пграпичить себя некоторым приоритетом задач.
13.3.7 Описание устройств(Devices) - файл port
Файл port сообщает uucico о доступных портах. Это могут быть порты
модема, другие типы последовательных соединений и гнезда TCP.
Подобно файлу sys, port состоит из отдельных кусков, начинающихся с
ключевого слова port, сопровождаемым именем порта. Это имя может
использоваться в описании порта в файле sys. Нет потребности в уникальности
имени файла; если существуют порты с одним и тем же именем, uucico
перепробует все по очереди, пока это не найдет тот, который в настоящее
время не используется.
Команда port должна обязательно сопровождаться именем типа, которое
- 225 -
задает какой порт описан. Допустимые типы - modem, direct для прямых
соединений, и tcp для гнезд TCP. Если команда port отсутствует, по
умолчанию тип порта - modem.
В этом разделе, мы опишем лишь порты модема; порты TCP и прямые
соединения будут обсуждаться далее.
8. Если удаленная система выполняет Talyor UUCP, это удовлетворит
условиям.
Для модема и прямого соединения, Вы должны определить устройство для
вызова устройства напрямую. Обычно это имя специального файла устройства
в каталоге /dev( подобно /dev/cua1). (9)
В случае устройства модема, port также определяет, какой модем
соединен с портом. Различные типы модемов должны быть конфигурированы по-
разному. Четные модемы, что рекламация, чтобы быть Hayes совместимый не
должна быть действительно совместима друг с другом. Следовательно, Вы
должны сообщить uucico, как инициализировать Ваш модем и как соединяться с
требуемым номером. Taylor UUCP хранит описания всех программ набора номера
в файле dial. Чтобы использовать любую из них, Вы должны определить имя
программы набора номера, используя команду dialer.
Иногда Вам подребуется использовать модем различными способами( в
зависимости систепы,которую Вы вызываете. Например, некоторые старые
модемы не понимают, когда быстродействующий модем пытается соединяться на
скорости 14400bps; они просто пропускают строку вместо того, чтобы вести
переговоры на скорости в 9600bps. Если Вы знаете, что некоторые места
используют такой "немой" модем, для вызова их Вы должны настраивать ваш
модем иначе. Для этого Вам нужно добавить строку port ... в файл порт,
которая определит другую программу набора номера. Теперь Вы можете задать
новому порту другое имя, типа serial1-slow, и использовать директиву port
в описании системы в файле sys.
Лучший способ отличать порты состоит в том чтобы отличать порты по
скоростям, которые они поддерживают. Например, два описания порта для
вышеупомянутого могут выглядеть следующим образом:
- 226 -
#NakWell modem; connect at hight speed
port serial1 # port name
type modem #modem port
device /dev/cua1 # this is COM2
speed 38400 #support speed
dialer nakwel #normal dialer
# NakWell modem; connect at low speed
port serial1 # port name
type modem # modem port
device /dev/cua1 # this is COM2
speed 9600 # supported speed
dialer nakwell-slow # don't attempt fast connect
Tеперь запрос был бы на serial1 как имя порта, но использовать
только 9600bps . Uucico сделает это автоматически
9. Некоторые люди используют ttyS * устройства , которые
предназначены только для входа (dial-in).
Используйте второй вход порта. Все остающиеся места, которые имеют
быстродействие 38400bps , будут вызываться, используя первый кусок в port/
13.3.8 Как набирать номер - файл dial
Файл dial описывает способ, которым используются различные программы
набора номера . Традиционно, переговоры UUCP программ набора номера быстрее
чем модемы, потому что раньше было обычной практикой иметь одно (дорогое)
автоматическое устройство набора, обслуживающее целый набор модемов.
Сегодня большинство модемов имеют встроенную поддержку набора, так что это
различие становится более размытым.
Однако различные программы набора номера или модемы могут требовать
различной настройки. Вы можете описать каждый из них в файле dial. Куски в
файле dial начинаются с команды dialer, которая определяет имя программы
- 227 -
набора номера.
Наиболее важная часть - дружеская беседа модема(modem chat),
определяется командой chat. Подобно дружеской беседе входа в систему(login
chat), она состоит из последовательности строк uucico, посылаемых
программе набора номера и ответов, которые требуется получить. Они обычно
используются, чтобы сбросить модем к известному состоянию, и набирать
номер.Вот пример для Hayes-совместимого модема:
# NakWell modem; connect at high speed
dialer nakwell # dialer name
chat "" ATZ OK\r ATH1E0Q0 OK\r ATDT\T CONNECT
chat-fail BUSY
chat-fail ERROR
chat-fail NO\sCARRIER
dtr-toggle true
Дружеская беседа модема начинается с "", пустой ожидают строку.
Cледовательно uucico пошлет команду (ATZ) сразу же. ATZ - команда Hayes для
сброса модема. Затем uucico ждет, пока модем не послал OK, и посылает
следующую команду, которая выключает локальный ECHO, и т.п.. После того,
как модем возвращает OK снова, uucico посылает команду набора (ATDT).
Escape-последовательность \T в этой строке заменяется на номер телефона,
получаемый из файла sys. Uucico затем ждет, пока модем не возвратит
COONECV, что говорит о том,что соединение с удаленным модемом было
установлено успешно.
Часто модем будет не в состоянии соединиться с удаленной системой,
например, если другая система говорит с кем -то еще и линия занята. В этом
случае, модем вернет сообщение об ошибке, указывающее на причину отказа.
Дружеская беседа модема не способна обнаружить такие сообщения; uucico
будет ждать требуемую строку пока не выйдет время ожидания. В файле
регистрации UUCP(log file) будет записано "timed out in chat script"
вместо истинной причины.
Однако, Taylor UUCP позволяет Вам сообщить uucico об этих сообщениях,
- 228 -
используя chat-fail команду как показано выше. Когда uucico обнаруживает
chat-file строку при выполнении дружеской беседы модема(modem chat), то
прерывает обращение, и регистрирует сообщение об ошибках в файле
регистрации UUCP(файле log).
Последняя команда в примере, показанном выше говорит UUCP переключить
DTR строку перед стартом дружеской беседы модема. Большинство модемов может
быть сконфигурировано так , чтобы продолжить -ловушку при обнаружении
изменений в DTR строке, и перейти в командный режим. (10)
13.3.9 UUCP поверх TCP
В первый момент это может показаться абсурдом,но на самом деле UUCP
поверх TCP не такая уж плохая идея, особенно при пересылке большого
количества данных типа Usenet новостей. На TCP -базированных узлах,
новостями в основном обмениваются, используя NNTP протокол, в котором
статьи запрашиваются и посылаются индивидуально, без сжатия и прочей
оптимизации. Хотя и подходящая для больших узлов с большим объемом
новостей (newsfeeds), эта методика не подходит для небольших участков сети,
которые получают новости медленным соединением типа ISDN. Им удобней
объединить качества TCP с преимуществами посылки новостей в больших
пакетах, которые могут быть сжаты и таким образом перемещаться с очень
низкими затратами. Станжартпый способ передать эти пакеты состоит в том,
чтобы использовать UUCP поверх TCP.
В файле sys, Вы определяете систему, которую нужно вызвать через TCP.
10. Вы также можете сконфигурировать модемы на сброс при обнаружении
перехода на DTR. Некоторые из них, однако, не понимают таких вещей и
зависают.
system gmu
address news.groucho.edu
time Any
port tcp-conn
chat ogin: vstout word: clouseau
Команда address дает адрес IP главной ЭВМ, или ее полное имя
- 229 -
области(domain name). Соответствующий участок файла port выглядел бы:
port tcp-conn
type tcp
service 540
Этот пример говорит, что соединение TCP должно использоваться, когда
файл sys ссылается на tcp-conn, и что uucico должен пытаться соединяться с
портом TCP Э 540 на удаленной ЭВМ. Это - заданный по умолчанию номер
порта обслуживания UUCP. Вместо номера порта, Вы можете также давать
символическое имя порта командой service . Номер порта, соответствующий
этому имени будет разыскскан в /etc/services. Общее имя для UUCP-сервиса
- uucpd.
13.3.10 Использование прямого соединения
Допустим, что Вы используете прямое соединение вашей системы vstout
с системой tiny.Как и в случае с модемом, Вы должны описать вход в систему
в файле sys. Команда port идентифицирует последовательный порт tiny,
подключен к.
system tiny
time Any
port direct1
speed 38400
chat ogin: cathcart word: catch22
В файле port Вы должны описать последовательный порт для прямого
соединения. Описание программы набора номера не необходимо, так как нет
никакой потребности в наборе.
port direct1
type direct
speed 38400
- 230 -
13.4 Что делать UUCP, а что нет - настройка доступа
13.4.1 Выполнение команд
Задача UUCP состоит в том, чтобы копировать файлы от одной системы к
другой, и запрашивать выполнение некоторых команд на удаленных главных ЭВМ.
Конечно, Вы как администратор хотите управлять тем, какие права Вы
предоставляете другим системам - разрешать им делать что угодно -
определенно не очень хорошая идея.
По умолчанию Taylor UUCP разрешает выполняьь на вашей машине лишь
rmail и rnews, которые обычно используются для email и Usent новостей над
UUCP. Заданный по умолчанию путь поиска, используемый uuxqt - опция
времени компиляции, но обычно содержит /bin,/usr/bin, и /usr/local/bin.
Чтобы изменять набор команд для определенной системы, Вы можете
использовать ключевое слово commands в файле sys. Аналогично, путь поиска
может быть изменен с утверждением пути команды. Например, Вы можете
разрешить системе pablo выполнять команду rsmtp в дополнение к rmail и
rnews: (11)
system pablo
commands rmail rnews rsmtp
13.4.2 Передача файлов
Taylor UUCP также позволяет описывать передачу файлов в
подробностях. Вы можете запретить любой обмен с определенной системой.
Только установите request в no, и удаленная система не сможет ни искать, ни
читать, ни посылать Ваешй никаких файлов.
11.rsmtp используется, чтобы поставить почте пакет SMTP. Это
описывается в главах о почте.
Аналогично, Вы можете запретить пользователям Вашей системы
пересылку файлов 'в' или 'из' системы, установив transfer в no. По
умолчанию любая пересылка им разаешается.
- 231 -
" Кроме того, Вы можете конфигурировать каталоги 'в' и 'из' которых
файлы могут быть скопированы. Обычно запрещают доступ с удаленных систем к
определенным каталогам, но разрешают своим пользователям посылать файлы
со своего исходного каталога. Обычно, удаленным пользователям разрешается
получить файлы только от общего каталога UUCP, /var/spool/uucppublic. Это -
традиционное место , в котором хранятся публично доступные файлы; очень
похоже на FTP сервисы в Internet. На них обычно ссылаются используя символ
тильды.
Следовательно, Taylor UUCP обеспечивает четыре различных команды
конфигурирования каталогов для посылки и получения файлов:local-send,
который определяет список каталогов из которых пользователь может
запросить файлы; local-receive, которая задает список каталогов, в которые
пользователь может просить UUCP записать файлы ;remote-recive и remote-
send, которые определяют то же самое для запросов в другую
систему.Рассмотрим следующий пример:
system pablo
local-send /home ~
local-receive /home ~/receive
remote-send ~ !~/incoming !~/receive
remote-receive ~/incoming
Команда local-send разрешает пользователям на вашей главной ЭВМ
посылать любые файлы ниже /home и из от общего каталога UUCP в систему
pablo. Команда local-receive разрешает им получать файлы или в
общедеступный каталог в uucppublic, или в любой общедоступный каталоге
ниже /home. Команда remote-send разрешает pablo запрашивать файлы из
/var/spool/uucppublic или из любого общедоступного его подкаталога . Это
сообщается к uucico восклицательным знаком,поставленным перед именем
каталога. В заключение, последняя строка разрешает pablo записать любые
файлы в каталог incoming.
Одна из самых больших проблем при передаче файлов используя UUCP -
это то, что файлы записываются в обшедоступные каталоги. Это может
соблазнить нзкоторых пользователей вмешаться в личные дела других
пользователей, и т.д.. Однако нет никакого способа решения этой проблемы,
кроме отключения передач файлов UUCP вообще.
- 232 -
13.4.3 Пересылка
UUCP обеспечивает механизм, благодаря которому другие системы могут
выполнять передачу файлов от Вашего имени. Например, это разрешает, чтобы
Вы делали seciretrieve файл из uchile для Вас, и послали это вашей системе.
Следующая команда достигнула бы этого:
$ Uucp -r seci! Uchile! ~/find-ls.gz ~/uchile.files.gz
Эта методика прохождения работы через несколько систем называется
пересылкой. В вышеупомянутом примере причиной для использования пересылки
могло быть то, что seci имеет UUCP- доступ к uchile, а ваша главная ЭВМ
нет. Однако, если Вы используете систему UUCP, ограничте обслуживание
пересылки для некоторых ЭВМ,которым Вы доверяете, чтобы не ужасаться
телефонному счету, если кто-нибудь решит скачать себе через вас исходные
тексты последего выпуска X11R6.
По умолчанию, Taylor UUCP запрещает пересылку вооще. Чтобы давть
возможность пересылки определенной системе, Вы можете использовать команду
forward. Эта команда определяет список систем, которые могут
воспользоваться пересылкой через вас. Например, администратор UUCP seci
должен был добавить следующие строки к файлу sys, чтобы разрешить pablo
запрос файлов из uchile:
####################
# pablo
system pablo
forward uchile
####################
# uchile
system uchile
forward-to pablo
- 233 -
Строка forward-to для uchile необходима , чтобы любые полученные
файлы фактически передались pablo. Иначе UUCP пропустил бы их. Этот пример
разрешает uchile только посылать файлы pabno чзрез seci; иной другой путь
не допустим.
Чтобы разрешить пересылку к любой системе, используйте специальное
ключевое слово ANY (обязательно заглавные буквы).
13.5 Настройка вашей Системы.
Если Вы хотите настроить вашу систему для вызова извне, Вы должны
разрешить вход в систему по последовательному порту, и настроить некоторые
системные файлы, чтобы обеспечить счета UUCP(accounts). Это будет
обсуждаться в следующем разделе.
13.5.1 Установка getty
Если Вы хотите использовать последовательную линию, как dialin порт,
Вы должны запустить процесс getty на этот порт. Однако, некоторые
реализации getty не очень подходят для этого, так как Вы обычно хотите
использовать последовательный порт для соединения 'в' и 'из'.Следовательно,
вы должны удостовериться, чтобы использовать getty, который может
использовать линию вместе с другими программами (типа uucico, или
minicom). Одна из таких программ - это uugetty из getty ps пакета.
Большинство дистрибутивов Linux-a имеет его; проверите наличие uugetty в
каталоге /sbin. Другая программа, которую я знаю - mgetty (нап. Gert
Doering-м), которая также поддерживает прием факсов. Вы можете найти
последние версии этих программ на sunsite.unc.edu (там же есть и исходные
тексты).
Объяснение различий в способе входа в систему между uugetty и mgetty
- вне компетенции этого небольшого раздела; для подробной информации
обращайтесь пожалуйста к Serial HOWTO (Grag Hankins),а также
кдокументации, которая сопровождает getty ps и mgetty.
13.5.2 Обеспечение UUCP Счета(account)
Затем, Вы должны установить счета пользователя, которые разрешают
удаленной системе регистрацию в вашей системе и устанавливают соединение
UUCP. Вообще, необходимо дать отдельное имя каждой системе, которая
- 234 -
взаимодействует с Вами. При установке имени для системы pablo, Вы
(например) можете дать ей имя Upablo, как имя пользовауеля.
Для систем, которые подключаются через последовательный порт, Вы
должны добавить эти имена в файл паролей системы, /etc/passwd. Хорошим
вкусом считается поместить все имена UUCP в специальную группу типа
uuguest.
Домашний каталог счета должен находиться в общем каталоге
/var/spool/uucppublic; оболочка входа в систему - uucico.
Если Вы имеете теневой установленный набор программ пароля, Вы можете
делать это с командой useradd:
# Useradd -d /var/spool/uucppublic -G uuguest -s /usr/lib/uucp/uucico
uablo
Если Вы не используете теневой набор программ пароля, Вам нужно
отредактировать /etc/passwd вручную и добавить строку, анологичную
показанной ниже, где 5000 и 150 - числовой uid и gid, назначенные
пользователю Upablo и группе uuguest, соответственно.
Upablo: x: 5000:150: UUCP
Account:/var/spool/uucppublic:/usr/lib/ uucp/uucico
После установки счета, Вы должны активизировать его, установив
пароль командой passwd.
Чтобы позволить UUCP соединяться с вами поверх TCP, Вы должны
установить inetd, чтобы обработать подключения на порте uucp. Это можно
сделать, добавив следующую строку в /etc/inetd.conf: (12)
uucp stream tcp nowait root /usr/sbin/tcpd
/usr/lib/uucp/uucico -l
С опцией -l uucico выполняет собственную проверку на вход в
систему.Она запросит имя и пароль также, как и стандартная программа login,
но положится на собственный файл паролей вместо /etc/passwd. Этот файл
- 235 -
паролей называется /usr/lib/uucp/passwd и содержит пары имен входа в
систему и паролей:
Upablo IslaNegra
Ulorca co'rdoba
12. Обратите внимание, что обычно tcpd имеет режим 700, так что Вы
вызвали это как корень пользователя, не uucp, поскольку Вы обычно делали
бы.
Конечнп, этот файл должен принадлежать uucp и иметь доступ 600.
Если эта база данных звучит подобно такой хорошей идеи, Вы хотели бы
использовать на нормальных последовательных входах в систему, также, Вы
будете разочарованы, чтобы слышать, что это не возможно в настоящее время
без главных искривлений. Сначала от, Вы нуждаетесь в Taylor UUCP 1.05 в
этом, потому что это разрешает, чтобы getty передал имя входа в систему
пользователя вызова к uucico использование опции -u. (13) Затем, Вы должны
прием getty, который Вы используете в вызов uucico вместо обычного
/bin/login. С getty ps, Вы можете делать это, устанавливая опцию LOGIN в
файле конфигурации. Однако, это отключает интерактивные входы в систему в
целом(вполне). Mgetty, с другой стороны, имеет хорошую возможность, которая
разрешает, чтобы Вы вызвали различные команды входа в систему, основанные
на имени обеспеченный пользователь. Например, Вы можете сообщать, чтобы
mgetty использовал uucico для всех пользователей, которые обеспечивают имя
входа в систему, начинающееся прописной буквой U, но допускают каждого еще
обработано стандартной командой входа в систему.
Защищайте ваших пользователей UUCP от вызывающих операторов, дающих
ложную систему и snarfing всю их почту, Вы должны добавить команды
вызываемого - входа в систему к каждому входу системы в системном файле.
Это описано в разделе 13.5.3 выше.
13.5.3 Защита против Жуликов
Одна из самых больших проблем UUCP - то, что система вызова может
назвать не свое имя; она объявляет имя вызываемой системе после
фактического входа, но сервер не может проверить этого. Таким образом,
- 236 -
нападающий может войти под своим именем UUCP, симулировать, что был кем -то
еще, и прочитатьчужую почту. Это особенно опасно, если Вы предлагаете вход
в систему через анонимный UUCP,чей пароль общеизвестен.
Если Вы не уверены, что Вы можете доверять всем системам, которые
вызывают вашу, Вы должны принять меры против самозванцев/Для"этого
необходимо потребовать, чтобы каждая система использовала имя входа в
систему, заданное called-login в sys.Например:
system pablo
called-login Upablo
13. Опция -u присутствует в версии 1.04 также, но ничего не делает.
В результате этого всякий раз, когда система говорит, что она -
pablo, uucico проверит, регистрировалась ли она как Upablo. Если же нет,
вызов будет отвергнут, а соединение разорвано. Вы должны делать это
привычка добавить команду вызываемого - входа в систему к каждому входу
системы, который Вы добавляете к вашему системному файлу. Важно, что Вы
делаете это для всего sytems, независимо от того, ли они будут когда-либо
вызывать ваше место или нет. Для тех мест, которые никогда не вызывают Вас,
Вы должны возможно установить вызываемый - вход в систему к некоторым
полностью поддельное имя пользователя, типа neverlogsin.
13.5.4 Будте бдителны - проверки последовательности обращения
Другой способ отражать и обнаружить самозванцев состоит в том, чтобы
использовать проверки последовательности обращения. Вызовите проверки
последовательности, помогают Вам защитить против "злоумышленников ",
которые так или иначе сумели выяснять пароль, с которым Вы регистрируете в
вашу систему UUCP.
При использовании проверок последовательности обращения, обе машины
следят за числом соединений, уже установленных . Оно увеличивается с
каждым соединением. После регистрации, вызывающий посылает порядковый
- 237 -
номер обращения, а вызываемый сверяет его со своим. Если они не
соответствуют, попытка соединения будет отклонена. Если начальный номер
выбирать произвольно, нападавшим будет нелегко угадать правильный
порядковый номер обращения.
Но проверки последовательности обращения делают для Вас еще больше:
даже если некоторыq очень умный человек обнарузит ваш порядковый номер
обращения также как ваш пароль, Вы pfvtnbnt это извне. Когда нападавший
вызывает вашу подачу UUCP, и захватывает вашу почту, это увеличит
порядковый номер обращения корма на один. В следующий раз Вы вызываете вашу
подачу и пробуете регистрировать в, удаленный uucico откажется от Вас,
потому что числа не соответствуют(согласовывают) anymore!
Если Вы допустили проверки последовательности обращения, Вы должны
регулярно проверять ваши регистрационные файлы на сообщения об ошибках,
которые намекают на возможные причины. Если ваша система отклоняет
порядковый номер обращения, система вызова предлагает, это, uucico
поместит сообщение в регистрационный файл, говорящий что - нибудь вроде "
Вне обращения последовательности, отклонил ''. Если ваша система не
допущуна, потому что порядковые номера находятся вне синхронизации, в
регистрационном файле будет примерно следующее " рукопожатие потерпело
неудачу (RBADSEQ) ''.
Чтобы включить проверку последовательности обращения, Вы должны
добавить следующую команду к входу системы:
# enable call sequence checks
sequence true
Еще Вы должны создать файл, содержащий порядковый номер. Taylor UUCP
хранит порядковый номер в файле, называемом ".Sequence" в каталоге spool
удаленной системы. Он должен принадлежать uucp, и иметь режим 600 (то есть
чтение и запись разрешены только uucp). Самое лучшее инициализировать этот
файл произвольным, согласованным начальным значением. Иначе нападающий
может подобрать номер, пробуя все значения меньше, скажем, 60.
# cd /var/spool/uucp/pablo
# echo 94316 > .Sequence
# chmod 600 .Sequence
# chown uucp.uucp .Sequence
- 238 -
Конечно, удаленная система должна дать возможность проверкам
последовательности обращения также, и использовать то же самое начальное
значение, что и Вы.
13.5.5 Анонимный UUCP
" Зсли Вы хотите обеспечивать анонимный UUCP- доступ к вашей системе,
Вы сначала должны саздать специальное имя для него(см. выше). Общей
практикой является дать ему имя входа в систему и пароль uucp. Кроме того,
Вы должны установить несколько опций защиты для неизвестных систем.
Например, Вы можете запретить им из выполнения любых команд на вашей
системе. Однако, Вы не можете задать эти параметры в файле sys, потому что
команда требует имени системы, которое Вы не знаете. Taylor UUCP решает
эту проблему через команду unknown.Команда unknown может использоваться в
файле конфигурации, чтобы определить любую команду, которая может обычно
появляться во входе системы:
unknown remote-receive ~/incoming
unknown remote-send ~/pub
unknown max-remote-debug none
unknown command-path /usr/lib/uucp/anon-bin
unknown commands rmail
Это ограничит неизвестные системы разгрузкой файлов из подкаталогов
pub и загрузкой файлов в каталоги ниже /var/spool/uucppublic. Следующая
строка говорит uucico игнорировать любые запросы из удаленной системы,
чтобы включить отладку локально. Последние две строки разрешают неизвестным
системам выполнять rmail; но путь команды разрешает uucico искать команду
rmail в частном каталоге, с именем anon-bin. Это позволяет Вам обеспечить
некоторый специальный rmail, что, например, может передавать всю почту
супер-пользователю для исследования. Это разрешает, чтобы анонимные
пользователи достигли maintainer системы, но предотвращает в то же самое
время отправление любой почты в другие места.
Чтобы дать возможность анонимному UUCP, Вы должны определить по
крайней мере одно неизвестное утверждение в конфигурации. Иначе uucico
отклонит неизвестные системы.
- 239 -
13.6 UUCP Протоколы низкого уровня
Чтобы осуществлять контроль за приемом и передачей файлов, uucico
кспользует набор стандартизированных сообщений. Этот набор иначе
называется протоколом верхнего уровня. В течение фазы инициализации и фазы
зависания они просто посланы поперек как строки. Однако, в течение реальной
фазы передачи, дополнительный протокол низкого уровня использован, который
является обычно ясным для более высоких(высших) уровней. Это должно делать
проверки ошибки, возможные при использовании ненадежных линий, например.
13.6.1 Краткий обзор протоколов
Поскольку UUCP используется поверх различных типов соединений, типа
последовательных строк, TCP, или даже X. 25, специфические протоколы
низкого уровня необходимы. Кроме того, отдельные реализации UUCP
представили различные протоколы, которые делают приблизительно ту же самую
вещь(дело).
Протоколы могут быть разделены на две категории: потоковые и пакетные
протоколы. Первые передают файл в целиком, возможно вычисляя при этом
контрольную сумму . Нет непроизводственных затрат, но требуется надежное
соединение,так как любая ошибка потребует повторной передачи файла. Эти
протоколы обычно используются над соединениями TCP, но не подходят для
использования над телефонными линиями. Хотя современные модемы хорошо
исправляют ошибки, нельзя обнаружить ошибку между вашим компьютером и
модемом.
С другой стороны, пакетные протоколы разбивают файл на отдельные
куски равного размера. Каждый пакет посылается и получается отдельно,
контрольная сумма вычисляется, и квитирование возвращено датчику. Чтобы
делать это более эффективный, протоколы подвижного окна было изобретено,
которые учитывают ограниченный номер (окно) ожидающого обработки
acknoledgements в любое время. Это значительно уменьшает время ожидания
uucico в течение передачи. Несмотря на это, относительно большие
непроизводительные затраты( по сравнению с потоковым протоколом), делают
пакетный протокол неэффективным для использования поверч TCR.
Ширина пути данных также дает различие. Иногда посылка восьмибитовых
символов над последовательным соединением невозможна, например, если
- 240 -
соединение прсматривает глупый сервер терминала. В этом случае, символы с
восьмым набором битов должны цитироваться на передаче. Когда Вы передаете
восьмибитовые символы над соединением с семью линиями, они должны быть
Согласно предположениям с самым плохим случаем, это удваивает количество
данных, которые будут переданы, хотя сжатие, выполненное аппаратными
средствами может компенсировать этот. Строки, которые могут передавать
произвольные восьмибитовые символы, обычно называются восьмибитовыми
чистыми. Дело обстоит так для всех соединений TCP, также как для
большинства соединений модема.
Следующие протоколы доступны с Taylor UUCP 1.04:
g - наиболее общий протокол и может быть понятым виртуально всеми
uucico's.Он делает полную проверку ошибок и следовательно
хорошо подходит для плохих телефонных линий. g требует
восьмибитового чистого соединения.Это - пакет-ориентированный
протокол, который использует методику подвижного окна.
i - является двунаправленным пакетным протоколом, который может
посылать и получать файлы одновременно. Требуется дуплексное
соединение и восьмибитовый путь данных.Он в настоящее время
распознается только Taylor UUCP.
t - протокол, предназначенный для использования над соединением TCP,
или другими, свободными от ошибок. Использует пакеты в 1024
байтов и требует восьмибитового чистого соединения.
e - аналог t, но только потоковый.
f - предназначен для использования с надежным X. 25 соединением. Это
потоковый протокол, желателен семибитовый путь данных.
Восьмибитовые символы цитируются, что может сделать передачу
неэффективной.
G - реализация g-протокола в System V Relgase"4. Также распознается и
некоторыми другими версиями UUCP.
- 241 -
а - протокол similiar к ZMODEM. Требуется восьми разрядное
соединение, цитируются некоторые управляющие символы подобно XON
и XOFF.
13.6.2 Настройка Протокола Передачи
Все протоколы учитывают некоторое изменение в размерах пакета,
блокировках по времени, и т.п.. Обычно значения по умолчанию,
обеспечивающие работу при стандартных обстоятельствах, не оптимальны для
вашей системы. Протокол g, например, использует размеры окна от 1 до 7, и
размеры пакета в степенях 2 в пределах от 64 до 4096. (14), если ваша
телефонная линия обычно настолько шумная, что теряется более 5% всех
пакетов, Вы должны уменьшить размер пакета и сократить окно. С другой
стороны, на очень хороших телефонных линиях непроизводительные затраты
протокола при посылке запроса черз каждые 128 байт могут оказзаться
расточительными, так что Вы можете увеличивать размер пакета до 512 или
даже 1024.
Taylor UUCP обеспечивает механизм настройки этих параметров командой
protocol-parameter в файле sys. Например, чтобы установить пакет протокола
g в 512 байт при обмене с pablo:
system pablo
protocol-parameter g packet-size 512
14. Большинство binaries включенных в дистрибутивы Linux
устанавливают по умолчанию размер окна 7 ,размер пакета 128 байт .
Настраиваемые параметры и их названия изменяются от протокола к
протокола. Для полного списка см. документацию,поставляемую с Taylor UUCP.
13.6.3 Выбор Специфических Протоколов
Не каждая реализация uucico понимает каждый протокол, так что в
течение начальной фазы рукопожатия, оба процесса должны договориться об
общем протоколе.Главный uucico предлагает подчиненому список обеспечиваемых
- 242 -
протоколов, посылая Pprotlist, из#которого подчиненный может выбирать.
Основываясь на типе используемого порта (модем, TCP, или прямой),
uucico составит заданный по умолчанию список из протоколов. Для модема и
прямых соединений, этот список обычно включает i, a, g, G, j и f. Для
соединений TCP, список - t, e, я, a, перегрузка, G, j, и f. Вы можете
изменить этот заданный по умолчанию список командой protocols, которая
может быть определена во входе системы также как входе порта. Например, Вы
могли бы записать в файл port примерно следующее:
port serial1
protocols igG
Это требует любого входящего или исходящего соединения через этот
порт, чтобы использовать i,g, или G., если удаленная система не
поддерживает никакой из них, диалог потерпит неудачу.
13.7 Поиск неисправностей
Этот раздел описывает возможные неисправности в вашем соединении
UUCP, и дает возможные пути их исправления. Однако мы были просто не в
состоянии охватить все возможные варианты.
В любом случае, включите отладку опцией -xall, и смотрите на вывод в
файле Debug в каталоге spool. Это поможет Вам быстро распознть, где
происходит сбой. Также, я всегда находил полезным включать динамик модема,
когда соединение не удавалось. С Hayes-совместимыми модемами это можно
сделать, добавив " ATL1M1 OK " к дружеской беседе модема в файле dial.
Первым делом стоит проверить все ли права доступа к файлам
установлены правильно. Uucico должен принадлежать uucp, и все файлы в
/usr/lib/uucp, /var/spool/uucp и /var/spool/uucppublic должены принадлежать
uucp. Имеются также некоторые скрытые файлы (15) в каталоге spool, которые
также должны принадлежать uucp.
Uucico может сказать "Wrong time to call "(" Неправильное время
- 243 -
вызова "). Это может значить,что в файле sys , Вы не определили команду
time, которая определяет, когда удаленная системв может вызываться, или
фактически запретили заход в текущее время. Если время обращения не
задано, uucico принимает, что система никогда не может вызываться.
Uucico жалуется, что система уже блокирована. Это означает ,что
uucico обнаружил файл блокировки для удаленной системы в /var/spool/uucp.
Файл блокировки может остаться старого обращения к системе, если ее работа
была прервана некорректно. Однако также правдоподобно, что естьдругой
процесс uucico, который пробует набрать удаленную систему и застревает в
сценарие дружеской беседы, и т.д.. Если этот процесс uucico не преуспел в
соединение с удаленной системой, уничтожте его, и удалите все файлы
блокировки, которые он оставил.
Я могу соединиться с удаленной системой, но происходит сбой сценария
дружеской беседы: Рассмотрите текст, который Вы получаете от удаленного
места. Если он искажен, это может быть связано с быстродействием. Иначе,
подтвердите, соглашается ли это действительно, тем, что ваш сценарий
дружеской беседы ожидает. Помните, что сценарий дружеской беседы
начинается с ожидающейся строкой. Если Вы получаете подсказку входа в
систему, затем посылаете имя, но не получаете подсказку пароля, вставьте
некоторые задержки перед посылкой этому, или четному промежутку символы. Вы
можете быть слишком быстры для вашего модема.
Мой модем не соединяется: Если ваш модем не указывает, что DTR линия
была установлена, когда uucico вызывает,возможно Вы задали неправильное
устройство uucico. Если ваш модем распознает DTR, сверьтесь с a
15. То есть файлы, чьи имя начинает с точки. Такие файлы обычно не
отображаются командой ls.
Программа терминала, которую Вы можете записывать к этому. Если это
работает, включите отображение на экране к \E в начале дружеской беседы
модема. Если это не делает ECHO ваши команды в течение дружеской беседы
модема, проверьте, является ли ваше быстродействие строки слишком высоко
или низпо для вашего модема. Если Вы видите ECHO, проверьте, отключили ли
Вы ответы модема, или устанавливаете их к кодам числа. Проверите, что
сценарий дружеской беседы непосредственно правилен. Не забудьте, что Вы
должны записать две наклонных черты влево, чтобы послать тот модему.
Мой модем пробует соединятся, но не может: Вставьте задержку в номер
- 244 -
телефона. Это особенно полезно когда набор идет из внутренней телефонной
сети компании. Если вы обычно пользуетесь импульсным набором,попробуйте
тоновый. В некоторых странах мощности телефонных сетей нарастили недавно и
тоновый набор иногда помогает.
log файл говорит, что я имею чрезвычайно высокие потери передачи: Это
похоже на проблему быстродействия. Возможно связь между компьютером и
модемом также медленна (установите ее для самой высокой эффективной
скорости)? Или это ваши аппаратные средства, которые являются также
медленно к сервисным прерываниям вовремя? С NSC 16550A chipset на вашем
последовательном порте, 38kbps работает хорошо; однако, без FIFOs
(подобных 16450 чипам), 9600 бит\сек - верхний предел скорости. Также Вы
должны удостовериться, что аппаратное рукопожатие допускается на
последовательной линии.
Другая вероятная причина - аппаратное рукопожатие не допускается на
порте. Taylor UUCP 1.04 не имеет никаких средств для включения RTS/CTS
рукопожатия. Вы должны сделать это явно из rc.serial использование
следующей команды:
$ Stty crtscts < /dev/cua3
Я регистрируюсь в, но происходит сбой рукопожатия: Хорошо, может
иметься ряд проблем. Вывод в регистрационном файле должен сообщить Вам
множество. Рассмотрите то, каким протоколам удаленные предложения места
(Это посылает строку Pprotlist в течение рукопожатия). Возможно они не
имеют любого в общем (Вы выбираете любые протоколы в системном или порт?).
Если удаленная система посылает RLCK, имеется просроченный lockfile
для Вас на удаленной системе. Если вы уже не соединены с удаленной
системой на жругой линии попросите удалить его.
Если она посылает RBADSEQ, другое место имеет проверки счета диалога,
допускаемые для Вас, но числа не соответствовали. Если это посылает RLOGIN,
Вас не разрешали к входу в систему под этим идентификатором.
13.8 Регистрационные Файлы
При компилировании набора программ UUCP на использование регистрации
taylor-стиля, Вы имеете только три глобальных регистрационных файла,которые
- 245 -
находятся в каталоге spool. Основной регистрационный файл называется Log и
содержит всю информацию относительно установленных соединений и
перемещенных файлов. Типичный Log-файл выглядит примерно так
uucico pablo - (1994-05-28 17:15:01.66 539) Calling system pablo
(port cua3)
uucico pablo - (1994-05-28 17:15:39.25 539) Login successful
uucico pablo - (1994-05-28 17:15:39.90 539) Handshake successful
protocol 'g' packet size 1024 window 7)
uucico pablo postmaster (1994-05-28 17:15:43.65 539) Receiving
D.pabloB04aj
ucico pablo postmaster (1994-05-28 17:15:46.51 539) Receiving
X.pabloX04ai
uucico pablo postmaster (1994-05-28 17:15:48.91 539) Receiving
D.pabloB04at
uucico pablo postmaster (1994-05-28 17:15:51.52 539) Receiving
X.pabloX04as
uucico pablo postmaster (1994-05-28 17:15:54.01 539) Receiving
D.pabloB04c2
uucico pablo postmaster (1994-05-28 17:15:57.17 539) Receiving
X.pabloX04c1
uucico pablo - (1994-05-28 17:15:59.05 539) Protocol 'g' packets:
sent 15,
resent 0, received 32
uucico pablo - (1994-05-28 17:16:02.50 539) Call complete (26
seconds)
uuxqt pablo postmaster (1994-05-28 17:16:11.41 546) Executing
X.pabloX04ai
(rmail okir)
uuxqt pablo postmaster (1994-05-28 17:16:13.30 546) Executing
X.pabloX04as
(rmail okir)
uuxqt pablo postmaster (1994-05-28 17:16:13.51 546) Executing
X.pabloX04c1
(rmail okir)
Следуящий"важный регистрационный файл - Stats, который содержит
статистику передачи файлов. Раздел Stats соответствующий вышеупомянутой
- 246 -
передаче походит на это:
postmaster pablo (1994-05-28 17:15:44.78)
received 1714 bytes in 1.802 seconds (951 bytes/sec)
postmaster pablo (1994-05-28 17:15:46.66)
received 57 bytes in 0.634 seconds (89 bytes/sec)
postmaster pablo (1994-05-28 17:15:49.91)
received 1898 bytes in 1.599 seconds (1186 bytes/sec)
postmaster pablo (1994-05-28 17:15:51.67)
received 65 bytes in 0.555 seconds (117 bytes/sec)
postmaster pablo (1994-05-28 17:15:55.71)
received 3217 bytes in 2.254 seconds (1427 bytes/sec)
postmaster pablo (1994-05-28 17:15:57.31)
received 65 bytes in 0.590 seconds (110 bytes/sec)
Третий файл - Debug. В нем содержится отладочная информация. Если Вы
используете отладку, Вы должны удостовериться, что этот файл имеет режим
защиты 600. В зависимости от режима отладки, который Вы выбрали, он может
содержать имя входа в систему и пароль, который Вы используете для
соединения с удаленной системой.
Некоторые UUCP binaries включенные в дистрибутивы Linux-а
компилировались, чтобы использовать регистрацию HDB-стиля. HDB UUCP
использует целую связку регистрационных файлов, сохраненных в
/var/spool/uucp/.Log. Этот каталог содержит еще три каталога, которые
называются uucico, uuxqt, и uux. Они содержат вывод, сгенерированный
каждой из соответствующих команд, сортируемый в различные файлы для каждой
системы. Таким образом, вывод uucico при вызове системы pablo пойдет в
.Log/uucico/pablo, в то время как uuxqt запишет в .Log/uuxqt/pablo.
Строки, записанные в различный lofiles - такие же как и при регистрации
Taylor.
Когда Вы включаете отладку с HDB-стилем, вывод пойдет в .Admin в
/var/spool/uucp. При соединении из вашей системы, информация об отладке
будет послана в Admin/audit.locan, в то время как вывод uucico при вызове
извне будет идти к .Admin/audit.
- 247 -
14. Электронная почта
Одно из наиболее видных использований сетей начиная с первых
сетей - это электронная почта. Она начиналась как простое
обслуживание, типа копирования файла одной машины для другой, и
конкатенирования его к mailbox файлу получателя. В основном email
этим и занимаеся, хотя возрастастающая сеть с комплексом требований
и увеличением загрузки сообщений сделала необходимой более
сложную схему.
Были изобретены различные стандарты обмена почты. Много
усилий было приложено для создания " мульти-медийной почты '',
которая включает изображения и звук в сообщения почты.
Очень большое количество программ транспортировки почты было
выполнено для системы Un*x. Одна из лучше всего известных - sendmail
Университета Berkeley. Первоначальный автор Eric Allman теперь
активно работает над sendmail снова. Имеются два Linux порта
доступных для sendmail-5.56c, один из которых будет описан в главе 16
.., в настоящее время разрабатываемая версия sendmail - 8.6.5.
Почтовый агент, наиболее используемый с Linux - smail-3.1.28,
который написан и обеспечен авторским правом Curt Landon Noll и
Ronald S. Karr. Он включен в большинство поставок Linux. В
последующем, мы будем обращаться к нему просто как smail, хотя
имеются другие версии, которые полностью отличны, и которые мы не
описываем здесь.
Сравнивая с sendmail, smail довольно молод. При обработке почты
без сложных требований маршрутизации, их возможности - довольно
близки. Для больших требований, однако, sendmail всегда побеждает,
потому что его схема конфигурации намного более гибка.
И smail и sendmail поддерживают набор файлов конфигурации,
которые должны быть настроены. Кроме информации, которая
- 248 -
требуется для запуска подсистемы почты (типа локального hostname),
имеется намного больше параметров, которые могут быть настроены.
Файл конфигурации sendmail сначала очень трудно понять Выглядит,
как будто ваша кошка ходила по вашей клавиатуре с нажатой клавишей
SHIFT. Smail файлы конфигурации более структурны и проще для
понимания чем sendmail, но не дают пользователю так много свободы в
настройке поведения mailer'ов. Однако, для малого UUCP или Internet
работа, требуемая для установки любого из них - приблизительно та же
самая.
В этой главе, мы будем иметь дело тем, чем email является и с
какими проблемами Вы, как администратор будете должны иметь дело.
Главы 15. и 16. дадут инструкции по установке smail и sendmail впервые.
К концу текущей главы мы кратко опишем установку пользователя
почты на многих Unix-подобных системах, включая Linux.
Для получения более подробной информации относительно
электронной почты на Linux, пожалуйста обратитесь в Electronic Mail
HOWTO Vince Skahan, который зарегистрирован comp.os.linux.announce
регулярно.
14.1 Что такое - Сообщения Почты?
Сообщение Почты вообще состоит из тела сообщения, которое
является текстом, написанным отправителем, и специальных данных,
определяющих получателей, транспортную среду, и т.д., подобно тому,
что Вы видите когда Вы рассматриваете почтовый конверт.
Эта административно-управленческая информация относится к
двум категориям; в первом классе - любые данные, который является
специфическими для транспортной среды, подобно адресу отправителя
и получателя. Это следовательно называется конвертом или оболочкой.
Это может быть преобразовано транспортным программным
обеспечением, при передаче сообщения.
Вторая - любые данные, необходимые для обработки сообщения
почты, которые - не часть любого транспортного механизма, типа
подчиненной строки сообщения, списка всех получателей, и даты. В
многих сетях, стало стандартным добавлять эти данные к сообщению
- 249 -
почты, формируя так называемый заголовок почты. Это отделено от
тела почты пустой строкой. (1)
1. Обычно добавляются сигнатура или .sig к сообщению почты, обычно
содержащая информацию относительно автора, наряду с шуткой или
девизом. Она отделяется от сообщения почты строкой, содержащей "--".
Большинство программного обеспечения для транспорта почты в
мире Unix использует формат заголовка, выделенный в RFC 822. Его
первоначальная цель - определить стандарт для использования на
ARPANET.
RFC 822 однако - только самый общий. Более современные
стандарты были задуманы, чтобы справиться с возрастанием
потребностей как, например, шифрование данных, поддержка набора
интернационального символа, и мульти-средств расширения почты
(MIME).
Всего эти стандарты, заголовка состоят из отдельных строк,
отделяемых символами перевода строки.
Типичный заголовок почты может выглядеть следующим образом:
From brewhq.swb.de!ora.com!andyo Wed Apr 13 00:17:03 1994 Return-Path:
Received: from brewhq.swb.de by monad.swb.de with uucp
(Smail3.1.28.1 #6) id m0pqqlT-00023aB; Wed, 13 Apr 94 00:17 MET DST
Received: from ora.com (ruby.ora.com) by brewhq.swb.de with smtp
(Smail3.1.28.1 #28.6) id ; Tue, 12 Apr 94 21:47 MEST
Received: by ruby.ora.com (8.6.8/8.6.4) id RAA26438; Tue, 12 Apr 94 15:56 -
0400 Date: Tue, 12 Apr 1994 15:56:49 -0400
Message-Id: <199404121956.PAA07787@ruby>
From: andyo@ora.com (Andy Oram)
To: okir@monad.swb.de
Subject: Re: Your RPC section
Обычно, все необходимые поля заголовка генерируются Вашим
mailer`ом, например elm (электронная почта), pine, mush, или mailx.
Некоторые однако необязательны, и могут быть добавлены
пользователем. Электронная почта, например, позволяет Вам
редактировать часть заголовка сообщения.
From: Это содержит адрес email отправителя, и возможно "реальное
- 250 -
имя''.
To: Это - адрес email получателя.
Subject: Описывает содержание почты в нескольких словах. По крайней
мере должен.
Date: Дата посылки почты.
Reply-To: Определяет адрес для ответа получателя. Это может быть
полезно, если Вы имеете несколько адресов, но хотите получать
большую часть почты только на том, который Вы используете наиболее
часто. Это поле необязательно.
Oranization: организация, которая обладает машиной из который почта
исходит. Это поле необязательно.
Message-ID: строка, сгенерированная транспортировщиком почты. Она
уникальна для этого сообщения.
Received: Каждый пункт, через который проходит ваша почта (включая
машины отправителя и получателя) вставляет такое поле в заголовок,
указывая имя пункта, идентичность сообщения, время и дату получения
сообщения, из какого пункта оно происходит, и которое транспортное
программное обеспечение использовалось. Это сделано чтобы Вы
могли проследить путь сообщения сообщения.
X-заголовок: mail-программы не должны жаловаться на заголовки,
которые начинаются с X-. Они используются, чтобы воплотить
дополнительные возможности, которые еще не реализованы в RFC.
Одно исключение к этой структуре - сама первая строка. Она
начинается с ключевого слова From, которое сопровождается пробелом
вместо двоеточия. Она содержит маршрут, время и дату, когда оно
было получено последней машиной, обрабатывавшей его, и
необязательную часть, определяющую, от которой главной ЭВМ оно
было получено.
Поле From предусмотрено для совместимости с несколько более
старым mailer'ами, и не используется особенно часто, за исключением
интерфейсами пользователя почты.
- 251 -
14.2 Как Передается Почта?
Вообще, Вы устанавлиаете почту, используя интерфейс подобный
mailx; или более сложный подобно elm, mush, или pine. Эти программы
называются средствами пользователя почты, или MUA для краткости.
Если Вы посылаете сообщение почты, программа интерфейса будет в
большинстве случаев вручать его другой программе, которая
называется средством транспорта почты, или MTA. На некоторых
системах, имеются различные средства транспорта почты для
локальной и отдаленной почты, на других, имеется только одно.
Команда для отдаленной обычно называется rmail, для другой - lmail
(если она существует).
Локальное получение почты, конечно, больше чем конкатенация
входящего сообщения к mailxbox получателя. Обычно, локальный MTA
поймет совмещение имен (установка локальных адресов получателя,
указывающих на другие адреса), и пересылку (переназначение почты
пользователя к некоторому другому адресату). Также, сообщения,
которые не могут быть переданы, должны обычно быть bounced, то есть
возвращенны отправителю наряду с некоторым сообщением ошибки.
Для отдаленного получения, используемое программное
обеспечение зависит от характера связи. Если почта должна быть
передана по сети, используя TCP/IP, обычно используется SMTP. SMTP
замещает Простой Протокол передачи Почты, и определен в RFC 788 и
821 RFC. SMTP обычно соединяется с машиной получателя
непосредственно.
В UUCP сетях, почта непосредственно не будет обычно передана,
но будет послана на главную ЭВМ адресата рядом систем
промежуточного звена. Чтобы посылать сообщение по UUCP, MTA
будет обычно выполнять rmail на системе пересылки, используя uux, и
подавать это сообщение на стандартном вводе.
Так как это выполняется для каждого сообщения отдельно, это
может производить значительную загрузку главного узлового хаба
почты, также как сотни малых файлов, занимающих
непропорциональное количество дискового пространства. (2)
Некоторые MTA следовательно позволяют Вам собирать отдельные
сообщения для отдаленной системы в одиночном командном файле.
Командный файл содержит команды SMTP, которые локальная главная
ЭВМ обычно выдала бы, если бы использовалось прямое SMTP
- 252 -
соединение. Это называется BSMTP, или пакетировка SMTP. Пакет
передается программе rsmtp или bsmtp на отдаленной системе, которая
будет проиведет ввод, как будто произошло нормальное SMTP
соединение.
14.3 Email Адреса
Для электронной почты, адрес состоит из по крайней мере имени
машины, обрабатывающей почту определенного человека, и
идентификацию пользователя, распознаваемую этой системой. Это
может быть имя входа в систему получателя, но может также быть что -
нибудь еще. Другая почтовая адресующая схема, подобно X.400,
использует более общий набор " атрибутов " которые используются,
чтобы искать главную ЭВМ получателя в X.500.
Способ интерпретации машинного имени зависит от сети, в
которую Вы включены.
Абоненты Internet твердо придерживаются RFC 822 стандарта,
который требует записи user@host.domain, где host.domain - полностью
квалифицированное имя главной ЭВМ области. В середине знак "в".
Потому что эта запись не включает маршрут до главной ЭВМ адресата,
но дает (уникальное) hostname взамен, это называется абсолютным
адресом.
В оригинале UUCP среды, распространенная форма была
path!host!user (путь!главная ЭВМ!пользователь), где путь описывал
последовательность главных ЭВМ для достижения главной ЭВМ
адресата. Эта конструкция называется записью пути удара, потому что
метка восклицания называется "Ударом". Сегодня, много uucp-
подобных сетей приняли RFC822, и понимают этот тип адреса.
Однако, имеется способ определить маршруты RFC822-
совместимыми способоами: < @hostA,@hostB: user@hostC > обозначает
адрес пользователя на hostC, где HostC должен быть
достигнут через hostA и hostB (в этом порядке).
Этот тип адреса - часто называется адресом маршрута.
- 253 -
Когда, имеется " % " оператор адреса: user%hostB@hostA будет
сначала послан hostA, который расширяет знак процента в знак "@".
Адрес - теперь user@hostB, и Mailer будет счастливо передавать ваше
сообщение к hostB, который передаст его пользователю. Этот тип
адреса иногда упоминается как "Ye Olde ARPANET Kludge''. Однако,
много средств транспорта почты генерируют этот тип адреса.
Другие сети имеют различные способы адресации. Decnet-
основанные сети, например, используют два двоеточия как разделитель
адресов, производя адрес так - главная ЭВМ::пользователь. X.400
стандарт использует полностью отличную схему, описывая получателя
набором пар свойств, подобно стране и организации.
В сети FidoNet, каждый пользователь идентифицирован кодом
подобно 2:320/204.9, состоящем из четырех чисел, обозначающих: зону
(2 - для Европы), сеть (320 для Парижа), узел (локальный узловой хаб),
и указатель (PC индивидуального пользователя). Fidonet адреса можгут
быть отображены на RFC 822; вышеупомянутое написали бы как
Thomas.Quinot@p9.f204.n320.z2.fidonet.org.
14.4 Как Работает Маршрутизация?
Процесс направления сообщения на главную ЭВМ получателя
называется маршрутизация. Кроме нахождения пути от пункта посылки
до адресата, это включает проверку ошибок также как оптимизацию
стоимости и быстродействие.
Имеется большое различие между UUCP способом маршрутизации
дескрипторов пункта, и способром, которым делает пункт Internet. В
Internet, основная работа направления данных на главную ЭВМ
получателя (если только известен адрес IP) выполнен IP уровнем
работы с сетями, в то время как в UUCP зоне, маршрут должен быть
обеспечен пользователем, или сгенерироваться средством передачи
почты.
14.4.1 Маршрутизация Почты в Internet
В Internet от главной ЭВМ адресата зависит полностью,
- 254 -
выполняется ли любая специфическая маршрутизация почты вообще.
Значение по умолчанию должно передать сообщение главной ЭВМ
адресата непосредственно, и оставлять фактическую маршрутизацию
данных IP транспортому уровню.
Большинство пунктов будет обычно направлять всю почту к
доступному серверу почты, который способен обработать все это
движение. Чтобы объявить это обслуживание, пункт создает так
называемую запись MX для их локальной области в DNS базе данных.
MX замещает Экспреобразователь Почты и в основном заявляет, что
главная ЭВМ сервера желает действовать как механизм продвижения
данных почты для всех машин в этой области. MX записи можгут
также использоваться, чтобы обработать траффик для главных ЭВМ,
которые не соединены с Internet самостоятельно, подобно UUCP сетям,
или сетям компаний с главными ЭВМ, несущими конфиденциальную
информацию.
MX записи также имеют приоритет, связанный с ними. Это -
положительное целое число, которое позволяет определить
очередность посылки почты.
Предположите, что организация Foobar Inc, хочет всю их почту
обрабатывать их машиной, называемой mailhub. Они будут иметь запись
MX примерно так в DNS базе данных:
foobar.com IN MX 5 mailhub.foobar.com
Это объявляет mailhub.foobar.com как обработчик почты для foo-
bar.com со значением предпочтения 5. Главная ЭВМ, которая хочет
передавать сообщение joe@greenhouse.foobar.com, проверит DNS для
foobar.com, и найдет запись MX, указывающую на mailhub. Если не
имеется никакого MX с предпочтением меньше чем 5, сообщение будет
передано на mailhub.
14.4.2 Маршрутизация Почты в Мире UUCP
Маршрутизация Почты на UUCP сетях намного больше сложна чем
на Internet, потому что транспортное программное обеспечение не
выполняет никакой маршрутизации непосредственно. В более ранних
временах, вся почта была должна быть адресована, используя пути
- 255 -
удара. Пути Удара определяли список главных ЭВМ для передачи
сообщения, отделяемые метками восклицания, и с последующим
именем пользователя. Чтобы адресовать письмо Janet Пользователю на
машине, именованной moria, Вы использовали бы путь
eek!swim!Moria!Janet. Это послало бы почту от вашей главной ЭВМ до
eek, оттуда на swim и в заключение к moria.
Очевидный недостаток этой методики состоит в том, что требуется,
чтобы Вы помнили много относительно сетевой топологии, и т.д.
Намного хуже, то что изменения в сетевой топологии --- подобно
удаляемым связям или удаляемым главным ЭВМ --- могут заставлять
сообщения терпеть неудачу просто потому что Вы не знали бо
изменении. И в заключение, в случае, если Вы посылаете в различные
места, Вы будете должны модифицировать все эти маршруты.
Первый шаг в идентификации hostname был основание UUCP
Отображающего Проекта. Он размещен в Rutgers Университете, и
регистрирует все официальные UUCP hostname, наряду с информацией
относительно их соседей UUCP и их географическего расположения,
создавая уверенность, что никакой hostname не используется дважды.
Информация, собранная Проектом Отображения издана как Карты
Usenet, которые распределены регулярно через Usenet. (4) типичный
вход системы в Карте (при удалении комментариев) походит на это:
4. Maps for sites registered with The UUCP Mapping Project
are distributed through the newsgroup comp.mail.maps;
other organizations may publish separate maps for their network.
moria
bert(DAILY/2),
swim(WEEKLY)
Этот вход говорит, что moria имеет связь с bert, которую она
вызывает дважды в день, и со swim, которую она вызывает
еженедельно. Мы возвратимся к формату файлов Карты позже.
Используя информацию связности, обеспеченной в картах, Вы
может автоматически генерировать полные пути от вашей главной
ЭВМ до любого пункта адресата. Эта информация обычно сохраняется
в файле путей, также называемом pathalias база данных. Если Карты
устанавливают, что Вы можете достигать bert через ernie, то pathalias
- 256 -
вход для moria, сгенерированный из отрывка Карты выше выглядит
следующим образом:
moria ernie!bert!moria!%s
Если, который Вы теперь даете адрес адресата janet@moria.uucp, ваш
MTA, выберет маршрут, показанный выше, и пошлет сообщение ernie с
адресом конверта bert! Moria! Janet.
Формирование файла путей из полных карт Usenet - не очень
хорошая идея. Информация, обеспеченная в них обычно искажается, и
иногда устаревает. Следовательно, только ряд главных главных ЭВМ
использует полные UUCP всемирные карты, чтобы формировать их
файл путей.
Большинство абонентов поддерживает информацию
маршрутизации для абонента в их соседстве(окрестностях), и посылают
почту абоненту, которого они не находят в их базах данных на более
интеллектуальную главную ЭВМ с более полной информацией
маршрутизации. Эта схема называется интеллектуально - главной
маршрутизацией.
14.4.3 Смешивание UUCP и RFC 822
Самое лучшее исправление против проблем маршрутизации почты
в UUCP сетях - принятие системы имени области в UUCP сетях.
Конечно, Вы не можете сделать запрос блока преобразования имен над
UUCP. Однако, многие UUCP абоненты сформировали малые области,
которые координируют их маршрутизацию внутренне. В Картах, эти
области объявляют одну или две главных ЭВМ как их ворота почты,
так, чтобы не был входа карты для каждой главной ЭВМ в области.
Ворота обрабатывают всю почту, которая течет в и вне области. Схема
маршрутизации внутри области полностью невидима для внешнего
мира.
Это работает очень хорошо с интеллектуально - главной схемой
маршрутизации, описанной выше. Глобальная переменная,
направляющая информацию поддерживается воротами; малый
Главные ЭВМ внутри области получат только малый файл путей,
который перечисляет маршруты внутри их области, и маршрута к хабу
- 257 -
почты. Даже ворота почты не должны иметь информации
маршрутизации для каждой одиночной UUCP главной ЭВМ в мире. Им
нужно иметь маршруты к всем областям в их базах данных. Например,
pathalias вход, показанный ниже направляет всю почту для абонента в
sub.org области к smurf:
.sub.org swim!smurf!%s
Любая почта, адресованная claire@jones.sub.org будет послана swim с
адресом конверта smurf! Jones! Claire.
Иерархическая организация области называет место, позволяет
серверам почты смешивать более специфические маршруты с менее
специфическими. Например, система во Франции может иметь
специфические маршруты для подобластей fr, но направлять любую
почту для главных ЭВМ в США область к некоторой системе в США.
Таким образом,, область-основанная маршрутизация (как эта методика
называется) значительно уменьшает размер баз данных маршрутизации
также как административных необходимых непроизводительных
затрат.
Основная польза использования имен области в UUCP среде то что
согласие с RFC 822, разрешает простой переход между UUCP сетями и
Internet. Многие UUCP области в настоящее время имеют связь с
воротами Internet, которые действуют как их интеллектуально -
главные. Посылка сообщений через Internet быстрее, и информация
маршрутизации намного более надежна, потому что главные ЭВМ
Internet могут использовать DNS вместо Карт Usenet.
Чтобы быть доступным из Internet, uucp-основанные области
обычно имеют ворота в Internet, и объявляют запись MX для них (MX
записи были описаны выше). Например, примите, что moria
принадлежит orcnet.org области. Gcc2.groucho.edu действует как ворота
в Internet. Moria следовательно использовал бы gcc2 как
интеллектуально - главного (smart-host), так, чтобы вся почта для
иностранных областей была передан через Internet. С другой стороны,
gcc2 объявил бы запись MX для orcnet.org, и передавал всю входящую
почту для orcnet абонента к moria.
Единственая остающаяся проблема состоит в том, что UUCP
транспортные программы не могут иметь дело с квалифицированными
именами области. Большинство UUCP программ было разработано,
чтобы справиться с именами пункта до восьми символов, и
использование не-алфавитно-цифровых символов типа точек -
- 258 -
полностью вне правил.
Следовательно, некоторое отображение между RFC 822 именами и
UUCP hostname'ами необходимо. Один общий способ отображения
FQDN на имена UUCP состоит в том, чтобы использовать pathalias файл
для этого:
moria.orcnet.org ernie!bert!moria!%s
Это произведет чистый путь uucp-стиля из адреса, который
определяет полностью квалифицированное имя области. Некоторые
mailer'ы обеспечивают специальные файлы для этого; sendmail,
например, использует uucpxtable.
Обратное преобразование иногда требуется при посылке почты из
UUCP сети в Internet. Как только отправитель почты использует
полностью квалифицированное имя области в адресе адресата, этой
проблемы можно избежать не удаляя имя области из адреса конверта
при пересылке сообщения на smart-host. Однако, имеется все еще
некоторый UUCP абонент, который - не есть часть любой области. Они
- обычно определяются, конкатенируя псевдо область uucp.
14.5 Pathalias и Формат файла Карты
Pathalias база данных обеспечивает главную, направляющую
информацию в uucp-основанных сетях. Типичный вход походит на этот
(имя пункта, и путь отделяется МЕТКАМИ ТАБУЛЯЦИИ):
moria.orcnet.org ernie!bert!moria!%s
moria ernie!bert!moria!%s
Это направляет любое сообщение к moria через ernie и bert. moria
полностью составное имя и имя UUCP должно быть задано, если mailer
не имеет отдельного способа отображения между этими именами.
Если Вы хотите направлять все сообщения на главные ЭВМ внутри
некоторой области на реле почты, Вы может также определять путь в
pathalias базе данных, давая имя области как целевой, с
предшествующей точкой. Например, если все главные ЭВМ в sub.org
- 259 -
могут быть достигнуты через swim!smurf, pathalias вход мог бы выглядеть
следующим образом:
\&.sub.org swim!smurf!%s
Запись в pathalias файл является допустимой только, когда Вы
имеете пункт который не должен делать много маршрутизации. Если
Вы должны делать маршрутизацию для большого количества главных
ЭВМ, лучший способ - использовать pathalias команду, чтобы создать
файл из файлов карты. Карты могут поддерживаться намного проще,
потому что Вы можете просто добавлять или удалять систему,
редактируя вход карты системы, и вновь создавать файл карты. Хотя
карты, изданные Usenet Проектом не очень используются для
маршрутизации, UUCP сети могут обеспечивать информацию
маршрутизации в их собственном наборе карт.
Файл карты в основном состоит из списка абонентов, печатая
абонентов каждого опроса системы. Имя системы начинается в первом
столбце, и сопровождается отделенным запятой списком связей.
Список может быть продолжен через символ перевода строки, если
следующая строка начинается с метки табуляции. Каждая связь состоит
из имени пункта, сопровождаемого стоимостью, данной в скобках.
Стоимость - арифметическое выражение, состоящеее из чисел и
символических издержек. Строки, начинающиеся знаком мусора
игнорируются.
Например, рассмотрите moria, который опрашивает swim .tobirds.com
два раза в день, и bert.sesame.com только раз в неделю. Кроме того,
связь с bert использует медленный 2400bps модем. Moria издал бы
следующий вход карт:
moria.orcnet.org
bert.sesame.com(DAILY/2),
swim.twobirds.com(WEEKLY+LOW)
moria.orcnet.org = moria
Последняя строка делала бы это известным под именем UUCP.
Обратите внимание, что это должно быть DAILY/2, при вызове два
раза в день фактически половины стоимость для этой связи.
Использование информации из таких файлов карты, pathalias
способно вычислить оптимальные маршруты к любому пункту
- 260 -
адресата, перечисленному в файле путей, и производить pathalias базу
данных из этого, которая может использоваться для маршрутизации для
этого абонента.
Pathalias обеспечивает пару других возможностей подобно
скрывающемуся пункту (то есть абонент, доступный только через
ворота) и т.д. См. страницу для pathalias для уточнения, также как для
полного списка издержек связи.
Комментарии в файле карты вообще содержат дополнительную
информацию относительно абонента, описанного в этом. Имеется
жесткий формат, чтобы определить их, так, чтобы это могло быть
восстановлено(отыскано) из карт. Например, программа, называемая
uuwho использует базу данных, созданную из файлов карты, чтобы
отобразить эту информацию приятно форматируемым способом.
Когда Вы регистрируете ваш пункт в организации, которая
распределяет файлы карты, Вы вообще должны заполнить такой вход
карты.
Ниже - типовой вход карты (фактически, это - то для моего пункта):
#N monad, monad.swb.de, monad.swb.sub.org
#S AT 486DX50; Linux 0.99
#O private
#C Olaf Kirch
#E okir@monad.swb.de
#P Kattreinstr. 38, D-64295 Darmstadt, FRG
#L 49 52 03 N / 08 38 40 E
#U brewhq
#W okir@monad.swb.de (Olaf Kirch); Sun Jul 25 16:59:32 MET
DST 1993
#
monad brewhq(DAILY/2)
# Domains
monad = monad.swb.de
monad = monad.swb.sub.org
Незаполненное пространство после первых двух символов -
МЕТКА ТАБУЛЯЦИИ. Значение большинства полей довольно
очевидно; Вы получите детализированное описание в любой области,
в которой Вы регистрируетесь. L поле наиболее забавно: оно задает
вашу географическую позицию в lati-tude/longitude и используется, чтобы
рисовать карты postscript, которые показывают всех абонентов для
- 261 -
каждой страны.
14.6 Конфигурирование elm
Elm замещает " электронную почту " и является одним из наиболее
приемлемых инструментальных средств Unix. Она обеспечивает
полноэкранный интерфейс с возможностью справки. Мы не будем
обсуждать, здесь как использовать elm, и остановимся только на опциях
конфигурации.
Теоретически, Вы можете выполнять неконфигурированный elm, и
все работает хорошо ---, если Вы очень удачливы. Но имеются
несколько опций, которые должны быть установлены.
При запуске elm читает набор переменных конфигурации из elm.rc
файла в /usr/lib/elm. Затем, она будет пытаться читать файл .elm/elmrc в
вашем исходном каталоге. Вы обычно не пишите этот файл
самостоятельно. Он создается когда Вы выбираете "сохранить опции" в
меню опций elm.
Набор опций для частного elmrc файла также доступен в глобальном
elm .rc файла. Большинство установок в вашем частном elmrc файле
отменяет таковые глобального файла.
14.6.1 Глобальные Опции elm
В глобальном elm .rc файле, Вы должны установить опции, которые
относятся к имени вашего host. Например, в Виртуальном
Пивоваренном заводе, файл содержал бы следующее:
#
# The local hostname
hostname = vlager
#
# Domain name
hostdomain = .vbrew.com
#
# Fully qualified domain name hostfullname = vlager.vbrew.com
Этот набор опций ориентирует elm относительно локального
hostname. Хотя эта информация редко используется, Вы должны
- 262 -
установить эти опции.
Обратите внимание, что эти опции воздействуют только в глобальном
файле конфигурации; когда они найдены в вашем частном elmrc, они
будут игнорироваться.
14.6.2 Национальный Набор Символов
Недавно имелись предложения исправить RFC 822 стандарт, чтобы
поддерживать различные типы сообщений, типа простых текстовых,
двоичных данных, файлов Postscript, и т.д. Набор стандартов и RFC,
покрывающий эти аспекты, обычно упоминается как MIME, или
Многоцелевые Расширения Почты Internet. Между прочим, это также
позволяет получателю узнать, использовался ли набор символов
отличный от стандартного ASCII, при написании сообщения. Это
обеспечивается elm до некоторой степени.
Набор символов, используемый Linux внутренне, чтобы представить
символы обычно упоминается как ISO-8859-1, что является именем
стандарта, которому он соответствует. Это также известно как
Латинский -1. Любые символы в сообщении из этого набора символов
должны иметь следующую строку в заголовке:
Content-Type: text/plain; charset=iso-8859-1
Система получения должна распознать это поле и принять
соответствующие меры при отображении сообщения. Значение по
умолчанию для текстовых сообщений - значение charset us-ascii.
Чтобы отображать сообщения с набором символов отличным от
ASCII, elm должен знать, как печатать эти символы. По умолчанию,
когда elm получает сообщение с charset полем отличным от us-ascii, она
пробует отображать сообщение, используя команду, называемую
metamail. Сообщения, которые требуют, чтобы мета почта отобразилась,
показываются с " M " в самом первом столбце в экране краткого обзора.
Так как Linux набор символов - ISO-8859-1, вызов metamail не
необходим для отображения сообщения, использующего этот набор
символов. Если еlm знает, что дисплей понимает ISO-8859-1, она не
будет использовать metamail, а отобразит сообщение непосредственно.
Это может быть выполнено, установкой следующей опции в
- 263 -
глобальном elm .rc:
displaycharset = iso-8859-1
Обратите внимание, что Вы должны установить эти опции даже,
когда Вы никогда не собираетесь посылать или получать сообщения,
которые фактически содержат символы отличные от ASCII. Это -
потому что люди, которые посылают такие сообщения обычно
конфигурируют их mailer'ом, чтобы поместить соответствующий тип
содержания: поле в заголовке почты по умолчанию, посылают или нет
они только ascii сообщения.
Однако, установки этой опции в elm .rc не достаточно. Проблема
состоит в том, что при отображении сообщения, elm вызывает
библиотечную функцию для каждого символа, чтобы определить
является ли он печатаемым или нет. По умолчанию, эта функция
распознает только символы ASCII, и отображает все другие символы
как "^?". Вы можете преодолеть это, устанавливая переменную среды
LC CTYPE как ISO-8859-1, которая сообщает, что библиотека приняла
символы Latin-1 как печатаемые. Поддержка для этих и других
возможностей доступна начиная с libc-4.5.8.
При посылке сообщений, которые содержат специальные символы
из ISO-8859-1, Вы должны удостовериться, что установлены еще две
переменные в elm .rc файле:
charset = iso-8859-1
textencoding = 8bit
Это заставит elm сообщить набор символов как ISO-8859-1 в
заголовке почты, и посылать это как 8 битовые значения (значение по
умолчанию - все символы 7 бит).
Конечно, любая из этих опций может также быть установлена в
частном elmrc файле вместо глобального.
15. Получение smail и Выполнение
Эта глава даст Вам быстрое введение в установку smail, и краткий
обзор функциональных возможностей, которые он обеспечивает. Хотя
- 264 -
smail в значительной степени совместим с sendmail в поведении, их
файлы конфигурации полностью отличны.
Основной файл конфигурации - /usr/lib/smail/config. Вы всегда
должны редактировать этот файл, чтобы отразить значения,
специфические для вашего пункта. Другие файлы, которые
конфигурируют маршрутизацию и транспортные опции, могут также
использоваться.
По умолчанию, smail передает всю входящую почту немедленно.
Если Вы имеете относительно высокий траффик, Вы может взамен
заставить smail, собирать все сообщения в так называемой очереди, и
обрабатывать их равномерно.
При обработке почты внутри TCP/IP сети, smail - часто
выполняются в daemon режиме: в загрузочное время системы, он
вызывается из rc.inet2, и помещает себя в фон, где ждет входящие TCP
соединения на SMTP порте (обычно порт 25). Это очень полезно
всякий раз, когда Вы ожидаете значительный траффик, потому что smail
не запущен отдельно для каждого входящего соединения.
Smail имеет множество флагов, которые управляют этим
поведением. Удачно что, smail поддерживает ряд стандартных режимов
- операции, которые допускаются, когда Вы вызываете его
специальным именем команды, подобно rmail, или smtpd. Мы
столкнемся с большинством их при обсуждении различных
возможностей smail.
Имеются две связи с smail, который Вы должны иметь при всех
обстоятельствах; а именно /usr/bin/rmail и /usr/sbin/sendmail. Когда Вы
составляете и посылаете сообщение почты средством пользователя
подобно elm, сообщение будет переправлено в rmail для получения. Тот
же самое случается с почтой, приходящей в через UUCP. Некоторые
версии elm, однако, вызывают /usr/sbin/sendmail вместо rmail, так что Вы
нуждаетесь в обоих. Например, если Вы храните smail в /usr/local/bin,
напечатайте в оболочке:
# ln -s /usr/local/bin/smail /usr/bin/rmail
# ln -s /usr/local/bin/smail /usr/sbin/sendmail
Если, который Вы хотите углубиться далее в подробности
- 265 -
конфигурирования smail, пожалуйста, обращаетесь к руководству smail.
Если он не включен в вашу любимую поставку Linux, Вы может
получить его вплоть до исходников.
15.1 UUCP Установки
Чтобы использовать smail в uucp среде, базисная установка довольно
проста. Сначала, Вы должны удостовериться, что Вы имеете две
символических связи к rmail и sendmail, упомянутому выше. Если Вы
ожидаете получать SMTP пакеты от другого абонента, Вы также
должны сделать rsmtp связь к smail.
В smail распределении Vince Skahan, Вы найдете типовой файл
конфигурации. Он называется config.sample и постоянно находится в
/usr/lib/smail. Вы должны копировать его в конфигурации и
редактировать его, чтобы отразить значения, специфические для вашего
пункта.
Примите, что ваш пункт именован swim .tobirds.com, и
зарегистрирован в картах UUCP как swim. Ваш smarthost - ulysses. Тогда
ваш файл конфигурации должен выглядеть следующим образом:
#
# Our domain names
visible domain=two.birds:uucp
#
# Our name on outgoing mails
visible name=swim.twobirds.com #
# Use this as uucp-name as well uucp name=swim.twobirds.com
#
# Our smarthost
smart host=ulysses
Первое утверждение сообщает smail относительно областей,
которым ваш пункт принадлежит. Вставьте их имена здесь, отделяемые
двоеточиями. Если ваше имя пункта зарегистрировано в картах UUCP,
Вы должен также добавить uucp.
При отправке(получении) сообщения почты, smail определяет имя
вашего host, используя hostname системный вызов (2), и проверяет адрес
- 266 -
получателя для этого hostname. Если адрес соответствует одному из
имен, или неквалифицированному hostname, получатель,
рассматривается локальным, и smail пытается передавать сообщение
пользователю.
Видимое имя должно содержать одиночное, полностью
квалифицированное имя области вашего пункта, которое Вы хотите
использовать при выходе почты. Это имя используется при
производстве адреса отправителя для всей почты. Вы должны
удостовериться, чтобы использовать имя, которое smail распознает
относительно локального host (то есть hostname с одной из областей,
перечисленных в атрибуте области).
Последнее утверждение устанавливает путь, используемый для
маршрутизации smart-host (описанный в разделе 14.4). С этой типовой
установкой, smail будет передавать любую почту для отдаленных
адресов интеллектуальному host. Путь, заданный в интеллектуальном
атрибуте пути будет использоваться как маршрут до интеллектуального
host. Так как сообщения будут передан через UUCP, атрибут должен
определить систему, известную вашему UUCP программному
обеспечению. Пожалуйста обратитесь к главе 13. При создании пункта,
известного UUCP.
Имеется одна опция, используемая в вышеупомянутом файле,
который мы не объяснили; это - имя uucp. Причина использовать
опцию: По умолчанию, smail использует значение, возвращенное
hostname (2) для uucp-специфических вещей типа возвращающегося
пути, данного в строке From заголовка. Если ваш hostname не
зарегистрирован в UUCP проекте, Вы должен сообщить, чтобы smail
использовал взамен ваше полностью квалифицированное имя области.
Это может быть выполнено, добавлением опции имени uucp к файлу
конфигурации.
Имеется другой файл в /usr/lib/smail, называемый paths.sample. Это -
пример файла путей. Однако, Вы не будете нуждаться в нем, если Вы
не имеете связей почты больше чем к одному пункту. Если нет, Вы
будете должны написать один непосредственно, или генерировать
один из карт Usenet. Файл путей будет описан позже в этой главе.
- 267 -
15.2 Установки для локальной сети
Если Вы имеете пункт с двумя или больше главными ЭВМ,
соединенными локальной сетью (LAN), Вы будете должны обозначить
один host, который обрабатывает ваше UUCP соединение со внешним
миром. Представте, что мы снова на Виртуальном Пивоваренном
заводе, и vstout установлен как UUCP ворота.
В среде с сетевой структурой, самое лучшее хранить
пользовательские mailbox на одиночной файловой системе, которая nfs-
связана со всеми главными ЭВМ. Это позволяет пользователям
двигаться от машины до машины, без необходимости перемещать их
почту (или даже хуже, проверять приблизительно три или четыре
машины для недавно прибытой почты каждое утро). Следовательно,
Вы также хотите делать адреса отправителя независимыми от машины.
Общая практика - использовать область, как адрес отправителя, вместо
hostname. Janet, например, определил бы janet@vbrew.com вместо
janet@vale.vbrew.com. Мы объясним ниже, как заставить сервер
распознать имя области как допустимое имя для вашего пункта.
Другой способ хранения всех mailbox на центральном host состоит в
том, чтобы использовать POP или IMAP. POP замещает Протокол
Почтового отделения и допускает пользователей, обращаться к их
mailbox по TCP/IP. IMAP, интерактивный Протокол Доступа Почты
подобен POP, но более общий. И клиентура и серверы для IMAP и POP
была пренесена на Linux, и доступна из sunsite.unc.edu ниже
/pub/Linux/system/Network.
15.2.1 Написание Файлов Конфигурации
Конфигурация для Пивоваренного завода работает следующим
образом: все главные ЭВМ за исключением сервера почты vstout
непосредственно направляют всю почту к серверу, используя
маршрутизацию smart host. Vstout непосредственно посылает всю почту
реальному smart host, который направляет всю почту Пивоваренного
завода; этот host называется moria.
Стандартный файл конфигурации для всех главных ЭВМ отличных
от vstout походит на это:
#
- 268 -
# Our domain:
visible domain=vbrew.com
#
# What we name ourselves
visible name=vbrew.com
#
# Smart-host routing: via SMTP to vstout
smart path=vstout
smart transport=smtp
Это очень похоже на то, что мы использовали для uucp пункта.
Основное различие - то, что транспорт, используемый, чтобы послать
почту smart host, конечно, SMTP. Атрибут области заставит smail
использовать имя области вместо локального hostname на всей почте.
На UUCP воротах vstout, файл конфигурации немного отличный:
#
# Our hostnames:
hostnames=vbrew.com:vstout.vbrew.com:vstout
#
# What we name ourselves
visible name=vbrew.com
#
# in the uucp world, we're known as vbrew.com
uucp name=vbrew.com
#
# Smart transport: via uucp to moria
smart path=moria
smart transport=uux
#
# we're authoritative for our domain
auth domains=vbrew.com
Этот файл конфигурации использует отличную схему, чтобы
сообщить smail, чем локальный host вызывается. Вместо того, чтобы
давать список областей и позволять находить hostname системным
вызовом, он определяет список явно. Вышеупомянутый список
содержит, и полностью квалифицированные и неквалифицированные
hostname, и область. Это заставит smail распознать janet@vbrew.com как
локальный адрес, и передавать сообщение janet.
- 269 -
Auth переменная областей называет области, для которых vstout
является авторитарным. То есть если smail получает любую почту,
адресованную host .vbre.com, где host не называет существующую
локальную машину, он отклоняет сообщение и возвращает это
отправителю. Если этот вход не представлен, любое такое сообщение
будет послано smart-host, который возвратит его к vstout, и так далее,
пока оно не будет отброшено из-за превышения максимального счета
посылки на небольшое расстояние.
15.2.2 Выполнение smail
Сначала, Вы должны решить, выполниться ли, smail как отдельный
daemon, или управляет SMTP портом и smail вызывается только всякий
раз, когда SMTP соединение запрошено от некоторого клиента.
Обычно, Вы предпочтете операцию daemon на сервере почты, потому
что это загружает машину гораздо меньше чем порождение smail много
раз для каждого одиночного соединения. Поскольку сервер почты
передает большинство входящей почты непосредственно
пользователям, Вы выберете операцию inetd на большинстве других
главных ЭВМ.
Для любого режима работы, который Вы выбираете для каждого
индивидуального host, Вы должны удостовериться, что Вы имеете
следующий вход в вашем файле /etc/services:
smtp 25/tcp # Simple Mail Transfer Protocol
Это определяет TCP число порта, которое smail должен
использовать для SMTP диалогов. 25 - стандарт, определенный
Назначенными Числами RFC.
В daemon режиме, smail поместится в фон, и будет ждать соединения
на SMTP порте. Когда соединение происходит, он ветвится и проводит
SMTP диалог с равным процессом. Smail daemon обычно запускается,
как команда rc.inet2, используя следующую команду:
/usr/local/bin/smail -bd -q15m
-bd флаг включает daemon режим, а -q15m делает обработку
сообщений в очереди каждые 15 минут.
- 270 -
Если Вы хотите использовать inetd взамен, ваш файл /etc/inetd.conf,
должен содержать строку:
smtp stream tcp nowait root /usr/sbin/smtpd smtpd
Smtpd должен быть символическая связь к smail двоичному. Не
забудьте, что Вы должны заставить inetd повторно-читать inetd.conf,
посылая ему сигнал HUP после создания этих изменений.
Daemon режим и inetd режим взаимно исключающиеся. Если Вы
выполняете smail в deamon режиме, Вы должны удостовериться, и
прокомментировать любую строку в inetd.conf для smtp обслуживания.
При наличии inetd управления smail, удостоверитесь, что rc.inet2 не
запускает smail daemon.
15.3 Если Не Проходит ...
Если кое-что идет неправильно с вашей установкой, имеется ряд
возможностей, которые могут помочь Вам найти корень проблемы.
Первое место, которое нужно проверить - регистрационные файлы
smail. Они сохраняются в /var/spool/smail/log, и именованы logfile и
paniclog, соответственно.
Типичный вход в logfile походит на это:
04/24/94 07:12:04: [m0puwU8-00023UB] received
| from: root
| program: sendmail
| size: 1468 bytes
04/24/94 07:12:04: [m0puwU8-00023UB] delivered
| via: vstout.vbrew.com
| to: root@vstout.vbrew.com
| orig-to: root@vstout.vbrew.com
| router: smart host
| transport: smtp
Это показывает, что сообщение от root до root@vstout.vbrew.com
было правильно передано host vstout над SMTP.
Сообщения smail не могут быть переданы, генерацией входа в
регистрационном файле, но сообщение об ошибке передается:
- 271 -
04/24/94 07:12:04: [m0puwU8-00023UB] received
| from: root
| program: sendmail
| size: 1468 bytes
04/24/94 07:12:04: [m0puwU8-00023UB] root@vstout.vbrew.com ... deferred
(ERR 148) transport smtp: connect: Connection refused
Вышеупомянутая ошибка типична для ситуации, в которой smail
правильно распознает, что сообщение должно быть передан к vstout, но
не был способен соединиться с SMTP обслуживанием по vstout. Если
это случается, Вы или имеете проблему конфигурации, или поддержка
TCP отсутствует в вашем smail binaries.
Эта проблема не так уж необыкновена, как можно было думать. Имелся
бы исходник smail binaries, даже в некоторых распределениях Linux, без
поддержки для работы с сетями TCP/IP. Если дело обстоит так, Вы
должны компилировать smail самостоятельно. Устанавливая smail, Вы
можете проверять, имеет ли он TCP поддержку работы с сетями telnet к
SMTP порту на вашей машине. Успешное соединие с SMTP сервером,
показывается ниже:
$ telnet localhost smtp
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 monad.swb.de Smail3.1.28.1 #6 ready at Sun, 23 Jan 94
19:26 MET
QUIT
221 monad.swb.de closing connection
Если этот тест не производит SMTP заголовок (строка,
начинающаяся с 220 кода), сначала удостовертесь, что ваша
конфигурация действительно правильна прежде, чем компилировать
smail самостоятельно, как описано ниже.
Если Вы сталкиваетесь с проблемой с smail, и Вы неспособны
разместить сообщения об ошибках smail, Вы можете включить
сообщения отладки. Вы можете сделать это используя -d флаг,
необязательно сопровождаемый числом, определяющим уровень
точности. Smail будет печатать отчет на экран, который может давать
- 272 -
Вам большое количество подсказок относительно того что, идет
неправильно.
15.3.1 Компиляция smail
Если Вы знаете наверняка, что smail испытывает недостаток TCP
поддержки сети, Вы должны получить исходник. Он возможно
включен в ваше распределение, если Вы получили его через CD-ROM,
иначе Вы можете получать его из сети через FTP.
При компилировании smail, лучше всего работать с набором файлов
конфигурации из newspak распределения Vince Skahan's. Чтобы
компилировать в TCP драйвере работы с сетями, Вы должны
установить макркоманду КОНФИГУРАЦИИ ДРАЙВЕРА в conf/EDITME
файле к или bsd-сети или arpa-сети. Вышеупомянутые подходят для
инсталляции LAN, но Internet требует arpa-сети. Различие между этими
двумя - в том, что последний имеет специальный драйвер для BIND
обслуживания, которое способно распознать записи MX.
15.4 Режимы доставки Почты
Как отмечено выше, smail способен передать сообщения
немедленно, или ставить их в очередь для обработки позже. Если,
который Вы выбираете очередь, smail сохранит всю почту в каталоге
сообщений /var/spool/smail.
Вы можете выбирать один из трех режимов получения,
устанавливая атрибут режима получения в файле конфигурации как
активный, фоновый, или поставленный в очередь.
Если Вы включаете формирование очереди, Вы должны
удостовериться, что очередь проверяется регулярно; возможно каждые
10 или 15 минут. Если Вы выполняете smail в daemon режиме, Вы
должны добавить опцию -q10m в командной строке. В качестве
альтернативы, Вы можете вызывать runq из cron в этих интервалах.
Runq должен быть связан с smail.
Вы можете отображать текущую очередь почты, вызывая smail с -bp
опцией. Так же, Вы можете делать mailq связь с smail, и вызывать mailq:
- 273 -
$ mailq -v
m0pvB1r-00023UB From: root (in /var/spool/smail/input)
Date: Sun, 24 Apr 94 07:12 MET DST
Args: -oem -oMP sendmail root@vstout.vbrew.com Log of transactions:
Xdefer: reason: (ERR 148) transport smtp: connect:
Connection refused
Это показывает одиночное сообщение, в очереди сообщений. Файл
регистрации (который отображается, если Вы даете mailq -v опцию)
может давать дополнительную причину, почему оно все еще ждет
получения.
Даже, когда Вы не используете формирование очереди, smail
будет иногда помещать сообщения в очередь, когда он находит
непосредственные сбои получения по нерезидентной причине. Для
SMTP соединений, это может быть недоступный host; но сообщения
могут также быть отсрочены, когда файловая система полна.
15.5 Разнообразная конфигурация Опций
Имеется очень большое количество опций, которые Вы можете
устанавливать в файле конфигурации, которые, хотя и полезны, но не
существенны для выполнения smail, и которые мы не будем обсуждать
здесь. Взамен, мы только упомянем несколько, что бы Вы могли
находить причины использовать их:
Если error copy postmaster - булева переменная установлена, любая
ошибка, генерирует сообщение начальнику почтового отделения.
Обычно, это выполнено для ошибок, которые появляются из-за
дефектной конфигурации. Переменная может быть включена, помещая
ее в файле конфигурации, с предшествующим плюсом (+).
max hop count Если число переходов сообщения (то есть число главных
ЭВМ, уже пересеченных) равняется или превышает это число, попытки
получения приведут к сообщению об ошибках, возвращаемому
отправителю. Это используется, чтобы предотвратить сообщения от
выполнения бесконечного цикла. Счет перходов вообще вычислен из
числа Received: поля в заголовке почты, но могут также быть
установлен вручную используя -h опцию в командной строке.
Значение по умолчанию 20.
- 274 -
postmaster Адрес постмастера. Значение по умолчанию - root.
15.6 Маршрутизация и Получение Сообщений
Smail разбивает получение почты в три различных задачи,
программу маршрутизации, руководитель, и транспортный модуль.
Модуль программы маршрутизации распределяет все отдаленные
адреса, определяя к которому host, сообщение должно быть послано
следующему, и который транспорт должен использоваться. В
зависимости от характера связи, различные транспортировщики типа
UUCP или SMTP могут использоваться.
Транспортный модуль, в заключение, является ответственным за
любой метод получения, который был выбран. Он пробует передавать
сообщение, и в случае отказа или генерирует сообщение удара, или
задерживает его для более позднего повторения.
С smail, Вы имеете много свободы в конфигурировании этих задач.
Для каждого из них, доступен ряд драйверов, из которого Вы можете
выбирать те, в которых Вы нуждаетесь. Вы описываете их smail в паре
файлов, а именно routers, directors, и transports в /usr/lib/smail. Если эти
файлы не существуют, приняты приемлемые значения по умолчанию.
Если Вы хотите изменить маршрутизацию smail, или изменить
транспорт, Вы должны получить типовые файлы из smail исходного
распределения, скопировать типовые файлы в /usr/lib/smail, и изменять
их согласно вашим потребностям. Типовые файлы конфигурации также
даны в Приложении(аппендиксе) 20.3.
15.7 Маршрутизация Сообщений
Когда дано сообщение, smail проверяет, если адресат - локальный
host, или отдаленный пункт. Если целевой адрес host является одним из
локального hostname, конфигурированного в конфигурации, сообщение
будет передано модулю управления. Иначе, smail вручает адрес ряду
драйверов программы маршрутизации, чтобы выяснить которому host'у
передано сообщение. Они могут быть описаны в файле routers; если
этот файл не существует, используется набор заданных по умолчанию
- 275 -
программ маршрутизации.
Host адресата передается всем программам маршрутизации по
очереди, и находящий наиболее специфический маршрут будет выбран.
Рассмотрите сообщение, адресованное joe@foo.bar.com. Одна
программа маршрутизации могла бы знать заданный по умолчанию
маршрут для всех главных ЭВМ в bar.com области, в то время как другая
имеет информацию для foo.bar.com непосредственно. Если там - две
программы маршрутизации, которые обеспечивают "лучшее
соответствие'', та что раньше в файле программ маршрутизации будет
выбрана.
Эта программа маршрутизации теперь определяет транспорт,
который нужно использовать, например UUCP, и генерирует новый
адрес адресата. Новый адрес передан на транспорт наряду с host. В
вышеупомянутом примере, smail мог бы выяснять, что foo.bar.com
должен быть достигнут через UUCP использование пути ernie!Bert.
Тогда генерируется новая цель из bert!Foo.bar.com!user, и используется
UUCP транспорт, поскольку конверт адресован к ernie.
При использовании заданной по умолчанию установки, следующие
программы маршрутизации доступны:
+ Если, адрес host адресата может быть разрешен, используя
gethostbyname или gethostbyaddr вызов из библиотек, сообщение, будет
передано через SMTP. Единственое исключение - если адрес найден,
чтобы обратиться к локальному host.
Smail также распознает адреса IP, которые пишутся как точечная
четверка, как допустимый hostname, если только они могут быть решены
через gethostbyaddr обращение. Например, scrooge@ [149.76.12.4] был
бы допустим, хотя это необычный почтовый адрес для scrooge на
quark.physics.groucho.edu.
Если ваша машина находится на Internet, эти программы
маршрутизации - не то, что Вы ищете, потому что они не
поддерживают записи MX. См. ниже что делать в этом случае.
+ Если pathalias база данных (/usr/lib/smail/paths) существует, smail пробует
искать целевой host (минус любой конечный .uucp) в этом файле. Почта
к адресу, согласованному этой программой маршрутизации будет
передана используя UUCP, и используя путь, найденный в базе данных.
- 276 -
+ Адрес host (минус любой конечный .uucp) будет сравниваться с
выводом команды uuname, чтобы проверить является ли целевой host
фактически соседом UUCP. Если дело обстоит так, сообщение будет
передан использованием UUCP транспорта.
+ Если, адрес не был согласован любой из вышеупомянутых программ
маршрутизации, он будет передан smart host. Путь smart host также как
транспорт, который нужно использовать установлен в файле
конфигурации.
Эти значения по умолчанию работают для многих простых
установок, но сбоят при более сложной маршрутизации. Если перед
Вами стоит одна из проблем, обсужденных ниже, Вы будет должен
установить ваши собственные программы маршрутизации.
Возможно самые плохие проблемы возникают, когда ваш host живет
в двойной области, и с телефонным вызовом по номеру IP и со связями
UUCP. smail будет пытаться передавать любую почту через SMTP. Это -
обычно не, что Вы хотите, потому что, даже если связь SLIP
активизирована регулярно, SMTP - намного медленнее чем посылка
почты над UUCP. С заданной по умолчанию установкой, не имеется
никакого способа выйти из smail.
Вы можете избегать этой проблемы при наличии проверки файла
путей перед запросом решающего устройства, и помещении всех
необходимых главных ЭВМ в файл путей. Если Вы не хотите посылать
сообщения над SMTP когда-либо, Вы можете также закомментировать
решающие рограммы маршрутизации в целом.
Другая проблема состоит в том, что заданная по умолчанию
установка не обеспечивает истинную маршрутизацию почты Internet,
потому что решающая программа маршрутизации не оценивает записи
MX. Чтобы давать возможность полной поддержке маршрутизации
почты Internet, прокомментируйте эту программу маршрутизации, и
разкомментируйте ту что используется BIND взамен. Имеются, однако,
smail binaries включенные в некоторые распределения Linux, которые не
имеют поддержки BIND. Если Вы даете возможность BIND, но
получаете сообщение в paniclog файле, говорящее "программа
маршрутизации inet hosts: драйвер связи не найден'', тогда Вы должны
получить исходники и перетранслировать smail (см. раздел 15.2 выше).
В заключение, это вообще не очень хорошая идея - использовать
uuname драйвер.
- 277 -
15.7.1 База данных путей
Smail ожидает находить pathalias базу данных в файле путей в
/usr/lib/smail. Этот файл необязателен, так если Вы не хотите выполнять
любой pathalias вообще, просто удалите любой существующий файл
путей.
Paths должен быть сортируемый файл ASCII, который содержит
входы, которые отображают имена пункта адресата UUCP. Файл
должен сортироваться, потому что smail использует двоичный поиск
пункта. Комментарии не позволяются в этом файле, и имя пункта
должно отделиться от пути, используя МЕТКУ ТАБУЛЯЦИИ. Pathalias
базы данных обсуждены подробнее в главе 14 ..
Если Вы генерируете этот файл вручную, Вы должен
удостовериться, чтобы включить все допустимые имена для пункта.
Например, если пункт известен и простым именем UUCP и полностью
квалифицированным именем области, Вы должны добавить вход для
каждого из них. Файл может сортироваться конвейерной пересылкой
его через команду sort.
Если ваш пункт является только пунктом листа, то никакой файл
paths, не должен быть необходим вообще: только установите атрибуты
smart host в вашем файле конфигурации, и оставьте всю маршрутизацию
вашей подаче почты.
15.8 Поставка Сообщений Локальным Адресам
Обычно, локальный адрес - только имя входа в систему
пользователя, когда сообщение передается в его mailbox,
/var/spool/mail/user. Другие случаи включают отправку по почте списка
имен, и пересылку почты пользователем. В этих случаях, локальный
адрес расширяется до нового списка адресов, которые могут быть или
локальны или отдаленны.
Кроме этих "нормальных" адресов, smail может обрабатывать другие
типы локальных адресатов сообщения, подобно именам файла, и
командам трубопровода. Они - не адреса, так что Вы не можете
посылать почте на /etc/passwd@vbrew.com.
- 278 -
Имя файла - что-нибудь, что начинается с наклонной черты вправо
(/) или тильды (~). Письмо относится к исходному каталогу
пользователя, и возможно только, если имя файла принималось из a
.forward файл или вход пересылки в mailbox (см. ниже). При поставке
файла, smail конкатенирует сообщения к файлу, создавая его в случае
необходимости.
Командой трубопровода может быть любая команда Unix, которой
предшествует символ трубопровода (|). Это заставляет smail вручать
команду оболочке наряду с аргументами, но без подачи " | ". Сообщение
непосредственно будет подано этой команде на стандартном вводе.
Например, чтобы отправить почту в локальную newsgroup, Вы
могли бы использовать команду оболочки, именованную gateit, и
устанавливать локальный результат, который передает все сообщения
из этого списка в команду, используя " | gateit ".
Если вызов содержит незаполненное пространство, он должен быть
включен в двойные кавычки. Из-за проблем защиты команда не
выполняется, если адрес был получен несколько сомнительным
способом (например, если файл, из которого адрес принимался, был
перезаписываем каждым).
15.8.1 Локальные Пользователи
Наиболее общий случай для локального адреса - обозначить mailbox
пользователя. Этот mailbox - локализовался /var/spool/mail, и имеет имя
пользователя. Если он не существует, он создан smail.
Обратите внимание, что, хотя /var/spool/mail - в настоящее время
стандартное место, чтобы поместить mailbox файлы, некоторое
программное обеспечение почты может иметь другой paths,
компилируемый в, например /usr/spool/mail.
Имеются два адреса которые требуются smail: mailer - daemon и
Постмастер. При производстве сообщения удара для почты undeliverable,
машинописная копия послана постмастеру объяснение исследования (в
случае, если это могло бы быть из-за проблемы конфигурации). Mailer -
daemon используется как адрес отправителя для сообщения удара.
Если эти адреса не называют допустимые счета на вашей системе,
- 279 -
smail неявно отображает mailer - daemon как postmaser, и постмастера как
root, соответственно. Вы должны обычно отменять это совмещением
имени постмастера с тем, кто является ответственным за поддержание
программного обеспечения почты.
15.8.2 Пересылки
Пользователь может переназначать почту посылая ее к
альтернативному адресу, используя один из двух методов,
обеспечиваемых smail. Одна опция должна поместить
Forward to recipient,...
в первой строке ее mailbox файла. Это пошлет всей входящей почте
заданному списку получателей. В качестве альтернативы, она могла бы
создавать a .forward файл в ее исходном каталоге, который содержит
отделенный запятой список получателей. С этим разнообразием
пересылки, все строки файла читаются и интерпретируются.
Обратите внимание, что любой тип адреса может использоваться.
Таким образом, практический пример .forward файла мог бы быть
janet, "|vacation"
Первый адрес передает входящее сообщение mailbox janet, в то время
как команда vacation возвращает короткое уведомление отправителю.
15.8.3 Специальные Файлы
Smail способен обработать специальные файлы, совместимые с теми
что известны sendmail Berkeley. Входы в специальном файле могут
иметь форму
alias: recipients
recipients - отделенный запятой список адресов, которые будут
заменяться специально. Список получателей может быть продолжен
через символы перевода строки, если следующая строка начинается с
МЕТКИ ТАБУЛЯЦИИ.
Имеется специальная возможность, которая позволяет smail
обрабатывать списки отправки по почте из специального файла: если
Вы определяете ":include:filename" как получателя, smail будет читать
заданный файл, и применять содержимое как список получателей.
- 280 -
Основной файл побочных результатов исследования - /usr/lib/aliases.
Если Вы сделаете этот файл всемирно - перезаписываемым, smail не
будет передавать сообщения командам оболочки, данным в этом файле.
Типовой файл показывается ниже:
# vbrew.com /usr/lib/aliases file hostmaster: janet
postmaster: janet
usenet: phil
# The development mailing list. development: joe, sue, mark, biff
/var/mail/log/development
owner-development: joe
# Announcements of general interest are mailed to all # of the staff
announce: :include: /usr/lib/smail/staff, /var/mail/log/announce
owner-announce: root
# gate the foobar mailing list to a local newsgroup ppp-list: "|/usr/local/lib/gateit
local.lists.ppp"
Если ошибка происходит при ипользовании адреса,
сгенерированного из специального файла, smail будет пытаться
посылать копию сообщения об ошибках к "специальному владельцу''.
Если адрес владельца не существует, никакое дополнительное
сообщение об ошибках не будет сгенерировано.
15.8.4 Списки Отправки по почте
Вместо того, чтобы использовать специальный файл, чтобы
отправить по почте по списку можно также управляться посредством
файлов в каталоге /usr/lib/smail/lists. Список отправки по почте,
именованный nag-bugs описан как lists/nag-bugs, должен содержать
адреса элементов, отделяемые запятыми. Список может быть дан на
нескольких строках, с комментариями.
Для каждого списка отправки по почте, пользователь именованный
владельцем - listname должен существовать; любое появление ошибок
при применени адреса будет сообщено этому пользователю. Этот адрес
также используется как адрес отправителя на всех исходящих
- 281 -
сообщений в Sender: поле заголовка.
15.9 UUCP-Транспорт
Имеется ряд транспортировщиков, компилируемых в smail, которые
используют UUCP набор программ. В UUCP среде, сообщения обычно
передаются, вызывая rmail на следующем host, давая ему сообщение на
стандартном вводе и адрес конверта в командной строке. На вашем
host, rmail должен быть связан с командой smail.
При вручении сообщения на UUCP транспорт, smail
преобразовывает целевой адрес в путь удара UUCP. Например,
user@host будет преобразован host!user. Любое местонахождение " % "
оператора адреса сохраняется, так что user%host@gateway станет
gateway!User%host. Однако, smail никогда не будет генерировать такие
адреса самостоятельно.
В качестве альтернативы, smail может посылать и получать BSMTP
пакеты через UUCP. В BSMTP один или большее количество
сообщений передаются в одиночном пакете, который содержит
команды, которые локальный mailer выдал бы, если бы реальное SMTP
соединение имело место. BSMTP часто используется с промежуточным
накоплением, чтобы сохранить дисковое пространство. Типовой файл
транспорта в приложении 20.3 содержит транспорт dubbed bsmtp
который генерирует частичные BSMTP пакеты в каталоге очередей.
Они должны быть объединены в конечные пакеты позже, при
использовании команды оболочки, которая добавляет
соответствующую команду HELO и QUIT.
Чтобы давать возможность bsmtp транспорту для специфических
связей UUCP, Вы должны использовать так называемые файлы метода
(пожалуйста обратитесь к smail странице руководства для
подробностей). Если Вы имеете только одну связь UUCP, и используете
программу маршрутизации smart host, Вы даете возможность посылать
SMTP пакеты, устанавливая интеллектуальную транспортную
переменную конфигурации как bsmtp вместо uux.
Чтобы получать SMTP пакеты над UUCP, Вы должны
удостовериться, что Вы имеете команду распакетирования. Если
отдаленный пункт использует smail, Вы должны связать rsmtp с smail.
Если отдаленный пункт выполняет sendmail, Вы должны
дополнительно установить команду оболочки, именованную
- 282 -
/usr/bin/bsmtp, которая делает простой "запуск rsmtp".
15.10 SMTP-Транспорт
Smail в настоящее время поддерживает SMTP драйвер, чтобы
передавать почту по TCP соединениям. Это дает возможность посылки
сообщения любому числу адресов на одиночном host, с hostname,
определяемым или как полностью квалифицированное имя области
которое может быть использовано программным обеспечением работы
с сетями, или в точечной записи четверки, включенной в квадратные
скобки. Вообще, адреса, решенные любым BIND, gethostbyname или
gethostbyaddr драйверов программы маршрутизации будут переданы на
SMTP транспорт.
SMTP драйвер будет пытаться соединяться с отдаленным host
немедленно через smtp порт как перечислено в /etc/services. Если это не
может быть достигнуто, или соединение прерывается, оно будет
повторно предпринято в более позднее время.
Получение на Internet требует, чтобы маршруты до host адресата
были определены в формате адрес-маршрут, описанном в главе 14, а не
как путь удара. smail будет следовательно трансформировать
user%host@gateway, где gateway достигнут через host1!host2!host3, по
адресу исходного маршрута < @host2,@host3:user%host@gateway >,
который будет послан как конверт, адресованный host1. Чтобы давать
возможность этому преобразованию (наряду с встроенным драйвером
BIND), Вы должны редактировать вход для smtp драйвера в файле
transports. Типовой файл transports дан в Приложении 20.3.
15.11 Квалификация Hostname
Иногда желательно захватить неквалифицированные hostname (то
есть те, которые не имеют имени области) заданные в адресе
отправителя или получателя, например при переходе между двумя
сетями, где каждая требует полностью квалифицированных имен
области. На Internet -UUCP реле, такие hostname должны быть
отображены в uucp область по умолчанию. Другие изменения адреса
- 283 -
сомнительны.
Файл /usr/lib/smail/qualify сообщает smail, которая область определяет
путь на который hostname. Входы в файле qualify состоят из hostname в
перевом столбце, сопровождаемым именем области. Строки,
содержащие знак мусора как первый символ рассматриваются
комментариями. Входы ищутся в порядке, в котором они появляются.
Если никакого файла qualify не существует, никакая hostname
квалификация не выполняется вообще.
Специальный hostname * соответствует любому hostname, таким
образом допуская Вам отобразить все главные ЭВМ, не упомянутые
прежде в заданную по умолчанию область. Это должно использоваться
только как последний вход.
В Виртуальном Пивоваренном заводе, все главные ЭВМ были
установлены так, чтобы использовать полностью квалифицированные
имена области в адресах отправителя. Неквалифицированные адреса
получателя, как рассматривается, находятся в uucp области, так что
необходим только одиночный вход в файле qualify.
# /usr/lib/smail/qualify, last changed Feb 12, 1994 by janet
#
* uucp
16. Sendmail + IDA
16.1 Введение в Sendmail + IDA
Уже упоминалось, что Вы не реальный администратор системы
Unix, пока вы не редактировали sendmail.cf файл. Также скажут что вы
сумасшедший, если вы попытаетесь сделать это дважды :-)
Sendmail - невероятно мощная программа. Также невероятно трудно
узнавать и понимать ее для большинства людей. Любая программа, чье
окончательное руководство (Sendmail, изданный O'Reilly and Associatеs)
состоит из 792 страниц, отпугивает большинство людей.
Sendmail + IDA - это другое. Это удаляет потребность редактировать
всегда загадочный sendmail.cf файл и позволяет администратору
определять пункт-специфическую маршрутизацию и конфигурацию
адресации через относительно простые для понимания файлы
- 284 -
поддержки, называемые таблицами. sendmail + IDA может сохранять
Вам много часов работы и спокойствия.
Сравниваясь с другими главными средствами транспорта почты, не
имеется ничего, что не может быть выполнено быстрее и проще с
sendmail + IDA. Типичные вещи, которые необходимы, чтобы
реализовать UUCP или Internet узел, станут простыми для выполнения.
Конфигурации, которые обычно являются чрезвычайно трудными,
просто создавать и поддержать.
В этой запииси, текущая версия sendmail5.67b + IDA1.5 доступен
через анонимный FTP из vixen.cso.uiuc.edu. Она компилируется без
любого внесения исправлений, требуемого под Linux.
Все файлы конфигурации, требуемые, чтобы получить исходники
sendmail + IDA, чтобы компилировать, устанавливать, и выполнять под
управлением Linux включены в newspak-2.2.tar.gz, который является
доступным через анонимный FTP на sunsite.unc.edu в каталоге
/pub/Linux/system/Mail.
16.2 Файлы Конфигурации --- Краткий обзор
Традиционный sendmail установлен через файл конфигурации
системы (обычно /etc/sendmail.cf или /usr/lib/sendmail.cf), который - не
относится к любому языку, который вы видели прежде.
Редактирование sendmail.cf файла, чтобы обеспечить настроенное
поведение может быть хорошим опытом.
Sendmail + IDA делает такую работу по существу делом прошлого
при наличии всех опций конфигурации, с формированием
изображений при помощи таблицы с довольно простым, чтобы понять
синтаксис. Эти опции конфигурируются, выполнением m4
(процессора макркоманд) или dbm (процессора базы данных) в ряде
файлов данных через Make-файлы, обеспеченные исходниками.
Sendmail.cf файл определяет только заданное по умолчанию
поведение системы. Виртуально вся специальная настройка выполнена
через ряд необязательных таблиц а не непосредственно редактируя
sendmail.cf файл.
- 285 -
16.3 Sendmail.cf Файл
Sendmail.cf файл для sendmail + IDA не редактируется
непосредственно, а генерируется из m4 файла конфигурации,
обеспеченного локальным администратором системы. В следующем,
мы обратимся к нему как к sendmail.m4.
Этот файл содержит несколько определений и иначе просто
указывает на таблицы, где выполняется реальная работа. Вообще,
необходимо определить только:
+ Имена путей и имена файлов, используемые в локальной системе.
+ Имена пункта электронной почты.
+ Который заданный по умолчанию mailer (и возможно smart host)
желателен.
Имеется большое разнообразие параметров, которые могут быть
определены, чтобы установить поведение локального пункта сети. Эти
опции конфигурации идентифицированы в файле ida/cf/OPTIONS в
исходном каталоге.
Файл sendmail.m4 для минимальной конфигурации (UUCP или
SMTP со всей не-локальной почтой, передаваемой непосредственно
соединенному smart-host) может быть в 10 или 15 строк, исключая
комментарии.
Mailertable определяет специальное поведение для отдаленных главных
ЭВМ или областей.
Uucpxtable включает получение почты UUCP на главные ЭВМ, которые
находятся в формате DNS.
Pathtable определяет UUCP пути на отдаленные главные ЭВМ или
области.
Uucprelays замыкает pathalias путь на общеизвестные отдаленные
главные ЭВМ.
Genericfrom преобразовывает внутренние адреса в обобщенные,
видимые внешнему миру.
Xaliases преобразовывает обобщенные адреса на\из допустимых
внутренних.
Decnetxtable преобразовывает RFC-822 адреса в адреса DECnet-стиля.
- 286 -
16.3.1 Пример Файла Sendmail.m4
Файл sendmail.m4 для vstout на Виртуальном Пивоваренном заводе
показывается ниже. Vstout использует SMTP, чтобы разговаривать со
всеми главными ЭВМ на LAN Пивоваренного завода, и посылает всю
почту для других адресатов к moria, host реле Internet, через UUCP.
16.3.2 Обычно Используемые sendmail.m4 Параметры
Нескоторые предметы в файле sendmail.m4 требуются всегда; другие
могут игнорироваться, если Вы можете избежать неприятностей со
значениями по умолчанию. Следующие разделы описывают каждые из
предметов в файле sendmail.m4 более подробно.
dnl #------------------ SAMPLE SENDMAIL.M4 FILE ------------------
dnl # (the string 'dnl' is the m4 equivalent of commenting out a line)
dnl # you generally don't want to override LIBDIR from the compiled in paths
dnl #define(LIBDIR,/usr/local/lib/mail)dnl # where all support files go
define(LOCAL MAILER DEF, mailers.linux)dnl # mailer for local delivery
define(POSTMASTERBOUNCE)dnl # postmaster gets bounces
define(PSEUDODOMAINS, BITNET UUCP)dnl # don't try DNS on these
dnl #-------------------------------------------------------------
dnl #
define(PSEUDONYMS, vstout.vbrew.com vstout.UUCP vbrew.com)
dnl # names we're known by
define(DEFAULT HOST, vstout.vbrew.com)dnl # our primary 'name' for
mail
define(UUCPNAME, vstout)dnl # our uucp name
dnl #
dnl #-------------------------------------------------------------
dnl #
define(UUCPNODES, |uuname|sort|uniq)dnl # our uucp neighbors
define(BANGIMPLIESUUCP)dnl # make certain that uucp
define(BANGONLYUUCP)dnl # mail is treated correctly
define(RELAY HOST, moria)dnl # our smart relay host
define(RELAY MAILER, UUCP-A)dnl # we reach moria via uucp
- 287 -
dnl #
dnl #--------------------------------------------------------------------dnl #
dnl # the various dbm lookup tables
dnl #
define(ALIASES, LIBDIR/aliases)dnl # system aliases
define(DOMAINTABLE, LIBDIR/domaintable)dnl # domainize hosts
define(PATHTABLE, LIBDIR/pathtable)dnl # paths database
define(GENERICFROM, LIBDIR/generics)dnl # generic from addresses
define(MAILERTABLE, LIBDIR/mailertable)dnl # mailers per host or
domain
define(UUCPXTABLE, LIBDIR/uucpxtable)dnl # paths to hosts we feed
define(UUCPRELAYS, LIBDIR/uucprelays)dnl # short-circuit paths
dnl #
dnl #--------------------------------------------------------------------dnl #
dnl # include the 'real' code that makes it all work
dnl # (provided with the source code)
dnl #
include(Sendmail.mc)dnl # REQUIRED ENTRY !!!
dnl #
dnl #------------ END OF SAMPLE SENDMAIL.M4 FILE -------
16.3.2.1 Предметы, которые Определяют Пути
dnl #define(LIBDIR,/usr/local/lib/mail)dnl # where all support files go
LIBDIR определяет каталог, где sendmail + IDA ожидает находить
файлы конфигурации, различные dbm таблицы, и специальные
локальные определения. В типичном двоичном распределении, это
компилируется в sendmail binary и не должно быть явно установлено в
файле send-mail.m4.
Вышеупомянутый пример содержит dnl, который означает что эта
строка - по существу только для уточнения инфрмации комментария.
Чтобы изменить расположение файлов поддержки на другое,
удалите dnl из вышеупомянутой строки, установите путь к
желательному расположению, и восстановите, и повторно установите
sendmail.cf файл.
- 288 -
16.3.2.2 Определение Локального Mailer'а
define(LOCAL MAILER DEF, mailers.linux)dnl # mailer for local delivery
Большинство операционных систем обеспечивает программу для
обработки локального получения почты. Программы такого рода для
многих из главных вариантов Unix уже встроены в sendmail binary.
В Linux, необходимо явно определить соответствующий локальный
mailer, так как такая локальная программа не обязательно предоставлена
в распределении, которое вы установили. Это определяется LOCAL
MAILER DEF в файле sendmail.m4.
Например, можно установить LOCAL MAILER DEF как mailers.linux.
Следующий файл должен то быть установлен как mailers.linux в
каталоге, указанном LIBDIR. Это явно определяет программу в Mlocal
mailer с соответствующими параметрами, чтобы sendmail правильно
принимал почту, направленную для локальной системы.
Если Вы не эксперт sendmail, Вы возможно не захотите изменять
следующий пример.
# -- /usr/local/lib/mail/mailers.linux --
# (local mailers for use on Linux )
Mlocal, P=/usr/bin/deliver, F=SlsmFDMP, S=10, R=25/10, A=deliver $u
Mprog, P=/bin/sh, F=lsDFMeuP, S=10, R=10, A=sh -c $u
Имеется также встроенное значение по умолчанию для deliver в
Sendmail.mc файле, который включается в файл sendmail.cf. Чтобы
определить его, Вы не должны использовать mailers.linux файл и взамен
определить следующее в вашем файле sendmail.m4:
dnl --- (in sendmail.m4) ---
define(LOCAL MAILER DEF, DELIVER)dnl # mailer for local delivery
К сожалению, Sendmail.mc принимает, что deliver установлен в /bin,
что не так в Slackware1.1.1 (который устанавливает это в /usr/bin). В том
случае вы нуждаетесь в фальшивке со связью или переустановить deliver
из исходников в /bin.
- 289 -
16.3.2.3 Обработка Bounced-почты
define(POSTMASTERBOUNCE)dnl # postmaster gets bounces
Многие абоненты находят, что важно гарантировать, что бы почта
посылалась и получалась с гарантией 100 %. При исследовании sys-logd
файлов регистрации полезен локальный администратор почты чтобы
определить, была ли почта испорчена из-за ошибки пользователя или
ошибки конфигурации на одной из включаемых систем.
Определение POSTMASTERBOUNCE приводит к копии каждого
плохого сообщения человеку, определенному как Постмастер системы.
К сожалению, установка этого параметра также приводит к
рассекречиванию текста сообщения, посылаемого Постмастеру.
16.3.2.4 Возможности Имени Области
define(PSEUDODOMAINS, BITNET UUCP)dnl # don't try DNS on
these
Имеются отдельные известные сети, которые обычно указаны в
адресах почты по историческим причинам, но это не допустимо для
целей DNS. Определение PSEUDODOMAINS предотвращает
бесполезные DNS попытки поиска, которые будут всегда терпеть
неудачу.
16.3.2.5 Определение Локальной Системы
define(PSEUDONYMS, vstout.vbrew.com vstout.UUCP vbrew.com)dnl #
names we're known by
define(DEFAULT HOST, vstout.vbrew.com)dnl # our primary 'name' for mail
Часто, системы желают скрыть их истинное тождество, и служат
как ворота почты, или получатют и обрабатывают почту, адресованную
на " старые " имена.
PSEUDONYMS определяет список всех hostname, для которых
локальная система примет почту.
- 290 -
DEFAULT HOST определяет hostname, который появится при
возникновении сообщений на локальном host.
16.3.2.6 Uucp-зависимые Аспекты
define(UUCPNAME, vstout)dnl # our uucp name
define(UUCPNODES, |uuname|sort|uniq)dnl # our uucp neighbors
define(BANGIMPLIESUUCP)dnl # make certain that uucp
define(BANGONLYUUCP)dnl # mail is treated correctly
Часто, системы известны под одним именем для целей DNS и
другим для целей UUCP. UUCPNAME разрешает Вам определять
различные hostname, которые появляются в заголовках выхода почты
UUCP.
UUCPNODES определяет команды, которые возвращают список
hostnames для систем, с которыми мы соединены непосредственно с
через UUCP соединения.
BANGIMPLIESUUCP и BANGONLYUUCP гарантирует, что почта,
адресованная с UUCP синтаксисом обрабатывается согласно UUCP, а
не более современному DNS, используемому сегодня в Internet.
16.3.2.7 Relay-Системы и Mailer'ы
define(RELAY HOST, moria)dnl # our smart relay host
define(RELAY MAILER, UUCP-A)dnl # we reach moria via UUCP
RELAY HOST определяет UUCP hostname интеллектуальной соседней
системы (способной послать почты в любую сеть мира).
RELAY MAILER определяет mailer, используемый, чтобы передать туда
сообщения.
Важно обратить внимание, что устанавливающий эти параметры
приводит к посылке вашей почты к этой отдаленной системе, которая
будет воздействовать на загрузку их системы. Убедитесь, что вы
получили явное соглашение отдаленного Постмастера прежде, чем Вы
конфигурируете вашу систему, чтобы использовать другую систему как
универсальный relay host.
- 291 -
16.3.2.8 Различные Таблицы Конфигурации
define(ALIASES, LIBDIR/aliases)dnl # system aliases
define(DOMAINTABLE, LIBDIR/domaintable)dnl # domainize hosts
define(PATHTABLE, LIBDIR/pathtable)dnl # paths database
define(GENERICFROM, LIBDIR/generics)dnl # generic from addresses
define(MAILERTABLE, LIBDIR/mailertable)dnl # mailers per host or
domain
define(UUCPXTABLE, LIBDIR/uucpxtable)dnl # paths to hosts we feed
define(UUCPRELAYS, LIBDIR/uucprelays)dnl # short-circuit paths
С этими макркомандами, Вы можете изменять расположение, где
sendmail + IDA ищет различные dbm таблицы, которые определяют
поведение системы. Вообще нужно оставить их в LIBDIR.
16.3.2.9 Главный Файл Sendmail.mc
include(Sendmail.mc)dnl # REQUIRED ENTRY !!!
Авторы sendmail + IDA обеспечивают файл Sendmail.mc, который
содержит "внутренности" того, что становится файлом sendmail.cf.
Периодически выпускаются новые версии, чтобы установить ошибки
или добавлить функциональные возможности без полного выпуска и
перетрансляции sendmail из исходников.
Важно не редактировать этот файл.
16.3.2.10 Так которые Входы Действительно требуются?
Если не используются dbm таблицы, sendmail + IDA передает почту
через DEFAULT MAILER (и возможно RELAY HOST и RELAY
MAILER) определенный в файле sendmail.m4, используемом, чтобы
генерировать sendmail.cf. Легко можно отменить это поведение через
входы в domaintable или uucpxtable.
Виртуально все системы должны установить DEFAULT HOST,
макркоманды PSEUDONYMS, которые определяют каноническиое имя
пункта, и DEFAULT MAILER. Если все что Вы имеете - это relay host и
relay mailer, Вы не должны устанавлвать эти значения по умолчанию,
так как это работает автоматически.
- 292 -
UUCP главные ЭВМ будут возможно также должны установить
UUCPNAME как их официальное имя UUCP. Они также возможно
установят RELAY MAILER, и RELAY HOST, которые дают
возможность маршрутизации smart-host через relay почту. Транспорт
почты, который нужно использовать определен в RELAY MAILER и
должен обычно быть UUCP-A для UUCP абонента.
Если ваш пункт только SMTP и использует "Domain Name Service ",
Вам следует заменить DEFAULT MAILER на TCP-A и возможно
удалить СТРОКИ RELAY HOST и RELAY MAILER.
16.4 Просмотр Sendmail + IDA Таблиц
Sendmail + IDA обеспечивает ряд таблиц, которые позволяют Вам
отменять заданное по умолчанию поведение sendmail (заданное в файле
sendmail.m4) и определять специальное поведение для уникальных
ситуаций, отдаленных систем, и Сетей. Эти таблицы обрабатываются
dbm используя Make-файл, обеспеченный распределением.
Большинство абонентов будет нуждаться в некоторых из этих
таблиц. Если ваш пункт не требует этих таблиц, самая простая вещь,
возможно, сделать их файлами нулевой длины (командой touch) и
использовать заданный по умолчанию Make-файл в LIBDIR, а не
редактировать Make-файл непосредственно.
16.4.1 Mailertable
Mailertable определяет специальное обращение для специфических
главных ЭВМ или областей, основанных на отдаленном host или
сетевом имени. Это часто используется на абоненте Internet, чтобы
выбрать промежуточный relay host для почты или gateway, чтобы
достигнуть отдаленной сети, и определить специфический протокол
(UUCP или SMTP). UUCP абонент вообще не должен использовать
этот файл.
Порядок важен. Sendmail читает файл, нисходяще и обрабатывает
сообщения согласно первому правилу, которому оно соответствует. Так
что вообще нужно поместить наиболее явные правила наверху файла и
более обобщенных правил ниже.
- 293 -
Предположите, что Вы хотите направлять всю почту для отделения
Информатики в Университете Groucho Marx через UUCP relay host ada.
Чтобы сделать так, Вам нужен пункт в mailertable, который походит на
следующее:
# (in mailertable)
#
# forward all mail for the domain .cs.groucho.edu via UUCP to ada UUCP-
A,ada .cs.groucho.edu
Предположите, что Вы хотите чтобы вся почта к groucho.edu
области шла к другому relay host - bighub. Расширенные входы mailertable
выглядели бы подобно:
# (in mailertable)
#
# forward all mail for the domain cs.groucho.edu via UUCP to ada UUCP-A,ada
.cs.groucho.edu
#
# forward all mail for the domain groucho.edu via UUCP to bighub UUCP-
A,bighub .groucho.edu
Как упомянуто выше, порядок важен. Реверсирование порядка из
двух правил, показанных выше приводит к передаче всей почты к
.cs.groucho.edu через более обобщенный bighub путь вместо явного ada
пути, который действительно желателен.
# (in mailertable)
#
# forward all mail for the domain .groucho.edu via UUCP to bighub UUCP-
A,bighub .groucho.edu
#
# (it is impossible to reach the next line because
# the rule above will be matched first)
UUCP-A,ada .cs.groucho.edu
#
В примерах mailertable выше, UUCP-A mailer заставит sendmail
использовать UUCP получение с заголовками области.
- 294 -
Запятая между mailer'ом и отдаленной системой сообщает о
передаче сообщения к ada для получения.
Mailertable входы(пункты) имеют формат:
mailer delimiter relayhost host or domain
Имеется ряд возможных mailer'ов. Различия - вообще в том, как они
обрабатывают адреса. Типичные mailer'ы - TCP-A (TCP/IP с адресами -
стиля Internet), TCP-U (TCP/IP с адресами uucp-стиля), и UUCP-A
(UUCP с адресами -стиля Internet).
Символ, который отделяет mailer от host слева в строке mailertable,
определяет, как адрес изменяется mailertable.
! Отметка восклицания удаляет hostname получателя перед пересылкой
к mailer'у. Это может использоваться, когда Вы хотите послать почту в
неконфигурированный отдаленный пункт.
, Запятая не изменяет адрес всегда. Сообщение просто будет послано
через заданный mailer заданному relay host.
: Двоеточие удаляет hostname получателя только, если имеются
промежуточные главные ЭВМ между Вами и адресатом. Таким образом
из foo!bar!Joe будет удален foo, в то время как xyzzy!Janet останется
неизменным.
16.4.2 Uucpxtable
Обычно, почта на главные ЭВМ с полностью
квалифицированными именами области передается в стиле Internet
(SMTP), используя Domain Name Service (DNS), или через relay host.
Uucpxtable вынуждает получение через маршрутизацию UUCP,
преобразуя имя в отдаленный hostname UUCP-стиля.
Это часто используется, когда ваш узел служит для продвижения
данных почты для пункта или области или когда Вы желаете послать почту
через прямую и надежную связь UUCP, а не через множество абонентов через
заданный по умолчанию mailer и любые промежуточные системы и сети.
Абоненты UUCP, которые разговаривают с соседями по UUCP, которые
используют заголовки почты с определенным именем области, использовали
бы этот файл, чтобы вынудить получение почты через прямую UUCP
двухточечную связь между двумя системами, а не использовали бы менее
- 295 -
прямой маршрут через RELAY MAILER и RELAY HOST или через DEFAULT
MAILER.
Абонент Internet, который не входит в UUCP может не использовать
uucpxtable.
Предположите, что Вы обеспечиваете обслуживание пересылки почты к
системе, называемой sesame.com в DNS и sesame в картах UUCP. Вы
нуждались бы в следующем входе uucpxtable, чтобы вынудить почту для их host
пройти через ваше прямое соединение UUCP.
#============== /usr/local/lib/mail/uucpxtable ============
# Mail sent to joe@sesame.com is rewritten to sesame!joe and
# therefore delivered via UUCP
#
sesame sesame.com
#
#----------------------------------------------------------
16.4.3 pathtable
Pathtable используется, чтобы определить явную маршрутизацию на
отдаленные главные ЭВМ или сети. Файл pathtable должен быть в синтаксисе
pathalias-стиля, сортируемом в алфавитном порядке. Два поля на каждой строке
должны отделиться реальной МЕТКОЙ ТАБУЛЯЦИИ.
Большинство систем не будет нуждаться в любых входах pathtable.
#=============== /usr/local/lib/mail/pathtable ================
#
# this is a pathalias-style paths file to let you kick mail to
# UUCP neighbors to the direct UUCP path so you don't have to
# go the long way through your smart host that takes other traffic
#
# you want real tabs on each line or m4 might complain
#
# route mail through one or more intermediate sites to a remote
# system using UUCP-style addressing.
#
sesame!ernie!%s ernie
#
- 296 -
# forwarding to a system that is a UUCP neighbor of a reachable
# internet site.
#
swim!%s@gcc.groucho.edu swim
#
# The following sends all mail for two networks through different
# gateways (see the leading '.' ?).
# In this example, "uugate" and "byte" are specific systems that serve
# as mail gateways to the .UUCP and .BITNET pseudo-domains respectively
#
%s@uugate.groucho.edu .UUCP
byte!%s@mail.shift.com .BITNET
#
#=================== end of pathtable =======================
16.4.4 domaintable
Domaintable вообще используется, чтобы вынудить некоторое поведение
после того, как поиск DNS произошел. Это разрешает администратору делать
короткие имена доступными для обычно вызываемых систем или областей,
заменяя такое имя на соответствующее автоматически. Это может также
использоваться, чтобы заменить неправильный host или имена области на "
правильные ".
Большинство абонентов не будет нуждаться в любых входах domaintable.
Следующий пример показывает, как заменить неправильные адреса на
правильный адрес:
#============= /usr/local/lib/mail/domaintable =================
#
#
brokenhost.correct.domain brokenhost.wrong.domain
#
#
#=================== end of domaintable ========================
16.4.5 aliases
Aliases(специальные возможности) разрешают ряд вещей:
- 297 -
+ Они обеспечивают короткое имя или общеизвестное имя для почты, которая
будет адресована к одному или большому количеству людей.
+ Они вызывают программу с сообщением почты как ввод для программы.
+ Они посылают почту в файл.
Все системы требуют aliases для Постмастера.
Всегда чрезвычайно важна защита при определении aliases, которые
вызывают программы или запись к программам, так как sendmail вообще
выполняет setuid-root.
Изменения в файле aliases, не воздействуют до команды
# /usr/lib/sendmail -bi
выполняемой, чтобы формировать требуемые dbm таблицы. Это может также
быть выполнено, выполняя команду newaliases, обычно из cron.
#--------------------- /usr/local/lib/mail/aliases ------------------
#
# demonstrate commonly seen types of aliases
#
usenet: janet # alias for a person
admin: joe,janet # alias for several people
newspak-users: :include:/usr/lib/lists/newspak
# read recipients from a file changefeed: | /usr/local/lib/gup
# alias that invokes a program
complaints: /var/log/complaints
# alias that writes mail to a file
#
# The following two aliases must be present to be RFC-compliant.
# It is important to have them resolve to 'a person'
# who reads mail routinely.
#
postmaster: root # required entry
MAILER-DAEMON: postmaster # required entry
#
- 298 -
#-------------------------------------------------------------------
16.4.6 Редко Используемые Таблицы
Следующие таблицы доступны, но довольно нечасто используются.
Консультируйтесь с документацией, которая приходит с sendmail + IDA для
подробностей.
Uucprelays Файл uucprelays используется для определения " короткого " пути
UUCP к особенно хорошо известному абоненту, а не используя путь через ряд
host или ненадежный путь, сгенерированный, обрабатывая карты UUCP с
pathalias.
Genericfrom и xaliases Файл genericfrom скрывает локальные usernames и адреса
от внешнего мира, автоматически преобразуя(конвертируя) локальные
usernames в обобщенные адреса отправителя, которые не соответствуют
внутреннему usernames.
Связанная утилита xalparse автоматизирует порождение файла genericfrom и
файла aliases так, чтобы и входящие и исходящие username трансляции
произошли из главного файла xaliases.
Decnetxtable перезаписывает адреса с определенным именем области в адреса
decnet-стиля, очень похоже на domaintable, может использоваться, чтобы
перезаписать адреса с не определенным именем области в адреса с
определенным именем области smtp-стиля.
16.5 Установка sendmail
В этом разделе, мы рассмотрим как установить типичное двоичное
распределение sendmail + IDA, и что должно быть выполнено, чтобы сделать
его локализованным и функциональным.
Текущее двоичное распределение sendmail + IDA для Linux может быть
получено из sunsite.unc.edu в /pub/Linux/system/Mail. Даже если Вы имеете более
раннюю версию sendmail, я строго рекомендую, чтобы Вы использовали
sendmail5.67b + IDA1.5.
Если Вы формируете sendmail из исходников, Вы должны следовать
советам в README, включенном в исходное распределение. Текущие
исходники sendmail + IDA доступны из vixen.cso.uiuc.edu. Чтобы формировать
- 299 -
sendmail + IDA на Linux, Вы также нуждаетесь в Linux -специфических файлах
конфигурации из newspak-2.2.tar.gz, который является доступным на sun-
site.unc.edu в каталоге /pub/Linux/system/Mail.
Если Вы предварительно установили smail или другое средство получения
почты, вам возможно нужно удалить (или переименовать) все файлы из smail
для безопасности.
16.5.1 Извлечение двоичного распределения
Сначала, Вы должны разпаковать файл архива в некотором безопасном
расположении:
$ gunzip -c sendmail5.65b+IDA1.5+mailx5.3b.tgz | tar xvf -
Если Вы имеете "современный" tar, например из недавнего Slackware, Вы
можете сделать tar -zxvf filename.tgz и получить те же самые результаты.
Распаковка архива создает каталог, именованный sendmail5.65b +IDA1.5+
mailx5.3b. В этом каталоге, Вы находите комплектное оборудование sendmail +
IDA плюс mailx. Весь paths файл ниже этого каталога отражает расположение,
где файлы должны быть установлены, так что безопасно подготовить команду
tar:
# cd sendmail5.65b+IDA1.5+mailx5.3b
# tar cf - . | (cd /; tar xvvpoof -)
16.5.2 Формирование sendmail.cf
Чтобы сформировать файл sendmail.cf, настроенный для вашего пункта, Вы
должны сщздать файл sendmail.m4, и обработать его с m4. В /usr/local/lib/mail/CF,
Вы найдете типовой файл называемый sample.m4. Копируйте его в
yourhostname.m4, и редактируйте, чтобы отразить ситуацию вашего пункта.
В текущем разделе, я буду давать короткий краткий обзор макркоманд,
которые Вы должны изменить. Для полного описания того, что они делают,
пожалуйста, обратитесь к более раннему обсуждению sendmail.m4.
LOCAL MAILER DEF Определяет файл, который определяет mailer для
локального получения почты. См. раздел " Определение Локального Mailer'а "
выше.
- 300 -
PSEUDONYMS Определяет все имена, вашего локального host.
DEFAULT HOST Помещается в ваше полностью квалифицированное имя
области. Это имя появится как ваш hostname во всей выходящей почте.
UUCPNAME Помещается в ваше неквалифицированное hostnmae.
RELAY HOST и RELAY MAILER Если Вы говорите UUCP smart-host
установить RELAY HOST для UUCP имени вашего " интеллектуально
зависимого " uucp соседа. Используйте UUCP-A mailer, если Вы хотите
заголовки с определенным именем области.
DEFAULT MAILER Если Вы находитесь в Internet и используете DNS, Вы
должны установить его как TCP-A. Это сообщает, чтобы sendmail использовал
TCP-A mailer, который передает почту через SMTP используя нормальную RFC
адресацию для конверта. Абонент Internet возможно не должен определять
RELAY HOST or RELAY MAILER.
Чтобы создать файл sendmail.cf, выполните команду
# make yourhostname.cf
Она обработает файл yourhostname.m4 и создаст yourhostname.cf из него.
Затем, Вы должны проверить, делает ли файл конфигурации, который вы
создали, то, что Вы ожидаете. Это объясняется в следующих двух разделах.
Если вы удовлетворены его поведением, скопируйте его на место
командой:
# cp yourhostname.cf /etc/sendmail.cf
Теперь ваша система sendmail готова к действиям. Поместите следующую
строку в соответствующем файле запуска (вообще /etc/rc.inet2). Вы можете
также выполнить ее вручную, чтобы запустить его теперь.
# /usr/lib/sendmail -bd -q1h
16.5.3 Тестирование файла sendmail.cf
- 301 -
Чтобы включить " проверочный " режим, Вы вызываете sendmail с -bt
флагом. Заданный по умолчанию файл конфигурации - файл sendmail.cf,
который установлен на системе. Вы можете проверять альтернативный файл,
используя -Cfilename опцию.
В следующих примерах, мы проверяем vstout.cf файл конфигурации,
сгенерированный из файла vstout.m4.
# /usr/lib/sendmail -bt -Cvstout.cf
ADDRESS TEST MODE
Enter
[Note: No initial ruleset 3 call]
>
Следующие тесты гарантируют, что sendmail способен получать всю почту
пользователей вашей системы. Во всех случаях результат теста должен быть
тот же самый и указывать на локальное имя системы с ЛОКАЛЬНЫМ
mailer'ом.
Сначала проверите, как почта была бы передана локальному пользователю.
# /usr/lib/sendmail -bt -Cvstout.cf
ADDRESS TEST MODE
Enter
[Note: No initial ruleset 3 call]
> 3,0 me
rewrite: ruleset 3 input: me
rewrite: ruleset 7 input: me
rewrite: ruleset 9 input: me
rewrite: ruleset 9 returns: < me >
rewrite: ruleset 7 returns: < > , me
rewrite: ruleset 3 returns: < > , me
rewrite: ruleset 0 input: < > , me
rewrite: ruleset 8 input: < > , me
rewrite: ruleset 20 input: < > , me
rewrite: ruleset 20 returns: < > , @ vstout . vbrew . com , me
rewrite: ruleset 8 returns: < > , @ vstout . vbrew . com , me
rewrite: ruleset 26 input: < > , @ vstout . vbrew . com , me
rewrite: ruleset 26 returns: $# LOCAL $@ vstout . vbrew . com $: me
- 302 -
rewrite: ruleset 0 returns: $# LOCAL $@ vstout . vbrew . com $: me
Вывод показывает как sendmail обрабатывает адрес внутренне. Он
вручается различным ruleset, которые анализируют его, вызывают другой
ruleset по очереди, и разбивают его в компоненты.
В нашем примере, мы передали мой адрес к ruleset 3 и 0 (это - значение из
3,0 введенное перед адресом). Последняя строка показывает анализируемый
адрес возвращаемый ruleset 0.
Затем, проверите почту пользователя вашей системы с синтаксисом UUCP.
# /usr/lib/sendmail -bt -Cvstout.cf
ADDRESS TEST MODE
Enter
[Note: No initial ruleset 3 call]
> 3,0 vstout!me
rewrite: ruleset 3 input: vstout ! me
[...]
rewrite: ruleset 0 returns: $# LOCAL $@ vstout . vbrew . com $: me >
Затем, проверите почту, адресованную пользователю вашей системы с
синтаксисом Internet к вашему полностью квалифицированному hostname.
# /usr/lib/sendmail -bt -Cvstout.cf
ADDRESS TEST MODE
Enter
[Note: No initial ruleset 3 call]
> 3,0 me@vstout.vbrew.com
rewrite: ruleset 3 input: me @ vstout . vbrew . com
[...]
rewrite: ruleset 0 returns: $# LOCAL $@ vstout . vbrew . com $: me >
Вы должны повторить вышеупомянутые два теста с каждым из имен,
которые Вы определили в PSEUDONYMS и параметрах DEFAULT NAME в
вашем файле sendmail.m4.
Наконец, проверите что Вы можете отправлять почту вашему relay host.
# /usr/lib/sendmail -bt -Cvstout.cf
ADDRESS TEST MODE
- 303 -
Enter
[Note: No initial ruleset 3 call]
> 3,0 fred@moria.com
rewrite: ruleset 3 input: fred @ moria . com
rewrite: ruleset 7 input: fred @ moria . com
rewrite: ruleset 9 input: fred @ moria . com
rewrite: ruleset 9 returns: < fred > @ moria . com
rewrite: ruleset 7 returns: < @ moria . com > , fred
rewrite: ruleset 3 returns: < @ moria . com > , fred
rewrite: ruleset 0 input: < @ moria . com > , fred
rewrite: ruleset 8 input: < @ moria . com > , fred
rewrite: ruleset 8 returns: < @ moria . com > , fred
rewrite: ruleset 29 input: < @ moria . com > , fred
rewrite: ruleset 29 returns: < @ moria . com > , fred
rewrite: ruleset 26 input: < @ moria . com > , fred
rewrite: ruleset 25 input: < @ moria . com > , fred
rewrite: ruleset 25 returns: < @ moria . com > , fred
rewrite: ruleset 4 input: < @ moria . com > , fred
rewrite: ruleset 4 returns: fred @ moria . com
rewrite: ruleset 26 retu rns < @ moria . com > , fred
rewrite: ruleset 0 returns: $# UUCP-A $@ moria $: < @ moria
. com > , fred >
16.5.4 Помещение всего вместе -
Интеграционная проверка sendmail.cf и таблиц
Вы проверили что почта будет иметь желательное заданное по умолчанию
поведение и что вы будете способны и послать и получить законно
адресованную почту. Чтобы завершить установку, может быть необходимо
создать соответствующие dbm таблицы, чтобы получить желательные
конечные результаты.
После создания таблиц, которые требуются для вашего пункта, Вы должны,
обработать их через dbm созданием make в каталоге, содержащем таблицы.
Если Вы являетесь только UUCP узлом, Вы не должны создвать таблицы,
упомянутые в README.linux файле. Вы будете должны только подправить
файлы так, чтобы Make-файл работал.
Если вы в UUCP и Вы разговариваете с абонентами в дополнение к
вашему smart-host, вы будете должны добавить входы uucpxtable для каждого
- 304 -
(или почта к ним также пройдет через smart host) и выполнить dbm для
пересмотренного uucpxtable.
Сначала, Вы должны удостовериться что почта через ваш RELAY HOST,
посылается им через RELAY MAILER.
# /usr/lib/sendmail -bt -Cvstout.cf
ADDRESS TEST MODE
Enter
[Note: No initial ruleset 3 call]
> 3,0 fred@sesame.com
rewrite: ruleset 3 input: fred @ sesame . com
rewrite: ruleset 7 input: fred @ sesame . com
rewrite: ruleset 9 input: fred @ sesame . com
rewrite: ruleset 9 returns: < fred > @ sesame . com
rewrite: ruleset 7 returns: < @ sesame . com > , fred
rewrite: ruleset 3 returns: < @ sesame . com > , fred
rewrite: ruleset 0 input: < @ sesame . com > , fred
rewrite: ruleset 8 input: < @ sesame . com > , fred
rewrite: ruleset 8 returns: < @ sesame . com > , fred
rewrite: ruleset 29 input: < @ sesame . com > , fred
rewrite: ruleset 29 returns: < @ sesame . com > , fred
rewrite: ruleset 26 input: < @ sesame . com > , fred
rewrite: ruleset 25 input: < @ sesame . com > , fred
rewrite: ruleset 25 returns: < @ sesame . com > , fred
rewrite: ruleset 4 input: < @ sesame . com > , fred
rewrite: ruleset 4 returns: fred @ sesame . com
rewrite: ruleset 26 returns: < @ sesame . com > , fred
rewrite: ruleset 0 returns: $# UUCP-A $@ moria $: < @ sesame
. com > , fred >
Если Вы имеете UUCP соседей кроме вашего RELAY HOST, Вы должны
гарантировать, что почта к ним имеет соответствующее поведение. Почта,
адресованная с синтаксисом стиля UUCP для host, с которым Вы говорите по
UUCP, должна идти непосредственно к ним (если Вы явно не предотвращаете
это входом domaintable). Примите, что swim host - прямой сосед UUCP ваших
соседей. И при подаче swim!Fred sendmail должен произвести следующий
результат:
- 305 -
# /usr/lib/sendmail -bt -Cvstout.cf
ADDRESS TEST MODE
Enter
[Note: No initial ruleset 3 call]
> 3,0 swim!fred
rewrite: ruleset 3 input: swim ! fred
[...lines omitted...]
rewrite: ruleset 0 returns: $# UUCP $@ swim $: < > , fred
>
Если Вы имеете входы uucpxtable, чтобы вынудить получение по UUCP для
некоторых UUCP соседей, которые посылают почту стиля Internet с
определенным именем области, это также должно быть проверено.
# /usr/lib/sendmail -bt -Cvstout.cf
ADDRESS TEST MODE
Enter
[Note: No initial ruleset 3 call]
> 3,0 dude@swim.2birds.com
rewrite: ruleset 3 input: dude @ swim . 2birds . com
[...lines omitted...]
rewrite: ruleset 0 returns: $# UUCP $@ swim . 2birds $: < > , dude >
16.6 Администрирование и Глупые Приемы Почты
Теперь, когда мы обсудили теорию конфигурирования, установки, и
тестирования sendmail + IDA, давайте рассмотрим несколько моментов, чтобы
изучить вещи, которые случаются обычно в жизни администратора почты.
Отдаленные системы иногда ломаются. Ошибка модема или сбой
телефонных линий, определения DNS установлены неправильно из-за
человеческой ошибки. Сети падают неожиданно. В таких случаях,
администраторы почты должны знать, как реагировать быстро, действенно, и
безопасно схранить почту, текущую через альтернативные маршруты, пока
отдаленные системы или поставщики услуг не могут восстановить
нормальные услуги.
Остальная часть этой главы предназначена, чтобы обеспечить Вас
решениями для наиболее частыми " критическми состояниями электронной
почты ".
- 306 -
16.6.1 Пересылка Почты В Отдаленную Систему
Чтобы отправлять почту для специфического host или области в
обозначенную отдаленную систему, Вы вообще используете mailertable.
Например, чтобы отправить почту для backwood.org к их закулисной
системе GATEWAY UUCP, вы поместили следующий вход в mailertable:
UUCP-A,backdoor backwood.org
16.6.2 Почта Для Неконфигурированного Отдаленного Абонена
Часто, главные ЭВМ Internet будут иметь проблему при получении почты в
не-конфигурированном отдаленном абоненте. Имеются отдельные варианты
этой проблемы, но общий признак - почта передается отдаленной системой
или никогда добирается туда вообще.
Эти проблемы могут помещать локального администратора системы в
плохую позицию, потому что ваши пользователи вообще не заботятся о том
что Вы лично не управляете каждой системой во всем мире (или не знаете, как
получить отдаленного администратора, чтобы установить проблему). Они
только знают, что их почта не проходила желательному получателю на другом
конце и что вы являетесь вероятным виновным человеком.
Конфигурация отдаленного пункта - их проблема, не ваша. Во всех случаях,
убедитесь, что ваш пункт способен связаться с не-конфигурированным
отдаленным пунктом. Если Вы не можете войти в контакт с Постмастером в
отдаленном пункте, чтобы установить их конфигурацию своевременным
способом, Вы имеет две опции.
+ Вообще возможно вынудить послать почту в отдаленную систему успешно,
хотя, так как отдаленная система не-конфигурирована, ответы на отдаленном
конце могут не работать ..., но то это - проблема отдаленного администратора.
Вы можете устранить плохие заголовки в конверте на ваших исходящих
сообщениях только используя вход domaintable для их области или host, что
приводит к правке недопустимой информации, при выходе почты из вашего
пункта:
braindead.correct.domain.com braindead.wrong.domain.com
- 307 -
Знак ! в mailertable передает почту их отдаленному пункту, как будто она
инициировалось локально на их системе. Обратите внимание, что это
изменяет только адрес конверта, так что соответствующий адрес возврата
будет все еще обнаруживаться в сообщении.
TCP!braindead.correct.domain.com braindead.wrong.domain.com
16.6.3 Почта, которая будет перемещена через UUCP
В идеальном мире (из перспективы Internet), все главные ЭВМ будут иметь
записи в Domain Name Service (DNS) и посылать почту с полностью
квалифицированными именами области.
Если Вы, случается, передаете через UUCP такому пункту, Вы можете
вынуждать почту пройти двухточечное соединение UUCP, а не через ваш
заданный по умолчанию mailer по существу " опуская область " их hostname
через uucpxtable.
Чтобы вынуждать получение через UUCP для sesame.com, Вы поместили
бы следующее в ваш uucpxtable:
# un-domainize sesame.com to force UUCP delivery
sesame sesame.com
Результат - тот sendmail, то определит (через UUCPNODES в файле
sendmail.m4) что Вы непосредственно соединены с отдаленной системой, и
будет ставить в очередь почту для получения через UUCP.
16.6.4 Предотвращение Передачи Почты через UUCP
Противоположное условие также происходит. Часто системы могут иметь
ряд прямых соединений UUCP, которые редко используются или они не так
надежны и всегда доступны как заданный по умолчанию mailer или relay host.
Например, в Seattle области имеется ряд систем, которые обменивают
различные распределения Linux через анонимный UUCP, когда эти
распределения выпускаются. Эти системы говорят по UUCP только когда
необходимо, так что вообще быстрее и более надежно послать почту через
общие (и всегда доступные) главные ЭВМ.
Легко можно предотвратить получение UUCP почты от host, с которым Вы
непосредственно соединены. Если отдаленная система имеет полностью
- 308 -
квалифицированное имя области, Вы может добавить вход в domaintable:
# prevent mail delivery via UUCP to a neighbor
snorkel.com snorkel
Это заменит любое вхождение имени UUCP на FQDN, и таким образом
предотвратит соответствие строкой UUCPNODES в файле sendmail.m4.
Результат - почта будет идти через RELAY MAILER и RELAY HOST (или
DEFAULT MAILER).
16.6.5 Выполнение Очереди Sendmail по требованию
Для обработки поставленных в очередь сообщений немедленно, просто
набейте "/usr/lib/runq ". Это заставляет sendmail выполнить очередь заданий,
немедленно а не ждать следующего планируемого.
16.6.6 Статистика Почты
Многие администраторы пунктов (и персонал) заинтересованы объемом
почты, передающейся к, из, и через локальный пункт. Имеется ряд способов
определить количество траффика почты.
+ Sendmail приходит с утилитой, называемой mailstats, которая читает файл
называемый /usr/local/lib/mail/sendmail.st и сообщает число сообщений и число
байтов, перемещенных каждым из mailer'ов используемых в файле sendmail.cf.
Этот файл должен быть создан локальным администратором вручную для
регистрации sendmail. Текущие показатели будут очищены, удаляя и вновь
создавая sendmail.st файл. Один способ состоит в том, чтобы делать следующее:
# cp /dev/null /usr/lib/local/mail/sendmail.st
+ Возможно самый лучший способ делать качественный отчет относительно
того, кто использует почту и сколько объема проходит к, из, и через локальную
систему, состоит в том, чтобы включить отладку почты как syslogd (8). Вообще,
это означает выполнение /etc/syslogd daemon из вашего файла запуска системы
(который Вы должны создать во всяком случае), и добавление строки к
/etc/syslog.conf (5) который который выглядит примерно:
mail.debug /var/log/syslog.mail
- 309 -
Если Вы используете mail.debug и отправляете по почте большие объемв,
вывод syslog может стать большим. Выходные файлы из syslogd вообще
должны сдвигаться или очищаться на стандартном базисе из crond (8).
Имеется ряд обычно доступных утилит, которые могут подводить итог
вывода регистрации почты из syslogd. Одна из наиболее известных утилит -
syslog-stat.pl, команда perl, которая распределена с sendmail + IDA.
16.7 Смешивание и Соответствие Двоичных Распределений
Не имеется никакой истинной стандартной конфигурации транспорта
электронной почты и средств получения и не имеется никакой " истинной
структуры каталога. "
Соответственно, необходимо гарантировать, что все различные части
системы (USENET новости, почта, TCP/IP) договариваются о расположении
локальной программы получения почты (lmail, deliver, и т.д.), отдаленной
программы получения почты (rmail), и программы транспорта почты (sendmail
или smail). Такие предположения вообще не зарегистрированы, хотя
использование команды может помогать определять то, какие файлы и
каталоги ожидаются. Следующее - некоторые проблемы, которые мы видели в
прошлом с некоторыми доступными двоичными распределениями и
исходниками.
+ Некоторые версии распределения NET-2 TCP/IP имеют услуги,
определенные для программы, называемой umail а не sendmail.
+ Имеются различные порты elm и mailx, которые ищут средство получения
/usr/bin/smail а не sendmail.
+ Sendmail + IDA имеет встроенный локальный mailer для deliver, но ожидает,
что он расположен в /bin, а не в более типичном расположении Linux /usr/bin.
16.8 Где Получить Подробную информацию
Имеется много мест, где Вы можете искать подробную информацию
относительно sendmail. См. Linux MAIL Howto зарегистрированный регулярно
как comp.answers. Это также доступно для анонимного FTP на rtfm.mit.edu.
Однако, окончательное место находится в sendmail + IDA. Смотрите в каталоге
- 310 -
ida/cf ниже исходного каталога файлы DBM-GUIDE, OPTIONS, и Sendmail.mc.
17. Netnews
17.1 Usenet Хронология
Идея относительно сетевых новостей была рождена в 1979 когда два
студента Tom Truscott и Jim Ellis подумали об использовании UUCP чтобы
соединять машины с целью информационного обмена среди пользователей
Unix. Они установили малую сеть из трех машин на Севере Каролины.
Первоначально, траффик был обработан рядом команд оболочки (позже
перезаписан в C), но они никогда не были выпущены к общему. Они были
быстро заменены на "А" новости, первый общий выпуск программного
обеспечения новостей.
"А" новости не был разработаны, чтобы обработать больше чем несколько
статей на группу в день. Когда объем продолжил расти, это было
перезаписано Мark Horton и Matt Glickman, и названо "B" выпуск (a.k.a. Bnews).
Первый общий выпуск Bnews был - версия 2.1 в 1982. Он расширялся
непрерывно, с отдельными новыми добавляемыми возможностями. Текущая
версия - Bnews 2.11. Она медленно устаревает.
Другая перезапись была выполнена и выпускалась в 1987 Geoff Collyer и
Henry Spencer; это - выпуск " "C", или Новости C.
Выпуск Эффективности - Новости C, версия в настоящее время
включенная в большинство реализаций Linux.
Все выпуски новостей до " " C " " является прежде всего целенаправленным
для сетей UUCP, хотя они могут использоваться в других средах также.
Эффективная передача новостей над сетями подобно TCP/IP, DECNet требует
новой схемы. Это было причиной почему, в 1986 появился " Сетевой
Протокол передачи Новостей '', NNTP. Он основан на сетевых соединениях, и
определяет ряд команд, чтобы в интерактивном режиме передать и отыскать
статьи.
Имеется ряд nntp-основанных приложений, доступных из Сети. Один из
них - nntpd пакет Brian Barber и Phil Lapsley,
Другие NNTP пакеты - INN, или Новости Internet. Это не просто передная
часть, но система новостей с собственными правилами.
17.2 Что является Usenet, Во всяком случае?
- 311 -
Одно из наиболее поразительных предложений относительно Usenet - то,
что это не часть любой организации, и не имеет централизованной сетевой
власти для управления. Фактически, это - все Usenet сведения, кроме
технического описания. Вы не можете определять, что это, Вы можете только
сказать чем это не является.
С риском звучать глупо, можно было определить Usenet как
сотрудничество отдельных абонентов, которые обмениваются Usenet
новостями.
Базисный модуль Usenet новостей - статья. У статьи есть так называемый
заголовок. Это очень похоже на формат заголовка почты, установленный в
Internet, стандарт RFC 822, в котором это состоит из отдельных строк текста,
каждое начинается с имени поля, завершенного двоеточием, которое
сопровождается значением поля. (1)
Статьи представлены на рассмотрение в одну или большое количество
newsgroups. Можно рассматривать newsgroup форумом для статей в отношении
общего предмета. Все newsgroups организованы в иерархии, с именем каждой
группы, указывающим место в иерархии. Например, любой может видеть из
имени newsgroup, что comp.os.linux.announce используется для объявлений
относительно операционной системы Linux.
17.3 Как в Usenet Обрабатывают Новости?
Сегодня, Usenet вырос до огромных размеров. Узлы, которые несут все
netnews обычно передают что - нибудь вроде несерьезных шестидесяти
мегабайтов в день. (2) Конечно это требует намного больше чем обмен
файлами. Так что давайте рассмотрим способ, которым большинство системах
Unix обрабатывает Usenet новости.
Новости распределены через сеть различными transports. Как историческая
среда используется UUCP, но сегодня основной траффик несет абонент Internet.
Используемый алгоритм маршрутизации называется лавинной
маршрутизацией: Каждый пункт поддерживает ряд связей к другому абоненту.
Любая статья, сгенерированная или полученная локальной системой новостей
будет послана к ним.
Чтобы отличать статьи и распознавать дубликаты, Usenet статьи должны
нести ID сообщения (заданный в поле заголовка Message-ID:), которое
объединяет имя пункта регистрации и серийный номер в " ''. Для
каждой обработанной статьи, система новостей регистрирует ее ID в файл
хронологии, в котором проверяются все прибывающие статьи.
- 312 -
Явное число статей обычно требует, чтобы к вышеупомянутой схеме были
сделаны уточнения. На сетях UUCP, обычто статьи за период времени
объединяются в одиночный файл, который сжимается и посылается к
отдаленному пункту. Это вызывается, пакетирование.
Абонент, которые находятся в Internet вообще полагается на TCP/IP
программное обеспечение, которое использует Сетевой Протокол передачи
Новостей, NNTP. Он передает новости между узлами и обеспечивает Usenet
доступ к отдельным пользователям.
18. "C" Новости
Один из наиболее популярных пакетов программ для Netnews - Новости C.
Это было разработано для абонентов, которые несут новости по связям UUCP.
Эта глава обсудит центральные понятия Новостей C, и базисной установки и
задач сопровождения.
Новости C (C News) сохраняют файлы конфигурации в /usr/lib/news, а
большинство binaries в каталоге /usr/lib/news/bin. Статьи сохраняются ниже
/var/spool/news. Вы должны удостовериться виртуально что все файлы в этих
каталогах принадлежат новостям пользователя, групповым новостям.
Большинство проблем является результатом файлов, являющихся недоступным
для Новостей C. Сделайте это правилом для Вас, определить новостями
пользователя, используя su прежде, чем Вы что - нибудь там измените.
Единственые исключения - setnewsids, которые используются, чтобы
установить реальный id пользователя некоторых программ новостей. Это
должно принадлежать root и должно иметь setuid набор битов.
Далее мы описываем все файлы конфигурации C News подробно, и
показываем Вам, что Вы должны делать, чтобы сохранить ваш пункт в
рабочем состоянии.
18.1 Поставка Новостей
Статьи могут быть поданы C News отдельными способами. Когда
локальный пользователь отправляет по почте статью, newsreader обычно
вручает ее команде inews, которая завершает информацию заголовка. Новости
из отдаленного абонента, будь это одиночная статья или целый пакет, даны
команде rnews, которая сохраняет их в каталоге /var/spool/newsin.coming, откуда
они будут подняты в более позднее время newsrun. С любым из этих двух
методов, однако, статья будет в конечном счете вручена команде relaynews.
- 313 -
Для каждой статьи, команда relaynews проверяет, если статья уже была
замечена в локальном пункте, ища id сообщения в файле хронологии. Двойные
статьи будут пропущены. Затем, relaynews рассматривает Newsgroups: строку
заголовка, чтобы выяснить, запрашивает ли локальный пункт статьи из любой
из этих групп. Если он это делает, и группа новостей перечислена в открытом
файле, relaynews пробует сохранять статью в соответствующем каталоге в
области хранения новостей. Если этот каталог не существует, он будет создан.
Id сообщения статьи будет регистрироваться в файле хронологии. Иначе,
relaynews пропускает статью.
Если relaynews будет не в состоянии сохранять входящую статью, потому
что группа, в которой она была зарегистрирована, не перечислена в вашем
открытом файле, статья будет перемещаться в группу junk. relaynews также
проверит несвежие или статьи без дат и отклонит их. Входящие пакеты,
которые терпят неудачу по любой другой причине, перемещаются в
/var/spool/news/in.coming/bad, и сообщение об ошибках регистрируется.
18.2 Установка
Чтобы установить C News необходимо раз'tar'ить файлы в их
соответствующие места, если Вы еше не сделали этго, и отредактировать
файлы конфигурации, перечисленные ниже. Они все расположены в
/usr/lib/news. Их форматы будут описаны в следующих разделах.
Если Вы являетесь передающим пунктом (пунктом листа), Вы нуждаетесь в
строке, которая посылает все локально сгенерированные статьи к
ожидающему. Пусть ожидающий - moria, тогда ваш системный файл должен
выглядеть следующим образом:
ME:all/all::
moria/moria.orcnet.org:all/all,!local:f:
organization Имя Вашей организации. Например, "Виртуальный Пивоваренный
завод". На вашей местной машине, введите " частный пункт '', или что -
нибудь, еще, что Вы находите приятным. Большинство людей не будет
называть ваш пункт правильно отконфигурированным, если Вы не настроили
этот файл.
newsgroups ...
- 314 -
mailname Имя почты Вашего пункта, например vbrew.com.
whoami Имя Вашего пункта для целей новостей. Часто используется имя пункта
UUCP, например vbrew.
explist Вы должны возможно редактировать этот файл, чтобы отразить ваше
привилегированное время для некоторых специальных newsgroups. Дисковое
пространство может играть важную роль в этом.
Чтобы создавать начальную иерархию newsgroups, получите active и
newsgroups файл из пункта, который передает Вам, и установите их в
/usr/lib/news. Удалите все to.* группы из active файла, и добавте to.mysite и
to.feedsite, также как junk и control. To.* группы обычно используются для
обмена ihave/sendme сообщениями, но Вы должны создать их независимо от
того, планируете ли Вы использовать ihave/sendme или нет. Затем, замените все
числа статьи во втором и третьем поле active, используя следующую команду:
# cp active active.old
# sed 's/ [0-9]* [0-9]* / 0000000000 00001 /' active.old > active
# rm active.old
Вторая команда - вызов sed (1), одна из моих любимых команд Unix. Этот
вызов заменяет две строки цифр на строку нулей и строку 000001,
соответственно.
В заключение, создайте каталог для хранения новостей и подкаталоги,
используемые для входящих и исходящих новостей:
# cd /var/spool
# mkdir news news/in.coming news/out.going
# chown -R news.news news
# chmod -R 755 news
Если вы используете более поздний выпуск C News, Вы можете быть
должны создать каталог out.master в каталоге хранения новостей.
Если вы используете newsreaders из другого распределения чем C News, Вы
можете находить, что некоторые ожидают хранилище новостей в
/usr/spool/news а не в /var/spool/news. Если ваш newsreader кажется, не находит
статьи, создайте сноску из /usr/spool/news в /var/spool/news.
Теперь, Вы готовы получать новости. Обратите внимание, что Вы не
- 315 -
должны создавать любые каталоги отличные от показанных выше, потому что
каждый раз когда C News получает статью от группы, для которой не имеется
никакого каталога, он создаст его.
C News нуждается в пользователе, которому можно послать сообщения об
ошибках и отчеты состояния. По умолчанию, это - usenet. Если Вы используете
значение по умолчанию, Вы должен установить специальные права для него.
Вы можете также отменять это поведение, устанавливая переменную среды
NEWSMASTER как соответствующее имя.
18.3 Системный файл
Системный файл sys расположенный в /usr/lib/news, управляет иерархией
получения и передачи к другому абоненту. Хотя имеются инструментальные
средства сопровождения, именованные addfeed и delfeed, я думаю, что лучше
поддерживать этот файл вручную.
Файл sys содержит входы для каждого пункта на который Вы передаете
новоси, также как описание групп, которые Вы примете. Вход выглядит
подобно
site[/exclusions]:grouplist[/distlist][:flags[:cmds]]
Входы могут быть продолжены поперек символов перевода строки,
используя наклонную черту влево (\). Знак мусора (*) обозначает комментарий.
site является именем пункта к которому вход применяется. Каждый обычно
выбирает имя UUCP пункта для этого. Должен иметься вход для вашего пункта
в файле sys, или Вы не будете получать никакие статьи самостоятельно.
Специальное имя пункта ME обозначает ваш пункт.
Так как C News проверяет пункт против имен пункта в Path: поле заголовка,
Вы должны удостовериться, что они действительно соответствуют. Некоторые
абонентв используют их полностью квалифицированное имя области в этом
поле, или специальное подобно news.site.domain. Чтобы предотвращать возврат
любых статей к этому абоненту Вы должны добавить их к списку исключения,
отделяя их запятыми.
Для входа, обращающегося к пункту moria, например, поле пункта
содержало бы moria/moria.orcnet.org.
Grouplist - отделенный запятой список групп и иерархий для этого
специфического пункта. Иерархия может быть определена, давая префикс
иерархии (типа comp.os для всех групп, чьи имена начинаются с этого
- 316 -
префикса), необязательно сопровождаемый ключевым словом all (например
comp.os.all).
Иерархия или группа исключается из пересылки, приписыванием метки
восклицания. Если newsgroup проверен против списка, самое длинное
соответствие, применяется. Например, если grouplist содержит
!comp,comp.os.linux,comp.folklore.computers
Никакие группы из comp иерархии за исключением comp.folklore.computers
и всех групп ниже comp.os.linux не будут поданы к тому пункту.
Если пункт запрашивает послать все новости, что Вы получаете для себя,
введите все как grouplist.
Distlist - смещение из grouplist наклонной чертой вправо, и содержит список
распределений, которые будут посланы. Снова, Вы можете исключать
некоторые распределения, предшествуя им с меткой восклицания. Все
распределения обозначены all. Опущение distlist подразумевает список всех.
Например, Вы можете использовать дистрибутивный список all,!Local,
чтобы предотвратить посылку новостей для локального использования
отдаленному абоненту.
Имеются обычно по крайней мере два распределения: world, который
является часто заданным по умолчанию используемым распределением когда
ни одно не определено пользователем, и local. Могут иметься другие
распределения, которые обращаются к некоторой области, штату, стране, и т.д.
В заключение, имеются два распределения, используемые только C News; это -
sendme и ihave, и используются для sendme/ihave протокола.
Флаги
Здесь описывются некоторые параметры для feed. Это может быть пусто,
или комбинация следующего:
F Этот флаг дает возможность пакетированию.
f Это почти идентично F флагу, но позволяет C News вычислять размер
исходящих пакетов более точно.
I Этот флаг заставит C News произвести список статей, подходящих для
использования ihave/sendme. Дополнительные изменения sys и batchparms
- 317 -
файлов требуются, чтобы дать возможность ihave/sendme.
n Это создает командные файлы для active NNTP клиентов передачи подобно
nntpxmit (см. главу 19.). Командные файлы содержат имя файла статьи наряду с
id сообщения.
L Это сообщает, чтобы C News передал только статьи, зарегистрированные в
вашем пункте. Этот флаг может сопровождаться десятичным числом n,
которое заставит C News передать статьи, зарегистрированные только внутри
n переходов из вашего пункта. C News определяет число переходов в поле
Path:.
u Это сообщает C News принимать только статьи из групп unmoderated.
m Это сообщает C News принимать только статьи из уменьшенных групп.
Вы можете использовать не больше одного из F, f, I, или n.
cmds Это поле содержит команду, которая будет выполнена для каждой статьи,
если пакетирование не допускается. Статья будет подана команде на
стандартном вводе. Это должно использоваться для очень малых потоков;
иначе загрузка на обеих системах будет слишком высока.
Заданная по умолчанию команда
uux - -r -z system!rnews
Вызывает rnews на отдаленную систему, подавая эту статью на стандартном
вводе.
Заданный по умолчанию путь поиска для команд, данных в этом поле -
/bin:/usr/bin:/usr/lib/news/bin/batch. Последний каталог содержит ряд команд
оболочки, чьи имя начинается с via; они кратко описаны позже в этой главе.
Если пакетирование допускается, использованием или F или f, или I или n
флагов, C News ожидает находить имя файла в этом поле, а не команду. Если
имя файла не начинается с наклонной черты вправо (/), оно принимается
относительно /var/spool/news/out.going. Если поле пусто, то значения по
умолчанию system/togo.
При установке C News, Вы будете возможно должны написать ваш
собственный файл sys. Чтобы помочь Вам с этим, мы даем типовой файл для
vbrew.com ниже, с которого Вы могли бы скопировать то, в чем Вы
нуждаетесь.
- 318 -
# We take whatever they give us.
ME:all/all::
# We send everything we receive to moria, except for local and
# brewery-related articles. We use batching.
moria/moria.orcnet.org:all,!to,to.moria/all,!local,!brewery:f:
# We mail comp.risks to jack@ponderosa.uucp
ponderosa:comp.risks/all::rmail jack@ponderosa.uucp
# swim gets a minor feed
swim/swim.twobirds.com:comp.os.linux,rec.humor.oracle/all,!local:f:
# Log mail map articles for later processing usenet-
maps:comp.mail.maps/all:F:/var/spool/uumaps/work/batch
18.4 Файл active
Файл active расположенный в /usr/lib/news перечисляет все группы,
известные в вашем пункте, и статьи в настоящее время интерактивные. Вы
редко будете должны изменять его, но мы объясним это ради законченности.
Входы имеют следующую форму:
newsgroup high low perm
Newsgroup, конечно, имя группы. Low и high - самые низкие и самые
высокие числа статей, в настоящее время доступных. Если ни одна не является
доступной в настоящее время, low = high + 1.
Perm - параметр, детализирующий доступ пользователей в зависимости от
группы. Он принимает одно из следующих значений:
y Пользователям разрешают отправить по почте к этой группе.
n Пользователям не разрешают отправить по почте к этой группе. Однако,
группа может все еще читаться.
x Эта группа была заблокирована локально. Это случается иногда, когда
- 319 -
администраторы новостей (или их старшие) закрывают статьи,
зарегистрированные в некоторых группах.
Статьи, полученные для этой группы не сохранены локально, хотя они
посланы к абонентам, которые запрашивают их.
m Это обозначает уменьшенную группу. Когда пользователь пробует
отправлять по почте к этой группе, интеллектуальный newsreader сообщит
какая она, и пошлет статью регулятору взамен. Адрес регулятора принимается
из файла регуляторов в /usr/lib/news.
=real-group Это отмечает newsgroup как локальную специализацию для другой
группы, а именно real-группы. Все статьи, зарегистрированные в newsgroup
будут переназначены в нее.
В C News, Вы вообще не будете должны обращаться к этому файлу
непосредственно. Группы могут быть добавлены или удаляться, локально
используя addgroup и delgroup (см. ниже в разделе 18.10). Когда группы
добавляются или удаляются для всего Usenet, это обычно делается, посылая
newgroup или rmgroup сообщение управления, соответственно. Никогда не
посылайте такое сообщение самостоятельно! Для команд о том, как создавать
newsgroup, читайте ежемесячник в news.announce.newusers.
Файл, близко связанный с active - active.times. Всякий раз, когда группа
создана, C News регистрирует сообщение в этот файл, содержащее имя
созданной группы, дату создания, было ли это выполнено в соответствии c
сообщением управления новой группы или локально, и кто сделал это. Это -
для удобства newsreaders, которые могут сообщать пользователю относительно
любой недавно созданной группы. Это также используется командой
NEWGROUPS NNTP.
18.5 Пакетирование Статьи
Newsbatches следуют за специфическим форматом, который является тем
же самым для Bnews, C News, и INN. Каждой статье предшествует строка:
#! rnews count
Где count - число байтов в статье. Когда используется пакетное сжатие,
возникающий в результате файл сжат в целом, и содержит другую строку в
соответствии c сообщением, которое нужно использовать для распаковки.
Стандартное средство сжатия - упаковщик, который отмечен
- 320 -
#! cunbatch
Иногда, при необходимости посылать пакеты через программное
обеспечение почты, которое удаляет, восьмой бит из всех данных, сжатый
пакет может быть защищен, используя, что называется c7-encoding; эти пакеты
будут отмечены c7unbatch.
Когда пакет подан к rnews на отдаленном пункте, он проверяет эти
маркеры и обрабатывает пакет соответственно. Некоторые абоненты также
используют другие инструментальные средства сжатия, подобно gzip, и
предшествует таким файлам с zunbatch взамен. C News не распознает
ненормативные заголовки подобно этим; Вы должны изменить исходник,
чтобы поддерживать их.
В C News, пакетирование статьи выполняется
/usr/lib/news/bin/batch/sendbatches, который берет список статей из site/togo файла,
и помещает их в отдельный newsbatches. Это должно быть выполнено раз в час
или даже более часто, в зависимости от объема траффика.
Операция управляется batchparms файлом в /usr/lib/news. Этот файл
описывает максимальный пакетный размер, позволенный для каждого пункта,
программу пакетирования и необязательную программу сжатия, которую
нужно использовать, и транспорт для поставки к этому отдаленному пункту.
Вы можете определять параметры пакетирования, также как набор заданных
по умолчанию параметров для абонента, не явно упомянутого.
Чтобы выполнять пакетирование для специфического пункта, Вы
вызываете это как
# su news -c "/usr/lib/news/bin/batch/sendbatches site"
Когда вызывается без аргументов, sendbatches обрабатывает все пакетные
очереди. Интерпретация " все " зависит от присутствия заданного по
умолчанию входа в batchparms. Если он найден, все каталоги в
/var/spool/news/out.going проверяются, иначе, он циклически проходит все
входы в batchparms. Обратите внимание, что sendbatches, при просмотре
каталога out.going, берет только те каталоги, которые не содержат никакую
точку или знак (@) как имена пункта.
При установке C News, Вы наиболее вероятно найдете batchparms файл в
вашем распределении, который содержит приемлемый заданный по
умолчанию вход, так что имеется хорошая возможность не изменять файл. На
- 321 -
всякий случай, мы описываем формат. Каждая строка состоит из шести полей,
отделяемых пробелами или метками табуляции:
site size max batcher muncher transport
Значение этих полей следующие:
site - имя пункта, к которому применяется вход. Togo файл для этого пункта
должен постоянно находиться в out.going/togo. Имя пункта /default/ обозначает
заданный по умолчанию вход.
size - максимальный размер созданных пакетов статей (перед сжатием). Для
одиночных статей больших чем этот размер, C News делает исключение и
помещает их в одиночный пакет.
max - максимальное число пакетов, созданных и планируемых для
передачи перед пакетированием для этого специфического пункта.
C News определяет число поставленных в очередь пакетов, используя
queulen команду в /usr/lib/news/bin. Выпуск newspak Vince Skahan'а должен
содержать команду для bnu-совместимого UUCP. Если Вы используете
различные виды spool каталогов, например, Taylor UUCP, Вам может быть
необходимо написать ваш собственный.
Поле batcher содержит команду, используемую для создания пакета из
списка статей в togo файле. Это - обычно batcher. Для других целей можно
обеспечивать альтернативные команды. Например, ihave/sendme протокол
требует, чтобы список статей был превращен в сообщения управления ihave
или sendme, которые зарегистрированы в newsgroup to.site. Это выполняется
batchih и batchsm.
muncher поле определяет команду, используемую для сжатия. Обычно, это -
compcun, команда, которая производит сжатый пакет. В качестве
альтернативы, Вы могли бы обеспечивать muncher, который использует gzip,
скажем gzipcun (чтобы быть чистым: Вы должны запись это непосредственно).
Вы должны удостовериться, что распаковщик на отдаленном пункте
исправлен, чтобы распознать файлы, сжатые с gzip.
Если отдаленный пункт не имеет команды распаковки, Вы можете
определить nocomp, который не делает никакое сжатие.
Последнее поле, transport, описывает транспорт, который нужно
использовать. Доступно несколько стандартных команд для различных
transports, чьи имена начинаются с via. Sendbatches передает им имя пункта
адресата в командной строке. Если batchparms вход не был /default/, он получает
имя пункта из поля site, удаляя все последующее, включая первую точку или
- 322 -
наклонную черту вправо. Если вход был /default/, используются имена каталога
в out.going.
Имеются две команды, которые используют uux, чтобы выполнить rnews на
отдаленной системе; viauux и viauuxz. Последняя устанавливает -z флаг для
(более старые версии) uux, чтобы отменить сообщения успеха для каждой
переданной статьи. Другая команда, viamail, посылает пакеты статей
пользователю rnews на отдаленной системе через почту.
Все команды из последних трех полей нужно расположть или в
out.going/site или в /usr/lib/news/bin/batch. Большинство их - команды, так, чтобы
Вы могли легко приспосабливать новые инструментальные средства для
ваших персональных потребностей. Они вызываются как трубопровод.
Список статей подается дозатору на стандартном вводе, который производит
пакет на стандартном выводе. Это канально передается в muncher, и так далее.
Типовой файл дан ниже.
# batchparms file for the brewery
# site | size |max |batcher |muncher |transport
#-------------+--------+-------+---------+-----------+-----------
/default/ 100000 22 batcher compcun viauux
swim 10000 10 batcher nocomp viauux
18.6 Устаревшие Новости
В Bnews, устаревание выполняться программой называемой expire, которая
принимает список newsgroups как аргументы, наряду с спецификацией времени
после которого статьи должны устареть.
Иногда, Вы можете хотеть сохранять статьи из некоторых групп даже после
того, как они устарели; например, Вы могли бы хотеть сохранить программы,
зарегистрированные в comp.sources.unix. Это называется архивирование. Explist
разрешает Вам отмечать группы для архивирования.
Вход в explist похож на это:
grouplist perm times archive
Grouplist - отделенный запятой список newsgroups, к которым вход
применяется. Иерархии могут быть определены префиксом имени группы,
необязательно конкатенированным ко всем. Например, для входа,
обращающегося к всем группам ниже comp.os, Вы могли бы вводить comp.os
- 323 -
или comp.os.all в grouplist.
При устаревании новости из группы, имя будет проверено против всех
входов в explist в данном порядке. Первый соответствующий вход
применяется. Например, чтобы отбросить большую часть comp после четырех
дней, кроме comp.os.linux.announce, который Вы хотите хранить в течение
недели, Вы просто должны иметь вход для последнего, который определяет
семи-дневный период окончания, сопровождаемый входом для comp, который
определяет четыре дня.
Поле perm детализирует, если вход применяется к уменьшенной, или
любой группе. Оно может принимать значения m, u, или x, которые
обозначают уменьшенный, неуменьшенный, или любой тип.
Третье поле, times, обычно содержит только одиночное число. Это - число
дней после которых статьи будут устаревать, если они не были назначены,
искусственная дата окончания в поле Expires в заголовке статьи. Обратите
внимание, что это - число дней подсчитывается с поступления в ваш пункт, а
не с даты регистрации.
Поле times может, однако, быть более сложно. Это может быть комбинация
до трех чисел, отделяемых от друг друга черточкой. Первое обозначает число
дней, которые должны пройти прежде, чем статья рассматривается
кандидатом на окончание. Редко полезно использовать значение отличное от
нуля. Второе поле - вышеупомянутое заданное по умолчанию число дней
после, которых оно будет устаревать. Третья часть - число дней после которых
статья будет устаревать безоговорочно, независимо от того, имеет ли она поле
Expires или нет. Если только среднее число дано, другие два берут значения по
умолчанию. Они могут быть определены, используя специальный /bounds/
входа, который описан ниже.
Четвертое поле, archive, обозначает, должен ли newsgroup быть
заархивирован, и где. Если никакого архивирования не предназначено,
должна использоваться черточка. Иначе, Вы либо используете полное имя
пути (указывающее на каталог), или знак (@). Знак обозначает заданный по
умолчанию каталог архивов, который должен то быть дан doexpire, используя
-a флаг в командной строке. Каталог архивов должен принадлежать news.
Когда doexpire архивирует статью из, скажем comp.sources.unix, он сохраняет ее
в каталоге comp/sources/unix ниже каталога архивов, создавая его если он не
существует. Каталог архивов непосредственно, однако, не будет создан.
Имеются два специальных входа в вашем explist файле, на который doexpire
полагается. Вместо списка newsgroups, они имеют ключевые слова /bounds/ и
/expired/. Вход /bounds/ содержит значения по умолчанию для трех значений
- 324 -
поля времен, описанного выше.
Поле /expired/ определяет, как долго C News будет содержать строки в
файле хронологии. Это необходимо, потому что C News не будет удалять
строку из файла хронологии, если соответствующая статья устарела, но будет
содержать ее в случае, если дубликат должен прибыть после этой даты.
Простой explist файл с довольно плотными интервалами истечения
воспроизведен ниже:
# keep history lines for two weeks. Nobody gets more than three months
/expired/ x 14 -
/bounds/ x 0-1-90 -
# groups we want to keep longer than the rest
comp.os.linux.announce m 10 -
comp.os.linux x 5 -
alt.folklore.computers u 10 -
rec.humor.oracle m 10 -
soc.feminism m 10 -
# Archive *.sources groups
comp.sources,alt.sources x 5 @
# defaults for tech groups
comp,sci x 7 -
# enough for a long weekend
misc,talk x 4 -
# throw away junk quickly
junk x 1 -
# control messages are of scant interest, too
control x 1 -
# catch-all entry for the rest of it
all x 2 -
С устареванием в C News, имеется ряд потенциальных проблем при
чистке. Например, ваш newsreader мог бы полагаться на третье поле файла
active, который содержит число самой низкой интерактивной статьи. При
истечении статьи, C News не модифицирует это поле. Если Вы хотите чтобы
это поле, представляло реальную ситуацию, Вы должны выполнить
программу, называемую updatemiin после каждого выполнения doexpire.
18.7 Разнообразные Файлы
- 325 -
Имеется ряд файлов, которые управляют поведением C News, но не
существенны для функционирования. Все они постоянно находятся в
/usr/lib/news. Мы опишем их кратко.
newsgroups Это - файл дополняющий active, который содержит список имен
newsgroup, наряду с кратким описанием основного предмета. Этот файл
автоматически модифицируется, когда C News получает сообщение
управления checknews (см. раздел 18.8).
localgroups если Вы имеете ряд локальных групп, таких что Вы не хотите,
чтобы C News жаловался относительно них, каждый раз когда Вы получаете
checknews сообщение, поместите их имена и описания в этом файле, точно так
же как они появились бы в newsgroups.
mailpaths Этот файл содержит адрес регулятора для каждой уменьшенной
группы. Каждая строка содержит имя группы, сопровождаемое адресом email
регулятора (отделеные меткой табуляции).
Два специальных входа обеспечиваются как значение по умолчанию. Они
базовые и межсетевые. Оба обеспечиваются --- в записи bang-path --- путем к
самому близкому базовому пункту, и пункту, который понимает RFC 822
адреса (user@host).
Вы не будете должны изменять межсетевой вход, если Вы имеете smail или
sendmail, потому что они понимают RFC 822 - адресацию.
Базовый вход используется всякий раз, когда пользователь отправляет по
почте к уменьшенной группе, чей регулятор не перечислен явно. Если имя
newsgroup -- alt.sewer, и базовый вход содержит path!%s, C News отправит по
почте статью к path!alt-sewer, надеясь, что базовая машина способна передать
статью. Чтобы выяснить который путь использовать, спросите
администрацию новостей в пункте, который передает Вам. Вы можете также
использовать uunet.uu.net!%s.
distributions Этот файл не файл C News, но он используются некоторыми
newsreaders, и nntpd. Он содержит список распределений, распознанных вашим
пунктом, и описанием (встроенных) возможностей. Например, Виртуальный
Пивоваренный завод имеет следующий файл:
world everywhere in the world
- 326 -
local Only local to this site
nl Netherlands only
mugnet MUGNET only
fr France only
de Germany only
brewery Virtual Brewery only
log Этот файл, содержит файл регистрации всех действий C News. Он
вызывается регулярно, выполняя newsdaily; копии старых регистрационных
файлов сохраняются в log.o, log.oo, и т.д.
errlog Это - файл регистрации всех сообщений об ошибках, созданных C News.
Он не включают плохие статьи, и т.д. Этот файл будет отправлен по почте к
newsmaster (usenet по умолчанию) автоматически newsdaily, если он не-пуст.
Errlog очищается newsdaily. Старые копии сохраняются в errlog.o и т. д.
batchlog Он регистрирует все выполнения sendbatches. Он обычно мало
интересен. Он также зависит от newsdaily.
watchtime Это - пустой файл, создаваемый каждый раз при выполнении
newswatch.
18.8 Сообщения Управления
Usenet протокол новостей знает специальный класс статей, которые
вызывают некоторые ответы или действия системы новостей. Они
называются сообщениями управления. Они распознаются присутствием поля
Control в заголовке статьи, которое содержит имя операции управления,
которую нужно выполнить. Имеются отдельные типы этих операций, которые
обрабатываются командами оболочки, расположенными в /usr/lib/news/ctl.
Большинство из них выполнит их действие автоматически во время
обработки статьи C News, без того, чтобы уведомить newsmaster. По
умолчанию, только checkgroups сообщения будут вручены newsmaster, но Вы
можете изменять это, редактируя команды.
18.8.1 Сообщение Отмена
Наиболее широко известное сообщение - отмена, которой пользователь
- 327 -
может отменять статью, посланную ранее. Оно действительно удаляет статью
из каталогов spool, если она существует. Сообщение отмены будет послано к
всем абонентам, которые получают новости из таких групп, независимо от
того, была ли статья замечена уже или нет. Нужно принять во внимание
возможность того, что первоначальная статья была отсрочена несмотря на
сообщение сокращения. Некоторые системы новостей позволяют
пользователям отменять сообщения другого человека; это - конечно
определенный минус.
18.8.2 Newgroup и rmgroup
Два сообщения имеют дело с созданием или удалением newsgroups - это
newgroup и rmgroup. Newsgroups ниже " обычной " иерархии могут быть
созданы только после того, как обсуждение и утверждение было проведено
среди Usenet читателей. Правила, обращающиеся к alt иерархии учитывают что
кое-что близко к анархии. Для подробной информации см. регулярные
регистрации в news.announce.newusers и news.announce.newgroups. Никогда не
посылайте newgroup или rmgroup сообщение самостоятельно, если Вы
определенно не знаете, что Вам позволено.
18.8.3 Checkgroups Сообщение
Checkgroups сообщения посылаются администраторами новостей, чтобы
для всех абонентов внутри сети синхронизировать их файлы active с фактами
Usenet. Например, коммерческие поставщики услуг Internet могли бы выпускать
такое сообщение к абоненту их заказчиков. Один раз в месяц "оффициальное"
checkgroups сообщение для главных иерархий зарегистрировано в
comp.announce.newgroups их регулятором. Однако, оно зарегистрировано, как
обычная статья, а не как управляющее сообщение. Чтобы выполнить
операцию checkgroups, сохраните эту статью в файл, скажем /tmp/check, удалите
все до начала сообщения управления непосредственно, и передайте это к
checkgroups команде, используя следующую команду:
# su news -c "/usr/lib/news/bin/ctl/checkgroups" < /tmp/check
Это модифицирует ваш newsgroups файл, добавляя группы, перечисленные
в localgroups. Старый newsgroups файл будет перемещаться в newsgroups.bac.
Обратите внимание, что регистрация сообщения локально редко будет
- 328 -
работать, потому что inews отказывается принимать это как статью.
Если C News находит несоответствия между списком checkgroups и файлом
active, это произведет список команд, которые модернизируют ваш пункт, и
сообщат это администратору новостей. Вывод обычно походит на это:
From news Sun Jan 30 16:18:11 1994
Date: Sun, 30 Jan 94 16:18 MET
From: news (News Subsystem)
To: usenet
Subject: Problems with your active file
Следующие newsgroups не допустимы и должны быть удалены.
alt.ascii-art
bionet.molbio.gene-org
comp.windows.x.intrisics
de.answers
Вы можете делать это, выполняя команды:
/usr/lib/news/bin/maint/delgroup alt.ascii-art
/usr/lib/news/bin/maint/delgroup bionet.molbio.gene-org
/usr/lib/news/bin/maint/delgroup comp.windows.x.intrisics
/usr/lib/news/bin/maint/delgroup de.answers
Следующие newsgroups отсутствовали.
comp.binaries.cbm
comp.databases.rdb
comp.os.geos
comp.os.qnx
comp.unix.user-friendly
misc.legal.moderated
news.newsites
soc.culture.scientists
talk.politics.crypto
talk.politics.tibet
- 329 -
Когда Вы получаете такое сообщение от вашей системы новостей, не
отбрасывайте его вслепую. В зависимости от того, кто послал checkgroups
сообщение, оно может испытывать недостаток нескольких групп или даже
всех иерархий; так что Вы должны быть осторожны относительно удаления
любых групп. Если Вы находите группы, перечисленные как отсутствующие и
Вы хотите иметь их в вашем пункте, Вы должны добавить их, используя
addgroup команду. Сохраните список отсутствующих групп в файле и
передайте его следующей небольшой команде:
#!/bin/sh
cd /usr/lib/news
while read group; do
if grep -si "^$group[[:space:]].*moderated" newsgroup; then
mod=m
else
mod=y
fi
/usr/lib/news/bin/maint/addgroup $group $mod
done
18.8.4 sendsys, version, и senduuname
В заключение, имеются три сообщения, которые могут использоваться,
чтобы выяснить относительно топологии сети. Это - sendsys, version, и senduu-
имя. Они заставляют C News возвращать отправителю файл sys, версию
программного обеспечения, и вывод uuname (1), соответственно. C News -
очень лаконично относительно сообщения version; оно возвращает просто
неукрашенное "C".
Снова, Вы никогда не должны выдавать такое сообщение, если Вы не
уверенны, что это не может повредить вашей (региональной) сети. Ответы
sendsys сообщениям могут быстро положить сеть UUCP.
18.9 C News в NFS Среде
Простой способ распределять новости внутри локальной сети состоит в
том, чтобы хранить все новости на центральном host, и экспортировать
релевантные каталоги через NFS, так, чтобы newsreader мог просматривать
- 330 -
статьи непосредственно. Преимущество этого метода над NNTP - то, что
непроизводительные затраты, заключаемые в поиске и продевании нитки
статей являются значительно ниже. NNTP, с другой стороны, побеждает в
разнородной сети, где оборудование изменяется широко среди главных ЭВМ,
или где пользователи не имеют эквивалентных прав на машине сервера.
При использовании NFS, статьи, зарегистрированные на локальном host
должны быть посланы к центральной машине. Также, Вы могли бы хотеть
защищать вашу область spool новостей, экспортируя их только для чтения, что
требует пересылки к центральной машине, также.
C News обрабатывает это очевидно. Когда Вы отправляете по почте
статью, ваш newsreader обычно вызывает inews, чтобы ввести статью в систему
новостей. Эта команда выполняет ряд проверок на статье, завершает
заголовок, и проверяет файловый сервер в /usr/lib/news. Если этот файл
существует и содержит hostname отличный от имени локального host, inews
вызывается на тот host сервер через rsh. Так как inews команда использует ряд
двоичных команд и файлов поддержки от C News, Вы должны также иметь C
News, установленный локально, или устанавливать программное обеспечение
новостей из сервера.
Чтобы rsh вызов работал правильно, каждый пользователь должен иметь
эквивалентный вход на систему сервера, то есть вход котороый она может
регистрировать без запроса о пароле.
Удостоверитесь, что hostname, данный в сервере буквально соответствует
выводу команды hostname (1) на машине сервера, иначе C News будет
зацикливаться навсегда при попытке получить статью.
18.10 Инструментальные средства Сопровождения и Задачи
Несмотря на сложность C News, жизнь администратора новостей может
быть довольно проста, потому что C News обеспечивает Вас расширенным
разнообразием инструментальных средств сопровождения. Некоторые из них
предназначены, чтобы быть выполненными регулярно из cron, подобно
newsdaily. Использование этих команд значительно уменьшает ежедневную
заботу и подачу требований вашей установки C News.
Если не установлено иначе, эти команды расположены в
/usr/lib/news/bin/maint. Обратите внимание, что Вы должны стать пользователем
перед вызовом этих команд. При выполнении их как супер-пользователь эти
файлы могут стать недоступными C News.
- 331 -
newsdaily Имя уже говорит: это выполняется один раз в день. Это - важная
команда, которая помогает Вам хранить регистрационные файлы малыми,
сохраняя копии каждого из последних трех выполнявшихся. Она также
пробует считывать любые аномалии, подобно несвежим пакетам во входящих
и исходящих каталогах, регистрации в неизветных группах, и т.д.
Возникающие в результате сообщения об ошибках будут отправлены по почте
к newsmaster.
newswatch Это - команда, которая должна быть выполнена регулярно, чтобы
искать аномалии в системе новостей, один раз в час или около этого. Она
предназначена обнаруживать проблемы, которые будут иметь
непосредственный эффект на оперативности вашей системы новостей и
отправлять по почте отчет проблемы к newsmaster. Отмечаемые вещи
включают несвежие файлы блокировки, которые не удалены, автоматические
входные пакеты, и недостаток дискового пространства.
addgroup Добавляет группу к вашему пункту локально. Соответствующий
вызов
addgroup groupname y|n|m|=realgroup
Второй аргумент имеет то же самое значение как флаг в файле active, что
любой может отправить по почте к группе (y), что никто не может отправить
по почте (n), что она уменьшена (m), или что она является специальной для
другой группы (=realgroup).
Вы могли бы также использовать addgroup, когда первые статьи в недавно
созданной группе прибывают раньше чем сообщение управления newgroup,
которое предназначено, чтобы создать ее.
delgroup nозволяет Вам удалять группу локально. Вызовите это как
delgroup groupname
Вы все еще должны удалить статьи, которые остаются в каталоге spool. В
качестве альтернативы, Вы могли бы оставлять это натуральному ходу
событий (a.k.a. Expire) чтобы удалять их.
addmissing Добавляет отсутствующие статьи к файлу хронологии. Выполните
- 332 -
эту команду, когда имеются статьи, которые, кажется, зависают навсегда.
newsboot Эта команда должна быть выполнена при начальной загрузке
системы. Она удаляет любые файлы блокировки, оставленные, когда
обработчики новостей уничтожались при закрытии системы, и закрывает и
выполняет любые пакеты, оставленные из NNTP соединений, которые были
завершены при закрытии системы.
newsrunning Это постоянно находится в /usr/lib/news/bin/input, и может
использоваться, чтобы отключить непакетирование входящих новостей,
например в течение работы. Вы можете выключить непакетирование вызовом
/usr/lib/news/bin/input/newsrunning off
Оно включается, используя on вместо off.
19. Описание NNTP
19.1 Введение
Из-за различного сетевого используемого транспорта, NNTP
обеспечивает(предусматривает) значительно отличные подходы к обмену
новостей C News. NNTP замещает " Сетевой Протокол передачи Новостей '', и
неспецифический пакет программ.
Различные команды позволяют клиентуре отыскивать, посылать и
отправлять по почте статьи. Различие между посылкой и регистрацией - то,
что последний может включать статьи с незавершенной информацией
заголовка. Поиск статьи может использоваться клиентурой передачи новостей
также как newsreaders. Это делает NNTP превосходным средством для
обеспечения доступа к новостям для клиентуры в локальной сети.
NNTP также обеспечивает активый и пассивный способы передачи
новостей, которые называются " pushing " и " pulling ". Выталкивание (pushing) - в
основном тоже что C News ihave/sendme протокол. Клиент предлагает статью
серверу через " IHAVE ", и сервер возвращает код ответа, который
указывает, имеет ли он уже статью, или если она требуется. Если так, клиент
посылает статью, завершенную одиночной точкой в отдельной строке.
Выталкивание новостей имеет один недостаток - это вызывает тяжелую
загрузку в системе сервера, так как она должна искать в базе данных
- 333 -
хронологий каждую одиночную статью.
Противоположная методика - перемещать(pulling) новости. Клиент
запрашивает список всех доступных статей из группы, которые прибыли после
заданной даты. Этот запрос выполняется командой NEWNEWS. Из
возвращенного списка идентичности сообщения, клиент выбирает те статьи,
которые он еще не имеет, используя команду ARTICLE для каждой из них по
очереди.
Проблема с перемещением новостей состоит в том, что требуется плотное
управление сервером, которое позволяет клиенту запрашивать группы и
распределения. Например, оно должно удостовериться, что никакой
конфиденциальный материал из локальных newsgroups не послан
несанкционированной клиентуре.
Имеется также ряд команд удобства для newsreaders, которые разрешают им
отыскивать заголовок статьи и тело отдельно, или даже одиночные строки
заголовка из промежутка статей. Это допускает Вам, хранить все новости
относительно центрального host, со всеми пользователями сетьи, используя
nntp-основанные клиентские программы для чтения и регистрации. Это -
альтернатива к экспорту каталогов новостей через NFS, который описан в
главе 18 ..
Полная проблема NNTP состоит в том, что она позволяет хорошо
осведомленному специалисту вставлять статьи в поток новостей с ложной
спецификацией отправителя. Это называется новостями faking. Расширение к
NNTP позволяет требовать установления подлинности пользователя для
некоторых команд.
Имеется ряд доступных NNTP пакетов. Один из наиболее широко
известных - NNTP daemon, также известный как реализация ссылки.
Первоначально, он написан Stan Barber и Phil Lapsley, чтобы иллюстрировать
подробности RFC 977. Самая современная версия - nntpd-1.5.11, описана
ниже. Вы можете также получить исходники и компилировать ее
непосредственно.
Nntpd пакет состоит из сервера и двух клиентов для перемещения и
выталкивания новостей, соответственно, также как inews замены. Они живут в
Bnews среде, но с небольшими дополнениями, они будут счастливы с C news,
также. Однако, если Вы планируете использовать NNTP для больше чем
предложения newsreaders доступа к вашему серверу новостей, реализация
ссылки не есть действительно опция. Мы следовательно обсудим только
NNTP daemon содержащийся в nntpd пакете, и не учтем клиентские программы.
- 334 -
19.2 Установка NNTP сервера
NNTP сервер называется nntpd, и может компилироваться двумя
способами, в зависимости от ожидаемой загрузки на системе новостей. Не
имеется никаких откомпилированных версий, из-за некоторых пункт-
специфических значений по умолчанию, которые являются жестко
закодированными в выполнимую программу. Вся конфигурация выполнена
через макркоманду definines в common/conf.h.
Nntpd может быть конфигурирован или как автономный сервер, который
запускается при начальной загрузке системы из rc.inet2, или как daemon
управляемый inetd. В последнем случае Вы должны иметь следующий вход в
/etc/inetd.conf:
nntp stream tcp nowait news /usr/etc/in.nntpd nntpd
Если Вы конфигурируете nntpd как автономный, удостовертеь, что любая
такая строка в inetd.conf прокомментирована. В любом случае, Вы должны
удостовериться, что имеется следующая строка в /etc/services:
nntp 119/tcp readnews untp # Network News Transfer Protocol
Чтобы временно сохранять любые входящие статьи, и т.д, nntpd также
нуждается в a каталоге .tmp в вашем spool новостей. Вы должны создать его
используя
# mkdir /var/spool/news/.tmp
# chown news.news /var/spool/news/.tmp
19.3 Ограничение NNTP Доступа
Доступ к NNTP ресурсам управляется файлом nntp access в /usr/lib/news.
Строки в файле описывают права доступа, предоставленные иностранным
главным ЭВМ. Каждая строка имеет следующий формат:
site read|xfer|both|no post|no [!exceptgroups]
Если клиент соединяется с NNTP портом, nntpd, пытается получать
полностью квалифицированное имя области из адреса IP обратным поиском.
- 335 -
Hostname клиента и адрес IP проверены против поля site каждого входа
в порядке, в котором они появляются в файле. Соответствия могут быть или
частичные или точные. Если вход соответствует точно, он применяется; если
соответствие частично, он применяется, только если не имеется никакого
другого соответствия. Пункт может быть определен одним из следующих
способов:
hostname Это - полностью квалифицированное имя области host. Если оно
соответствует каноническиому hostname клиента буквально, вход применяется,
и все последующие входы игнорируются.
IP address Это - адрес IP в точечной записи четверки. Если адрес IP клиента
соответствует этому, вход применяется, а все последующие входы
игнорируются.
domain name Это - имя области, заданное как *.domain. Если hostname клиента
соответствует имени области, вход соответствует.
network name Это - имя сети как определено в /etc/networks. Если сетевое число
адреса IP клиента соответствует сетевому числу, связанному с сетевым
именем, вход соответствует.
default Значение по умолчанию соответствует любому клиенту.
Входы с более общей спецификацией пункта должны быть определены
ранее.
Второе и третье поле описывают права доступа, предоставленные клиенту.
Второе детализирует права, чтобы отыскать новости, перемещая (read), и
передавать новости, выталкивая (xfer). Третье поле предоставляет клиенту
право отправить по почте статьи, то есть статьи с незавершенной
информацией заголовка, которая завершена программным обеспечением
новостей. Если второе поле содержит No, третье поле, игнорируется.
Четвертое поле необязательно, и содержит отделенный запятой список
групп, с отклоненным доступом для клиента.
Пример nntp файла доступа показывается ниже:
#
# by default, anyone may transfer news, but not read or post
- 336 -
default xfer no
#
# public.vbrew.com offers public access via modem, we allow
# them to read and post to any but the local.* groups
public.vbrew.com read post !local
#
# all other hosts at the brewery may read and post
*.vbrew.com read post
19.4 NNTP Разрешение
При печати прописными буквами лексем(маркеров) доступа подобно xfer
или read в nntp access файл, nntpd требует разрешения от клиента для
соответственных операций. Например, при определении права Xfer или
XFER, nntpd не будет допускать клиентские статьи к вашему пункту, если он не
передает разрешение.
Процедура разрешения выполнена посредством новой команды NNTP,
именованной AUTHINFO. При использовании этой команды, клиент передает
имя пользователя и пароль к NNTP серверу. Nntpd проверит правильность их,
проверяя их против базы данных /etc/passwd, и проверит, что пользователь
принадлежит группе nntp.
Текущая реализация NNTP разрешения только экспериментальна, и не
была выполнена очень переносимой. Результат - то, что это работает только с
базами данных паролей с простым стилем; теневые пароли не будут
распознаны.
19.5 Nntpd Взаимодействие с C News
При получении статьи, nntpd должен приписать ее к подсистеме новостей.
В зависимости от того, было ли это получено в результате команды IHAVE
или POST, статья вручена rnews или inews, соответственно. Вместо того, чтобы
вызывать rnews, Вы можете также конфигурировать rnews (во времени
компиляции) пакетировать входящие статьи и перемещать возникающие в
результате пакеты в /var/spool/news/in.coming, где они остаются для relaynews,
чтобы подбирать их в следующей выполненной очереди.
Чтобы быть способным правильно выполнить ihave/sendme протокол, nntpd
должен быть способен обратиться к файлу хронологии. Во времени
компиляции, Вы следовательно должны удостовериться, что путь установлен
- 337 -
правильно. Вы должны также удостовериться, что C news и nntpd
договариваются о формате вашего файла хронологии. C news использует dbm
хеш-функции, чтобы обратиться к нему; однако, имеется некоторое число
отличных и немного несовместимых реализаций dbm библиотеки. Если C news
был связан с различной dbm библиотекой чем Вы, имеете в вашем стандарте
libc, Вы должны линковать nntpd с этой библиотекой, также.
Типичный признак того что nntpd и C news не соглашаются относительно
формата базы данных - сообщения об ошибках в файле регистрации системы,
что nntpd не может открыть его правильно, или двойные статьи, полученные
через NNTP. Хороший тест должен выбрать статью из вашей области spool,
сделать telnet к nntp порту, и предлагать, это к nntpd как показано в примере
ниже. Конечно, Вы должны заменить на ID-сообщение статьи,
которую Вы хотите передать к nntpd снова.
$ telnet localhost nntp
Trying 127.0.0.1...
Connected to loalhost
Escape characters is '^]'.
201 vstout NNTP[auth] server version 1.5.11t (16 November
1991) ready at Sun Feb 6 16:02:32 1194 (no posting)
IHAVE
435 Got it.
QUIT
Этот диалог показывает соответствующую реакцию nntpd; сообщение "Got
it" сообщает Вам, что уже имеется эта статья. Если Вы получаете сообщение
"335 Ok" взамен, поиск в файле хронологии, потерпел неудачу по некоторым
причинам. Завершите диалог печатая Ctrl-D. Вы можете проверять, что шло
неправильно, проверяя файл регистрации системы; nntpd регистрирует все
виды сообщений в syslog. Несовместимая dbm библиотека обычно проявляется
в сообщении, жалующемся что dbminit потерпел неудачу.
20. Конфигурация Newsreader
Newsreaders предназначены, чтобы предложить функциональные
возможности, которые позволяют пользователю обращаться к функциям
системы новостей легко, подобно регистрации статей, или просматривать
содержимое newsgroup удобным способом. Качество этого интерфейса предмет
- 338 -
бесконечных споров.
Имеется пара newsreaders, которые были пренесены на Linux. Ниже я буду
описывать базисную установку для трех наиболее популярных, а именно tin,
trn, и nn.
Один из наиболее эффективных newsreaders это
$ find /var/spool/news -name '[0-9]*' -exec cat {} \; | more
Это - способ, которым Unix читает новости.
Большая часть newsreaders, однако, является намного более сложной. Они
обычно предлагают полноэкранный интерфейс с отдельными уровнями для
отображения всех групп, на которые пользователь подписался, для
отображения краткого обзора всех статей в одной группе. И для
индивидуальных статей.
В уровне newsgroup, большинство newsreaders отображает список статей,
показывая их подчиненную строку, и автора. В больших группах, это
невозможно для пользователя, чтобы следить за статьями в отношении друг
друга, хотя возможно идентифицировать ответы на более ранние статьи.
Ответ обычно повторяет первоначальную тему статьи, начинаясь с " " Re: ''.
Здесь, мы не будем детализировать то, как интерфейсы пользователя
сформированы. Все newsreaders, в настоящее время доступные для Linux имеют
хорошую функцию справки, так что Вы должны исследовать дальше сами.
В следующем, мы будем иметь дело только с административными
задачами. Большинство их касается создания баз данных и учет.
20.1 Конфигурация tin
Наиболее универсальный newsreader - tin. Он написан Iain Lea и - свободно
построен на более старом newsreader, именованном ТАСС.
На 486DX50, он берет приблизительно 30 секунд, чтобы найти 1000 статей
при чтении непосредственно с диска. Над NNTP к загруженному серверу
новостей, это было бы что-нибудь более 5 минут. Вы можете уточнить это,
регулярно модифицируя ваш индексный файл с -u опцией, или вызывая tin с -
U опцией.
Обычно, tin формирует дамп баз данных в исходном каталоге пользователя
ниже .tin/index. Это может однако быть дорогостояще в терминах ресурсов, так
чтобы Вы хотели хранить одиночную копию их в центральном расположении.
Это может быть достигнуто, делая tin setuid к новостям, например. Тогда tin
- 339 -
будет хранить, все подходящие базы данных ниже /var/spool/news/.index. Для
любого файла access или Escape оболочки, это переустановит эффективный
универсальный идентификатор к реальному универсальному идентификатору
пользователя, который вызвал это.
Версия tin, включенного в некоторые распределения Linux не имеет
никакой компилируемой поддержки NNTP. Когда вызывается как rtin или с -r
опцией, tin пробует соединяться с NNTP сервером, заданным в /etc/nntpserver
файле или в NNTPSERVER переменной среды. Nntpserver файл просто
содержит имя сервера в одиночной строке.
20.2 Trn Конфигурация
Trn - преемник более старого newsreader, а именно rn (который означает
чтение новостей). " T " в имени замещает "связный". Он написан Wayne
Davidson.
В отличие от tin, trn не имеет никакого средства для производства базы
данных поиска во время выполнения. Взамен, он использует базу
подготовленную программой, называемой mthreads, которая должна вызваться
регулярно из cron, чтобы модифицировать индексные файлы.
Не выполнение mthreads, однако, не означает, что Вы не можете
обращаться к новым статьям, это только означает что Вы будете иметь все эти
" Novell выкупают Linix!! " статьи, рассеянные в вашем меню выбора статей,
вместо одиночного экземпляра (который Вы можете легко пропустить).
Чтобы включить отсеивание для определенных newsgroups, mthreads
вызывается со списком newsgroups в командной строке. Список сделан как в
файле sys:
mthreads comp,rec,!rec.games.go
Даст возможность отсеиванию для все comp и rec, кроме rec.games.go (люди,
кто играют, идут, не нуждаются в причудливых выборках). После этого, Вы
просто вызываете это без любой опции вообще, чтобы заставить это
обработать любые недавно прибывшие статьи. Отсеивание всех групп,
найденных в вашем файле active может быть включено, вызывая mthreads со
списком группы.
Если вы получаете новости в течение ночи, Вы будет обычно выполнять
mthreads один раз утром, но Вы можете также, делать так более часто если
необходимо. Абоненты, которые имеют очень тяжелый траффик, могут хотеть
- 340 -
выполнять mthreads в daemon режиме. Когда она начинается при начальной
загрузке, используя -d опцию, она помещает себя в фон, и пробуждается
каждые 10 минут, чтобы проверить, имеются ли любые недавно прибытые
статьи, и просеивает их. Чтобы выполнять mthreads в daemon режиме,
поместите следующую строку в вашу rc.news команду:
/usr/local/bin/rn/mthreads -deav
-a опция заставит mthread автоматически включить отсеивание для новых
групп, поскольку они созданы; -v дает возможность подробным
регистрационным сообщениям к файлу регистрации mthreads, mt.log в каталоге,
где Вы имеете установленный trn.
Старые статьи, которые больше не доступны, должны быть удалены из
индексных файлов регулярно. По умолчанию, только статьи, чье число
является ниже метки ожидания, будут удалены. Статьи выше этого числа,
которые устарели (потому что самая старая статья была назначена на длинную
дату истечения полем заголовка Expires) могут быть удалены, давая mthreads -e
опцию, чтобы вынудить " расширенную " чистку. Когда mthreads выполняется
в daemon режиме, -e опция заставит такое расширенное истечение выполнять
один раз в день, в полночь.
20.3 Конфигурация nn
Nn написал Kim F. Storm, он утверждает, что цель newsreader не состоит в
том, чтобы читать новости. Имя расшифровывается как " Нет Новостей '', и
девиз - "Отсутствие новостей - хорошая новость. А nn лучше."
Чтобы достигать этой честолюбивой цели, nn поставляется с большим
выбором инструментальных средств сопровождения, которые не только
позволяют проводить отсеивание, но также протяженные проверки на
непротиворечивости этих баз данных, учет, сбор статистики использования, и
ограничений доступа. Имеется также программа администрации, называемая
nnadmin, который позволяет Вам выполнять эти задачи в интерактивном
режиме.
Nn диспетчер базы данных, называется nnmaster. Он обычно выполняется
как daemon, начинается из команды rc.inet2 или rc.news. Он вызывается как
/usr/local/lib/nn/nnmaster -l -r -C
- 341 -
Это дает возможность отсеиванию для всех newsgroups, представленных в
вашем файле active.
Также, Вы можете вызывать nnmaster периодически из cron, давая ему
список групп. Этот список очень похож на список в файле sys, за исключением
того, что он использует пробелы вместо запятых. Вместо группы fake для всех,
пустой аргумент "" должен использоваться, чтобы обозначить все группы.
Типовой вызов
# /usr/local/lib/nn/nnmaster !rec.games.go rec comp
Обратите внимание, что порядок значителен: крайная левая спецификация
группы, которая соответствует, всегда выигрывает. Таким образом, если мы
поместили !rec.games.go после rec, все статьи из этой группы отсеились.
Nn предлагает отдельные методы удалить устаревшие статьи из баз
данных. Первое, чтобы модифицировать базу данных, развертывая каталоги
групп новостей и отбрасывая входы, чья соответствующая статья является
больше не доступной. Это - заданная по умолчанию операция, полученная
вызовом nnmaster с -E опцией. Приемлемо быстро, если вы не делаете это
через NNTP.
Метод 2 ведет себя точно подобно заданному по умолчанию устареванию,
выполненному mthreads, в котором она только удаляет те входы, которые
относятся к статьям, чье число ниже метки ожидания в файле active. Это
можно допускать, используя -e опцию.
В заключение, третья стратегия должна отбросить всю базу данных и
переоформить все статьи. Это может быть выполнено, давая -E3 к nnmaster.
Список групп, которые устарели дется -F опцией в том же самом режиме
как выше. Однако, если Вы имеете nnmaster, выполняющийся как daemon, Вы
должны уничтожить его (используя -k) прежде, чем может произойти
устаревание, и перезапускать его с первоначальными опциями. Таким образом
соответствующая команда, чтобы выполнить expire на всех группах,
использующих метод 1:
# nnmaster -kF ""
# nnmaster -lrC
Имеются много больше флагов, которые могут использоваться, чтобы
подстроить поведение nn. Если Вы волнуетесь относительно удаления плохих
статей или сборников статей, читайте nnmaster страницу руководства.
- 342 -
Nnmaster полагается на файл, именованный GROUPS, который расположен
в /usr/local/lib/nn. Если он не существует первоначально, он будет создан. Для
каждой newsgroup, он содержит строку, которая начинается с имени группы,
необязательно сопровождаемого временной меткой, и флагами. Вы можете
редактировать эти флаги, чтобы дать возможность некоторому поведению для
рассматриваемой группы, но Вы не можете изменять порядок, в котором
группы появляются. Флаги и их эффекты детализированы в nnmaster странице
руководства, также.
APPENDIX A
Null Кабель Принтера для PLIP
Чтобы сделать Кабель Принтера для использования с PLIP соединением,
Вы нуждаетесь в двух соединителях с 25 штырьками (называемых DB-25) и
некотором кабеле с 11 проводниками. Кабель должен быть длиной 15 метров.
Если Вы рассматриваете коннектор, Вы должны видеть крошечные числа в
основе каждого штырька. Для кабеля Принтера, Вы должны соединить
следующие штырьки обоих разьемов друг с другом:
+-------------------------------+
|D0 2 15 ERROR |
|D1 3 13 SLCT |
|D2 4 12 PAPOUT |
|D3 5 10 ACK |
|D4 6 11 BUSY |
|GROUND 25 25 GROUND |
|ERROR 15 2 D0 |
|SLCT 13 3 D1 |
|PAPOUT 12 4 D2 |
|ACK 10 5 D3 |
|BUSY 11 6 D4 |
+-------------------------------+
Все остающиеся штырьки остаются не связанными. Если кабель
экранирован, экран должен быть соединен с DB-25 металлической оболочкой
на одном конце.
- 343 -
APPENDIX B
Примеры smail Файлов Конфигурации
Этот раздел показывает типовые файлы конфигурации для пункта UUCP в
локальной вычислительной сети. Они основаны на типовых файлах,
включенных в исходное распределение smail-3.1.28. Хотя я делаю слабую
попытку объяснить, как эти файлы работают.
Первый показанный файл - файл программ маршрутизации, который
описывает набор программ маршрутизации для smail. Когда smail должен
послать сообщение к данному адресу, он вручает адрес всем программам
маршрутизации по очереди, пока одна из них не найдет соответствие.
Соответствие здесь означает что программа маршрутизации находит host
адресата в базе данных, буть это файл paths, /etc/hosts, или любой механизм
маршрутизации.
Входы в smail файлах конфигурации всегда начинаются с уникального
имени, идентифицирующего программу маршрутизации, транспорт, или
руководитель. Они сопровождаются списком атрибутов, которые определяют
поведение. Этот список состоит из набора глобальных атрибутов, типа
драйвера, и частных атрибутов, которые понятны только этому
специфическому драйверу.
Атрибуты отделяются запятыми, в то время как наборы глобальных и
частных атрибутов отделяются от друг друга, используя точку с запятой.
В smail, Вы можете определять две программы маршрутизации в файле
программ маршрутизации, обе из которых используют pathalias драйвер. Этот
драйвер ищет hostnames в pathalias базе данных. Он ожидает имя файла в
частном атрибуте:
#
# pathalias database for intra-domain routing
domain paths:
driver=pathalias, # look up host in a paths file
transport=uux; # if matched, deliver over UUCP
file=paths/domain, # file is /usr/lib/smail/paths/domain
proto=lsearch, # file is unsorted (linear search)
optional, # ignore if the file does not exist
required=vbrew.com, # look up only *.vbrew.com hosts
#
- 344 -
# pathalias database for routing to hosts outside our domain
world paths:
driver=pathalias, # look up host in a paths file
transport=uux; # if matched, deliver over UUCP
file=paths/world, # file is /usr/lib/smail/paths/world
proto=bsearch, # file is sorted with sort(1)
optional, # ignore if the file does not exist
-required, # no required domains
domain=uucp, # strip ending ".uucp" before searching
Второй атрибут глобальной переменной, данный в каждом из двух входов
программ маршрутизации выше определяет транспорт, который должен
использоваться, когда программа маршрутизации обрабатывает адрес. В нашем
случае, сообщение будет передано используя uux транспорт. Транспорты
определены в файле transports, который объяснсется ниже.
Вы можете подстраивать, которым транспортом сообщение будет
передаваться, если Вы определяете mathod файл вместо атрибута transports.
Файлы методов обеспечивают отображение целевого hostnames на transports.
Мы не будем иметь дело с ними здесь.
Следующий файл программ маршрутизации определяет программы
маршрутизации для локальной вычислительной сети, которые сделают запрос
библиотеки решающих устройств. На host Internet, однако, Вы хотели бы
использовать программу маршрутизации, которая обрабатывает записи MX.
Вы должны следовательно разкомментировать альтернативную inet программу
маршрутизации, которая использует встроенный драйвер BIND smail.
В среде, которая смешивает UUCP |