Олаф Кирч. Руководство администратора сети в ОС Linux Origin: http://www.linux.org.ru/books/ ║ http://www.linux.org.ru/books/ From: Ultracom ==================================================================== 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-add