diff --git a/ru_RU.KOI8-R/books/handbook/advanced-networking/chapter.sgml b/ru_RU.KOI8-R/books/handbook/advanced-networking/chapter.sgml index 10a769be1e..c7ef95d252 100644 --- a/ru_RU.KOI8-R/books/handbook/advanced-networking/chapter.sgml +++ b/ru_RU.KOI8-R/books/handbook/advanced-networking/chapter.sgml @@ -1,4498 +1,4498 @@ Андрей Захватов Перевод на русский язык: Сложные вопросы работы в сети Краткий обзор Эта глава охватывает множество различных сетевых тематик повышенной сложности. После чтения этой главы вы будете знать: Основные понятия о маршрутизации и маршрутах. Как настроить IEEE 802.11 и &bluetooth;. Как заставить FreeBSD работать в качестве сетевого моста. Как настроить загрузку по сети для бездисковой машины. Как настроить трансляцию сетевых адресов. Как соединить два компьютера посредством PLIP. Как настроить IPv6 на машине FreeBSD. Как настроить ATM в &os; 5.X. Перед чтением этой главы вы должны: Понимать основы работы скриптов /etc/rc. Свободно владеть основными сетевыми терминами. Знать как настраивать и устанавливать новое ядро FreeBSD (). Знать как устанавливать дополнительное программное обеспечение сторонних разработчиков (). Coranth Gryphon Текст предоставил Сетевые шлюзы и маршруты маршрутизация шлюз подсеть Чтобы некоторая машина могла найти в сети другую, должен иметься механизм описания того, как добраться от одной машине к другой. Такой механизм называется маршрутизацией. Маршрут задаётся парой адресов: адресом назначения (destination) и сетевым шлюзом (gateway). Эта пара указывает на то, что если Вы пытаетесь соединиться с адресом назначения, то вам нужно устанавливать связь через сетевой шлюз. Существует три типа адресов назначения: отдельные хосты, подсети и маршрут по умолчанию (default). Маршрут по умолчанию (default route) используется, если не подходит ни один из других маршрутов. Мы поговорим немного подробнее о маршрутах по умолчанию позже. Также имеется и три типа сетевых шлюзов: отдельные хосты, интерфейсы (также называемые подключениями (links)) и аппаратные адреса Ethernet (MAC-адреса). Пример Для иллюстрации различных аспектов маршрутизации мы будем использовать следующий пример использования команды netstat: &prompt.user; netstat -r Routing tables Destination Gateway Flags Refs Use Netif Expire default outside-gw UGSc 37 418 ppp0 localhost localhost UH 0 181 lo0 test0 0:e0:b5:36:cf:4f UHLW 5 63288 ed0 77 10.20.30.255 link#1 UHLW 1 2421 example.com link#1 UC 0 0 host1 0:e0:a8:37:8:1e UHLW 3 4601 lo0 host2 0:e0:a8:37:8:1e UHLW 0 5 lo0 => host2.example.com link#1 UC 0 0 224 link#1 UC 0 0 маршрут по умолчанию В первых двух строках задаются маршрут по умолчанию (который будет описан в следующем разделе) и маршрут на localhost. устройство loopback Интерфейс (колонка Netif), который указан в этой таблице маршрутов для использования с localhost и который назван lo0, имеет также второе название, устройство loopback. Это значит сохранение всего трафика для указанного адреса назначения внутри, без посылки его по сети, так как он все равно будет направлен туда, где был создан. Ethernet MAC адрес Следующими выделяющимися адресами являются адреса, начинающиеся с 0:e0:.... Это аппаратные адреса Ethernet, или MAC-адреса. FreeBSD будет автоматически распознавать любой хост (в нашем примере это test0) в локальной сети Ethernet и добавит маршрут для этого хоста, указывающий непосредственно на интерфейс Ethernet, ed0. С этим типом маршрута также связан параметр таймаута (колонка Expire), используемый в случае неудачной попытки услышать этот хост в течении некоторого периода времени. Если такое происходит, то маршрут до этого хоста будет автоматически удалён. Такие хосты поддерживаются при помощи механизма, известного как RIP (Routing Information Protocol), который вычисляет маршруты к хостам локальной сети при помощи определения кратчайшего расстояния. подсеть FreeBSD добавит также все маршруты к подсетям для локальных подсетей (10.20.30.255 является широковещательным адресом для подсети 10.20.30, а имя example.com является именем домена, связанным с этой подсетью). Назначение link#1 соответствует первому адаптеру Ethernet в машине. Отметьте отсутствие дополнительного интерфейса для этих строк. В обеих этих группах (хосты и подсети локальной сети) маршруты конфигурируются автоматически даемоном, который называется routed. Если он не запущен, то будут существовать только статически заданные (то есть введенные явно) маршруты. Строка host1 относится к нашему хосту, который известен по адресу Ethernet. Так как мы являемся посылающим хостом, FreeBSD знает, что нужно использовать loopback-интерфейс (lo0) вместо того, чтобы осуществлять посылку в интерфейс Ethernet. Две строки host2 являются примером того, что происходит при использовании алиасов в команде &man.ifconfig.8; (обратитесь к разделу об Ethernet для объяснения того, почему мы это делаем). Символ => после интерфейса lo0 указывает на то, что мы используем не просто интерфейс loopback (так как это адрес, обозначающий локальный хост), но к тому же это алиас. Такие маршруты появляются только на хосте, поддерживающем алиасы; для всех остальных хостов в локальной сети для таких маршрутов будут показаны просто строчки link#1. Последняя строчка (подсеть назначения 224) имеет отношение к многоадресной посылке, которая будет рассмотрена в другом разделе. И наконец, различные атрибуты каждого маршрута перечисляются в колонке Flags. Ниже приводится краткая таблица некоторых из этих флагов и их значений: U Up: Маршрут актуален. H Host: Адресом назначения является отдельный хост. G Gateway: Посылать все для этого адреса назначения на указанную удаленную систему, которая будет сама определять дальнейший путь прохождения информации. S Static: Маршрут был настроен вручную, а не автоматически сгенерирован системой. C Clone: Новый маршрут сгенерирован на основе указанного для машин, к которым мы подключены. Такой тип маршрута обычно используется для локальных сетей. W WasCloned: Указывает на то, что маршрут был автоматически сконфигурирован на основе маршрута в локальной сети (Clone). L Link: Маршрут включает ссылку на аппаратный адрес Ethernet. Маршруты по умолчанию маршрут по умолчанию Когда локальной системе нужно установить соединение с удаленным хостом, она обращается к таблице маршрутов для того, чтобы определить, существует ли такой маршрут. Если удаленный хост попадает в подсеть, для которой известен способ ее достижения (маршруты типа Cloned), то система определяет возможность подключиться к ней по этому интерфейсу. Если все известные маршруты не подходят, у системы имеется последняя возможность: маршрут default. Это маршрут с особым типом сетевого шлюза (обычно единственным, присутствующим в системе), и в поле флагов он всегда помечен как c. Для хостов в локальной сети этот сетевой шлюз указывает на машину, имеющую прямое подключение к внешнему миру (неважно, используется ли связь по протоколу PPP, канал DSL, кабельный модем, T1 или какой-то другой сетевой интерфейс). Если вы настраиваете маршрут по умолчанию на машине, которая сама является сетевым шлюзом во внешний мир, то маршрутом по умолчанию будет являться сетевой шлюз у Вашего провайдера Интернет (ISP). Давайте взглянем на примеры маршрутов по умолчанию. Вот типичная конфигурация: [Local2] <--ether--> [Local1] <--PPP--> [ISP-Serv] <--ether--> [T1-GW] Хосты Local1 и Local2 находятся в нашей сети. Local1 подключён к ISP через коммутируемое соединение по протоколу PPP. Этот компьютер с сервером PPP подключён посредством локальной сети к другому шлюзовому компьютеру через внешний интерфейс самого ISP к Интернет. Маршруты по умолчанию для каждой из ваших машин будут следующими: Хост Маршрут по умолчанию Интерфейс Local2 Local1 Ethernet Local1 T1-GW PPP Часто задаётся вопрос Почему (или каким образом) в качестве шлюза по умолчанию для машины Local1 мы указываем T1-GW, а не сервер провайдера, к которому подключаемся?. Запомните, что из-за использования PPP-интерфейсом адреса в сети провайдера Интернет с вашей стороны соединения, маршруты для всех других машин в локальной сети провайдера будут сгенерированы автоматически. Таким образом, вы уже будете знать, как достичь машины T1-GW, так что нет нужды в промежуточной точке при посылке трафика к серверу ISP. В локальных сетях адрес X.X.X.1 часто используется в качестве адреса сетевого шлюза. Тогда (при использовании того же самого примера) если пространство адресов класса C вашей локальной сети было задано как 10.20.30, а ваш провайдер использует 10.9.9, то маршруты по умолчанию будут такие: Хост Маршрут по умолчанию Local2 (10.20.30.2) Local1 (10.20.30.1) Local1 (10.20.30.1, 10.9.9.30) T1-GW (10.9.9.1) Вы можете легко задать используемый по умолчанию маршрутизатор посредством файла /etc/rc.conf. В нашем примере на машине Local2 мы добавили такую строку в файл /etc/rc.conf: defaultrouter="10.20.30.1" Это также возможно сделать и непосредственно из командной строки при помощи команды &man.route.8;: &prompt.root; route add default 10.20.30.1 Для получения дополнительной информации об управлении таблицами маршрутизации, обратитесь к справочной странице по команде &man.route.8;. Хосты с двойным подключением хосты с двойным подключением Есть еще один тип подключения, который мы должны рассмотреть, и это случай, когда хост находится в двух различных сетях. Технически, любая машина, работающая как сетевой шлюз (в примере выше использовалось PPP-соединение), считается хостом с двойным подключением. Однако этот термин реально используется для описания машины, находящейся в двух локальных сетях. В одном случае у машины имеется два адаптера Ethernet, каждый имеющий адрес в разделенных подсетях. Как альтернативу можно рассмотреть вариант с одним Ethernet-адаптером и использованием алиасов в команде &man.ifconfig.8;. В первом случае используются два физически разделённые сети Ethernet, в последнем имеется один физический сегмент сети, но две логически разделённые подсети. В любом случае таблицы маршрутизации настраиваются так, что для каждой подсети эта машина определена как шлюз (входной маршрут) в другую подсеть. Такая конфигурация, при которой машина выступает в роли маршрутизатора между двумя подсетями, часто используется, если нужно реализовать систему безопасности на основе фильтрации пакетов или - функций межсетевого экрана в одном или обоих направлениях. + функций брандмауэра в одном или обоих направлениях. Если вы хотите, чтобы эта машина действительно перемещала пакеты между двумя интерфейсами, то вам нужно указать FreeBSD на включение этой функции. Обратитесь к следующей главе, чтобы узнать, как это сделать. Построение маршрутизатора маршрутизатор Сетевой маршрутизатор является обычной системой, которая пересылает пакеты с одного интерфейса на другой. Стандарты Интернет и хорошая инженерная практика не позволяют Проекту FreeBSD включать эту функцию по умолчанию во FreeBSD. Вы можете включить эту возможность, изменив значение следующей переменной в YES в файле &man.rc.conf.5;: gateway_enable=YES # Set to YES if this host will be a gateway Этот параметр изменит значение &man.sysctl.8;-переменной net.inet.ip.forwarding в 1. Если вам временно нужно выключить маршрутизацию, вы можете на время сбросить это значение в 0. Вашему новому маршрутизатору нужна информация о маршрутах для того, чтобы знать, куда пересылать трафик. Если ваша сеть достаточно проста, то вы можете использовать статические маршруты. С FreeBSD также поставляется стандартный даемон BSD для маршрутизации &man.routed.8;, который умеет работать с RIP (как версии 1, так и версии 2) и IRDP. Поддержка BGP v4, OSPF v2 и других сложных протоколов маршрутизации имеется в пакете net/zebra. Также существуют и коммерческие продукты, применяемые как более комплексное решение проблемы маршрутизации в сети, такие как &gated;. BGP RIP OSPF Даже когда FreeBSD настроена таким образом, она не полностью соответствует стандартным требованиям Интернет для маршрутизаторов. Однако для обычного использования такое неполное соответствие достаточно. Al Hoang Предоставил Настройка статических маршрутов Ручная настройка Предположим, что у нас есть следующая сеть: INTERNET | (10.0.0.1/24) Default Router to Internet | |Interface xl0 |10.0.0.10/24 +------+ | | RouterA | | (FreeBSD gateway) +------+ | Interface xl1 | 192.168.1.1/24 | +--------------------------------+ Internal Net 1 | 192.168.1.2/24 | +------+ | | RouterB | | +------+ | 192.168.2.1/24 | Internal Net 2 В этом сценарии, RouterA это наш компьютер с &os;, который выступает в качестве маршрутизатора в сеть Интернет. Его маршрут по умолчанию настроен на 10.0.0.1, что позволяет ему соединяться с внешним миром. Мы будем предполагать, что RouterB уже правильно настроен и знает все необходимые маршруты (на этом рисунке все просто; добавьте на RouterB маршрут по умолчанию, используя 192.168.1.1 в качестве шлюза). Если мы посмотрим на таблицу маршрутизации RouterA, то увидим примерно следующее: &prompt.user; netstat -nr Routing tables Internet: Destination Gateway Flags Refs Use Netif Expire default 10.0.0.1 UGS 0 49378 xl0 127.0.0.1 127.0.0.1 UH 0 6 lo0 10.0.0/24 link#1 UC 0 0 xl0 192.168.1/24 link#2 UC 0 0 xl1 С текущей таблицей маршрутизации RouterA не сможет достичь внутренней сети 2 (Internal Net 2). Один из способов обхода этой проблемы — добавление маршрута вручную. Следующая команда добавляет внутреннюю сеть 2 к таблице маршрутизации RouterA с 192.168.1.2 в качестве следующего узла: &prompt.root; route add -net 192.168.2.0/24 192.168.1.2 Теперь RouterA сможет достичь любого хоста в сети 192.168.2.0/24. Постоянная конфигурация Предыдущий пример прекрасно подходит для настройки статического маршрута в работающей системе. Однако, проблема заключается в том, что маршрутная информация не сохранится после перезагрузки &os;. Способ сохранения добавленного маршрута заключается в добавлении его в файл /etc/rc.conf: # Добавление статического маршрута в Internal Net 2 static_routes="internalnet2" route_internalnet2="-net 192.168.2.0/24 192.168.1.2" В переменной static_routes находятся строки, разделенные пробелами. Каждая строка означает имя маршрута. В примере выше в static_routes есть только одна строка, это internalnet2. Затем мы добавили переменную route_internalnet2, куда помещены все параметры, которые необходимо передать команде &man.route.8;. В примере выше была использована команда: &prompt.root; route add -net 192.168.2.0/24 192.168.1.2 поэтому нам потребуется "-net 192.168.2.0/24 192.168.1.2". Как было сказано выше, мы можем добавить в static_routes более чем одну строку. Это позволит создать несколько статических маршрутов. В следующем примере показано добавление маршрутов для сетей 192.168.0.0/24 и 192.168.1.0/24 (этот маршрутизатор не показан на рисунке выше: static_routes="net1 net2" route_net1="-net 192.168.0.0/24 192.168.0.1" route_net2="-net 192.168.1.0/24 192.168.1.1" Распространение маршрутов распространение маршрутов Мы уже говорили о том, как мы задаем наши маршруты во внешний мир, но не упоминали о том, как внешний мир находит нас. Мы уже знаем, что таблицы маршрутизации могут быть настроены так, что весь трафик для некоторого диапазона адресов (в нашем примере это подсеть класса C) может быть направлен заданному хосту в той сети, которая будет перенаправлять входящие пакеты дальше. При получении адресного пространства, выделенного Вашей сети, Ваш провайдер настроит свои таблицы маршрутизации так, что весь трафик для Вашей подсети будет пересылаться по PPP-соединению к Вашей сети. Но как серверы по всей стране узнают, что Ваш трафик нужно посылать Вашему ISP? Существует система (подобная распределению информации DNS), которая отслеживает все назначенные пространства адресов и определяет точку подключения к магистрали Интернет. Магистралью называют главные каналы, по которым идет трафик Интернет внутри страны и по всему миру. Каждая магистральная машина имеет копию основного набора таблиц, согласно которой трафик для конкретной сети направляется по конкретному магистральному каналу, и затем, передаваясь по цепочке провайдеров, он достигает вашей сети. Задачей вашего провайдера является объявить на магистрали о том, что он отвечает за подключение (и поэтому на него указывает маршрут) вашей сети. Этот процесс называется распространением маршрута. Устранение неполадок traceroute Иногда с распространением маршрута возникают проблемы, и некоторые сайты не могут к вам подключиться. Наверное, самой полезной командой для определения точки неверной работы маршрутизации является &man.traceroute.8;. Она также полезна и когда вы сами не можете подключиться к удаленной машине (то есть команда &man.ping.8; не срабатывает). Команда &man.traceroute.8; запускается с именем удаленного хоста, с которым вы хотите установить соединение, в качестве параметра. Она показывает промежуточные сетевые шлюзы по пути следования, в конце концов достигая адрес назначения или прерывая свою работу из-за отсутствия соединения. За дополнительной информацией обратитесь к странице Справочника по &man.traceroute.8;. Маршрутизация многоадресного трафика multicast options MROUTING FreeBSD изначально поддерживает как приложения, работающие с многоадресным трафиком, так и его маршрутизацию. Такие приложения не требуют особой настройки FreeBSD; обычно они работают сразу. Для маршрутизации многоадресного трафика требуется, чтобы поддержка этого была включена в ядро: options MROUTING Кроме того, даемон многоадресной маршрутизации, &man.mrouted.8;, должен быть настроен посредством файла /etc/mrouted.conf на использование туннелей и DVMRP. Дополнительную информацию о настройки многоадресного трафика можно найти на страницах справочной системы, посвящённых даемону &man.mrouted.8;. Eric Anderson Текст предоставил Андрей Захватов Перевёл на русский язык Беспроводные сети беспроводные сети 802.11 беспроводные сети Введение Было бы весьма полезным иметь возможность использовать компьютер без хлопот, связанных с постоянно подключенным сетевым кабелем. FreeBSD может использоваться как клиент беспроводной сети, и даже в качестве точки доступа к ней. Режимы работы беспроводной связи Существуют два варианта конфигурации устройств беспроводного доступа 802.11: BSS и IBSS. Режим BSS Режим BSS является наиболее часто используемым. Режим BSS также называют режимом инфраструктуры. В этом режиме несколько точек доступа беспроводной сети подключаются к проводной сети передачи данных. Каждое беспроводная сеть имеет собственное имя. Это имя является идентификатором SSID сети. Клиенты беспроводной сети подключаются к этим точкам доступа беспроводной сети. Стандарт IEEE 802.11 определяет протокол, используемый для связи в беспроводных сетях. Клиент сети беспроводного доступа может подключаться к некоторой сети, если задан её SSID. Клиент может также подключаться к любой сети, если SSID не задан. Режим IBSS Режим IBSS, также называемый ad-hoc, предназначен для соединений точка-точка. На самом деле существуют два типа режима ad-hoc. Один из них является режимом IBSS, называемый также режимом ad-hoc или IEEE ad-hoc. Этот режим определён стандартами IEEE 802.11. Второй режим называется демонстрационным режимом ad-hoc, или Lucent ad-hoc (или, иногда неправильно, режимом ad-hoc). Это старый, существовавший до появления 802.11, режим ad-hoc, и он должен использоваться только для старых сетей. В дальнейшем мы не будем рассматривать ни один из режимов ad-hoc. Режим инфраструктуры Точки доступа Точки доступа представляют собой беспроводные сетевые устройства, позволяющие одному или большему количеству клиентов беспроводной сети использовать эти устройства в качестве центрального сетевого концентратора. При использовании точки доступа все клиенты работают через неё. Зачастую используются несколько точек доступа для полного покрытия беспроводной сетью некоторой зоны, такой, как дом, офис или парк. Точки доступа обычно имеют несколько подключений к сети: адаптер беспроводной связи и один или большее количество сетевых ethernet-адаптеров для подключения к остальной части сети. Точки доступа могут быть либо приобретены уже настроенными, либо вы можете создать собственную при помощи FreeBSD и поддерживаемого адаптера беспроводной связи. Несколько производителей выпускают точки беспроводного доступа и адаптеры беспроводной связи с различными возможностями. Построение точки доступа с FreeBSD беспроводные сети точка доступа Требования Для того, чтобы создать беспроводную точку доступа на FreeBSD, вам нужно иметь совместимый адаптер беспроводной связи. На данный момент поддерживаются адаптеры только на основе набора микросхем Prism. Вам также потребуется поддерживаемый FreeBSD адаптер проводной сети (найти такой будет нетрудно, FreeBSD поддерживает множество различных устройств). В этом руководстве мы будем полагать, что вы будете строить сетевой мост (&man.bridge.4;) для пропуска всего трафика между устройством беспроводной связи и сетью, подключенной к обычному Ethernet-адаптеру. Функциональность hostap, которая используется FreeBSD для организации точки доступа, работает лучше всего с некоторыми версиями микрокода. Адаптеры Prism 2 должны использовать микрокод версии 1.3.4 или более новый. Адаптеры Prism 2.5 и Prism 3 должны использовать микрокод версии 1.4.9. Более старые версии микрокода могут работать нормально, а могут и некорректно. В настоящее время единственным способом обновления адаптеров является использование утилит обновления для &windows;, которые можно получить у производителя ваших адаптеров. Настройка Первым делом убедитесь, что ваша система распознаёт адаптер беспроводной связи: &prompt.root; ifconfig -a wi0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 inet6 fe80::202:2dff:fe2d:c938%wi0 prefixlen 64 scopeid 0x7 inet 0.0.0.0 netmask 0xff000000 broadcast 255.255.255.255 ether 00:09:2d:2d:c9:50 media: IEEE 802.11 Wireless Ethernet autoselect (DS/2Mbps) status: no carrier ssid "" stationname "FreeBSD Wireless node" channel 10 authmode OPEN powersavemode OFF powersavesleep 100 wepmode OFF weptxkey 1 На данном этапе не беспокойтесь о деталях, просто убедитесь, что выдаётся нечто, указывающее на установленный адаптер беспроводной связи. Если при этом у вас есть проблемы с недоступностью интерфейса беспроводной связи, и вы используете PC Card, то обратитесь к страницам справочной системы, описывающим &man.pccardc.8; и &man.pccardd.8; для получения более полной информации. Теперь вам нужно загрузить модуль для подготовки той части FreeBSD, что отвечает за организацию сетевых мостов, для работы с точкой доступа. Для загрузки модуля &man.bridge.4; просто выполните следующую команду: &prompt.root; kldload bridge При загрузке модуля никаких сообщений об ошибках быть не должно. Если это всё же произошло, вам может потребоваться вкомпилировать код для модуля &man.bridge.4; в ядро. В этом вам должен помочь раздел этого Руководства об организации сетевых мостов. Теперь, когда вы завершили с той частью, что касается организации сетевого моста, нам нужно указать ядру FreeBSD, какие интерфейсы должны объединяться в сетевом мосте. Это мы делаем при помощи &man.sysctl.8;: &prompt.root; sysctl net.link.ether.bridge=1 &prompt.root; sysctl net.link.ether.bridge_cfg="wi0,xl0" &prompt.root; sysctl net.inet.ip.forwarding=1 Во &os; 5.2-RELEASE и последующих версиях нужно использовать вместо указанных следующие параметры: &prompt.root; sysctl net.link.ether.bridge.enable=1 &prompt.root; sysctl net.link.ether.bridge.config="wi0,xl0" &prompt.root; sysctl net.inet.ip.forwarding=1 Теперь необходимо настроить адаптер беспроводной сети. Следующая команда заставит адаптер работать в режиме точки доступа: &prompt.root; ifconfig wi0 ssid my_net channel 11 media DS/11Mbps mediaopt hostap up stationname "FreeBSD AP" Строчка &man.ifconfig.8; активизирует интерфейс wi0, конфигурирует его SSID как my_net, а имя станции как FreeBSD AP. переводит адаптер в режим 11Mbps и нужен только для того, чтобы сработал параметр . Параметр переводит интерфейс в режим точки доступа. Параметр задаёт использование канала 802.11b. Страница справки по команде &man.wicontrol.8; перечисляет корректные значения каналов для ваших нужд. Теперь у вас должна получиться полнофункциональная работающая точка доступа. Настоятельно советуем прочесть страницы справочной по &man.wicontrol.8;, &man.ifconfig.8;, и &man.wi.4; для получения дополнительной информации. Также полагаем, что вы прочтёте следующий раздел о шифровании. Информация о состоянии После того, как точка доступа сконфигурирована и начала свою работу, операторам может понадобиться видеть клиентов, связанных с этой точкой. В любой момент оператор может набрать: &prompt.root; wicontrol -l 1 station: 00:09:b7:7b:9d:16 asid=04c0, flags=3<ASSOC,AUTH>, caps=1<ESS>, rates=f<1M,2M,5.5M,11M>, sig=38/15 Это показывает, что имеется одна связанная станция с перечисленными характеристиками. Выдаваемое значение сигнала должно использоваться только как сравнительный индикатор его силы. Его перевод в dBm или другие единицы измерения различаются в разных версиях микрокода. Клиенты Клиент в беспроводной сети представляет собой систему, которая обращается к точке доступа или непосредственно к другому клиенту. Как правило, клиенты беспроводной сети имеют только один сетевой адаптер, а именно адаптер беспроводной сети. Существует несколько различных способов конфигурации клиента беспроводной сети. Они основаны на различных режимах работы в беспроводной сети, обычно BSS (режим инфраструктуры, который требует точки доступа) или IBSS (ad-hoc или режим одноранговой сети). В нашем примере мы будем использовать самый популярный их них, режим BSS, для связи с точкой доступа. Требования Существует только одно жёсткое условие для настройки FreeBSD в качестве клиента беспроводной сети. Вам нужен адаптер беспроводной связи, поддерживаемый FreeBSD. Конфигурация FreeBSD как клиента беспроводной сети Перед тем, как подключиться к беспроводной сети, вам нужно будет узнать о ней несколько вещей. В этом примере мы подключаемся к сети, которая называется my_net, и шифрование в ней отключено. В этом примере мы не используем шифрование, но это небезопасно. В следующем разделе вы узнаете, как её включить, почему это так важно, и почему некоторые технологии шифрования всё же не могут полностью обеспечить вашу информационную безопасность. Удостоверьтесь, что ваш адаптер распознаётся во FreeBSD: &prompt.root; ifconfig -a wi0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 inet6 fe80::202:2dff:fe2d:c938%wi0 prefixlen 64 scopeid 0x7 inet 0.0.0.0 netmask 0xff000000 broadcast 255.255.255.255 ether 00:09:2d:2d:c9:50 media: IEEE 802.11 Wireless Ethernet autoselect (DS/2Mbps) status: no carrier ssid "" stationname "FreeBSD Wireless node" channel 10 authmode OPEN powersavemode OFF powersavesleep 100 wepmode OFF weptxkey 1 Теперь мы можем изменить настройки адаптера на те, что соответствуют нашей сети: &prompt.root; ifconfig wi0 inet 192.168.0.20 netmask 255.255.255.0 ssid my_net Замените 192.168.0.20 и 255.255.255.0 на правильные IP-адрес и сетевую маску в вашей проводной сети. Запомните, что наша точка доступа выступает в роли моста для данных между беспроводной и проводной сетями, так что они будут доступны для других устройств, находящихся в сети, как будто они тоже находятся в проводной сети. Как только вы это выполнили, то сможете получить ping от хостов в проводной сети, как будто вы подключены посредством обычных проводов. Если вы столкнулись с проблемами при работе в беспроводной сети, удостоверьтесь, что вы ассоциированы (подключены) с точкой доступа: &prompt.root; ifconfig wi0 должна выдать некоторую информацию, и вы должны увидеть: status: associated Если статус не будет соответствовать associated, это может значить, что вы оказались вне зоны досягаемости точки доступа, включили шифрование или, возможно, имеются проблемы с конфигурацией. Шифрование беспроводные сети шифрование Шифрование в беспроводной сети имеет важное значение, потому что у вас нет больше возможности ограничить сеть хорошо защищённой областью. Данные вашей беспроводной сети вещаются по всей окрестности, так что любой заинтересовавшийся может их считать. Вот здесь используется шифрование. Шифруя данные, посылаемые в эфир, вы делаете их прямой перехват гораздо более сложным для всех любопытных. Двумя наиболее широко применяемыми способами шифрации данных между вашим клиентом и точкой доступа являются WEP и &man.ipsec.4;. WEP WEP WEP является сокращением от Wired Equivalency Protocol (Протокол Соответствия Проводной сети). WEP является попыткой сделать беспроводные сети такими же надёжными и безопасными, как проводные. К сожалению, он был взломан и сравнительно легко поддаётся вскрытию. Это означает также, что он не тот протокол, на который следует опираться, когда речь идёт о шифровании критически важных данных. Он лучше, чем ничего, так что используйте следующую команду для включения WEP в вашей новой точке доступа FreeBSD: &prompt.root; ifconfig wi0 inet up ssid my_net wepmode on wepkey 0x1234567890 media DS/11Mbps mediaopt hostap Вы можете включить WEP на клиенте следующей командой: &prompt.root; ifconfig wi0 inet 192.168.0.20 netmask 255.255.255.0 ssid my_net wepmode on wepkey 0x1234567890 Отметьте, что вы должны заменить 0x1234567890 на более уникальный ключ. IPsec &man.ipsec.4; является гораздо более надёжным и мощным средством шифрования данных в сети. Этот метод определённо является предпочтительным для шифрования данных в беспроводной сети. Более детально ознакомиться с безопасностью и применением &man.ipsec.4; вы можете в разделе об IPsec этого Руководства. Утилиты Имеется несколько утилит, которые можно использовать для настройки и отладки вашей беспроводной сети, и здесь мы попытаемся описать некоторые из них и что они могут делать. Пакет <application>bsd-airtools</application> Пакет bsd-airtools представляет собой полный набор инструментов, включая инструменты для проверки беспроводной сети на предмет взлома WEP-ключа, обнаружения точки доступа и тому подобное. Утилиты bsd-airtools можно установить из порта net/bsd-airtools. Информацию об установке портов можно найти в Главе этого Руководства. Программа dstumbler является инструментом, предназначенным для обнаружения точки доступа и выдачи отношения уровня сигнала к шуму. Если у вас с трудом получается запустить точку доступа, dstumbler может помочь вам начать. Для тестирования информационной безопасности вашей беспроводной сети, вы можете воспользоваться набором dweputils (dwepcrack, dwepdump и dwepkeygen), который может помочь понять, является ли WEP подходящим решением для обеспечения ваших потребностей в информационной безопасности. Утилиты <command>wicontrol</command>, <command>ancontrol</command> и <command>raycontrol</command> Это инструменты, которые могут быть использованы для управления поведением адаптера беспроводной связи в сети. В примере выше мы выбирали &man.wicontrol.8;, так как нашим адаптером беспроводной сети был интерфейс wi0. Если у вас установлено устройство беспроводного доступа от Cisco, этим интерфейсом будет an0, и тогда вы будете использовать &man.ancontrol.8;. Команда <command>ifconfig</command> ifconfig Команда &man.ifconfig.8; может использоваться для установки многих из тех параметров, что задаёт &man.wicontrol.8;, однако работа с некоторыми параметрами в ней отсутствует. Обратитесь к &man.ifconfig.8; для выяснения параметров и опций командной строки. Поддерживаемые адаптеры Точки доступа Единственными адаптерами, которые на данный момент поддерживаются в режиме BSS (как точка доступа), являются те устройства, что сделаны на основе набора микросхем Prism 2, 2.5 или 3). Полный список можно увидеть в &man.wi.4;. Клиенты 802.11b Практически все адаптеры беспроводной связи 802.11b на данный момент во FreeBSD поддерживаются. Большинство адаптеров, построенных на основе Prism, Spectrum24, Hermes, Aironet и Raylink, будут работать в качестве адаптера беспроводной сети в режиме IBSS (ad-hoc, одноранговая сеть и BSS). Клиенты 802.11a и 802.11g Драйвер устройства &man.ath.4; поддерживает 802.11a и 802.11g. Если ваша карта основана на чипсете Atheros, вы можете использовать этот драйвер. К сожалению, все еще много производителей, не предоставляющих схематику своих драйверов сообществу open source, поскольку эта информация считается торговым секретом. Следовательно, у разработчиков FreeBSD и других операционных систем остается два варианта: разработать драйверы долгим и сложным методом обратного инжиниринга, или использовать существующие драйверы для платформ µsoft.windows;. Большинство разработчиков FreeBSD выбрали второй способ. Благодаря усилиям Билла Паула (wpaul), начиная с FreeBSD 5.3-RELEASE существует прозрачная поддержка Network Driver Interface Specification (NDIS). FreeBSD NDISulator (известный также как Project Evil) преобразует бинарный драйвер &windows; так, что он работает так же как и в &windows;. Эта возможность все еще относительно новая, но в большинстве тестов она работает адекватно. Для использования NDISulator потребуются три вещи: Исходные тексты ядра Бинарный драйвер &windowsxp; (расширение .SYS) Файл конфигурации бинарного драйвера &windowsxp; (расширение .INF) Вам может потребоваться компиляция драйвера оболочки мини порта &man.ndis.4;. Под root: &prompt.root; cd /usr/src/sys/modules/ndis &prompt.root; make && make install Определите местоположение файлов для вашей карты. Обычно их можно найти на входящем в комплект CD или на веб сайте поставщика. В нашем примере используются файлы W32DRIVER.SYS и W32DRIVER.INF. Следующий шаг это компиляция бинарного драйвера в загружаемый модуль ядра. Чтобы сделать это, сначала зайдите в каталог модуля if_ndis и с правами root скопируйте туда драйверы &windows;: &prompt.root; cd /usr/src/sys/modules/if_ndis &prompt.root; cp /path/to/driver/W32DRIVER.SYS ./ &prompt.root; cp /path/to/driver/W32DRIVER.INF ./ Теперь используйте утилиту ndiscvt для создания заголовка определения драйвера ndis_driver_data.h перед сборкой модуля: &prompt.root; ndiscvt -i W32DRIVER.INF -s W32DRIVER.SYS -o ndis_driver_data.h Параметры и задают соответственно файл настройки и бинарный файл. Мы используем параметр , поскольку Makefile при создании модуля будет обращаться именно к этому файлу. Некоторым драйверам &windows; для работы требуются дополнительные файлы. Вы можете включить их параметром ndiscvt . Обратитесь к странице справочной системы &man.ndiscvt.8; за дополнительной информацией. Наконец, соберите и установите модуль драйвера: &prompt.root; make && make install Для использования драйвера необходимо загрузить соответствующие модули: &prompt.root; kldload ndis &prompt.root; kldload if_ndis Первая команда загружает оболочку драйвера минипорта NDIS, вторая загружает собственно сетевой интерфейс. Проверьте &man.dmesg.8; на предмет ошибок загрузки. Если все прошло хорошо, вывод должен быть примерно таким: ndis0: <Wireless-G PCI Adapter> mem 0xf4100000-0xf4101fff irq 3 at device 8.0 on pci1 ndis0: NDIS API version: 5.0 ndis0: Ethernet address: 0a:b1:2c:d3:4e:f5 ndis0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps ndis0: 11g rates: 6Mbps 9Mbps 12Mbps 18Mbps 36Mbps 48Mbps 54Mbps Начиная с этого момента вы можете использовать устройство ndis0 как любое другое беспроводное устройство (например, wi0); в этой ситуации применима информация, приведенная в начале этой главы. Pav Lucistnik Текст предоставил
pav@oook.cz
Bluetooth Bluetooth Введение Bluetooth является беспроводной технологией для создания персональных сетей на расстоянии не более 10 метров, работающей на частоте 2.4 ГГц, которая не подлежит лицензированию. Обычно такие сети формируются из портативных устройств, таких, как сотовые телефоны, КПК и лаптопы. В отличие от Wi-Fi, другой популярной беспроводной технологии, Bluetooth предоставляет более высокий уровень сервиса, например, файловые серверы типа FTP, передачу файлов, голоса, эмуляцию последовательного порта и другие. Стек протоколов Bluetooth во &os; реализован на основе технологии Netgraph (обратитесь к &man.netgraph.4;). Широкий спектр USB-устройств Bluetooth поддерживается драйвером &man.ng.ubt.4;. Устройства Bluetooth на основе набора микросхем Broadcom BCM2033 поддерживается драйвером &man.ng.bt3c.4;. Устройства Bluetooth, работающие через последовательные и UART-порты, поддерживаются драйверами &man.sio.4;, &man.ng.h4.4; и &man.hcseriald.8;. В этом разделе описывается использование Bluetooth-устройств, подключаемых через USB. Поддержка Bluetooth имеется во &os; 5.0 и более новых версиях системы. Подключение устройства По умолчанию драйверы устройств Bluetooth поставляются в виде модулей ядра. Перед подключением устройства вам необходимо подгрузить драйвер в ядро: &prompt.root; kldload ng_ubt Если Bluetooth-устройство в момент запуска системы подключено, то загружайте модуль из файла /boot/loader.conf: ng_ubt_load="YES" Подключите ваше USB-устройство. На консоли (или в журнале syslog) появится примерно такое сообщение: ubt0: vendor 0x0a12 product 0x0001, rev 1.10/5.25, addr 2 ubt0: Interface 0 endpoints: interrupt=0x81, bulk-in=0x82, bulk-out=0x2 ubt0: Interface 1 (alt.config 5) endpoints: isoc-in=0x83, isoc-out=0x3, wMaxPacketSize=49, nframes=6, buffer size=294 Скопируйте файл /usr/share/examples/netgraph/bluetooth/rc.bluetooth в какое-нибудь подходящее место, например, в файл /etc/rc.bluetooth. Этот скрипт используется для запуска и остановки работы Bluetooth-стека. Перед отключением устройства рекомендуется остановить его работы, хотя (обычно) это не фатально. При запуске стека вы получите сообщения, подобные следующим: &prompt.root; /etc/rc.bluetooth start ubt0 BD_ADDR: 00:02:72:00:d4:1a Features: 0xff 0xff 0xf 00 00 00 00 00 <3-Slot> <5-Slot> <Encryption> <Slot offset> <Timing accuracy> <Switch> <Hold mode> <Sniff mode> <Park mode> <RSSI> <Channel quality> <SCO link> <HV2 packets> <HV3 packets> <u-law log> <A-law log> <CVSD> <Paging scheme> <Power control> <Transparent SCO data> Max. ACL packet size: 192 bytes Number of ACL packets: 8 Max. SCO packet size: 64 bytes Number of SCO packets: 8 HCI Host Controller Interface (HCI) Host Controller Interface (HCI) предоставляет интерфейс для управления контроллером передатчика и менеджером соединений, а также доступ к данным о состоянии оборудования и его управляющим регистрам. Этот интерфейс предоставляет унифицированный метод доступа к передающим возможностям Bluetooth. Уровень HCI на управляющей машине обменивается данными и командами с микрокодом HCI в оборудовании Bluetooth. Драйвер для Host Controller Transport Layer (то есть физической шины) предоставляет обоим слоям HCI возможность обмениваться данными друг с другом. Для одного Bluetooth-устройства создаётся один узел Netgraph типа hci. HCI-узел обычно подключается к узлу драйвера устройства Bluetooth (входящий поток) и к узлу L2CAP (исходящий поток). Все операции с HCI должны выполняться на узле HCI, но не на узле драйвера устройства. В качестве имени по умолчанию для узла HCI используется devicehci. Дополнительные подробности можно найти на справочной странице &man.ng.hci.4;. Одной из самой часто выполняемой задач является обнаружение Bluetooth-устройств в радиусе RF-доступности. Эта операция называется опросом (inquiry). Опрос и другие операции, связанные с HCI, выполняются при помощи утилиты &man.hccontrol.8;. Пример ниже показывает, как найти доступные устройства Bluetooth. Список таких устройств должен быть получен в течение нескольких секунд. Заметьте, что удалённые устройства будут отвечать на опрос, если только они находятся в режиме обнаруживаемости (discoverable). &prompt.user; hccontrol -n ubt0hci inquiry Inquiry result, num_responses=1 Inquiry result #0 BD_ADDR: 00:80:37:29:19:a4 Page Scan Rep. Mode: 0x1 Page Scan Period Mode: 00 Page Scan Mode: 00 Class: 52:02:04 Clock offset: 0x78ef Inquiry complete. Status: No error [00] BD_ADDR является уникальным адресом устройства Bluetooth, вроде MAC-адресов сетевых адаптеров. Этот адрес необходим для дальнейшей работы с устройством. Адресу BD_ADDR можно присвоить удобное для чтения имя. Файл /etc/bluetooth/hosts содержит информацию об известных хостах Bluetooth. В следующем примере показано, как получить имя, назначенное удалённому устройству: &prompt.user; hccontrol -n ubt0hci remote_name_request 00:80:37:29:19:a4 BD_ADDR: 00:80:37:29:19:a4 Name: Pav's T39 Если вы выполните опрос на другом Bluetooth-устройстве, но ваш компьютер будет опознан как your.host.name (ubt0). Имя, назначаемое локальному устройству, может быть в любой момент изменено. Система Bluetooth предоставляет услуги по соединениям типа точка-точка (при этом задействованы только два устройства Bluetooth) или точка-ко-многим-точкам. В последнем случае соединение используется совместно несколькими устройствам Bluetooth. В следующем примере показывается, как получить список активных для локального устройства соединений: &prompt.user; hccontrol -n ubt0hci read_connection_list Remote BD_ADDR Handle Type Mode Role Encrypt Pending Queue State 00:80:37:29:19:a4 41 ACL 0 MAST NONE 0 0 OPEN Идентификатор соединения (connection handle) полезен, когда необходимо прекратить соединение. Заметьте, что обычно нет нужды делать это вручную. Стек будет автоматически разрывать неактивные соединения. &prompt.root; hccontrol -n ubt0hci disconnect 41 Connection handle: 41 Reason: Connection terminated by local host [0x16] Обратитесь к помощи посредством hccontrol help для получения полного списка доступных HCI-команд. Большинство команд HCI для выполнения не требуют прав администратора системы. L2CAP Logical Link Control and Adaptation Protocol (L2CAP) Протокол L2CAP (Logical Link Control and Adaptation Protocol) предоставляет услуги по работе с данными, как ориентированные на соединения, так и без ориентации на них, протоколам более высокого уровня с возможностями мультиплексирования и обеспечением операций по сегментации и обратной сборке. L2CAP позволяет протоколам более высокого уровня и приложениям передавать и получать пакеты данных L2CAP длиной до 64 Кбайт. L2CAP основан на концепции каналов. Каналом является логическое соединение поверх соединения по радиоканалу. Каждый канал привязан к некоторому протоколу по принципу многие-к-одному. Несколько каналов могут быть привязаны к одному и тому же протоколу, но канал не может быть привязан к нескольким протоколам. Каждый пакет L2CAP, получаемый каналом, перенаправляется к соответствующему протоколу более высокого уровня. Несколько каналов могут совместно использовать одно и то же радиосоединение. Для одного Bluetooth-устройства создается один узел Netgraph типа l2cap. Узел L2CAP обычно подключается к узлу Bluetooth HCI (нижестоящий) и узлам Bluetooth-сокетов (вышестоящие). По умолчанию для узла L2CAP используется имя devicel2cap. Для получения дополнительной информации обратитесь к справочной странице по &man.ng.l2cap.4;. Полезной является программа &man.l2ping.8;, которая может использоваться для проверки связи с другими устройствами. Некоторые реализации Bluetooth могут не возвращать все данные, посылаемые им, так что 0 bytes в следующем примере - это нормально. &prompt.root; l2ping -a 00:80:37:29:19:a4 0 bytes from 0:80:37:29:19:a4 seq_no=0 time=48.633 ms result=0 0 bytes from 0:80:37:29:19:a4 seq_no=1 time=37.551 ms result=0 0 bytes from 0:80:37:29:19:a4 seq_no=2 time=28.324 ms result=0 0 bytes from 0:80:37:29:19:a4 seq_no=3 time=46.150 ms result=0 Утилита &man.l2control.8; используется для выполнения различных операций с узлами L2CAP. В этом примере показано, как получить список логических соединений (каналов) и перечень радиосоединений локального устройства: &prompt.user; l2control -a 00:02:72:00:d4:1a read_channel_list L2CAP channels: Remote BD_ADDR SCID/ DCID PSM IMTU/ OMTU State 00:07:e0:00:0b:ca 66/ 64 3 132/ 672 OPEN &prompt.user; l2control -a 00:02:72:00:d4:1a read_connection_list L2CAP connections: Remote BD_ADDR Handle Flags Pending State 00:07:e0:00:0b:ca 41 O 0 OPEN Ещё одним диагностическим инструментом является &man.btsockstat.1;. Она выполняет действия, подобные тем, что обычно выполняет &man.netstat.1;, но со структурами данных, связанных с работой в сети Bluetooth. В примере ниже описывается то же самое логическое соединение, что и с &man.l2control.8; выше. &prompt.user; btsockstat Active L2CAP sockets PCB Recv-Q Send-Q Local address/PSM Foreign address CID State c2afe900 0 0 00:02:72:00:d4:1a/3 00:07:e0:00:0b:ca 66 OPEN Active RFCOMM sessions L2PCB PCB Flag MTU Out-Q DLCs State c2afe900 c2b53380 1 127 0 Yes OPEN Active RFCOMM sockets PCB Recv-Q Send-Q Local address Foreign address Chan DLCI State c2e8bc80 0 250 00:02:72:00:d4:1a 00:07:e0:00:0b:ca 3 6 OPEN RFCOMM Протокол RFCOMM Протокол RFCOMM эмулирует последовательные порты поверх протокола L2CAP. Он основан на ETSI-стандарте TS 07.10. RFCOMM представляет собой простой транспортный протокол, с дополнительными возможностями по эмуляции 9 цепей последовательных портов RS-232 (EIATIA-232-E). Протокол RFCOMM поддерживает одновременно до 60 соединений (каналов RFCOMM) между двумя устройствами Bluetooth. В рамках RFCOMM полный коммуникационный маршрут включает два приложения, работающие на разных устройствах (конечные коммуникационные точки) с коммуникационным сегментом между ними. RFCOMM предназначен для сокрытия приложений, использующих последовательные порты устройств, в которых они расположены. Коммуникационный сегмент по сути является Bluetooth-связью от одного устройства к другому (прямое соединение). RFCOMM имеет дело с соединением между устройствами в случае прямого соединения, или между устройством и модемом в сетевом случае. RFCOMM может поддерживать и другие конфигурации, такие, как модули, работающие через беспроводную технологию Bluetooth с одной стороны и предоставляющие проводное соединение с другой стороны. Во &os; протокол RFCOMM реализован на уровне сокетов Bluetooth. pairing Pairing of Devices По умолчанию связь Bluetooth не аутентифицируется, поэтому любое устройство может общаться с любым другим. Устройство Bluetooth (например, сотовый телефон) может задать обязательность аутентификации для предоставления определённого сервиса (в частности, услугу доступа по коммутируемой линии). Bluetooth-аутентификация обычно выполняется через PIN-коды. PIN-код представляет из себя ASCII-строку длиной до 16 символов. Пользователь обязан ввести один и тот же PIN-код на обоих устройствах. Как только он введёт PIN-код, оба устройства сгенерируют ключ связи. После этого ключ может быть сохранён либо в самом устройстве, либо на постоянном носителе. В следующий раз оба устройства будут использовать ранее сгенерированный ключ соединения. Процедура, описанная выше, носит название подгонки пары (pairing). Заметьте, что если ключ связи потерян любой из сторон, то подбор пары должен быть повторен. За обработку всех запросов на Bluetooth-аутентификацию отвечает даемон &man.hcsecd.8;. По умолчанию файл конфигурации называется /etc/bluetooth/hcsecd.conf. Пример раздела, содержащего информацию о сотовом телефоне с явно заданным PIN-кодом 1234 приведен ниже: device { bdaddr 00:80:37:29:19:a4; name "Pav's T39"; key nokey; pin "1234"; } Кроме длины, на PIN-коды не накладывается никаких ограничений. Некоторые устройства (например, Bluetooth-гарнитуры) могут иметь фиксированный встроенный PIN-код. Параметр позволяет запустить &man.hcsecd.8; как нефоновый процесс, что облегчает просмотр происходящих событий. Задайте получение парного ключа на удалённом устройстве и инициируйте Bluetooth-соединение с этим устройством. Удалённое устройство должно подтвердить получение пары и запросить PIN-код. Введите тот же самый код, что находится в hcsecd.conf. Теперь ваш ПК и удалённое устройство спарены. Альтернативным способом является инициация процесса создания пары на удалённом устройстве. Ниже даётся пример выдачи протокола команды hcsecd: hcsecd[16484]: Got Link_Key_Request event from 'ubt0hci', remote bdaddr 0:80:37:29:19:a4 hcsecd[16484]: Found matching entry, remote bdaddr 0:80:37:29:19:a4, name 'Pav's T39', link key doesn't exist hcsecd[16484]: Sending Link_Key_Negative_Reply to 'ubt0hci' for remote bdaddr 0:80:37:29:19:a4 hcsecd[16484]: Got PIN_Code_Request event from 'ubt0hci', remote bdaddr 0:80:37:29:19:a4 hcsecd[16484]: Found matching entry, remote bdaddr 0:80:37:29:19:a4, name 'Pav's T39', PIN code exists hcsecd[16484]: Sending PIN_Code_Reply to 'ubt0hci' for remote bdaddr 0:80:37:29:19:a4 SDP Service Discovery Protocol (SDP) Протокол обнаружения сервисов SDP даёт возможность клиентским приложениям осуществлять поиск услуг, предоставляемых серверными приложениями, а также характеристик этих услуг. В перечень атрибутов сервиса включается тип класса предлагаемого сервиса и информация о механизме или протоколе, требуемом для использования сервиса. SDP подразумевает коммуникации между SDP-сервером и SDP-клиентом. Сервер поддерживает список сервисов, в котором описываются параметры сервисов, связанных с сервером. Каждая запись об услуге содержит информацию об одном сервисе. Клиент может запросить информацию об определённом сервисе, обслуживаемом SDP-сервером, выдавая SDP-запрос. Если клиент или приложение, связанное с клиентом, решат воспользоваться сервисом, то для его использования необходимо открыть отдельное соединение к устройству, предоставляющему сервис. SDP предоставляет механизм обнаружения услуг и их параметров, но не даёт механизма использования этих сервисов. Обычно SDP-клиент выполняет поиск услуг на основе некоторых желаемых характеристик услуг. Однако иногда возникает необходимость выяснить полный перечень типов услуг, предоставляемых SDP-сервером, не имея никакой информации об имеющихся сервисах. Такой процесс всех предлагаемых сервисов называется обзором (browsing). Bluetooth SDP сервер &man.sdpd.8; и клиент с интерфейсом командной строки &man.sdpcontrol.8; включены в стандартную поставку &os;. В следующем примере показано, как выполнять запрос на SDP-обзор. &prompt.user; sdpcontrol -a 00:01:03:fc:6e:ec browse Record Handle: 00000000 Service Class ID List: Service Discovery Server (0x1000) Protocol Descriptor List: L2CAP (0x0100) Protocol specific parameter #1: u/int/uuid16 1 Protocol specific parameter #2: u/int/uuid16 1 Record Handle: 0x00000001 Service Class ID List: Browse Group Descriptor (0x1001) Record Handle: 0x00000002 Service Class ID List: LAN Access Using PPP (0x1102) Protocol Descriptor List: L2CAP (0x0100) RFCOMM (0x0003) Protocol specific parameter #1: u/int8/bool 1 Bluetooth Profile Descriptor List: LAN Access Using PPP (0x1102) ver. 1.0 ... и так далее. Заметьте, что каждый сервис имеет перечень атрибутов (например, канал RFCOMM). В зависимости от сервиса вам может потребоваться где-то сохранить эти атрибуты. Некоторые реализации Bluetooth не поддерживают просмотр сервисов и могут возвращать пустой список. В этом случае возможен поиск конкретной услуги. В примере ниже показано, как выполнить поиск службы OBEX Object Push (OPUSH): &prompt.user; sdpcontrol -a 00:01:03:fc:6e:ec search OPUSH Во &os; предоставление сервисов клиентам Bluetooth осуществляется сервером &man.sdpd.8;: &prompt.root; sdpd Приложение на локальном сервере, желающее предоставить сервис Bluetooth удаленным клиентам, регистрирует сервис через локального даемона SDP. Пример такого приложения — &man.rfcomm.pppd.8;. После запуска оно регистрирует Bluetooth LAN сервис через локального даемона SDP. Список сервисов, зарегистрированных через локальный SDP сервер, может быть получен путем выдачи запроса на просмотр SDP через локальный контрольный канал: &prompt.root; sdpcontrol -l browse Доступ к сети по коммутируемой линии связи (DUN) и по протоколу PPP (LAN) Модуль работы с коммутируемым доступом к сети (DUN - Dial-Up Networking) в большинстве случаев используется с модемами и сотовыми телефонами. Этот модуль покрывает следующие случаи: сотовый телефон или модем используется вместе с компьютером в качестве беспроводного модема для подключения к серверу коммутируемого доступа в Интернет, или другой коммутируемой услуге; сотовый телефон или модем используется компьютером для приёма входящих соединений. Модуль доступа к сети по протоколу PPP (Network Access with PPP - LAN) может использоваться в следующих ситуациях: доступ к ЛВС для одного Bluetooth-устройства; доступ к ЛВС для нескольких Bluetooth-устройств; связь между двумя ПК (при помощи протокола PPP поверх эмулируемого последовательного канала связи). Во &os; оба случая реализуются при помощи сервисных программ &man.ppp.8; и &man.rfcomm.pppd.8; - это обработчик, преобразующий RFCOMM-соединения Bluetooth в нечто, с чем может работать PPP. Перед тем, как использовать любой модуль, в файле /etc/ppp/ppp.conf должна быть создана новая PPP-метка. Примеры использования можно найти в справочной странице к &man.rfcomm.pppd.8;. В следующем примере &man.rfcomm.pppd.8; будет использоваться для открытия RFCOMM-соединения к удалённому устройству с BD_ADDR 00:80:37:29:19:a4 на DUN RFCOMM-канале. Реальный номер RFCOMM-канала будет получаться с удалённого устройства через SDP. Возможно указать RFCOMM-канал вручную, и в этом случае &man.rfcomm.pppd.8; не будет выполнять SDP-запрос. Для нахождения RFCOMM-канала на удалённом устройстве используйте утилиту &man.sdpcontrol.8;. &prompt.root; rfcomm_pppd -a 00:80:37:29:19:a4 -c -C dun -l rfcomm-dialup Для того, чтобы организовать сервис Network Access with PPP (LAN), необходимо запустить сервер &man.sdpd.8;. В файле /etc/ppp/ppp.conf должна быть создана новая запись для клиентов LAN. Примеры можно найти в справке по &man.rfcomm.pppd.8;. Наконец, запустите RFCOMM PPP сервер на существующем номере канала RFCOMM. Сервер RFCOMM PPP автоматически зарегистрирует Bluetooth LAN сервис через локальный SDP даемон. В примере ниже показано, как запустить сервер RFCOMM PPP. &prompt.root; rfcomm_pppd -s -C 7 -l rfcomm-server OBEX OBEX Object Push (OPUSH) Profile OBEX является широко используемым протоколом для простой передачи файлов между мобильными устройствами. В основном он используется в коммуникациях через инфракрасный порт для передачи файлов между ноутбуками или КПК, а также для пересылки визитных карточек или календарных планов между сотовыми телефонами и другими устройствами с персональными информационными менеджерами. Сервер и клиент OBEX реализованы в виде пакета стороннего разработчика obexapp, который доступен в виде порта comms/obexapp. Клиент OBEX используется для посылки или приёма объектов с сервера OBEX. Объектом, к примеру, может быть визитная карточка или указание. Клиент OBEX может получить номер RFCOMM-канала, указав вместо него имя сервиса. Поддерживаются следующие имена сервиса: IrMC, FTRN и OPUSH. Канал RFCOMM можно задать его номером. Ниже даётся пример сеанса OBEX, где с сотового телефона забирается объект с информацией об устройстве, а новый объект (визитная карточка) передаётся в каталог сотового телефона. &prompt.user; obexapp -a 00:80:37:29:19:a4 -C IrMC obex> get get: remote file> telecom/devinfo.txt get: local file> devinfo-t39.txt Success, response: OK, Success (0x20) obex> put put: local file> new.vcf put: remote file> new.vcf Success, response: OK, Success (0x20) obex> di Success, response: OK, Success (0x20) Для того, чтобы предоставить сервис OBEX Push, должен быть запущен сервер &man.sdpd.8;. Должен быть создан корневой каталог, в котором будут сохраняться все поступающие объекты. По умолчанию корневым каталогом является /var/spool/obex. Наконец, запустите OBEX сервер на существующем номере канала RFCOMM. OBEX сервер автоматически зарегистрирует сервис OBEX Object Push через локального даемона SDP. В примере ниже показано, как запустить OBEX-сервер. &prompt.root; obexapp -s -C 10 Профиль последовательного порта (SPP) Профиль последовательного порта (SPP - Serial Port Profile) позволяет Bluetooth-устройствам осуществлять эмуляцию последовательного порта RS232 (или подобного). Этот профиль покрывает случаи, касающиеся работы унаследованных приложений с Bluetooth в качестве замены кабельному соединению, при это используется абстракция виртуального последовательного порта. Утилита &man.rfcomm.sppd.1; реализует профиль последовательного порта. В качестве виртуального последовательного порта используется псевдотерминал. В примере ниже показано, как подключиться к сервису Serial Port удалённого устройства. Заметьте, что вы не указываете RFCOMM-канал - &man.rfcomm.sppd.1; может получить его с удалённого устройства через SDP. Если вы хотите переопределить это, укажите RFCOMM-канал явно в командной строке. &prompt.root; rfcomm_sppd -a 00:07:E0:00:0B:CA -t /dev/ttyp6 rfcomm_sppd[94692]: Starting on /dev/ttyp6... После подключения псевдотерминал можно использовать как последовательный порт: &prompt.root; cu -l ttyp6 Решение проблем Удалённое устройство не подключается Некоторые старые Bluetooth-устройства не поддерживают переключение ролей. По умолчанию, когда &os; подтверждает новое соединение, она пытается выполнить переключение роли и стать ведущим устройством. Устройства, которые это не поддерживают, не смогут подключиться. Заметьте, что переключение ролей выполняется при установлении нового соединения, поэтому невозможно выяснить, поддерживает ли удалённое устройство переключение ролей. На локальной машине имеется возможность отключить переключение ролей при помощи HCI-параметра: &prompt.root; hccontrol -n ubt0hci write_node_role_switch 0 Что-то идёт не так, можно ли посмотреть, что в точности происходит? Да, можно. Воспользуйтесь пакетом hcidump-1.5 стороннего разработчика, который доступен для загрузки с . Утилита hcidump похожа на &man.tcpdump.1;. Она может быть использована для вывода на терминал содержимого Bluetooth-пакетов и сбрасывать пакеты Bluetooth в файл.
Steve Peterson Текст создал Мосты Введение подсеть IP сетевой мост Иногда полезно разделить одну физическую сеть (такую, как сегмент Ethernet) на два отдельных сегмента сети без необходимости создания подсетей IP и использования маршрутизатора для соединения сегментов. Устройство, которое соединяет две сети на такой манер, называется сетевым мостом (bridge). Система FreeBSD с двумя сетевыми адаптерами может выступать в роли моста. Мост работает на основе изучения адресов уровня MAC (адресов Ethernet) устройств на каждом из своих сетевых интерфейсах. Он перенаправляет трафик между двумя сетями, только когда адреса отправителя и получателя находятся в разных сетях. По многим параметрам мост работает также, как коммутатор Ethernet с малым количеством портов. Ситуации, когда можно использовать мосты На сегодняшний день есть две ситуации, когда можно использовать мост. Большой трафик в сегменте Первая ситуация возникает, когда ваша физическая сеть перегружена трафиком, но по каким-то соображениям вы не хотите разделять сеть на подсети и соединять их с помощью маршрутизатора. Давайте рассмотрим в качестве примера газету, в которой редакторский и производственный отделы находятся в одной и той же подсети. Пользователи в редакторском отделе все используют сервер A для служб доступа к файлам, а пользователи производственного отдела используют сервер B. Для объединения всех пользователей используется сеть Ethernet, а высокая нагрузка на сеть замедляет работу. Если пользователи редакторского отдела могут быть собраны в одном сегменте сети, а пользователи производственного отдела в другом, то два сетевых сегмента можно объединить мостом. Только сетевой трафик, предназначенный для интерфейсов с другой стороны моста, будет посылаться в другую сеть, тем самым снижая уровень нагрузки на каждый сегмент сети. - Межсетевой экран с возможностями фильтрации/ограничения + <title>Брандмауэр с возможностями фильтрации/ограничения пропускной способности трафика - межсетевой экран + брандмауэр трансляция сетевых адресов Второй распространенной ситуацией является необходимость в - обеспечении функций межсетевого экрана без трансляции + обеспечении функций брандмауэра без трансляции сетевых адресов (NAT). Для примера можно взять маленькую компанию, которая подключена к своему провайдеру по каналу DSL или ISDN. Для неё провайдер выделил 13 глобально доступных IP-адресов для имеющихся в сети 10 персональных - компьютеров. В такой ситуации использование межсетевого экрана + компьютеров. В такой ситуации использование брандмауэра на основе маршрутизатора затруднено из-за проблем с разделением на подсети. маршрутизатор DSL ISDN - Межсетевой экран на основе моста может быть настроен и включен + Брандмауэр на основе моста может быть настроен и включен между маршрутизаторами DSL/ISDN без каких-либо проблем с IP-адресацией. Настройка моста Выбор сетевого адаптера Для работы моста требуются по крайней мере два сетевых адаптера. К сожалению, не все сетевые адаптеры во FreeBSD 4.0 поддерживают функции моста. Прочтите страницу Справочника по &man.bridge.4; для выяснения подробностей о поддерживаемых адаптерах. Перед тем, как продолжить, сначала установите и протестируйте два сетевых адаптера. Изменения в конфигурации ядра параметры ядра options BRIDGE Для включения поддержки функций моста в ядре, добавьте строчку options BRIDGE в файл конфигурации вашего ядра, и перестройте ядро. - Поддержка функций межсетевого экрана + Поддержка функций брандмауэра - межсетевой экран + брандмауэр - Если вы планируете использовать мост в качестве межсетевого - экрана, вам нужно также добавить опцию + Если вы планируете использовать мост в качестве + брандмауэра, вам нужно также добавить опцию IPFIREWALL. Прочтите , содержащий общую - информацию о настройке моста в качестве межсетевого экрана. + информацию о настройке моста в качестве брандмауэра. Если вам необходимо обеспечить прохождение не-IP пакетов (таких, - как ARP) через мост, то имеется опция межсетевого - экрана, которую можно задать. Это опция + как ARP) через мост, то имеется опция брандмауэра, + которую можно задать. Это опция IPFIREWALL_DEFAULT_TO_ACCEPT. Заметьте, что при - этом правило, используемое межсетевым экраном по умолчанию, меняется + этом правило, используемое брандмауэром по умолчанию, меняется на разрешительное для всех пакетов. Перед тем, как задавать эту опцию, убедитесь, что вы понимаете работу вашего набора правил. Поддержка функций ограничения пропускной способности Если вы хотите использовать мост в качестве машины, ограничивающей пропускную способность, то добавьте в файл конфигурации ядра опцию DUMMYNET. Дополнительную информацию можно почерпнуть из страницы Справочника по &man.dummynet.4;. Включение функций моста Добавьте строку net.link.ether.bridge=1 в файл /etc/sysctl.conf для включения функций моста во время работы системы, и строку: net.link.ether.bridge_cfg=if1,if2 для включения функций моста для указанных интерфейсов (замените if1 и if2 на имена двух ваших сетевых интерфейсов). Если вы хотите, чтобы проходящие через мост пакеты фильтровались посредством &man.ipfw.8;, вы должны добавить строчку: net.link.ether.bridge_ipfw=1 Во &os; 5.2-RELEASE и последующих версиях нужно использовать вместо указанных следующие строки: net.link.ether.bridge.enable=1 net.link.ether.bridge.config=if1,if2 net.link.ether.bridge.ipfw=1 Дополнительные замечания Если вы хотите осуществлять удалённый доступ на мост через &man.ssh.1; из сети, то корректно назначить одному из сетевых адаптеров IP-адрес. Общепринято, что назначение адреса обоим сетевым адаптерам является не самой хорошей идеей. Если в вашей сети присутствует несколько мостов, не должно быть более одного маршрута между любыми двумя рабочими станциями. С технической точки зрения это означает отсутствие поддержки протокола spanning tree. Сетевой мост может увеличить задержки в замерах командой &man.ping.8;, особенно для трафика между двумя разными сегментами. Jean-François Dockès Текст обновил Alex Dupre Реорганизовал и улучшил Работа с бездисковыми станциями работа без диска Машина с FreeBSD может загружаться по сети и работать без наличия локального диска, используя файловые системы, монтируемые с сервера NFS. Кроме стандартных конфигурационных файлов, не нужны никакие модификации в системе. Такую систему легко настроить, потому что все необходимые элементы уже готовы: Имеется по крайней мере два возможных способа загрузки ядра по сети: PXE: Система &intel; Preboot eXecution Environment является формой загрузочного ПЗУ, встроенного в некоторые сетевые адаптеры или материнские платы. Обратитесь к справочной странице по &man.pxeboot.8; для получения более полной информации. Порт Etherboot (net/etherboot) генерирует код, который может применяться в ПЗУ для загрузки ядра по сети. Код может быть либо прошит в загрузочный PROM на сетевом адаптере, либо загружен с локальной дискеты (или винчестера), или с работающей системы &ms-dos;. Поддерживаются многие сетевые адаптеры. Примерный скрипт (/usr/share/examples/diskless/clone_root) облегчает создание и поддержку корневой файловой системы рабочей станции на сервере. Скрипт, скорее всего, потребует некоторых настроек, но он позволит вам быстро начать работу. Стандартные файлы начального запуска системы, располагающиеся в /etc, распознают и поддерживают загрузку системы в бездисковом варианте. Подкачка, если она нужна, может выполняться через файл NFS либо на локальный диск. Существует много способов настройки бездисковой рабочей станции. При этом задействованы многие компоненты, и большинство из них могут быть настроены для удовлетворения ваших вкусов. Далее будет описаны варианты полной настройки системы, при этом упор будет делаться на простоту и совместимость с стандартной системой скриптов начальной загрузки FreeBSD. Описываемая система имеет такие характеристики: Бездисковые рабочие станции совместно используют файловую систему / в режиме только чтения, а также используют /usr совместно тоже в режиме только чтения. Корневая файловая система является копией стандартной корневой системы FreeBSD (обычно сервера), с некоторыми настроечными файлами, измененными кем-то специально для бездисковых операций или, возможно, для рабочей станции, которой она предназначена. Части корневой файловой системы, которые должны быть доступны для записи, перекрываются файловыми системами &man.mfs.8; (&os; 4.X) или &man.md.4; (&os; 5.X). Любые изменения будут потеряны при перезагрузках системы. Ядро передается и загружается посредством Etherboot или PXE, и в некоторых ситуациях может быть использован любой из этих методов. Как описано, эта система не защищена. Она должна располагаться в защищенной части сети, а другие хосты не должны на нее полагаться. Вся информация этого раздела была протестирована с релизами &os; 4.9-RELEASE и 5.2.1-RELEASE. Текст структурирован преимущественно для использования с 4.X. Отличия для 5.X упоминаются особо. Общая информация Настройка бездисковых рабочих станций относительно проста, но в то же время легко сделать ошибку. Иногда сложно диагностировать эти ошибки по нескольким причинам. Например: Параметры компиляции могут по-разному проявлять себя во время работы. Сообщения об ошибках бывают загадочны или вовсе отсутствуют. В данной ситуации некоторые знания, касающиеся используемых внутренних механизмов, очень полезны при разрешении проблем, которые могут возникнуть. Для выполнения успешной загрузки необходимо произвести несколько операций: Компьютеру необходимо получить начальные параметры, такие как собственный IP адрес, имя исполняемого файла, корневой каталог. Для этого используются протоколы DHCP или BOOTP. DHCP это совместимое расширение BOOTP, используются те же номера портов и основной формат пакетов. Возможна настройка системы для использования только BOOTP. Серверная программа &man.bootpd.8; включена в основную систему &os;. Тем не менее, у DHCP есть множество преимуществ над BOOTP (лучше файлы настройки, возможность использования PXE, плюс многие другие преимущества, не относящиеся непосредственно к бездисковым операциям), и мы в основном будем описывать настройку DHCP, с эквивалентными примерами для &man.bootpd.8;, когда это возможно. Пример конфигурации будет использовать пакет ISC DHCP (релиз 3.0.1.r12 был установлен на тестовом сервере). Компьютеру требуется загрузить в локальную память одну или несколько программ. Используются TFTP или NFS. Выбор между TFTP или NFS производится во время компилирования в нескольких местах. Часто встречающаяся ошибка это указание имен файлов для другого протокола: TFTP обычно загружает все файлы с одного каталога сервера, и принимает имена файлов относительно этого каталога. NFS нужны абсолютные пути к файлам. Необходимо инициализировать и выполнить возможные промежуточные программы загрузки и ядро. В этой области существует несколько важных вариаций: PXE загрузит &man.pxeboot.8;, являющийся модифицированной версией загрузчика третьей стадии &os;. &man.loader.8; получит большинство параметров, необходимых для старта системы, и оставит их в окружении ядра до контроля передачи. В этом случае возможно использование ядра GENERIC. Etherboot, непосредственно загрузит ядро, с меньшей подготовкой. Вам потребуется собрать ядро со специальными параметрами. PXE и Etherboot работают одинаково хорошо с системами 4.X. Поскольку ядро 5.X обычно позволяет &man.loader.8; выполнить больше предварительной работы, метод PXE на системах 5.X предпочтителен. Если ваш BIOS и сетевые карты поддерживают PXE, используйте его. Однако, все же возможен запуск системы 5.X с Etherboot. Наконец, компьютеру требуется доступ к файловым системам. NFS используется во всех случаях. Обратитесь также к странице справочника &man.diskless.8;. Инструкции по настройке Конфигурация с использованием ISC DHCP DHCP бездисковые конфигурации Сервер ISC DHCP может обрабатывать как запросы BOOTP, так и запросы DHCP. Начиная с релиза 4.9, ISC DHCP 3.0 не включается в поставку системы. Сначала вам нужно будет установить порт net/isc-dhcp3-server или соответствующий пакет. После установки ISC DHCP ему для работы требуется конфигурационный файл (обычно называемый /usr/local/etc/dhcpd.conf). Вот прокомментированный пример, где хост margaux использует Etherboot, а хост corbieres использует PXE: default-lease-time 600; max-lease-time 7200; authoritative; option domain-name "example.com"; option domain-name-servers 192.168.4.1; option routers 192.168.4.1; subnet 192.168.4.0 netmask 255.255.255.0 { use-host-decl-names on; option subnet-mask 255.255.255.0; option broadcast-address 192.168.4.255; host margaux { hardware ethernet 01:23:45:67:89:ab; fixed-address margaux.example.com; next-server 192.168.4.4; filename "/data/misc/kernel.diskless"; option root-path "192.168.4.4:/data/misc/diskless"; } host corbieres { hardware ethernet 00:02:b3:27:62:df; fixed-address corbieres.example.com; next-server 192.168.4.4; filename "pxeboot"; option root-path "192.168.4.4:/data/misc/diskless"; } } Этот параметр указывает dhcpd посылать значения деклараций host как имя хоста для бездисковой машины. Альтернативным способом было бы добавление option host-name margaux внутри объявлений host. Директива next-server определяет сервер TFTP или NFS, используемый для получения загрузчика или файла ядра (по умолчанию используется тот же самый хост, на котором расположен сервер DHCP). Директива filename определяет файл, который Etherboot или PXE будут загружать для следующего шага выполнения. Он должен быть указан в соответствии с используемым методом передачи. Etherboot может быть скомпилирован для использования NFS или TFTP. &os; порт по умолчанию использует NFS. PXE использует TFTP, поэтому здесь применяются относительные пути файлов (это может зависеть от настроек TFTP сервера, но обычно довольно типично). Кроме того, PXE загружает pxeboot, а не ядро. Существуют другие интересные возможности, такие как загрузка pxeboot из каталога /boot &os; CD-ROM (поскольку &man.pxeboot.8; может загружать GENERIC ядро, это делает возможной загрузку с удаленного CD-ROM). Параметр root-path определяет путь к корневой файловой системе, в обычной нотации NFS. При использовании PXE, можно оставить IP хоста отключенным, если параметр ядра BOOTP не используется. Затем NFS сервер может использоваться так же, как и TFTP. Настройка с использованием BOOTP BOOTP бездисковые конфигурации Далее описана эквивалентная конфигурация с использованием bootpd (для одного клиента). Она будет располагаться в /etc/bootptab. Пожалуйста, отметьте, что Etherboot должен быть откомпилирован с нестандартной опцией NO_DHCP_SUPPORT для того, чтобы можно было использовать BOOTP, и что для работы PXE необходим DHCP. Единственным очевидным преимуществом bootpd является его наличие в поставке системы. .def100:\ :hn:ht=1:sa=192.168.4.4:vm=rfc1048:\ :sm=255.255.255.0:\ :ds=192.168.4.1:\ :gw=192.168.4.1:\ :hd="/tftpboot":\ :bf="/kernel.diskless":\ :rp="192.168.4.4:/data/misc/diskless": margaux:ha=0123456789ab:tc=.def100 Подготовка программы загрузки при помощи <application>Etherboot</application> Etherboot Сайт Etherboot содержит подробную документацию, в основном предназначенную для систем Linux, но несомненно, она полезна. Далее будет просто кратко описано, как вы должны использовать Etherboot в системе FreeBSD. Сначала вы должны установить пакет или порт net/etherboot. Вы можете изменить настройку Etherboot (например, для использования TFTP вместо NFS) путем редактирования файла Config в каталоге исходных текстов Etherboot. В нашей ситуации мы будем использовать загрузочную дискету. Для других методов (PROM или программа &ms-dos;) пожалуйста, обратитесь к документации по Etherboot. Для создания загрузочной дискеты, вставьте дискету в дисковод на машине, где установлен Etherboot, затем перейдите в каталог src в дереве Etherboot и наберите: &prompt.root; gmake bin32/devicetype.fd0 devicetype зависит от типа адаптера Ethernet на бездисковой рабочей станции. Обратитесь к файлу NIC в том же самом каталоге для определения правильного значения для devicetype. Загрузка с <acronym>PXE</acronym> По умолчанию, &man.pxeboot.8; загружает ядро через NFS. Он может быть скомпилирован для использования вместо него TFTP путем указания параметра LOADER_TFTP_SUPPORT в /etc/make.conf. Смотрите комментарии в /etc/defaults/make.conf (или /usr/share/examples/etc/make.conf систем 5.X) с инструкциями. Есть два не документированных параметра make.conf, которые могут быть полезны для настройки бездискового компьютера с последовательной консолью: BOOT_PXELDR_PROBE_KEYBOARD, и BOOT_PXELDR_ALWAYS_SERIAL (последняя существует только в &os; 5.X). Для использования PXE при загрузке компьютера вам обычно потребуется выбрать параметр Boot from network (загрузка по сети) в настройках BIOS, или нажать функциональную клавишу во время загрузки PC. Настройка серверов <acronym>TFTP</acronym> и <acronym>NFS</acronym> TFTP бездисковые конфигурации NFS бездисковые конфигурации Если вы используете PXE или Etherboot, настроенные для использования TFTP, вам нужно включить tftpd на файловом сервере: Создайте каталог, файлы которого будет обслуживать tftpd, например, /tftpboot. Добавьте в ваш /etc/inetd.conf такую строчку: tftp dgram udp wait root /usr/libexec/tftpd tftpd -l -s /tftpboot Бывает, что некоторым версиям PXE требуется TCP-вариант TFTP. В таком случае добавьте вторую строчку, заменяющую dgram udp на stream tcp. Укажите inetd на повторное чтение своего конфигурационного файла: &prompt.root; kill -HUP `cat /var/run/inetd.pid` Вы можете поместить каталог tftpboot в любом месте на сервере. Проверьте, что это местоположение указано как в inetd.conf, так и в dhcpd.conf. Во всех случаях, вам также нужно включить NFS и экспортировать соответствующую файловую систему на сервере NFS. Добавьте следующее в /etc/rc.conf: nfs_server_enable="YES" Экспортируйте файловую систему, в которой расположен корневой каталог для бездисковой рабочей станции, добавив следующую строку в /etc/exports (подправьте точку монтирования и замените margaux corbieres именами бездисковых рабочих станций): /data/misc -alldirs -ro margaux corbieres Укажите mountd на повторное чтение настроечного файла. На самом деле если вам потребовалось на первом шаге включить NFS в /etc/rc.conf, то вам нужно будет выполнить перезагрузку. &prompt.root; kill -HUP `cat /var/run/mountd.pid` Построение ядра для бездисковой рабочей станции бездисковые конфигурации настройка ядра При использовании Etherboot, вам потребуется создать конфигурационный файл ядра для бездискового клиента со следующими параметрами (вдобавок к обычным): options BOOTP # Use BOOTP to obtain IP address/hostname options BOOTP_NFSROOT # NFS mount root filesystem using BOOTP info Вам может потребоваться использовать BOOTP_NFSV3, BOOT_COMPAT и BOOTP_WIRED_TO (посмотрите LINT в 4.X или NOTES в 5.X). Эти имена параметров сложились исторически, и могут немного ввести в заблуждение, поскольку включают необязательное использование DHCP и BOOTP в ядре (возможно включение обязательного использования BOOTP или DHCP use). Постройте ядро (обратитесь к ) и скопируйте его в каталог, указанный в dhcpd.conf. При использовании PXE, сборка ядра с вышеприведенными параметрами не является совершенно необходимой (хотя желательна). Включение этих параметров приведет к выполнению большинства DHCP запросов во время загрузки ядра, с небольшим риском несоответствия новых значений и значений, полученных &man.pxeboot.8; в некоторых особых случаях. Преимущество использования в том, что в качестве побочного эффекта будет установлено имя хоста. Иначе вам потребуется установить имя хоста другим методом, например в клиент-специфичном файле rc.conf. Для включения возможности загрузки с Etherboot, в ядро 5.X необходимо включить устройство hints. Вам потребуется установить в файле конфигурации следующий параметр (см. файл комментариев NOTES): hints "GENERIC.hints" Подготовка корневой файловой системы корневая файловая система бездисковые конфигурации Вам нужно создать корневую файловую систему для бездисковых рабочих станций, в местоположении, заданном как root-path в dhcpd.conf. В следующем разделе описаны два способа, чтобы сделать это. Использование скрипта <filename>clone_root</filename> Это самый простой способ создания корневой файловой системы, но на данный момент он не поддерживается в &os; 4.X. Этот shell скрипт находится в /usr/share/examples/diskless/clone_root, и требует настройки, по крайней мере, задания того места, где будет создана файловая система (переменная DEST). Прочтите комментарии в начале скрипта для получения указаний. Там описано, как строится основная файловая система, и как файлы могут быть выборочно заменены версиями, предназначенными для работы без диска, для подсети или для отдельной рабочей станции. Также здесь даются примеры бездисковых файлов /etc/fstab и /etc/rc.conf. Файлы README в /usr/share/examples/diskless много интересной информации, но вместе с другими примерами из каталога diskless они на самом деле описывают метод настройки, который отличается от того, что используется в clone_root и стартовых скриптах системы из /etc, этим несколько запутывая дело. Используйте их только для справки, за исключением того случая, когда вы выберете метод, ими описываемый, и тогда вам нужны исправленные скрипты rc. Использование стандартной процедуры <command>make world</command> Этот метод может быть применен к &os; 4.X или 5.X и установит новую систему (не только корневую) в DESTDIR. Все, что вам потребуется сделать, это просто выполнить следующий скрипт: #!/bin/sh export DESTDIR=/data/misc/diskless mkdir -p ${DESTDIR} cd /usr/src; make world && make kernel cd /usr/src/etc; make distribution Как только это будет сделано, вам может потребоваться настроить /etc/rc.conf и /etc/fstab, помещенные в DESTDIR, в соответствии с вашими потребностями. Настройка области подкачки Если это нужно, то файл подкачки, расположенный на сервере, можно использовать посредством NFS. Один из методов, используемых для этого, не поддерживается в релизах 5.X. Подкачка по <acronym>NFS</acronym> в &os; 4.X Местоположение и размер файла подкачки могут быть указаны &os;-специфичными параметрами BOOTP/DHCP 128 и 129. Примеры файлов настройки для ISC DHCP 3.0 или bootpd приведены ниже: Добавьте следующие строки в dhcpd.conf: # Global section option swap-path code 128 = string; option swap-size code 129 = integer 32; host margaux { ... # Standard lines, see above option swap-path "192.168.4.4:/netswapvolume/netswap"; option swap-size 64000; } swap-path это путь к каталогу, где находятся файлы подкачки. Название каждого файла имеет вид swap.client-ip. Старые версии dhcpd использовали синтаксис option option-128 "..., который больше не поддерживается. Во /etc/bootptab будет использоваться такой синтаксис: T128="192.168.4.4:/netswapvolume/netswap":T129=0000fa00 В файле /etc/bootptab размер файла подкачки должен быть записан в шестнадцатеричном формате. На файловом сервере NFS создайте файл (или файлы) подкачки: &prompt.root; mkdir /netswapvolume/netswap &prompt.root; cd /netswapvolume/netswap &prompt.root; dd if=/dev/zero bs=1024 count=64000 of=swap.192.168.4.6 &prompt.root; chmod 0600 swap.192.168.4.6 192.168.4.6 является IP-адресом бездискового клиента. На файловом сервере NFS, в /etc/exports добавьте такую строку: /netswapvolume -maproot=0:10 -alldirs margaux corbieres Затем укажите mountd на повторное чтение файла exports, как описано ранее. Подкачка по <acronym>NFS</acronym> в &os; 4.X Положение и размер файла подкачки могут быть указаны в &os;-специфичных параметрах BOOTP/DHCP с номерами 128 и 129. Ниже приведены примеры файлов настройки для ISC DHCP 3.0 или bootpd: Добавьте следующие строки к dhcpd.conf: # Global section option swap-path code 128 = string; option swap-size code 129 = integer 32; host margaux { ... # Standard lines, see above option swap-path "192.168.4.4:/netswapvolume/netswap"; option swap-size 64000; } swap-path это путь к каталогу, где расположены файлы подкачки. Файлы называются swap.client-ip. Старые версии dhcpd используют синтаксис option option-128 "..., которые более не поддерживаются. /etc/bootptab вместо этого использует следующий синтаксис: T128="192.168.4.4:/netswapvolume/netswap":T129=0000fa00 В /etc/bootptab, размер подкачки должен вычисляться в шестнадцатеричном формате. Создайте на NFS сервере с файлами подкачки файлы: &prompt.root; mkdir /netswapvolume/netswap &prompt.root; cd /netswapvolume/netswap &prompt.root; dd if=/dev/zero bs=1024 count=64000 of=swap.192.168.4.6 &prompt.root; chmod 0600 swap.192.168.4.6 192.168.4.6 это IP адрес бездискового клиента. На файловом сервере NFS с файлами подкачки добавьте следующую строку к /etc/exports: /netswapvolume -maproot=0:10 -alldirs margaux corbieres Затем заставьте mountd перечитать конфигурационные файлы как было показано выше. Различные проблемы Работа с <filename>/usr</filename>, доступной только для чтения бездисковые конфигурации /usr только для чтения Если бездисковая рабочая станция настроена на запуск X, вам нужно подправить настроечный файл для XDM, который по умолчанию помещает протокол ошибок в /usr. Использование не-FreeBSD сервера Если сервер с корневой файловой системой работает не под управлением FreeBSD, вам потребуется создать корневую файловую систему на машине FreeBSD, а затем скопировать ее в нужно место, при помощи tar или cpio. В такой ситуации иногда возникают проблемы со специальными файлами в /dev из-за различной разрядности целых чисел для старшего/младшего чисел. Решением этой проблемы является экспортирование каталога с не-FreeBSD сервера, монтирование его на машине с FreeBSD и запуск скрипта MAKEDEV на машине с FreeBSD для создания правильных файлов устройств (во FreeBSD 5.0 и более поздних версиях используется &man.devfs.5; для создания файлов устройств прозрачно для пользователя, запуск MAKEDEV в этих версиях бессмысленно). ISDN ISDN Полезным источником информации о технологии ISDN и его аппаратном обеспечении является Страница Дэна Кегела (Dan Kegel) об ISDN. Быстрое введение в ISDN: Если вы живёте в Европе, то вам может понадобиться изучить раздел об ISDN-адаптерах. Если вы планируете использовать ISDN в основном для соединений с Интернет через провайдера по коммутируемому, невыделенному соединению, рекомендуется посмотреть информацию о терминальных адаптерах. Это даст вам самую большую гибкость и наименьшее количество проблем при смене провайдера. Если вы объединяете две локальные сети или подключаетесь к Интернет через постоянное ISDN-соединение, рекомендуем остановить свой выбор на отдельном мосте/маршрутизаторе. Стоимость является важным фактором при выборе вашего решения. Далее перечислены все возможности от самого дешевого до самого дорогого варианта. Hellmuth Michaelis Текст предоставил Адаптеры ISDN ISDN адаптеры Реализация ISDN во FreeBSD поддерживает только стандарт DSS1/Q.931 (или Евро-ISDN) при помощи пассивных адаптеров. Начиная с FreeBSD 4.4 поддерживаются некоторые активные адаптеры, прошивки которых поддерживают также другие сигнальные протоколы; также сюда впервые включена поддержка адаптеров ISDN Primary Rate (PRI). Пакет программ isdn4bsd позволяет вам подключаться к другим маршрутизаторам ISDN при помощи IP поверх DHLC, либо при помощи синхронного PPP; либо при помощи PPP на уровне ядра с isppp, модифицированного драйвера &man.sppp.4;, или при помощи пользовательского &man.ppp.8;. При использовании пользовательского &man.ppp.8; возможно использование двух и большего числа B-каналов ISDN. Также имеется приложение, работающее как автоответчик, и много утилит, таких, как программный модем на 300 Бод. Во FreeBSD поддерживается все возрастающее число адаптеров ISDN для ПК, и сообщения показывают, что они успешно используются по всей Европе и других частях света. Из пассивных адаптеров ISDN поддерживаются в основном те, которые сделаны на основе микросхем Infineon (бывший Siemens) ISAC/HSCX/IPAC ISDN, а также адаптеры ISDN с микросхемами от Cologne Chip (только для шины ISA), адаптеры PCI с микросхемами Winbond W6692, некоторые адаптеры с набором микросхем Tiger300/320/ISAC и несколько адаптеров, построенных на фирменных наборах микросхем, такие, как AVM Fritz!Card PCI V.1.0 и AVM Fritz!Card PnP. На данный момент из активных адаптеров ISDN поддерживаются AVM B1 (ISA и PCI) адаптеры BRI и AVM T1 PCI адаптеры PRI. Документацию по isdn4bsd можно найти в каталоге /usr/share/examples/isdn/ вашей системы FreeBSD или на домашней странице isdn4bsd, на которой также размещены ссылки на советы, замечания по ошибкам и более подробную информацию, например, на руководство по isdn4bsd. Если вы заинтересованы в добавлении поддержки для различных протоколов ISDN, не поддерживаемых на данный момент адаптеров ISDN для PC или каких-то других усовершенствованиях isdn4bsd, пожалуйста, свяжитесь с &a.hm;. Для обсуждения вопросов, связанных с установкой, настройкой и устранением неисправностей isdn4bsd, имеется список рассылки &a.isdn.name;. subscribe freebsd-isdn Терминальные адаптеры ISDN Терминальные адаптеры (TA) для ISDN выполняют ту же роль, что и модемы для обычных телефонных линий. модем Большинство TA используют стандартный набор AT-команд Hayes-модемов, и могут использоваться в качестве простой замены для модемов. TA будут работать точно так же, как и модемы, за исключением скорости соединения и пропускной способности, которые будут гораздо выше, чем у вашего старого модема. Вам потребуется настроить PPP точно также, как и в случае использования модема. Проверьте, что вы задали скорость работы последовательного порта максимально высокой. PPP Главным преимуществом использования TA для подключения к провайдеру Интернет является возможность использования динамического PPP. Так как пространство адресов IP истощается все больше, большинство провайдеров не хочет больше выдавать вам статический IP-адрес. Большинство же маршрутизаторов не может использовать динамическое выделение IP-адресов. TA полностью полагаются на даемон PPP, который используете из-за его возможностей и стабильности соединения. Это позволяет вам при использовании FreeBSD легко заменить модем на ISDN, если у вас уже настроено соединение PPP. Однако, в тоже время любые проблемы, которые возникают с программой PPP, отражаются и здесь. Если вы хотите максимальной надёжности, используйте PPP на уровне параметра ядра, а не пользовательский PPP. Известно, что следующие TA работают с FreeBSD: Motorola BitSurfer и Bitsurfer Pro Adtran Большинство остальных TA, скорее всего, тоже будут работать, производители TA прилагают все усилия для обеспечения поддержки практически всего набора стандартных AT-команд модема. Как и в случае модемов проблемой использования внешнего TA является потребность в хорошем последовательном адаптере на вашем компьютере. Вы должны прочесть учебник Последовательные устройства во FreeBSD для того, чтобы в деталях понять работу последовательных устройств и осознать различие между асинхронными и синхронными последовательными портами. TA, работающий со стандартным последовательным (асинхронным) портом PC, ограничивает вас скоростью 115.2 Кбит/с, хотя реально у вас соединение на скорости 128 Кбит/с. Чтобы использовать 128 Кбит/с, которые обеспечивает ISDN, полностью, вы должны подключить TA к синхронному последовательному адаптеру. Не обманывайте себя, думая, что покупка встроенного TA поможет избежать проблемы синхронности/асинхронности. Встроенные TA просто уже имеют внутри стандартный последовательный порт PC. Все, что при этом достигается - это экономия дополнительных последовательного кабеля и электрической розетки. Синхронный адаптер с TA по крайней мере так же быстр, как и отдельный маршрутизатор, а если он работает под управлением машины класса 386 с FreeBSD, то это гораздо более гибкое решение. Выбор между использованием синхронного адаптера/TA или отдельного маршрутизатора в большей степени является религиозным вопросом. По этому поводу в списках рассылки была некоторая дискуссия. Рекомендуем поискать в архивах обсуждение полностью. Отдельные мосты/маршрутизаторы ISDN ISDN отдельно стоящие мосты/маршрутизаторы Мосты или маршрутизаторы ISDN не так уж специфичны для FreeBSD или для любой другой операционной системы. Для более подробного описания технологий маршрутизации и работы мостов, пожалуйста, обратитесь к справочникам по сетевым технологиям. В контексте этого раздела термины маршрутизатор и сетевой мост будут использоваться как взаимозаменяемые. Вместе с падением цен на простые мосты/маршрутизаторы ISDN, они становятся все более популярными. Маршрутизатор ISDN представляет собой маленькую коробочку, которая подключается непосредственно в вашу сеть Ethernet, и поддерживает связь с другим мостом/маршрутизатором. Всё программное обеспечение для работы по PPP и другим протоколам встроено в маршрутизатор. Маршрутизатор обладает гораздо большей пропускной способностью, чем стандартный TA, так как он использует полное синхронное соединение ISDN. Основной проблемой с маршрутизаторами и мостами ISDN является то, что их совместная работа с оборудованием других производителей может оказаться под вопросом. Если вы собираетесь подключаться к провайдеру, то вы должны обсудить с ним то, что вам нужно. Если вы планируете объединить два сегмента локальной сети, например, домашнюю сеть с сетью офиса, это самое простое решение с минимальными издержками на обслуживание. Так как вы покупаете оборудование для обоих сторон соединения, то можете быть уверены, что связь будет работать нормально. Например, для соединения домашнего компьютера или сети подразделения к сети центрального офиса, может использоваться такая настройка: Офис подразделения или домашняя сеть 10 base 2 Сеть построена в топологии общей шины на основе 10 base 2 Ethernet (thinnet - тонкий Ethernet). Подключите маршрутизатор к сетевому кабелю с помощью трансивера AUI/10BT, если это нужно. ---Рабочая станция Sun | ---Машина с FreeBSD | ---Windows 95 | Отдельный маршрутизатор | Канал ISDN BRI 10 Base 2 Ethernet Если ваш домашний или удаленный офис представляет собой один компьютер, то для непосредственного подключения к маршрутизатору вы вы можете использовать витую пару с перекрестным соединениям. Центральный офис или другая локальная сеть 10 base T Сеть построена в топологии звезды на основе 10 Base T Ethernet (витая пара). -------Сервер Novell | H | | ---Sun | | | U ---FreeBSD | | | ---Windows 95 | B | |___---Отдельно стоящий маршрутизатор | Канал ISDN BRI Схема сети с ISDN Одним большим преимуществом большинства маршрутизаторов/мостов является то, что они позволяют иметь 2 отдельных независимых соединения PPP к 2 различным сайтам одновременно. Это не поддерживается в большинстве TA, кроме специальных (обычно дорогих) моделей, имеющих по два последовательных порта. Не путайте это с балансировкой нагрузки, MPP и так далее. Это может оказаться весьма полезной особенностью, например, если у вас имеется постоянное ISDN-соединение в вашем офисе, и вы хотите им воспользоваться, но не хотите задействовать дополнительный канал ISDN на работе. Маршрутизатор, расположенный в офисе, может использовать выделенное соединение по каналу B (64 Кбит/с) для Интернет, и одновременно другой канал B для отдельного соединения для передачи данных. Второй канал B может использоваться для входящих, исходящих и динамически распределяемых соединений (MPP и так далее) совместно с первым каналом B для повышения пропускной способности. IPX/SPX Мост Ethernet также позволяет вам передавать больше, чем просто трафик IP. Вы сможете передавать IPX/SPX и любые другие протоколы, которые вы используете. Chern Lee Текст предоставил Даемон преобразования сетевых адресов (natd) Обзор natd Даемон преобразования сетевых адресов (Network Address Translation) во FreeBSD, широко известный как &man.natd.8;, является даемоном, который принимает входящие IP-пакеты, изменяет адрес отправителя на адрес локальной машины и повторно отправляет эти пакеты в потоке исходящих пакетов. &man.natd.8; делает это, меняя IP-адрес отправителя и порт таким образом, что когда данные принимаются обратно, он может определить расположение источника начальных данных и переслать их машине, которая запрашивала данные изначально. совместное использование доступа в Интернет сокрытие IP Чаще всего NAT используется для организации так называемого Совместного Использования Интернет. Настройка Из-за исчерпания пространства адресов в IPv4 и увеличения количества пользователей высокоскоростных каналов связи, таких, как кабельное подключение или DSL, необходимость в решении по Совместному Использованию Интернет растёт. Возможность подключить несколько компьютеров через единственное соединение и IP-адрес делает &man.natd.8; подходящим решением. Чаще всего у пользователя имеется машина, подключенная к кабельному каналу или каналу DSL с одним IP-адресом и есть желание использовать этот единственный подключенный компьютер для организации доступа в Интернет другим компьютерам в локальной сети. Для этого машина FreeBSD, находящаяся в Интернет, должна выступать в роли шлюза. Эта шлюзовая машина должна иметь два сетевых адаптера—один для подключения к маршрутизатору Интернет, а другой для подключения к ЛВС. Все машины в локальной сети подключаются через сетевой концентратор или коммутатор. _______ __________ ________ | | | | | | | Hub |-----| Client B |-----| Router |----- Internet |_______| |__________| |________| | ____|_____ | | | Client A | |__________| Структура сети Подобная конфигурация часто используется для совместного использования доступа в Интернет. Одна из подключенных к локальной сети машин подключается к Интернет. Остальные машины работают с Интернет посредством этой шлюзовой машины. ядро настройка Настройка В файле конфигурации ядра должны присутствовать следующие параметры: options IPFIREWALL options IPDIVERT Дополнительно, если это нужно, можно добавить следующее: options IPFIREWALL_DEFAULT_TO_ACCEPT options IPFIREWALL_VERBOSE В файле /etc/rc.conf должны быть такие строки: gateway_enable="YES" firewall_enable="YES" firewall_type="OPEN" natd_enable="YES" natd_interface="fxp0" natd_flags="" Указывает машине выступать в качестве шлюза. Выполнение команды sysctl net.inet.ip.forwarding=1 приведёт к тому же самому результату. - При загрузке включает использование правил межсетевого - экрана из файла /etc/rc.firewall. + При загрузке включает использование правил брандмауэра + из файла /etc/rc.firewall. - Здесь задается предопределенный набор правил межсетевого - экрана, который разрешает все. Посмотрите файл + Здесь задается предопределенный набор правил брандмауэра, + который разрешает все. Посмотрите файл /etc/rc.firewall для нахождения дополнительных типов. Указывает, через какой интерфейс передавать пакеты (интерфейс, подключенный к Интернет). Любые дополнительный параметры, передаваемые при запуске даемону &man.natd.8;. При использовании вышеуказанных параметров в файле /etc/rc.conf при загрузке будет запущена команда natd -interface fxp0. Эту команду можно запустить и вручную. Если для передачи &man.natd.8; набирается слишком много параметров, возможно также использовать конфигурационный файл. В этом случае имя настроечного файла должно быть задано добавлением следующей строки в /etc/rc.conf: natd_flags="-f /etc/natd.conf" Файл /etc/natd.conf будет содержать перечень конфигурационных параметров, по одному в строке. К примеру, для примера из следующего раздела будет использоваться такой файл: redirect_port tcp 192.168.0.2:6667 6667 redirect_port tcp 192.168.0.3:80 80 Для получения более полной информации о конфигурационном файле прочтите страницу справки по &man.natd.8; относительно параметра . Каждой машине и интерфейсу в ЛВС должен быть назначен IP-адрес из адресного пространства частных сетей, как это определено в RFC 1918, а в качестве маршрутизатора по умолчанию должен быть задан IP-адрес машины с natd из внутренней сети. Например, клиенты A и B в ЛВС имеют IP-адреса 192.168.0.2 и 192.168.0.3, а интерфейс машины с natd в локальной сети имеет IP-адрес 192.168.0.1. Маршрутизатором по умолчанию для клиентов A и B должна быть назначена машина с natd, то есть 192.168.0.1. Внешний, или Интернет-интерфейс машины с natd не требует особых настроек для работы &man.natd.8;. Перенаправление портов Минусом использования &man.natd.8; является то, что машины в локальной сети недоступны из Интернет. Клиенты в ЛВС могут выполнять исходящие соединения во внешний мир, но не могут обслуживать входящие. Это является проблемой при запуске служб Интернет на клиентских машинах в локальной сети. Простым решением является перенаправление некоторых портов Интернет машины с natd на клиента локальной сети. Пусть, к примеру, сервер IRC запущен на клиенте A, а веб-сервер работает на клиенте B. Чтобы это работало, соединения, принимаемые на портах 6667 (IRC) и 80 (веб), должны перенаправляться на соответствующие машины. Программе &man.natd.8; должна быть передана команда с соответствующими параметрами. Синтаксис следующий: -redirect_port proto targetIP:targetPORT[-targetPORT] [aliasIP:]aliasPORT[-aliasPORT] [remoteIP[:remotePORT[-remotePORT]]] В примере выше аргументы должен быть такими: -redirect_port tcp 192.168.0.2:6667 6667 -redirect_port tcp 192.168.0.3:80 80 При этом будут перенаправлены соответствующие порты tcp на клиентские машины в локальной сети. Аргумент может использоваться для указания диапазонов портов, а не конкретного порта. Например, tcp 192.168.0.2:2000-3000 2000-3000 будет перенаправлять все соединения, принимаемые на портах от 2000 до 3000, на порты от 2000 до 3000 клиента A. Эти параметры можно указать при непосредственном запуске &man.natd.8;, поместить их в параметр natd_flags="" файла /etc/rc.conf, либо передать через конфигурационный файл. Для получение информации о других параметрах настройки обратитесь к справочной странице по &man.natd.8; Перенаправление адреса перенаправление адреса Перенаправление адреса полезно, если имеется несколько адресов IP, и они должны быть на одной машине. В этой ситуации &man.natd.8; может назначить каждому клиенту ЛВС свой собственный внешний IP-адрес. Затем &man.natd.8; преобразует исходящие от клиентов локальной сети пакеты, заменяя IP-адреса на соответствующие внешние, и перенаправляет весь трафик, входящий на некоторый IP-адрес, обратно конкретному клиенту локальной сети. Это также называют статическим NAT. К примеру, пусть IP-адреса 128.1.1.1, 128.1.1.2 и 128.1.1.3 принадлежат шлюзовой машине natd. 128.1.1.1 может использоваться в качестве внешнего IP-адреса шлюзовой машины natd, тогда как 128.1.1.2 и 128.1.1.3 будут перенаправляться обратно к клиентам ЛВС A и B. Синтаксис для таков: -redirect_address localIP publicIP localIP Внутренний IP-адрес клиента локальной сети. publicIP Внешний IP, соответствующий клиенту локальной сети. В примере этот аргумент будет выглядеть так: -redirect_address 192.168.0.2 128.1.1.2 -redirect_address 192.168.0.3 128.1.1.3 Как и для , эти аргументы также помещаются в строку natd_flags="" файла /etc/rc.conf или передаются через конфигурационный файл. При перенаправлении адресов нет нужды в перенаправлении портов, потому что перенаправляются все данные, принимаемые для конкретного IP-адреса. Внешние IP-адреса машины с natd должны быть активизированы и являться синонимами для внешнего интерфейса. Обратитесь к &man.rc.conf.5;, чтобы это сделать. IP по параллельному порту (PLIP) PLIP IP по параллельному порту PLIP позволяет нам работать с TCP/IP по параллельному порту. Это полезно для машин без сетевых адаптеров или для установки на лаптопы. В этом разделе мы обсудим: создание кабеля для параллельного порта (laplink). Соединение двух компьютеров посредством PLIP. Создание параллельного кабеля Вы можете приобрести кабель для параллельного порта в большинстве магазинов, торгующих комплектующими. Если вы его не найдете, или же просто хотите знать, как он делается, то следующая таблица поможет вам сделать такой кабель из обычного принтерного кабеля для параллельного порта. Распайка кабеля для параллельного порта для сетевой работы A-name A-End B-End Описание Post/Bit DATA0 -ERROR 2 15 15 2 Data 0/0x01 1/0x08 DATA1 +SLCT 3 13 13 3 Data 0/0x02 1/0x10 DATA2 +PE 4 12 12 4 Data 0/0x04 1/0x20 DATA3 -ACK 5 10 10 5 Strobe 0/0x08 1/0x40 DATA4 BUSY 6 11 11 6 Data 0/0x10 1/0x80 GND 18-25 18-25 GND -
Настройка PLIP Прежде всего вы должны найти laplink-кабель. Затем удостоверьтесь, что на обоих компьютерах в ядро включена поддержка драйвера &man.lpt.4;: &prompt.root; grep lp /var/run/dmesg.boot lpt0: <Printer> on ppbus0 lpt0: Interrupt-driven port Управление параллельным портом должно выполняться по прерываниям. Во &os; 4.X в файле конфигурации ядра должна присутствовать строка, подобная следующей: device ppc0 at isa? irq 7 Во &os; 5.X файл /boot/device.hints должен содержать следующие строки: hint.ppc.0.at="isa" hint.ppc.0.irq="7" Затем проверьте, что файл конфигурации ядра имеет строку device plip, или загружен ли модуль ядра plip.ko. В обоих случаях интерфейс работы с сетью по параллельному порту должен присутствовать на момент прямого использования команды &man.ifconfig.8;. Во &os; 4.X это должно быть примерно так: &prompt.root; ifconfig lp0 lp0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500 а для &os; 5.X: &prompt.root; ifconfig plip0 plip0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500 Имя устройства, используемого для параллельного интерфейса, во &os; 4.X (lpX) и &os; 5.X (plipX). Подключите кабель laplink к параллельным интерфейсам на обоих компьютерах. Настройте параметры сетевого интерфейса с обеих сторон, работая как пользователь root. К примеру, если вы хотите соединить хост host1, на котором работает &os; 4.X, с хостом host2 под управлением &os; 5.X: host1 <-----> host2 IP Address 10.0.0.1 10.0.0.2 Настройте интерфейс на машине host1, выполнив: &prompt.root; ifconfig plip0 10.0.0.1 10.0.0.2 Настройте интерфейс на машине host2, выполнив: &prompt.root; ifconfig lp0 10.0.0.2 10.0.0.1 Теперь вы должны получить работающее соединение. Пожалуйста, прочтите страницы руководства по &man.lp.4; и &man.lpt.4; для выяснения деталей. Вы должны также добавить оба хоста в /etc/hosts: 127.0.0.1 localhost.my.domain localhost 10.0.0.1 host1.my.domain host1 10.0.0.2 host2.my.domain Чтобы проверить работу соединения, перейдите к каждому хосту и выполните тестирование соединения с другой машиной посредством команды ping. К примеру, на машине host1: &prompt.root; ifconfig lp0 lp0: flags=8851<UP,POINTOPOINT,RUNNING,SIMPLEX,MULTICAST> mtu 1500 inet 10.0.0.1 --> 10.0.0.2 netmask 0xff000000 &prompt.root; netstat -r Routing tables Internet: Destination Gateway Flags Refs Use Netif Expire host2 host1 UH 0 0 lp0 &prompt.root; ping -c 4 host2 PING host2 (10.0.0.2): 56 data bytes 64 bytes from 10.0.0.2: icmp_seq=0 ttl=255 time=2.774 ms 64 bytes from 10.0.0.2: icmp_seq=1 ttl=255 time=2.530 ms 64 bytes from 10.0.0.2: icmp_seq=2 ttl=255 time=2.556 ms 64 bytes from 10.0.0.2: icmp_seq=3 ttl=255 time=2.714 ms --- host2 ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max/stddev = 2.530/2.643/2.774/0.103 ms
Aaron Kaplan Первоначальный текст написал Tom Rhodes Реструктуризацию и добавления внёс Brad Davis Расширил IPv6 IPv6 (также называемый IPng IP next generation - следующее поколение IP) является новой версией широко известного протокола IP (называемого также IPv4). Как и другие современные системы *BSD, FreeBSD включает эталонную реализацию IPv6 от KAME. Так что система FreeBSD поставляется со всем, что вам нужно для экспериментирования с IPv6. Этот раздел посвящён настройке и запуску в работу IPv6. В начале 1990-х люди стали беспокоиться о быстро иссякающем адресном пространстве IPv4. Принимая во внимание темпы роста Интернет, имелись основные проблемы: Нехватка адресов. Сегодня это не такая большая проблема, так как стали применяться адресные пространства для частных сетей (10.0.0.0/8, 192.168.0.0/24 и так далее) и технология преобразования сетевых адресов (NAT - Network Address Translation). Таблицы маршрутов становятся чересчур большими. Это всё ещё является проблемой сегодня. IPv6 решает эти и многие другие вопросы: 128-битное адресное пространство. Другими словами, теоретически доступны 340,282,366,920,938,463,463,374,607,431,768,211,456 адреса. Это означает плотность примерно в 6.67 * 10^27 адресов IPv6 на квадратный метр нашей планеты. Маршрутизаторы будут хранить в своих таблицах только агрегированные адреса сетей, что уменьшает средний размер таблицы маршрутизации до 8192 записей. Имеется также множество других полезных особенностей IPv6, таких, как: Автоматическая настройка адреса (RFC2462) Групповые адреса (один к нескольким из многих) Обязательные адреса множественной рассылки IPsec (IP security - безопасный IP) Упрощённая структура заголовка Мобильный IP Механизмы преобразования IPv6-в-IPv4 Для получения дополнительной информации посмотрите: Обзор IPv6 на сайте playground.sun.com KAME.net 6bone.net Основы адресации IPv6 Существуют различные типы адресов IPv6: одноадресные (Unicast), групповые (Anycast) и многоадресные (Multicast). Адреса типа Unicast хорошо всем известны. Пакет, посланный на такой адрес, достигает в точности интерфейса, который этому адресу соответствует. Адреса типа Anycast синтаксически неотличимы от адресов Unicast, но они адресуют группу интерфейсов. Пакет, направленный такому адресу, попадёт в ближайший (согласно метрике маршрутизатора) интерфейс. Адреса Anycast могут использоваться только маршрутизаторами. Адреса типа Multicast идентифицируют группу интерфейсов. Пакет, посланный на такой адрес, достигнет всех интерфейсов, привязанных к группе многоадресного вещания. Широковещательные адреса IPv4 (обычно xxx.xxx.xxx.255) выражаются адресами многоадресного вещания IPv6. Зарезервированные адреса IPv6 IPv6 адрес Длина префикса (биты) Описание Заметки :: 128 бит нет описания cf. 0.0.0.0 в IPv4 ::1 128 бит loopback адрес cf. 127.0.0.1 в IPv4 ::00:xx:xx:xx:xx 96 бит встроенный IPv4 Нижние 32 бита это адрес IPv4. Также называется IPv4 совместимым IPv6 адресом ::ff:xx:xx:xx:xx 96 бит Адрес IPv6, отображенный на IPv4 Нижние 32 бита это адрес IPv4. Для хостов, не поддерживающих IPv6. fe80:: - feb:: 10 бит link-local cf. loopback адрес в IPv4 fec0:: - fef:: 10 бит site-local   ff:: 8 бит широковещательный   001 (основание 2) 3 бит global unicast Все global unicast адреса присваиваются из этого пула. Первые три бита 001.
Чтение адресов IPv6 Каноническая форма представляется в виде x:x:x:x:x:x:x:x, где каждый символ x является 16-битовым шестнадцатиричным числом. К примеру, FEBC:A574:382B:23C1:AA49:4592:4EFE:9982 Часто в адресе присутствуют длинные строчки, заполненные нулями, поэтому одна такая последовательность на адрес может быть сокращена до ::. Кроме того, до трех ведущих 0 на шестнадцатеричную четверку могут быть пропущены. К примеру, fe80::1 соответствует канонической форме fe80:0000:0000:0000:0000:0000:0000:0001. В третьей форме последние 32 бита записываются в широко известном (десятичном) стиле IPv4 с точками . в качестве разделителей. Например, f2002::10.0.0.1 соответствует (шестнадцатеричному) каноническому представлению 2002:0000:0000:0000:0000:0000:0a00:0001, которое, в свою очередь, равнозначно записи 2002::a00:1. Теперь читатель должен понять следующую запись: &prompt.root; ifconfig rl0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500 inet 10.0.0.10 netmask 0xffffff00 broadcast 10.0.0.255 inet6 fe80::200:21ff:fe03:8e1%rl0 prefixlen 64 scopeid 0x1 ether 00:00:21:03:08:e1 media: Ethernet autoselect (100baseTX ) status: active fe80::200:21ff:fe03:8e1%rl0 является автоматически настроенным локальным адресом. Он генерируется из MAC адреса в процессе автоматической конфигурации. Для получения дополнительной информации о структуре адресов IPv6 обратитесь к RFC3513. Настройка подключения На данный момент существуют четыре способа подключиться к другим хостам и сетям IPv6: Подключиться к экспериментальному 6bone Получить сеть IPv6 от вышестоящего провайдера. Для получения рекомендаций обратитесь к вашему провайдеру Интернет. Туннелировать посредством 6-в-4 (RFC3068) Использовать порт net/freenet6, если вы используете коммутируемое соединение. Здесь мы будем рассматривать подключение к 6bone, так как на данный момент это является самым популярным способом. Сначала взгляните на сайт 6bone и найдите ближайшую к вам точку подключения к 6bone. Напишите ответственному и при некоторой удаче вам дадут инструкции по настройке соединения. Обычно это касается настройки туннеля GRE (gif). Вот типичный пример настройки туннеля &man.gif.4;: &prompt.root; ifconfig gif0 create &prompt.root; ifconfig gif0 gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280 &prompt.root; ifconfig gif0 tunnel MY_IPv4_ADDR HIS_IPv4_ADDR &prompt.root; ifconfig gif0 inet6 alias MY_ASSIGNED_IPv6_TUNNEL_ENDPOINT_ADDR Замените слова, написанные заглавными буквами, информацией, которую вам дал вышестоящий узел 6bone. При этом установится туннель. Проверьте работу туннеля утилитой &man.ping6.8; с адресом ff02::1%gif0. Вы должны получить два положительных ответа. Если вы заинтригованы адресом ff02:1%gif0, скажем, что это адрес многоадресного вещания. %gif0 указывает на использование такого адреса с сетевым интерфейсом gif0. Так как мы выполняем ping над адресом многоадресного вещания, то другая сторона туннеля также должна ответить. Теперь настройка маршрута к вашей вышестоящей точке подключения 6bone должна быть весьма проста: &prompt.root; route add -inet6 default -interface gif0 &prompt.root; ping6 -n MY_UPLINK &prompt.root; traceroute6 www.jp.FreeBSD.org (3ffe:505:2008:1:2a0:24ff:fe57:e561) from 3ffe:8060:100::40:2, 30 hops max, 12 byte packets 1 atnet-meta6 14.147 ms 15.499 ms 24.319 ms 2 6bone-gw2-ATNET-NT.ipv6.tilab.com 103.408 ms 95.072 ms * 3 3ffe:1831:0:ffff::4 138.645 ms 134.437 ms 144.257 ms 4 3ffe:1810:0:6:290:27ff:fe79:7677 282.975 ms 278.666 ms 292.811 ms 5 3ffe:1800:0:ff00::4 400.131 ms 396.324 ms 394.769 ms 6 3ffe:1800:0:3:290:27ff:fe14:cdee 394.712 ms 397.19 ms 394.102 ms Эта выдача будет отличаться от машины к машине. Теперь вы должны суметь достигнуть сайта IPv6 www.kame.net и увидеть танцующую черепаху — в случае, если ваш браузер поддерживает IPv6, как, например, www/mozilla или Konqueror, который входит в x11/kdebase3, или www/epiphany. DNS в мире IPv6 Для IPv6 использовались два типа записей DNS. IETF объявил записи A6 устаревшими. Стандартом на данный момент являются записи AAAA. Использование записей AAAA достаточно просто. Назначение вашему имени хоста нового адреса IPv6 достигается просто добавлением: MYHOSTNAME AAAA MYIPv6ADDR к вашему первичному файлу DNS зоны. В случае, если вы не обслуживаете собственные зоны DNS, обратитесь к вашему провайдеру DNS. Имеющиеся версии bind (версий 8.3 и 9) и dns/djbdns (с патчем IPv6) поддерживают записи AAAA. Внесение необходимых изменений в <filename>/etc/rc.conf</filename> Настройки клиентов IPv6 Эти установки помогут вам настроить компьютер, который будет работать в сети как клиент, а не как маршрутизатор. Для включения настройки интерфейсов через &man.rtsol.8; при загрузке, все, что вам потребуется, это добавить следующую строку: ipv6_enable="YES" Для статического присвоения IP адреса, такого как 2001:471:1f11:251:290:27ff:fee0:2093, интерфейсу fxp0, добавьте: ipv6_ifconfig_fxp0="2001:471:1f11:251:290:27ff:fee0:2093" Для назначения маршрутизатором по умолчанию 2001:471:1f11:251::1, добавьте следующую строку к /etc/rc.conf: ipv6_defaultrouter="2001:471:1f11:251::1" Настройки маршрутизатора/шлюза IPv6 Этот раздел поможет вам использовать инструкции, которые выдал провайдер туннеля, например, 6bone, и сделать эти настройки постоянными. Для восстановления туннеля при загрузке системы используйте в /etc/rc.conf нижеприведенные настройки. Задайте список туннельных интерфейсов (Generic Tunneling interfaces), которые необходимо настроить, например gif0: gif_interfaces="gif0" Для настройки интерфейса с локальным подключением на MY_IPv4_ADDR к удаленной точке REMOTE_IPv4_ADDR: gifconfig_gif0="MY_IPv4_ADDR REMOTE_IPv4_ADDR" Для включения IPv6 адреса, который был вам присвоен для использования в подключении к туннелю IPv6, добавьте: ipv6_ifconfig_gif0="MY_ASSIGNED_IPv6_TUNNEL_ENDPOINT_ADDR" Затем все, что вам потребуется сделать, это добавить маршрут по умолчанию для IPv6. Это другая сторона туннеля IPv6: ipv6_defaultrouter="MY_IPv6_REMOTE_TUNNEL_ENDPOINT_ADDR" Распространение маршрутов и автоматическая настройка хостов Этот раздел поможет вам настроить &man.rtadvd.8; для распространения маршрута IPv6 по умолчанию. Для включения &man.rtadvd.8; вам понадобится добавить в /etc/rc.conf следующую строку: rtadvd_enable="YES" Важно указать интерфейс, на котором выполняется запрос маршрутизатора IPv6. Например, для указания &man.rtadvd.8; использовать fxp0: rtadvd_interfaces="fxp0" Теперь мы должны создать файл настройки, /etc/rtadvd.conf. Вот пример: fxp0:\ :addrs#1:addr="2001:471:1f11:246::":prefixlen#64:tc=ether: Замените fxp0 на интерфейс, который вы будете использовать. Затем, замените 2001:471:1f11:246:: на префикс вашего размещения. Если у вас выделенная подсеть /64, больше ничего менять не потребуется. Иначе, вам потребуется изменить prefixlen# на корректное значение.
Harti Brandt Предоставил Асинхронный режим передачи (ATM) в &os; 5.X Классическая настройка IP через ATM (PVC) Классический IP через ATM (CLIP) это простейший метод использования асинхронного режима передачи (Asynchronous Transfer Mode, ATM) с IP. Он может быть использован с коммутируемыми подключениями (switched connections, SVC) и с постоянными подключениями (permanent connections, PVC). В этом разделе будет описано как настроить сеть на основе PVC. Полностью объединенные конфигурации Первый метод для настройки CLIP с PVC это подключение каждого компьютера к каждому в сети с выделенным PVC. Хотя настройка проста, она непрактична для большого количества компьютеров. В примере предполагается, что в сети есть четыре компьютера, каждый подключенный к ATM сети с помощью карты ATM адаптера. Первый шаг это планирование IP адресов и ATM подключений между компьютерами. Мы используем: Хост IP адрес hostA 192.168.173.1 hostB 192.168.173.2 hostC 192.168.173.3 hostD 192.168.173.4 Для сборки полностью объединенной сети нам потребуется по одному ATM соединению между каждой парой компьютеров: Компьютеры VPI.VCI соединение hostA - hostB 0.100 hostA - hostC 0.101 hostA - hostD 0.102 hostB - hostC 0.103 hostB - hostD 0.104 hostC - hostD 0.105 Значения VPI и VCI на каждом конце соединения конечно могут отличаться, но для упрощения мы предполагаем, что они одинаковы. Затем нам потребуется настроить ATM интерфейсы на каждом хосте: hostA&prompt.root; ifconfig hatm0 192.168.173.1 up hostB&prompt.root; ifconfig hatm0 192.168.173.2 up hostC&prompt.root; ifconfig hatm0 192.168.173.3 up hostD&prompt.root; ifconfig hatm0 192.168.173.4 up предполагая, что ATM интерфейс называется hatm0 на всех хостах. Теперь PVC необходимо настроить на hostA (мы предполагаем, что ATM коммутаторы уже настроены, вам необходимо свериться с руководством на коммутатор за информацией по настройке). hostA&prompt.root; atmconfig natm add 192.168.173.2 hatm0 0 100 llc/snap ubr hostA&prompt.root; atmconfig natm add 192.168.173.3 hatm0 0 101 llc/snap ubr hostA&prompt.root; atmconfig natm add 192.168.173.4 hatm0 0 102 llc/snap ubr hostB&prompt.root; atmconfig natm add 192.168.173.1 hatm0 0 100 llc/snap ubr hostB&prompt.root; atmconfig natm add 192.168.173.3 hatm0 0 103 llc/snap ubr hostB&prompt.root; atmconfig natm add 192.168.173.4 hatm0 0 104 llc/snap ubr hostC&prompt.root; atmconfig natm add 192.168.173.1 hatm0 0 101 llc/snap ubr hostC&prompt.root; atmconfig natm add 192.168.173.2 hatm0 0 103 llc/snap ubr hostC&prompt.root; atmconfig natm add 192.168.173.4 hatm0 0 105 llc/snap ubr hostD&prompt.root; atmconfig natm add 192.168.173.1 hatm0 0 102 llc/snap ubr hostD&prompt.root; atmconfig natm add 192.168.173.2 hatm0 0 104 llc/snap ubr hostD&prompt.root; atmconfig natm add 192.168.173.3 hatm0 0 105 llc/snap ubr Конечно, вместо UBR может быть использован другой тип, если ATM адаптер поддерживает это. В этом случае имя типа дополняется параметрами трафика. Помощь по &man.atmconfig.8; может быть получена командой: &prompt.root; atmconfig help natm add или на странице справочника &man.atmconfig.8;. Та же настройка может быть выполнена через /etc/rc.conf. Для hostA это будет выглядеть примерно так: network_interfaces="lo0 hatm0" ifconfig_hatm0="inet 192.168.173.1 up" natm_static_routes="hostB hostC hostD" route_hostB="192.168.173.2 hatm0 0 100 llc/snap ubr" route_hostC="192.168.173.3 hatm0 0 101 llc/snap ubr" route_hostD="192.168.173.4 hatm0 0 102 llc/snap ubr" Текущий статус всех маршрутов CLIP может быть получен командой: hostA&prompt.root; atmconfig natm show
diff --git a/ru_RU.KOI8-R/books/handbook/config/chapter.sgml b/ru_RU.KOI8-R/books/handbook/config/chapter.sgml index d1c37b60ed..ba53e89808 100644 --- a/ru_RU.KOI8-R/books/handbook/config/chapter.sgml +++ b/ru_RU.KOI8-R/books/handbook/config/chapter.sgml @@ -1,3006 +1,3006 @@ Chern Lee Написал Mike Smith Основывается на учебнике, написанном Matt Dillon и на tuning(7), написанном Андрей Мельник Перевод на русский язык: Денис Пеплин Валерий Кравчук Настройка и оптимизация Введение настройка системы оптимизация системы Один из важных аспектов &os; это настройка системы. Правильная настройка системы поможет избежать головной боли при последующих обновлениях. Эта глава описывает большую часть процесса настройки &os;, включая некоторые параметры, которые можно установить для оптимизации системы &os;. После прочтения этой главы вы узнаете: Как эффективно работать с файловыми системами и разделами подкачки. Основы настройки rc.conf и системы запуска приложений /usr/local/etc/rc.d. Как настроить и протестировать сетевую карту. Как настроить виртуальные хосты на сетевых устройствах. Как использовать различные файлы конфигурации в /etc. Как оптимизировать &os;, используя переменные sysctl. Как увеличить скорость работы дисков и изменить ограничения, накладываемые ядром. Перед прочтением этой главы вам следует: Понять основы &unix; и &os; (). Ознакомиться с основами конфигурации/компиляции ядра (). Начальное конфигурирование Разделы диска разделы диска /etc /var /usr Основы построения разделов Во время разметки жёсткого диска с помощью &man.disklabel.8; или &man.sysinstall.8;, важно помнить, что скорость чтения и записи данных уменьшается от внешних к внутренним трекам диска. Самые маленькие и самые часто используемые файловые системы (корневую и раздел подкачки) должны быть расположены в начале диска, в то время как самые большие, такие, как /usr, в конце. Самым оптимальным считается следующий порядок расположения файловых систем: root, swap, /var, /usr. Размер файловой системы /var определяется предназначением машины. /var используется для хранения почтовых ящиков, очередей печати и лог файлов. Размер почтовых ящиков и лог файлов может расти неограниченно в зависимости от количества пользователей системы и от того, как долго хранятся лог-файлы. Большинству пользователей никогда не потребуется гигабайт, но помните, что /var/tmp должен быть достаточно большим для пакетов. В разделе /usr содержит большинство файлов, необходимых для поддержки системы, &man.ports.7; (порты, рекомендуется) и исходные тексты (опционально). Оба эти каталога опциональны при установке. Для этого раздела рекомендуется как минимум 2 гигабайта. При установке размера разделов, не забудьте принять во внимание рост размера требуемого системе дискового пространства. Переполнение одного раздела даже при наличии свободного места на другом может вызвать затруднения. Многие пользователи обнаружили, что размер разделов, предлагаемый &man.sysinstall.8;'ом по умолчанию, иногда меньше подходящего для разделов /var и /. Тщательно планируйте размер разделов и не жалейте места. Раздел подкачки размер раздела подкачки раздел подкачки Как правило, размер раздела подкачки должен быть равен удвоенному размеру оперативной памяти. Например, если на машине установлено 128 мегабайт памяти, раздел подкачки должен быть 256 мегабайт. Системы с меньшим количеством памяти могут работать лучше с большим объёмом раздела подкачки. Не рекомендуется устанавливать размер раздела подкачки меньше 256 мегабайт, необходимо также принять во внимание возможное наращивание объема установленной на машине памяти. Алгоритмы кэширования VM настроены на максимальное быстродействие, когда размер раздела подкачки равен как минимум удвоенному размеру памяти. Заниженный размер раздела подкачки может привести к неэффективной работе постраничного сканирования VM и вызвать проблемы при увеличении объёма памяти. На больших системах с несколькими SCSI дисками (или несколькими IDE дисками, находящимися на разных контроллерах), рекомендуется создавать раздел подкачки на каждом диске (до четырёх дисков). Разделы подкачки должны быть примерно одного размера. Ядро не накладывает ограничений на размер раздела подкачки, но внутренние структуры позволяют иметь общий размер разделов подкачки, равный наибольшему, умноженному на четыре. Выделение под разделы подкачки примерно одинакового места позволить ядру оптимально расположить разделы подкачки. Установка размера подкачки больше требуемого нормальна, даже если этот объем не используется. В этих условиях может быть проще восстановиться после зависания программы перед тем, как возникнет необходимость перезагрузки. Зачем нужны разделы? Некоторые пользователи считают, что лучше использовать один большой раздел, но есть несколько причин, по которым этого лучше не делать. Во-первых, у каждого раздела свои характеристики, и отделяя их, можно выполнить соответствующие настройки. Например, корневая и файловая система и /usr в основном предназначены для чтения, без большого объема записи. В то же время множество операций чтения и записи выполняется в /var и /var/tmp. При правильном размещении и выборе размера разделов системы, фрагментация в более маленьких разделах, куда часто записываются данные, не перенесётся на остальные разделы. Размещение самых часто используемых разделов ближе к началу диска увеличит скорость ввода/вывода там, где она нужна больше всего. Хотя производительность важна и для больших дисков, передвижение их ближе к концу диска не повлечёт значительного уменьшения быстродействия по сравнению с перемещением ближе к концу диска /var. И, наконец, разделы существуют и из соображений безопасности. Наличие маленького аккуратного корневого раздела, доступного только для чтения даёт значительные шансы на "выживание" после краха системы. Основные настройки rc файлы rc.conf Основные настройки системы располагаются в /etc/rc.conf. Этот файл вмещает широкий спектр конфигурационной информации, используемой при загрузке системы. Имя этого файла прямо отражает его назначение, это файл настройки для файлов rc*. Администратор должен сделать записи в rc.conf чтобы переопределить строки по умолчанию из /etc/defaults/rc.conf. Файлы по умолчанию нельзя копировать в /etc - они вмещают значения по умолчанию, а не примеры значений. Все специфичные для данной системы изменения должны быть сделаны в файле rc.conf. Существует несколько методов для отделения общей конфигурации для группы систем от конкретной для данной системы в целях уменьшения объема работы администратора. Рекомендуемый метод - прописать общую конфигурацию в отдельный файл, например, в /etc/rc.conf.site, и включить его название в /etc/rc.conf, который вмещает только специфичную для данной системы информацию. Поскольку rc.conf читается &man.sh.1;, есть тривиальный способ сделать это. Например: rc.conf: . rc.conf.site hostname="node15.example.com" network_interfaces="fxp0 lo0" ifconfig_fxp0="inet 10.1.1.1" rc.conf.site: defaultrouter="10.1.1.254" saver="daemon" blanktime="100" Файл rc.conf.site может быть распространён на все системы, используя rsync или подобную ей программу, в то время, как rc.conf должен остаться только на одной машине. Обновление системы с помощью &man.sysinstall.8; или make world не повлекут за собой перезапись rc.conf. Вся информация в этом файле сохранится. Настройка приложений Обычно, установленные приложения имеют свои конфигурационные файлы, со своим собственным синтаксисом. Важно хранить эти файлы отдельно от файлов основной системы, чтобы их можно было легко администрировать с помощью средств управления пакетами. /usr/local/etc Обычно эти файлы устанавливаются в /usr/local/etc. В случае, если приложению нужно большое количество конфигурационных файлов, для их хранения будет создан подкаталог. Обычно, вместе с установкой портов и пакетов, устанавливаются и примеры конфигурационных файлов. Обычно они имеют расширение .default. Если не существует конфигурационных файлов для этого приложения, они будут созданы путём копирования .default файлов. Например, /usr/local/etc/apache: -rw-r--r-- 1 root wheel 2184 May 20 1998 access.conf -rw-r--r-- 1 root wheel 2184 May 20 1998 access.conf.default -rw-r--r-- 1 root wheel 9555 May 20 1998 httpd.conf -rw-r--r-- 1 root wheel 9555 May 20 1998 httpd.conf.default -rw-r--r-- 1 root wheel 12205 May 20 1998 magic -rw-r--r-- 1 root wheel 12205 May 20 1998 magic.default -rw-r--r-- 1 root wheel 2700 May 20 1998 mime.types -rw-r--r-- 1 root wheel 2700 May 20 1998 mime.types.default -rw-r--r-- 1 root wheel 7980 May 20 1998 srm.conf -rw-r--r-- 1 root wheel 7933 May 20 1998 srm.conf.default Размеры файлов показывают, что только файл srm.conf был изменён. При следующем обновлении Apache этот файл уже не будет перезаписан. Tom Rhodes Предоставил Запуск сервисов сервисы Многие пользователи предпочитают устанавливать программы сторонних производителей в &os; из набора портов. В подобных случаях может потребоваться сконфигурировать программы так, чтобы они запускались при инициализации системы. Сервисы, такие как mail/postfix или www/apache13, — это лишь два примера множества программных пакетов, которые можно запускать при инициализации системы. В этом разделе описывается процедура, предназначенная для запуска программ сторонних разработчиков. Большинство входящих в &os; сервисов, таких как &man.cron.8;, запускается с помощью стартовых скриптов системы. Эти скрипты могут различаться в зависимости от версии &os; или ее производителя; однако важнее всего учитывать, что их начальную конфигурацию можно задать с помощью простых стартовых скриптов. До появления rcNG приложения должны были помещать простой стартовый скрипт в каталог /usr/local/etc/rc.d, который затем читался скриптами инициализации системы. Эти скрипты затем выполнялись в ходе последующих стадий запуска системы. Хотя много разработчиков потратили часы на попытки внедрить старый стиль конфигурирования в новую систему, остаётся фактом, что для некоторых утилит сторонних производителей по-прежнему необходим скрипт, помещённый в указанный выше каталог. Незначительные различия в скриптах зависят от того, используется ли rcNG. До версии &os; 5.1 использовались скрипты в старом стиле, и почти во всех случаях скрипты в новом стиле должны подойти так же хорошо. Хотя каждый скрипт должен соответствовать некоторым минимальным требованиям, в большинстве случаев эти требования не зависят от версии &os;. Каждый скрипт должен иметь в конце расширение .sh и каждый скрипт должен быть выполняемым. Последнее требование может быть выполнено путем установки командой chmod уникальных прав доступа 755. Также, как минимум, должна быть опция start для запуска приложения и опция stop для его остановки. Простейший стартовый скрипт, пожалуй, будет похож на следующий: #!/bin/sh echo -n ' utility' case "$1" in start) /usr/local/bin/utility ;; stop) kill -9 `cat /var/run/utility.pid` ;; *) echo "Usage: `basename $0` {start|stop}" >&2 exit 64 ;; esac exit 0 Этот скрипт поддерживает опции stop и start для приложения, которое мы здесь называем просто — utility. Для этого приложения затем можно поместить следующую строку в файл /etc/rc.conf: utility_enable="YES" А можно запускать его и вручную, с помощью команды: &prompt.root; /usr/local/etc/rc.d/utility.sh start Хотя и не все программы сторонних производителей требуют добавления строки в файл rc.conf, практически каждый день очередной новый порт меняется так, чтобы поддерживать подобную конфигурацию. Поищите в результатах, выдаваемых после установки более детальную информацию по конкретному приложению. Некоторые программы сторонних производителей будут включать стартовые скрипты, позволяющие использовать приложение с rcNG; но это мы еще обсудим в следующем разделе. Расширенное конфигурирование приложения Теперь, когда &os; включает rcNG, конфигурирование запуска приложений стало более оптимальным; фактически, оно стало более тщательным. С помощью ключевых слов, рассмотренных в разделе rcNG, приложения теперь можно настроить для запуска после других заданных сервисов, например, DNS; можно разрешить передачу дополнительных флагов через rc.conf вместо жесткого задания флагов в стартовых скриптах, и т.д. Простой скрипт может иметь следующий вид: #!/bin/sh # # PROVIDE: utility # REQUIRE: DAEMON # BEFORE: LOGIN # KEYWORD: FreeBSD shutdown # # НЕ МЕНЯЙТЕ ЗДЕСЬ ЭТИ СТАНДАРТНЫЕ ЗНАЧЕНИЯ # ЗАДАВАЙТЕ ИХ В ФАЙЛЕ /etc/rc.conf # utility_enable=${utility_enable-"NO"} utility_flags=${utility_flags-""} utility_pidfile=${utility_pidfile-"/var/run/utility.pid"} . /etc/rc.subr name="utility" rcvar=`set_rcvar` command="/usr/local/sbin/utility" load_rc_config $name pidfile="${utility_pidfile}" start_cmd="echo \"Starting ${name}.\"; /usr/bin/nice -5 ${command} ${utility_flags} ${command_args}" run_rc_command "$1" Этот скрипт будет гарантировать, что указанное приложение utility будет запущено перед сервисом login, но после сервиса daemon. Он также предоставляет метод для создания и отслеживания файла идентификатора процесса, PID. Этот новый метод также позволяет легко работать с аргументами командной строки, включать стандартные функции из файла /etc/rc.subr, обеспечивает совместимость с утилитой &man.rcorder.8; и упрощает конфигурирование с помощью файла rc.conf. По сути, этот сценарий можно даже поместить в каталог /etc/rc.d. Это, однако, потенциально может сбить с толку утилиту &man.mergemaster.8; при обновлениях программного обеспечения. Использование сервисов для запуска сервисов Другие сервисы, такие как даемоны сервера POP3, IMAP, и т.п. могут быть запущены с помощью &man.inetd.8;. Для этого необходимо установить сервисную утилиту из набора портов и добавить соответствующую строчку конфигурации в файл /etc/inetd.conf или раскомментировать подходящую строку конфигурации из уже имеющихся. Работа с даемоном inetd и его конфигурирование подробно описано в разделе inetd. В некоторых случаях использование для запуска системных служб даемона &man.cron.8; может оказаться более приемлемым. Этот подход имеет несколько преимуществ, поскольку даемон cron запускает эти процессы от имени владельца файла crontab. Это позволяет обычным пользователям запускать и поддерживать некоторые приложения. Утилита cron поддерживает уникальную возможность, @reboot, — это значение можно использовать вместо спецификации времени. В результате, задание будет выполнено при запуске &man.cron.8;, обычно — в ходе инициализации системы. Tom Rhodes Предоставил Настройка утилиты <command>cron</command> cron настройка Одна из наиболее полезных утилит &os; это &man.cron.8;. Утилита cron работает в фоновом режиме и постоянно проверяет файл /etc/crontab. Утилита cron проверяет также каталог /var/cron/tabs в поиске новый файлов crontab. Файлы crontab содержат информацию об определенных функциях, которые cron выполняет в указанное время. Утилита cron использует два разных типа конфигурационных файлов, системный и пользовательский. Все различие между этими двумя форматами заключается в шестом поле. В системном файле шестое поля это имя пользователя, с правами которого будет запущена команда. Это позволяет запускать команды из системного crontab от любого пользователя. В пользовательском файле шестое поле указывает запускаемую команду, и все команды запускаются от пользователя, который создал crontab; это важно для безопасности. Пользовательские crontab позволяют индивидуальным пользователям планировать задачи без привилегий суперпользователя (root). Команды из crontab пользователя запускаются с привилегиями этого пользователя. Пользователь root может использовать собственный crontab, как и любой другой пользователь. Он будет отличаться от системного crontab /etc/crontab. Поскольку существует системный crontab, обычно не требуется создавать пользовательский crontab для root. Давайте заглянем в файл /etc/crontab (системный crontab): # /etc/crontab - root's crontab for &os; # # $&os;: src/etc/crontab,v 1.32 2002/11/22 16:13:39 tom Exp $ # # SHELL=/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin HOME=/var/log # # #minute hour mday month wday who command # # */5 * * * * root /usr/libexec/atrun Как и в большинстве файлов настройки FreeBSD, символы # означают комментарии. Комментарии нужны для напоминания о том, что означает строка и зачем она добавлена. Комментарии не могут находиться на той же строке, что и команда, или они будут восприняты как часть команды; располагайте их на новой строке. Пустые строки игнорируются. Сначала должны быть заданы переменные окружения. Знак равно (=) используется для задания переменных окружения, в этом примере SHELL, PATH, и HOME. Если переменная для оболочки не задана, cron использует оболочку по умолчанию, sh. Если не задана переменная PATH, значение по умолчанию не устанавливается и пути к файлам должны быть полными. Если не задана переменная HOME, cron будет использовать домашний каталог соответствующего пользователя. В строке всего семь полей. Их значения minute, hour, mday, month, wday, who (кто), и command. Значение полей почти очевидно. minute это время в минутах, когда будет запущена команда. hour означает то же самое для часов. mday означает день месяца. month, это то же самое, что час и минута, но для месяцев. Параметр wday это день недели. Все эти поля должны быть в числовом формате, время в двадцатичетырехчасовом исчислении. Поле who имеет специальное значение, и присутствует только в файле /etc/crontab. Это поле определяет пользователя, с правами которого должна быть запущена команда. Когда пользователь устанавливает собственный файл crontab, он не указывает этот параметр. Последний параметр command. Он указывает команду, которая должна быть запущена. Последняя строка определяет параметры, описанные выше. Здесь задано значение */5, и несколько символов *. Эти символы * означают первый-последний, и могут быть интерпретированы как каждый. Таким образом, для этой строки соответствующая команда atrun вызывается под пользователем root каждые пять минут независимо от дня или месяца. За дополнительной информацией по команде atrun обращайтесь к странице справочника &man.atrun.8;. Команды могут принимать любое количество параметров; однако команды, состоящие из нескольких строк, должны быть объединены символом \. Этот формат одинаков для каждого файла crontab, за исключением одной детали. Шестое поле, где указано имя пользователя, присутствует только в файле /etc/crontab. Это поле должно быть исключено из crontab файлов пользователей. Установка crontab Вы не должны использовать процедуру, описанную здесь, для установки системного crontab. Просто используйте свой любимый текстовый редактор: утилита cron узнает о том, что файл изменился и сразу начнет использовать обновленную версию. Обратитесь к этой части FAQ за дальнейшей информацией. Для установки готового crontab пользователя, сначала создайте в вашем любимом редакторе файл соответствующего формата, а затем воспользуйтесь утилитой crontab. Обычно она запускается так: &prompt.user; crontab crontab-file В этом примере, crontab-file это имя файла crontab, который только что был создан. Существует также параметр для просмотра установленных файлов crontab: задайте crontab параметр . Для пользователей, составляющих crontab вручную, без временного файла, существует параметр crontab -e. Она вызовет редактор с пустым файлом. Когда файл будет сохранен, crontab автоматически установит его. Если позднее вы захотите полностью удалить свой crontab, используйте crontab с параметром . Tom Rhodes Предоставил Использование rc в FreeBSD 5.X rcNG В &os; недавно была интегрирована из NetBSD система rc.d, используемая для старта системы. Многие из файлов в каталоге /etc/rc.d предназначены для основных сервисов, они могут управляться параметрами , , и . Например, &man.sshd.8; может быть перезапущен следующей командой: &prompt.root; /etc/rc.d/sshd restart Эта процедура похожа для других сервисов. Конечно, сервисы обычно запускаются автоматически, как указано в &man.rc.conf.5;. Например, включение даемона Network Address Translation при запуске выполняется простым добавлением следующей строки в /etc/rc.conf: natd_enable="YES" Если уже присутствует, просто измените на . Скрипты rc автоматически загрузят все другие зависимые сервисы, как описано ниже. Поскольку система rc.d в основном предназначена для запуска/отключения сервисов во время запуска/отключения системы, стандартные параметры , и будут работать только если установлена соответствующая переменная в /etc/rc.conf. Например, команда выше sshd restart будет работать только если переменная sshd_enable в файле /etc/rc.confустановлена в . Для выполнения скриптов независимо от установок в /etc/rc.conf, параметры , или необходимо задавать с префиксом force. Например, для перезапуска sshd независимо от установок в /etc/rc.conf, выполните следующую команду: &prompt.root; /etc/rc.d/sshd forcerestart Проверить состояние переменной в файле /etc/rc.conf легко: запустите соответствующий скрипт из rc.d с параметром . Проверка переменной для sshd выполняется следующей командой: &prompt.root; /etc/rc.d/sshd rcvar # sshd $sshd_enable=YES Вторая строка (# sshd) это вывод команды sshd, а не консоль root. Чтобы определить, запущен ли сервис, существует параметр . Например для проверки того, запущен ли sshd, выполните: &prompt.root; /etc/rc.d/sshd status sshd is running as pid 433. Возможна также перегрузка () сервиса. Скрипт, запущенный с этим параметром, попытается отправить сервису сигнал, вызывающий перезагрузку файлов настройки. В большинстве случаев это означает отправку сервису сигнала SIGHUP. Структура rcNG используется не только для сетевых серверов, она отвечает также за большую часть инициализации системы. Рассмотрим, к примеру, файл bgfsck. Во время выполнения этот скрипт выводит следующее сообщение: Starting background file system checks in 60 seconds. Следовательно, этот файл используется для фоновой проверки файловых систем, которая выполняется только в процессе инициализации системы. Функционирование многих сервисов системы зависит от корректной работы других сервисов. Например, NIS и другие основанные на RPC сервисы могут не запуститься, пока не загрузится rpcbind (portmapper). Для разрешения этой проблемы, в начале каждого скрипта в комментарии включаются информация о зависимостях и другие метаданные. Программа &man.rcorder.8; для разбора этих комментариев во время старта системы для определения порядка, в котором должны вызываться системные сервисы в соответствии с зависимостями. В начало каждого стартового файла должны быть включены следующие строки: PROVIDE: Задает имя сервиса, предоставляемого этим файлом. REQUIRE: Список сервисов, необходимых этому сервису. Этот файл будет запущен после указанных сервисов. BEFORE: Список сервисов, зависящих от этого сервиса. Этот файл будет запущен до указанных сервисов. KEYWORD: &os; или NetBSD. Используется для функций, зависящих от версии *BSD. Используя этот метод, администратор может легко контролировать системные сервисы без использования уровней запуска, как в некоторых других операционных системах &unix;. Дополнительную информацию о системе rc.d &os; 5.X можно найти на страницах справочника &man.rc.8; и and &man.rc.subr.8;. Marc Fonvieille Предоставил Настройка карт сетевых интерфейсов настройка сетевой карты В наши дни мы не представляем себе компьютера без сетевого подключения. Добавление и настройка сетевой карты это обычная задача любого администратора &os;. Поиск подходящего драйвера настройка сетевой карты поиск драйвера В первую очередь определите тип используемой карты (PCI или ISA), модель карты и используемый в ней чип. &os; поддерживает многие PCI и ISA карты. Обратитесь к Списку поддерживаемого оборудования вашего релиза чтобы узнать, поддерживается ли карта. Как только вы убедились, что карта поддерживается, потребуется определить подходящий драйвер. В файле /usr/src/sys/i386/conf/LINT находится список драйверов сетевых интерфейсов с информацией о поддерживаемых чипсетах/картах. Если вы сомневаетесь в том, какой драйвер подойдет, прочтите страницу справочника к драйверу. Страница справочника содержит больше информации о поддерживаемом оборудовании и даже о проблемах, которые могут возникнуть. Если ваша карта широко распространена, вам скорее всего не потребуется долго искать драйвер. Драйверы для широко распространенных карт представлены в ядре GENERIC, так что ваша карта должна определиться при загрузке, примерно так: dc0: <82c169 PNIC 10/100BaseTX> port 0xa000-0xa0ff mem 0xd3800000-0xd38 000ff irq 15 at device 11.0 on pci0 dc0: Ethernet address: 00:a0:cc:da:da:da miibus0: <MII bus> on dc0 ukphy0: <Generic IEEE 802.3u media interface> on miibus0 ukphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto dc1: <82c169 PNIC 10/100BaseTX> port 0x9800-0x98ff mem 0xd3000000-0xd30 000ff irq 11 at device 12.0 on pci0 dc1: Ethernet address: 00:a0:cc:da:da:db miibus1: <MII bus> on dc1 ukphy1: <Generic IEEE 802.3u media interface> on miibus1 ukphy1: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto В этом примере две карты используют имеющийся в системе драйвер &man.dc.4;. Для использования сетевой карты потребуется загрузить подходящий драйвер. Это можно сделать двумя способами. Самый простой способ это загрузка модуля ядра для сетевой карты с помощью &man.kldload.8;. Не для каждой сетевой карты есть модуль (например ISA карты и карты, использующие драйвер &man.ed.4;). В качестве альтернативы, вы можете статически добавить поддержку сетевой карты в ядро. Проверьте /usr/src/sys/i386/conf/LINT и страницу справочника драйвера, чтобы узнать, что добавить в файл конфигурации ядра. За дополнительной информацией о пересборке ядра обращайтесь к . Если ваша карта была обнаружена ядром (GENERIC) во время загрузки, собирать новое ядро не потребуется. Настройка сетевой карты настройка сетевой карты настройка Как только для сетевой карты загружен подходящий драйвер, ее потребуется настроить. Как и многое другое, сетевая карта может быть настроена во время установки с помощью sysinstall. Для вывода информации о настройке сетевых интерфейсов системы, введите следующую команду: &prompt.user; ifconfig dc0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 inet 192.168.1.3 netmask 0xffffff00 broadcast 192.168.1.255 ether 00:a0:cc:da:da:da media: Ethernet autoselect (100baseTX <full-duplex>) status: active dc1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 inet 10.0.0.1 netmask 0xffffff00 broadcast 10.0.0.255 ether 00:a0:cc:da:da:db media: Ethernet 10baseT/UTP status: no carrier lp0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500 lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384 inet 127.0.0.1 netmask 0xff000000 tun0: flags=8010<POINTOPOINT,MULTICAST> mtu 1500 Старые версии &os; могут потребовать запуска &man.ifconfig.8; с параметром , за более подробным описанием синтаксиса &man.ifconfig.8; обращайтесь к странице справочника. Учтите также, что строки, относящиеся к IPv6 (inet6 и т.п.) убраны из этого примера. В этом примере были показаны следующие устройства: dc0: первый Ethernet интерфейс dc1: второй Ethernet интерфейс lp0: интерфейс параллельного порта lo0: устройство loopback tun0: туннельное устройство, используемое ppp Для присвоения имени сетевой карте &os; использует имя драйвера и порядковый номер, в котором карта обнаруживается при инициализации устройств. Например, sis2 это третья сетевая карта, использующая драйвер &man.sis.4;. В этом примере, устройство dc0 включено и работает. Ключевые признаки таковы: UP означает, что карта настроена и готова. У карты есть интернет (inet) адрес (в данном случае 192.168.1.3). Установлена маска подсети (netmask; 0xffffff00, то же, что и 255.255.255.0). Широковещательный адрес (в данном случае, 192.168.1.255). Значение MAC адреса карты (ether) 00:a0:cc:da:da:da Выбор физической среды передачи данных в режиме автовыбора (media: Ethernet autoselect (100baseTX <full-duplex>)). Мы видим, что dc1 была настроена для работы с 10baseT/UTP. За более подробной информацией о доступных драйверу типах среды обращайтесь к странице справочника. Статус соединения (status) active, т.е. несущая обнаружена. Для dc1, мы видим status: no carrier. Это нормально, когда Ethernet кабель не подключен к карте. Если &man.ifconfig.8; показывает примерно следующее: dc0: flags=8843<BROADCAST,SIMPLEX,MULTICAST> mtu 1500 ether 00:a0:cc:da:da:da это означает, что карта не была настроена. Для настройки карты вам потребуются привилегии пользователя root. Настройка сетевой карты может быть выполнена из командной строки с помощью &man.ifconfig.8;, но вам потребуется делать это после каждой перезагрузки системы. Подходящее место для настройки сетевых карт это файл /etc/rc.conf. Откройте /etc/rc.conf в текстовом редакторе. Вам потребуется добавить строку для каждой сетевой карты, имеющейся в системе, например, в нашем случае, было добавлено две строки: ifconfig_dc0="inet 192.168.1.3 netmask 255.255.255.0" ifconfig_dc1="inet 10.0.0.1 netmask 255.255.255.0 media 10baseT/UTP" Замените dc0, dc1, и так далее на соответствующие имена ваших карт, подставьте соответствующие адреса. Обратитесь к страницам справочника сетевой карты и &man.ifconfig.8;, за подробной информацией о доступных опциях и к странице справочника &man.rc.conf.5; за дополнительной информацией о синтаксисе /etc/rc.conf. Если вы настроили сетевую карту в процессе установки системы, некоторые строки, касающиеся сетевой карты, могут уже присутствовать. Внимательно проверьте /etc/rc.conf перед добавлением каких-либо строк. Отредактируйте также файл /etc/hosts для добавления имен и IP адресов различных компьютеров сети, если их еще там нет. За дополнительной информацией обращайтесь к man.hosts.5; и к /usr/share/examples/etc/hosts. Тестирование и решение проблем Как только вы внесете необходимые изменения в /etc/rc.conf, перегрузите компьютер. Изменения настроек интерфейсов будут применены, кроме того будет проверена правильность настроек. Как только система перезагрузится, проверьте сетевые интерфейсы. Проверка Ethernet карты настройка сетевой карты тестирование карты Для проверки правильности настройки сетевой карты, попробуйте выполнить ping для самого интерфейса, а затем для другой машины в локальной сети. Сначала проверьте локальный интерфейс: &prompt.user; ping -c5 192.168.1.3 PING 192.168.1.3 (192.168.1.3): 56 data bytes 64 bytes from 192.168.1.3: icmp_seq=0 ttl=64 time=0.082 ms 64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=0.074 ms 64 bytes from 192.168.1.3: icmp_seq=2 ttl=64 time=0.076 ms 64 bytes from 192.168.1.3: icmp_seq=3 ttl=64 time=0.108 ms 64 bytes from 192.168.1.3: icmp_seq=4 ttl=64 time=0.076 ms --- 192.168.1.3 ping statistics --- 5 packets transmitted, 5 packets received, 0% packet loss round-trip min/avg/max/stddev = 0.074/0.083/0.108/0.013 ms Затем проверьте другую машину в локальной сети: &prompt.user; ping -c5 192.168.1.2 PING 192.168.1.2 (192.168.1.2): 56 data bytes 64 bytes from 192.168.1.2: icmp_seq=0 ttl=64 time=0.726 ms 64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.766 ms 64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.700 ms 64 bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=0.747 ms 64 bytes from 192.168.1.2: icmp_seq=4 ttl=64 time=0.704 ms --- 192.168.1.2 ping statistics --- 5 packets transmitted, 5 packets received, 0% packet loss round-trip min/avg/max/stddev = 0.700/0.729/0.766/0.025 ms Вы можете также использовать имя машины вместо 192.168.1.2, если настроен файл /etc/hosts. Решение проблем настройка сетевой карты решение проблем Решение проблем с аппаратным и программным обеспечением всегда вызывает сложности, которые можно уменьшить, проверив сначала самые простые варианты. Подключен ли сетевой кабель? Правильно ли - настроены сетевые сервисы? Правильно ли настроен межсетевой экран? + настроены сетевые сервисы? Правильно ли настроен брандмауэр? Поддерживается ли используемая карта в &os;? Всегда проверяйте информацию об оборудовании перед отправкой сообщения об ошибке. Обновите &os; до последней версии STABLE. Просмотрите архивы списков рассылки, или поищите информацию в интернет. Если карта работает, но производительность низка, может помочь чтение страницы справочника &man.tuning.7;. Проверьте также настройки сети, поскольку неправильные настройки могут стать причиной низкой скорости соединения. Некоторые пользователи встречаются с несколькими device timeouts, что нормально для некоторых сетевых карт. Если это продолжается и надоедает, убедитесь, что устройство не конфликтует с другим устройством. Внимательно проверьте подключение кабеля. Возможно также, что вам просто надо установить другую карту. Время от времени, пользователи видят несколько ошибок watchdog timeout. Первое, что требуется сделать, это проверить сетевой кабель. Многие карты требуют поддержки Bus Mastering слотом PCI. На некоторых старых материнских платах, только один PCI слот имеет такую поддержку (обычно слот 0). Сверьтесь с документацией на сетевую карту и материнскую плату, чтобы определить, может ли это быть проблемой. Сообщение No route to host появляются, если система не в состоянии доставить пакеты к хосту назначения. Это может случиться, если не определен маршрут по умолчанию, или кабель не подключен. Проверьте вывод команды netstat -rn и убедитесь, что к соответствующему хосту есть работающий маршрут. Если это не так, прочтите . Сообщения ping: sendto: Permission denied - зачастую появляются при неправильно настроенном межсетевом экране. + зачастую появляются при неправильно настроенном брандмауэре. Если ipfw включен в ядре, но правила не определены, правило по умолчанию блокирует весь трафик, даже запросы ping! Прочтите с более подробной информацией. Иногда карты недостаточна, или ниже среднего. В этих случаях лучше всего изменить режим выбора типа подключения с autoselect на правильный тип. Обычно это работает для большинства оборудования, но не может решить проблему во всех случаях. Проверьте еще раз настройки сети и прочтите страницу руководства &man.tuning.7;. Настройка виртуальных серверов виртуальные сервера синонимы ip Очень часто &os; используется для размещения сайтов, когда один сервер работает в сети как несколько серверов. Это достигается присвоением нескольких сетевых адресов одному интерфейсу. У сетевого интерфейса всегда есть один настоящий адрес, хотя он может иметь любое количество синонимов (alias). Эти синонимы обычно добавляются путём помещения соответствующих записей в /etc/rc.conf. Синоним для интерфейса fxp0 выглядит следующим образом: ifconfig_fxp0_alias0="inet xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx" Заметьте, что записи синонимов должны начинаться с alias0 и идти далее в определенном порядке (например, _alias1, _alias2, и т.д.). Конфигурационный процесс остановится на первом по порядку отсутствующем числе. Определение маски подсети для синонима очень важно, но к счастью, так же просто. Для каждого интерфейса должен быть один адрес с истинной маской подсети. Любой другой адрес в сети должен иметь маску подсети, состоящую из всех единичек (что выражается как 255.255.255.255 или как 0xffffffff). Например, рассмотрим случай, когда интерфейс fxp0 подключён к двум сетям, к сети 10.1.1.0 с маской подсети 255.255.255.0 и к сети 202.0.75.16 с маской 255.255.255.240. Мы хотим, чтобы система была видна по IP, начиная с 10.1.1.1 по 10.1.1.5 и с 202.0.75.17 по 202.0.75.20. Как было сказано выше, только первый адрес в заданном диапазоне (в данном случае, 10.0.1.1 и 202.0.75.17) должен иметь реальную маску сети; все остальные (с 10.1.1.2 по 10.1.1.5 и с 202.0.75.18 по 202.0.75.20) должны быть сконфигурированы с маской сети 255.255.255.255. Для этого должны быть внесены следующие записи: ifconfig_fxp0="inet 10.1.1.1 netmask 255.255.255.0" ifconfig_fxp0_alias0="inet 10.1.1.2 netmask 255.255.255.255" ifconfig_fxp0_alias1="inet 10.1.1.3 netmask 255.255.255.255" ifconfig_fxp0_alias2="inet 10.1.1.4 netmask 255.255.255.255" ifconfig_fxp0_alias3="inet 10.1.1.5 netmask 255.255.255.255" ifconfig_fxp0_alias4="inet 202.0.75.17 netmask 255.255.255.240" ifconfig_fxp0_alias5="inet 202.0.75.18 netmask 255.255.255.255" ifconfig_fxp0_alias6="inet 202.0.75.19 netmask 255.255.255.255" ifconfig_fxp0_alias7="inet 202.0.75.20 netmask 255.255.255.255" Файлы настройки Каталог <filename>/etc</filename> Во FreeBSD определён ряд директорий, предназначенных для хранения конфигурационных файлов. Это: /etc Основные файлы конфигурации системы. Тут размещены системно–зависимые данные. /etc/defaults Версии системных конфигурационных файлов по умолчанию. /etc/mail Дополнительные конфигурационные файлы &man.sendmail.8; остальные конфигурационные файлы MTA. /etc/ppp Настройка для user- и kernel-ppp программ. /etc/namedb Основное место расположения данных &man.named.8;. Обычно named.conf и файлы зон расположены здесь. /usr/local/etc Конфигурационные файлы установленных приложений. Могут содержать подкаталоги приложений. /usr/local/etc/rc.d Скрипты запуска/остановки установленных приложений. /var/db Автоматически генерируемые системно-специфичные файлы баз данных, такие как база данных пакетов, и так далее Имена хостов hostname DNS <filename>/etc/resolv.conf</filename> resolv.conf /etc/resolv.conf определяет, как ресолвер (resolver) &os; получает доступ к Системе Доменных Имён (DNS). Основные записи resolv.conf: nameserver IP адрес сервера имён. Сервера опрашиваются в порядке описания. Максимальное количество адресов - три. search Список доменов для поиска с помощью hostname lookup. Обычно определяется доменом, в котором находится компьютер. domain Домен, в котором находится компьютер. Типичный вид resolv.conf: search example.com nameserver 147.11.1.11 nameserver 147.11.100.30 Опции search и domain нельзя использовать совместно. Если вы используете DHCP, &man.dhclient.8; обычно перезаписывает resolv.conf информацией, полученной от серверов DHCP. <filename>/etc/hosts</filename> hosts /etc/hosts - простая текстовая база данных, напоминающая старый Интернет. Она работает совместно с DNS и NIS, сопоставляя доменные имена IP адресу. Отдельные компьютеры, соединённые с помощью локальной сети могут быть записаны тут вместо &man.named.8; сервера с целью упрощения. Кроме того, /etc/hosts используется для записи IP адресов и соответствующих им доменов, избавляя от внешнего трафика, используемого для запросов к DNS серверам. # $&os;$ # # Host Database # This file should contain the addresses and aliases # for local hosts that share this file. # In the presence of the domain name service or NIS, this file may # not be consulted at all; see /etc/nsswitch.conf for the resolution order. # # ::1 localhost localhost.my.domain myname.my.domain 127.0.0.1 localhost localhost.my.domain myname.my.domain # # Imaginary network. #10.0.0.2 myname.my.domain myname #10.0.0.3 myfriend.my.domain myfriend # # According to RFC 1918, you can use the following IP networks for # private nets which will never be connected to the Internet: # # 10.0.0.0 - 10.255.255.255 # 172.16.0.0 - 172.31.255.255 # 192.168.0.0 - 192.168.255.255 # # In case you want to be able to connect to the Internet, you need # real official assigned numbers. PLEASE PLEASE PLEASE do not try # to invent your own network numbers but instead get one from your # network provider (if any) or from the Internet Registry (ftp to # rs.internic.net, directory `/templates'). # Формат /etc/hosts: [IP адрес в Интернете] [имя компьютера] [alias1] [alias2] ... Например: 10.0.0.1 myRealHostname.example.com myRealHostname foobar1 foobar2 За дополнительной информацией обращайтесь к &man.hosts.5;. Настройка лог файлов лог файлы <filename>syslog.conf</filename> syslog.conf syslog.conf is является файлом конфигурации для &man.syslogd.8;. В нём указываются, типы сообщений генерируемые syslog, и лог файлы, в которые они записываются. # $&os;$ # # Spaces ARE valid field separators in this file. However, # other *nix-like systems still insist on using tabs as field # separators. If you are sharing this file between systems, you # may want to use only tabs as field separators here. # Consult the syslog.conf(5) manual page. *.err;kern.debug;auth.notice;mail.crit /dev/console *.notice;kern.debug;lpr.info;mail.crit;news.err /var/log/messages security.* /var/log/security mail.info /var/log/maillog lpr.info /var/log/lpd-errs cron.* /var/log/cron *.err root *.notice;news.err root *.alert root *.emerg * # uncomment this to log all writes to /dev/console to /var/log/console.log #console.info /var/log/console.log # uncomment this to enable logging of all log messages to /var/log/all.log #*.* /var/log/all.log # uncomment this to enable logging to a remote log host named loghost #*.* @loghost # uncomment these if you're running inn # news.crit /var/log/news/news.crit # news.err /var/log/news/news.err # news.notice /var/log/news/news.notice !startslip *.* /var/log/slip.log !ppp *.* /var/log/ppp.log За более полной информацией обратитесь к &man.syslog.conf.5;. <filename>newsyslog.conf</filename> newsyslog.conf newsyslog.conf - конфигурационный файл &man.newsyslog.8;, программы, обычно контролируемой &man.cron.8;. &man.newsyslog.8; определяет, когда лог-файлы нуждаются в архивировании и перегруппировке. logfile перемещается в logfile.0, logfile.0 перемещается в logfile.1, и так далее. Другое именование получится при архивировании с помощью &man.gzip.1;: logfile.0.gz, logfile.1.gz, и т.д. newsyslog.conf показывает, какие лог файлы должны быть проинспектированы, сколько их должно быть сохранено, и когда они должны быть пересмотрены. Лог файлы могут быть перегруппированы и/или заархивированы, когда они либо достигнут определённого размера, либо при достижении определённых даты/времени. # configuration file for newsyslog # $&os;$ # # filename [owner:group] mode count size when [ZB] [/pid_file] [sig_num] /var/log/cron 600 3 100 * Z /var/log/amd.log 644 7 100 * Z /var/log/kerberos.log 644 7 100 * Z /var/log/lpd-errs 644 7 100 * Z /var/log/maillog 644 7 * @T00 Z /var/log/sendmail.st 644 10 * 168 B /var/log/messages 644 5 100 * Z /var/log/all.log 600 7 * @T00 Z /var/log/slip.log 600 3 100 * Z /var/log/ppp.log 600 3 100 * Z /var/log/security 600 10 100 * Z /var/log/wtmp 644 3 * @01T05 B /var/log/daily.log 640 7 * @T00 Z /var/log/weekly.log 640 5 1 $W6D0 Z /var/log/monthly.log 640 12 * $M1D0 Z /var/log/console.log 640 5 100 * Z За дополнительной информацией обращайтесь к &man.newsyslog.8;. <filename>sysctl.conf</filename> sysctl.conf sysctl sysctl.conf очень похож на rc.conf. Значения устанавливаются в виде variable=value. Указанные значения устанавливаются после перевода системы в многопользовательский режим. Однако не все переменные могут быть установлены в этом режиме. Пример sysctl.conf настроенной для выключения нотирования фатальных ошибок и разрешения Linux-программам определять, что они запускаются под &os;: kern.logsigexit=0 # Do not log fatal signal exits (e.g. sig 11) compat.linux.osname=&os; compat.linux.osrelease=4.3-STABLE Настройка с помощью sysctl sysctl настройка с помощью sysctl &man.sysctl.8; - это интерфейс, позволяющий вам вносить изменения в работающую систему &os;. Эти изменения могут касаться многих опций стека TCP/IP и виртуальной памяти и могут облегчить опытному администратору жизнь. Более пяти тысяч системных переменных могут быть прочитаны и записаны с помощью &man.sysctl.8;. По своей сути, &man.sysctl.8; выполняет две функции: чтение и изменение настроек системы. Для просмотра всех доступных для чтения переменных:: &prompt.user; sysctl -a Чтобы прочитать определённую переменную, например, kern.maxproc, введите: &prompt.user; sysctl kern.maxproc kern.maxproc: 1044 Для присвоения значения переменной, используйте выражение вида переменная=значение: &prompt.root; sysctl kern.maxfiles=5000 kern.maxfiles: 2088 -> 5000 Изменяемые с помощью sysctl переменные обычно принимают значения либо строкового, либо целого, либо булевого типа. Переменные булевого типа могут принимать два значения (1 (истина) и 0 (ложь)). Если вы хотите устанавливать некоторые переменные автоматически при каждой загрузке компьютера, добавьте их в файл /etc/sysctl.conf. За дополнительной информацией обращайтесь к странице справочника &man.sysctl.conf.5; и к . Tom Rhodes Предоставил Переменные &man.sysctl.8; только для чтения В некоторых случаях желательно изменить переменные &man.sysctl.8; только для чтения. Хотя это не рекомендуется, иногда другого способа решить проблему нет. Например, на некоторых моделях лэптопов диапазон памяти устройства &man.cardbus.4; не определяется и выдается приблизительно такая ошибка: cbb0: Could not map register memory device_probe_and_attach: cbb0 attach returned 12 Ситуации, похожие на эту, требуют изменения некоторых значений &man.sysctl.8;, модификация которых запрещена. Для разрешения этой ситуации пользователь может поместить &man.sysctl.8; OID в файл /boot/loader.conf. Значения по умолчанию хранятся в файле /boot/defaults/loader.conf. Решение проблемы, приведенной выше, потребует помещения строки в вышеупомянутый файл. Теперь &man.cardbus.4; будет работать нормально. Оптимизация дисков Переменные Sysctl <varname>vfs.vmiodirenable</varname> vfs.vmiodirenable Значением переменной vfs.vmiodirenable может быть установлено в 0 (выключено) или 1 (включено); по умолчанию 1. Эта переменная отвечает за метод кэширования каталогов. Размер большинства каталогов невелик. Они могут поместиться в одном фрагменте (обычно 1K), и могут занимать ещё меньше места (обычно 512 байт) в кэше буфера. При отключении этой переменной (при установке значения 0) буфер прокэширует только заданное число каталогов даже если у вас много памяти. При включении (при установке значения 1) эта переменная sysctl позволит использовать страничное кэширование VM, делая доступным для кэширования каталогов весь объём памяти. Однако, минимальный объём памяти, используемой для кэширования каталогов стал равен объёму страницы (обычно 4 K) вместо 512 байт. Мы рекомендуем оставлять эту опцию включенной, если ваш компьютер исполняет программы, манипулирующие значительным количеством файлов. Примером таких программ могут быть кэширующие прокси-серверы, большие почтовые серверы и серверы новостей. Обычно включение этой опции не понижает производительности, однако лучше поэкспериментировать, чтобы узнать оптимальное значение для вашей машины. <varname>vfs.write_behind</varname> vfs.write_behind Переменная sysctl vfs.write_behind по умолчанию установлена в 1 (включено). Она указывает системе выполнять запись на носитель по кластерам, что обычно делается для больших файлов. Идея в том, чтобы избежать заполнения кэша неполными буферами, когда это не увеличивает производительность. Однако, это может заблокировать процессы и в некоторых случаях вам может понадобиться отключить этот параметр. <varname>vfs.hirunningspace</varname> vfs.hirunningspace Переменная sysctl vfs.hirunningspace определяет число запросов записи на диск, которые могут быть поставлены в очередь. Значение по умолчанию обычно подходит, но на компьютерах с большим количеством дисков вы можете увеличить его до четырех или пяти мегабайт. Учтите, что установка слишком большого значения (превышающего размер буфера записи) может привести к очень значительному падению общей производительности. Не делайте это значение произвольно большим! Большие значения могут привести к задержкам чтения, выполняемого в то же время Есть много других переменных sysctl, относящихся к кэшированию в буфер и страничному кэшированию VM. Мы не рекомендуем изменять эти значения. Начиная &os; 4.3, система VM делает отличную работу по автоматической самонастройке. <varname>vm.swap_idle_enabled</varname> vm.swap_idle_enabled Переменная sysctl vm.swap_idle_enabled полезна в больших многопользовательских системах, где есть много пользователей, входящих и выходящих из системы, и множество ожидающих процессов. Такие системы обычно генерируют большое количество запросов на выделение памяти. Включение этой переменной и настройка задержки выгрузки (swapout hysteresis, в секундах) установкой переменных vm.swap_idle_threshold1 и vm.swap_idle_threshold2 позволит освобождать страницы памяти, занятые ожидающими процессами, более быстро, чем при нормальном алгоритме выгрузки. Это помогает даемону выгрузки страниц. Не включайте этот параметр, пока он на самом деле вам не понадобится, поскольку его действие в сущности заключается в более ранней выгрузке страниц из памяти; это повышает нагрузку на подкачку и диск. В малых системах эффект от включения этого параметра предсказуем, но в больших системах нагруженной на подкачкой этот параметр позволяет системе VM проще загружать и выгружать процессы из памяти. <varname>hw.ata.wc</varname> hw.ata.wc Во &os; 4.3 кэширование записи на IDE диски было отключено. Это понижало производительность IDE дисков в тестах, но было необходимо для лучшей сохранности данных. Проблема состоит в том, что IDE диски неправильно указывают время завершения записи на диск. При включенном кэшировании IDE диски могут не только записать данные в неправильном порядке – при большой нагрузке на диск некоторые блоки могут задержаться до бесконечности. Сбой, или отключение питания могут могут стать причиной серьёзных повреждений в файловой системе. Поэтому для безопасности системы значение по умолчанию этого параметра было изменено. К сожалению, результатом этого стало столь значительная потеря производительности, что после выхода релиза значение этого параметра было возвращено в первоначальное состояние. Вам следует проверить значение переменной sysctl hw.ata.wc на вашей машине. Если кэширование выключено - вы можете включить его, установив значение переменной ядра, равное 1. Это должно быть сделано при помощи загрузчика при загрузке. Если вы сделаете это позже - изменения не будут иметь силы. За более подробной информацией обращайтесь к &man.ata.4;. <literal>SCSI_DELAY</literal> (<varname>kern.cam.scsi_delay</varname>) SCSI_DELAY kern.cam.scsi_delay Параметр настройки ядра SCSI_DELAY может использоваться для уменьшения времени загрузки системы. Значение по умолчанию велико и может составлять более 15 секунд в процессе загрузки. Уменьшение его до 5 секунд обычно работает (особенно с современными дисками). В новых версиях &os; (5.0 и выше) должен использоваться параметр kern.cam.scsi_delay, настраиваемый во время загрузки. Этот параметр и параметр настройки ядра принимают значения в миллисекундах, а не в секундах. Soft Updates Soft Updates tunefs Программа &man.tunefs.8; используется для настройки файловой системы. Эта программа может принимать большое количество параметров, но мы рассмотрим лишь один из них - включение и выключение Soft Updates, что может быть достигнуто следующим образом: &prompt.root; tunefs -n enable /filesystem &prompt.root; tunefs -n disable /filesystem Нельзя изменять файловую систему с помощью &man.tunefs.8; когда она смонтирована. Самое подходящее время для включения "Soft Updates" - перед монтированием разделов, в однопользовательском режиме. Начиная с &os; 4.5, можно включить Soft Updates во время создания файловой системы, используя &man.newfs.8; с параметром -U. Soft Updates существенно увеличивают скорость создания и удаления файлов путём использования кэширования. Мы рекомендуем использовать Soft Updates на всех ваших файловых системах. Однако у Soft Updates есть и обратные стороны: во-первых, Soft Updates гарантирует целостность файловой системы в случае сбоя, но может наблюдаться задержка в несколько секунд (или даже минуту!) перед записью на жесткий диск. Если система зависнет - вы можете потерять больше, чем, если бы вы не включили Soft Updates. Во-вторых, Soft Updates задерживает освобождение блоков файловой системы. Если ваша файловая система заполнена, выполнение значительного обновления, например. make installworld, может вызвать переполнение. Дополнительная информация о Soft Updates Soft Updates детали Есть два традиционных способа записи метаданных файловых систем на диск. (Пример метаданных: индексные дескрипторы и каталоги.) Исторически, поведение по умолчанию заключается в синхронном обновлении метаданных. Если каталог был изменен, система ждет, пока изменение не будет физически записано на диск. Содержимое файлов проходит через кэш и записывается на диск асинхронно. Преимущество этого способа в его надежности. При сбое во время обновления метаданные остаются в нормальном состоянии. Файл либо создается целиком, либо вообще не создается. Если блоки данных не были записаны в файл из буфера во время сбоя, &man.fsck.8; сможет определить это и восстановить файловую систему, установив длину файла в 0. Кроме того, реализация этого способа проста и понятна. Недостаток в том, что обновление метаданных занимает много времени. Команда rm -r, например, последовательно удаляет все файлы в каталоге, и каждое изменение в каталоге (удаление файла) будет синхронно записано на диск. Сюда включаются обновления самого каталога, таблицы индексных дескрипторов, и возможно блоков, занятых файлом. Те же соглашения работают при распаковке больших иерархий (tar -x). Другой вариант это асинхронное обновление метаданных. Это поведение по умолчанию для Linux/ext2fs и *BSD ufs с параметром mount -o async. Все обновления метаданных просто пропускаются через кэш буфера, как и содержимое файлов. Преимущество этой реализации в том, что нет необходимости ждать каждый раз, пока метаданные будут записаны на диск, поэтому все операции с большим объемом обновления метаданных будут происходить гораздо быстрее чем при синхронном обновлении. Кроме того, реализация все еще проста и понятна, поэтому риск появления ошибок в коде невелик. Недостаток в том, что нет никаких гарантий исправности файловой системы. Если во время во время обновления большого объема метаданных произойдет сбой (например, отключение питания, или нажатие кнопки reset), файловая система останется в непредсказуемом состоянии. Нет возможности определить состояние файловой системы после такого сбоя; блоки данных файла могут быть уже записаны на диск, а обновления таблицы индексных дескрипторов нет. Невозможно реализовать fsck, которая могла бы исправить получившийся хаос (поскольку необходимой информации нет на диске). Если файловая система была уничтожена во время восстановления, единственный способ восстановления — запустить &man.newfs.8; и воспользоваться резервной копией. Обычное решение этой проблемы состояло в реализации протоколировании проблемной области (dirty region logging), известном как журналирование, хотя этот термин использовался неправильно и порой также применялся к другим формам протоколирования транзакций. Обновление метаданных как и прежде происходит синхронно, но в отдельную область диска. Позже они перемещаются туда, где должны быть. Поскольку область протоколирования это небольшая, последовательная область диска, головкам жесткого диска не приходится перемещаться на большие расстояния даже во время значительных обновлений, поэтому такой способ быстрее, чем синхронные обновления. Кроме того, сложность реализации довольно ограничена, поэтому риск внесения ошибок невелик. Недостаток в том, что все обновления метаданных записываются дважды (один раз в область протоколирования и один раз окончательно), поэтому при обычной работе производительность может понизиться. С другой стороны, в случае сбоя все незаконченные действия с метаданными могут быть быстро отменены, или завершены после загрузки системы, поэтому система после сбоя загружается быстрее. Kirk McKusick, разработчик Berkeley FFS, решил эту проблему с помощью Soft Updates: все незавершенные обновления метаданных находятся в памяти и записываются на диск в упорядоченном виде (упорядоченное обновления метаданных). При значительных обновлениях метаданных более поздние обновления присоединяются к предыдущим, если они все еще находятся в памяти и еще не записаны на диск. Поэтому все операции, скажем, над каталогом, обычно выполняются в памяти перед записью обновления на диск (блоки данных сортируются в соответствии с их положением, так что они не будут записаны на диск до метаданных. При крахе операционной системы выполняется откат: считается, что все операции, не записанные на диск, никогда не происходили. Файловая система находится в том состоянии, в котором она была за 30–60 секунд до сбоя. Используемый алгоритм гарантирует, что все используемые ресурсы маркированы соответствующим образом в своих областях: блоки и индексные дескрипторы. После сбоя могут остаться только ошибки, выделения ресурсов, они помечаются как используемые, хотя на самом деле свободны. &man.fsck.8; разбирается в ситуации и освобождает более не используемые ресурсы. После сбоя система может быть безопасно смонтирована с опцией mount -f. Для освобождения ресурсов, которые могут не использоваться, в дальнейшем потребуется запустить &man.fsck.8;. Эта идея лежит в основе background (фоновая) fsck: во время запуска системы записывается только снимок файловой системы. Все системы могут быть смонтированы в грязном состоянии, и система загружается в многопользовательский режим. Затем, фоновые fsck ставятся в очередь для всех систем, где это требуется, чтобы освободить неиспользуемые ресурсы. (Файловые системы, где не используются Soft Updates, все еще требуют запуска fsck в обычном режиме). Преимущество этого способа в том, что обновления метаданных происходят почти так же быстро, как при асинхронных обновлениях (т.е. быстрее, чем при журналировании, когда метаданные записываются дважды). Недостаток в сложности кода (подразумевающим больший риск появления ошибок в области, где вероятность потери данных пользователя особенно высока) и в более высоких требованиях к объему памяти. К тому же могут возникнуть некоторые странные на первый взгляд ситуации. После сбоя состояние файловой системы несколько более старое. В ситуации, когда стандартный способ синхронизации оставит несколько файлов нулевой длины после выполнения fsck, в файловой системе с Soft Updates их не останется вовсе, поскольку ни метаданные, ни содержимое файлов не были записаны на диск. Дисковое пространство не будет освобождено пока обновления не будут записаны на диск, что может занять некоторое время после выполнения rm. Это может повлечь проблемы при установке большого количества файлов на файловую систему, где не хватает места для помещения всех файлов дважды. Изменение ограничений, накладываемых ядром оптимизация параметры ядра Ограничения на Файлы/Процессы <varname>kern.maxfiles</varname> kern.maxfiles Значение kern.maxfiles может быть увеличено или уменьшено в зависимости от потребностей вашей системы. Эта переменная определяет максимальное число дескрипторов файлов. Когда таблица дескрипторов файлов полна, в очереди системных сообщений появится сообщение file: table is full. Это сообщение может быть прочитано с помощью команды dmesg. Каждый открытый файл, сокет или буфер использует дескриптор файла. Широкомасштабному серверу может понадобиться много тысяч дескрипторов файлов, в зависимости от количества программ, одновременно выполняемых на сервере. Стандартное значение kern.maxfile определяется переменной в вашем файле конфигурации ядра. Значение kern.maxfiles увеличивается пропорционально значению . При компилировании ядра, нужно установить эту переменную согласно потребностям вашей системы. Исходя из значения этой переменной, ядро устанавливает значения большинства предопределённых переменных. Даже если предполагается, что к компьютеру не будут одновременно подсоединяться 256 пользователей, требуемые ресурсы могут быть такими же, как у крупномасштабного сервера. Начиная с &os; 4.5, установка значения в 0 в файле конфигурации ядра выберет подходящее значение по умолчанию, основанное на объеме оперативной памяти системы. <varname>kern.ipc.somaxconn</varname> kern.ipc.somaxconn Переменная sysctl kern.ipc.somaxconn ограничивает размер очереди для приема новых TCP соединений. Значение по умолчанию 128 слишком мало для надежной обработки новых соединений для нагруженного web сервера. Для такого сервера рекомендуется увеличить это значение до 1024 или выше. Даемон сервиса может сам ограничивать очередь приема новых соединений (например, &man.sendmail.8;, или Apache), но обычно в файле настройки даемона есть директива для настройки длины очереди. Более длинная очередь также помогает избежать атак Denial of Service (DoS). Сетевые Ограничения Опция ядра NMBCLUSTERS обуславливает количество Mbuf, доступных на машине. На сервере с большим трафиком и маленьким Mbuf производительность будет пониженной. Каждый кластер представлен двумя килобайтами памяти, поэтому значение 1024 означает 2 мегабайта памяти ядра, зарезервированной для сетевых буферов. Для определения оптимального значения необходимо провести простые вычисления. Если у вас веб сервер, который может обслуживать 1000 одновременных соединений, и каждое соединение съедает 16 K буфера приема и 16 K буфера отправки, вам потребуется 32 MB памяти под буферы. Хорошее правило — умножение этого значения на 2, 2x32 MB / 2 KB = 64 MB / 2 kB = 32768. Мы рекомендуем значения между 4096 и 32768 для машин с большим объемом памяти. Не указывайте произвольно большое значение параметра, это может привести к падению системы при загрузке. Используйте &man.netstat.1; для определения количества используемых сетевых кластеров. Для настройки в процессе загрузки используйте в loader переменную kern.ipc.nmbclusters. Только в старых версиях &os; потребуется пересобрать ядро (&man.config.8;) с измененным параметром NMBCLUSTERS. Для нагруженных серверов, интенсивно использующих системный вызов &man.sendfile.2;, может потребоваться увеличения буферов &man.sendfile.2; с помощью параметра конфигурации ядра NSFBUFS, или изменения значения путем установки переменной в /boot/loader.conf (обратитесь к &man.loader.8; за подробностями). Общий признак того, что параметр требуется изменить — состояние процессов sfbufa. Переменная sysctl kern.ipc.nsfbufs установлена только для чтения. Этот параметр увеличивается вместе с kern.maxusers, хотя может потребоваться увеличить его отдельно. Даже если сокет помечен как неблокирующий, вызов &man.sendfile.2; на неблокирующем сокете может вызвать блокирование &man.sendfile.2;, пока не станет доступным достаточное количество struct sf_buf. <varname>net.inet.ip.portrange.*</varname> net.inet.ip.portrange.* Переменные sysctl net.inet.ip.portrange.* контролируют диапазоны номеров портов, автоматически привязываемых к TCP и UDP сокетам. Есть три диапазона: нижний диапазон, диапазон по умолчанию и верхний диапазон. Большинство сетевых программ используют диапазон по умолчанию, контролируемый net.inet.ip.portrange.first и net.inet.ip.portrange.last, установленными соответственно в 1024 и 5000. Диапазоны портов привязки используются исходящих соединений и при некоторых условиях портов может не хватить. Это чаще всего происходит на сильно загруженном прокси сервере. Диапазон портов не становится проблемой при работе серверов, которые обрабатывают в основном входящие соединения, или с небольшим количеством исходящих соединений, например mail relay. Для ситуаций, когда возможен недостаток портов, рекомендуется немного увеличить net.inet.ip.portrange.last. Может подойти значение 10000, 20000, или 30000. - Учтите также возможное влияние межсетевого экрана при + Учтите также возможное влияние брандмауэра при изменении диапазона портов. Некоторые могут блокировать большие диапазоны портов (обычно с небольшими номерами) и вынуждают использовать более высокие диапазоны для исходящих соединений. По этой причине рекомендуется настроить значение net.inet.ip.portrange.first. TCP Bandwidth Delay Product TCP Bandwidth Delay Product Limiting net.inet.tcp.inflight_enable TCP Bandwidth Delay Product Limiting похоже на TCP/Vegas в NetBSD. Оно может быть включено установкой переменной sysctl net.inet.tcp.inflight_enable в 1. Система попытается вычислить задержку пакетов для каждого соединения и ограничить объем данных в очереди сети до значения, требуемого для поддержания оптимальной пропускной способности. Эта возможность полезна при передаче данных через модемы, Gigabit Ethernet, или даже через высокоскоростные WAN соединения (или любые другие соединения с большой задержкой передачи), особенно если вы также используете изменение размера окна или настроили большое окно передачи. Если вы включили этот параметр, убедитесь также, что переменная net.inet.tcp.inflight_debug установлена в 0 (отладка выключена), а для использования в реальных может понадобиться установка переменной net.inet.tcp.inflight_min к значению как минимум 6144. Но учтите, что установка большого значения этой переменной может фактически отключить ограничение в зависимости от вида соединения. Ограничение уменьшает количество данных на определенном маршруте и управляет очередью пакетов, как и уменьшает общее количество данных в очереди локального интерфейса хоста. С меньшим количеством пакетов в очереди двусторонние интерактивные соединения, особенно на медленных линиях, могут проходить быстрее. Но имейте ввиду, что эта функция работает только при передаче данных (передача данных / сторона сервера). Она не работает при получении данных (загрузке). Изменение значения переменной net.inet.tcp.inflight_stab не рекомендуется. Этот параметр по умолчанию равен 20, что означает добавление 2 пакетов к вычислению задержки передачи. Дополнительное окно требуется для стабилизации алгоритма и улучшения ответной реакции на изменение условий, но также приводит к большему времени ping на медленных соединениях (задержка все же гораздо меньше, чем без алгоритма inflight). Вы можете попробовать уменьшить этот параметр до 15, 10 или 5; а также уменьшить net.inet.tcp.inflight_min (например, до 3500) для получения желаемого эффекта. Уменьшение значений этих параметров может использоваться только как крайняя мера. Увеличение объема подкачки Вне зависимости от того, что вы планировали, иногда система ведет себя неожиданно. Если вам потребовался дополнительный объем подкачки, его довольно просто добавить. Есть три способа увеличения объема подкачки: добавить новый жесткий диск, включить подкачку по NFS, или создать файл подкачки на существующем разделе. Подкачка на новом жестком диске Лучший способ добавить подкачку, конечно, использовать еще один жесткий диск. Вы можете сделать это в любой момент. Если такой способ подходит, прочтите еще раз информацию по пространству подкачки в разделе Руководства, где рассказывается о наилучшем способе организации раздела подкачки. Подкачка через NFS Подкачка через NFS рекомендуется только в том случае, если в системе отсутствует жесткий диск. Подкачка через NFS медленна и неэффективна в версиях &os; до 4.X. Она довольно быстра и эффективна в 4.0-RELEASE и выше. Но даже в новых версиях &os;, подкачка через NFS ограничена скоростью сетевого подключения и к тому же дополнительно нагружает NFS сервер. Файлы подкачки Вы можете создать файл определенного размера и использовать его как файл подкачки. В нашем примере будет использован файл /usr/swap0 размером 64MB. Конечно, вы можете использовать любое имя. Создание файла подкачки в &os; 4.X Убедитесь, что ядре включен драйвер vnode. Он невключен в последних версиях GENERIC. pseudo-device vn 1 #Vnode driver (turns a file into a device) Создайте устройство vn: &prompt.root; cd /dev &prompt.root; sh MAKEDEV vn0 Создайте файл подкачки (/usr/swap0): &prompt.root; dd if=/dev/zero of=/usr/swap0 bs=1024k count=64 Установите подходящие права на (/usr/swap0): &prompt.root; chmod 0600 /usr/swap0 Включите файл подкачки в /etc/rc.conf: swapfile="/usr/swap0" # Set to name of swapfile if aux swapfile desired. Перегрузите компьютер, или для включения подкачки прямо сейчас выполните: &prompt.root; vnconfig -e /dev/vn0b /usr/swap0 swap Создание файла подкачки в &os; 5.X Убедитесь, что в файле настройки ядра присутствует драйвер виртуального диска (&man.md.4;). Он есть в ядре GENERIC. device md # Memory "disks" Создайте файл подкачки (/usr/swap0): &prompt.root; dd if=/dev/zero of=/usr/swap0 bs=1024k count=64 Установите подходящие права на (/usr/swap0): &prompt.root; chmod 0600 /usr/swap0 Включите файл подкачки в /etc/rc.conf: swapfile="/usr/swap0" # Set to name of swapfile if aux swapfile desired. Перегрузите компьютер или для включения подкачки прямо сейчас введите: &prompt.root; mdconfig -a -t vnode -f /usr/swap0 -u 0 && swapon /dev/md0 Hiten Pandya Написал Tom Rhodes Управление питанием и ресурсами Очень важно использовать аппаратные ресурсы эффективно. До того, как появился ACPI, управление потреблением питания и температурными характеристиками системы было очень сложной для операционной системы задачей. Аппаратное обеспечение контролировалось одним из видов встроенного интерфейса BIOS, таким как: Plug and Play BIOS (PNPBIOS), Advanced Power Management (APM) и так далее. Управление питанием и ресурсами это один из ключевых компонентов современной операционной системы. Например, вам может потребоваться, чтобы операционная система следила за температурными ограничениями и возможно, предупреждала при неожиданном росте температуры. В этом разделе Руководства &os;, мы предоставим исчерпывающую информацию о ACPI. В конце раздела есть ссылки для дальнейшего чтения. Учтите, что ACPI есть только в &os; 5.X и выше в качестве стандартного модуля ядра. В &os; 4.9 ACPI можно включить добавлением строки device acpica к файлу настройки ядра и его пересборкой. Что такое ACPI? Advanced Configuration and Power Interface (ACPI) это стандарт, написанный объединением поставщиков в целях предоставления стандартного интерфейса для аппаратных ресурсов и управления питанием (отсюда и название). Это ключевой элемент Operating System-directed configuration and Power Management, т.е.: он предоставляет операционной системе (OS) больше контроля и более универсален. Современные системы вышли за пределы ограничений существующих Plug and Play интерфейсов (таких как APM, использовавшийся в &os; 4.X), до появления ACPI. ACPI это прямой наследник APM (Advanced Power Management). Недостатки Advanced Power Management (APM) Средства Advanced Power Management (APM) управляют энергопотреблением системы в зависимости от нагрузки. APM BIOS предоставляется поставщиком системы и специфичен для данной аппаратной платформы. Драйвер APM в OS обеспечивает доступ к APM Software Interface, который позволяет управлять уровнями потребления питания. В APM имеется четыре основных проблемы. Во-первых, управление энергопотреблением осуществляется через зависимый от поставщика BIOS, и OS ничего не знает нем. Один пример: когда пользователь устанавливает время ожидания для жесткого диска в APM BIOS, и это время истекает, BIOS останавливает жесткий диск без согласования с OS. Во-вторых, алгоритм APM встроен в BIOS, и все действия происходят вне контроля OS. Это означает, что пользователи могут решить проблемы с APM BIOS только путем перепрошивки его ROM; это очень опасная процедура, и если она завершится неудачно, система может оказаться в невосстановимом состоянии. В-третьих, реализация технологии APM зависит от поставщика, что означает дублирование усилий и если в BIOS одного из поставщиков будет найдена и исправлена ошибка, ее могли не исправить другие поставщики. Наконец, объем APM BIOS недостаточно велик для реализации сложной политики управления питанием, или такой политики, которая может хорошо адаптироваться к потребностям компьютера. Plug and Play BIOS (PNPBIOS) был неудобен во многих ситуациях. PNPBIOS это 16-битная технология, поэтому OS требовалось использовать 16-битную эмуляцию для взаимодействия с методами PNPBIOS. &os; драйвер APM документирован в странице справочника &man.apm.4;. Настройка <acronym>ACPI</acronym> &man.loader.8; загружает драйвер acpi.ko по умолчанию, его не надо встраивать в ядро. Причина в том, что с модулями проще работать, например переключиться на другой acpi.ko без пересборки ядра. Преимущество в упрощении тестирования. Другая причина в том, что запуск ACPI после старта системы не очень полезен и при некоторых условиях может приводить к краху. Если вы сомневаетесь, отключите ACPI совсем. Драйвер не должен и не может быть выгружен, поскольку системная шина используется для различных взаимодействий оборудования. ACPI может быть выключен с помощью утилиты &man.acpiconf.8;. Фактически большинство взаимодействий с ACPI может быть выполнено через &man.acpiconf.8;. В основном это означает, что если в выводе &man.dmesg.8; есть что-то об ACPI, он скорее всего работает. ACPI и APM не могут сосуществовать и должны использоваться раздельно. Каждый из них прервет загрузку, если обнаружит загруженный драйвер другого. В простейшей форме, ACPI может использоваться для перевода системы в спящий режим с помощью &man.acpiconf.8;, с флагом и параметром 1-5. Большинству пользователей нужен только параметр 1. Параметр 5 сделает мягкое завершение работы, так же как и: &prompt.root; halt -p Доступны и другие параметры. Обратитесь к странице справочника &man.acpiconf.8; за дополнительной информацией. Nate Lawson Написал Peter Schultz При помощи Tom Rhodes Использование и отладка &os; <acronym>ACPI</acronym> ACPI это фундаментально новый способ обнаружения устройств, управления энергопотреблением и предоставления стандартизированного доступа к различному оборудованию, ранее управлявшемуся BIOS. Был достигнут определенный прогресс в приспособлении ACPI к работе со всеми системами, но все еще встречаются ошибки в байткоде ACPI Machine Language (AML) некоторых материнских плат, незавершенные участки кода в подсистемах ядра &os; и ошибки в интерпретаторе &intel; ACPI-CA. Этот раздел предназначен для того, чтобы упростить ваше содействие разработчикам &os; ACPI в определении причин наблюдаемых вами проблем, выполнении отладки и выработке решения. Спасибо за помощь и надеемся, что мы сможем помочь в решении проблем вашей системы. Отправка отладочной информации Перед отправкой сообщения об ошибке убедитесь, что у вас последняя версия BIOS, и, если доступна, последняя версия firmware встроенного контроллера. Те из вас, кто желает составить сообщение о проблеме прямо сейчас, могут воспользоваться адресом freebsd-acpi@FreeBSD.org, отправив на него следующую информацию: Описание неправильного поведения, включая тип системы, модель и все, что приводит к появлению ошибки. Кроме того, сообщите настолько точно, насколько возможно, когда появилась ошибка, если ранее вы ее не видели. Вывод &man.dmesg.8; после boot -v, включая все сообщения, появившиеся при изучении ошибки. Вывод &man.dmesg.8; после boot -v с выключенным ACPI, если его отключение помогает решить проблему. Вывод sysctl hw.acpi. Это также хороший способ получения списка возможностей системы. URL где можно найти ваш ACPI Source Language (ASL). Не отправляйте ASL непосредственно в список рассылки, поскольку он может быть очень большим. Копия ASL может быть создана командой: &prompt.root; acpidump -t -d > name-system.asl (Замените вашим логином name и производителем/моделью system. Пример: njl-FooCo6000.asl) Большинство разработчиков читают &a.current;, но для уверенности, что проблему увидят, отправьте ее в &a.acpi.name;. Будьте терпеливы, все мы заняты полный рабочий день где-то еще. Если ваше сообщение не заметили сразу, мы возможно попросим вас отправить PR (сообщение о проблеме) через &man.send-pr.1;. При вводе PR, включайте ту же информацию, что запрошена выше. Это поможет нам отследить проблему и решить ее. Не отправляйте PR без предварительной отправки письма в &a.acpi.name;, поскольку мы используем PR в качестве напоминаний о существующих проблемах, а не как механизм сообщений об ошибках. Вероятно, о вашей проблеме кто-то уже сообщал ранее. Общие сведения ACPI представлен во всех современных компьютерах, соответствующих архитектурам ia32 (x86), ia64 (Itanium) и amd64 (AMD). Полный стандарт включает множество возможностей, в том числе управление производительностью CPU, уровнем питания, температурой, различными системами аккумуляторов, встроенными контроллерами и опросом шины. В большинстве систем стандарт реализован не полностью. Например, настольные системы обычно реализуют только опрос шины, а портативные компьютеры кроме того могут поддерживать управление охлаждением и энергопотреблением. Они также поддерживают приостановку и последующий запуск системы различного уровня сложности. ACPI-совместимые системы состоят из различных компонентов. Производители BIOS и чипсетов предоставляют различные жестко заданные таблицы, (например, FADT), которые определяют функции вроде карты APIC (используется для SMP), регистры настройки и простые значения параметров. Кроме того, предоставляется таблица байткода (Differentiated System Description Table, DSDT), определяющая древоподобное пространство имен устройств и методов. Драйвер ACPI должен прочесть заданные таблицы, реализовать интерпретатор для байткода, модифицировать драйвера устройств и ядро для приема информации от подсистемы ACPI. Для &os; &intel; предоставила интерпретатор (ACPI-CA), тот же что для Linux и NetBSD. Исходный код ACPI-CA находится в каталоге src/sys/contrib/dev/acpica. Код для приспособления ACPI-CA к работе в &os;, находится в src/sys/dev/acpica/Osd. Наконец, драйвера, реализующие различные ACPI устройства, находятся в src/sys/dev/acpica. Часто встречающиеся проблемы Для правильной работы ACPI все ее части должны работать правильно. Вот некоторые часто встречающиеся проблемы, в порядке частоты появления, и некоторые обходные пути или исправления. Приостановка/возобновление работы ACPI поддерживает три состояния приостановки в RAM (STR), S1-S3, и одно состояние приостановки на диск (STD), называемое S4. S5 это мягкое выключение и это нормальное состояние системы, когда она подключена к сети, но не включена. S4 может быть реализован двумя различными путями. S4BIOS это BIOS-поддерживаемая приостановка на диск. S4OS реализуется полностью операционной системой. Начните с проверки переменных sysctl hw.acpi, относящихся к приостановке (suspend). Вот результат для Thinkpad: hw.acpi.supported_sleep_state: S3 S4 S5 hw.acpi.s4bios: 0 Это означает, что мы можем использовать acpiconf -s для тестирования S3, S4OS, и S5. Если был единицей (1), это означает поддержку S4BIOS вместо S4OS. При тестировании приостановки/возобновления работы, начните с S1, если этот режим поддерживается. Это состояние скорее всего поддерживается, поскольку не требует слишком серьезной поддержки со стороны драйвера. Никто не реализовал S2, который похож на S1. Следующий режим для тестирования это S3. Это наиболее глубокое STR состояние, оно требует существенной поддержки со стороны драйвера, чтобы правильно реинициализировать оборудование. Если у вас возникли проблемы при выходе из этого состояния, отправьте письмо в рассылку &a.acpi.name;, но не ждите, что проблема будет обязательно решена, поскольку существует множество драйверов/оборудования, нуждающихся в дальнейшем тестировании и разработке. Для изоляции проблемы удалите из ядра столько драйверов, сколько возможно. Если это работает, вы можете выяснить, какой драйвер вызывает проблему путем загрузки драйверов до тех пор, пока опять не произойдет сбой. Обычно бинарные драйвера, такие как nvidia.ko, драйвера дисплея X11 и USB вызывают большинство проблем, а драйвера Ethernet интерфейсов как правило работают отлично. Если вы можете нормально загрузить/выгрузить драйвера, автоматизируйте этот процесс, поместив соответствующие команды в /etc/rc.suspend и /etc/rc.resume. Это закомментированные примеры выгрузки и загрузки драйверов. Попробуйте установить параметр в нуль (0), если ваш дисплей не включается после возобновления работы. Попробуйте установить большие или меньшие значения для , чтобы проверить, поможет ли это. Другой способ, который можно попробовать, это запуск последнего дистрибутива Linux с поддержкой ACPI и протестировать поддержку остановки/возобновления работы на том же оборудовании. Если она работает на Linux, проблема скорее всего в драйверах &os; и поиск драйвера, вызывающего проблему, поможет разрешить ситуацию. Имейте ввиду, что разработчики ACPI обычно не поддерживают другие драйверы (звук, ATA, и т.п.), так что все результаты работы по поиску проблемы возможно необходимо отправить в список рассылки &a.current.name; и человеку, поддерживающему драйвер. Если вы решитесь заняться отладкой, поместите соответствующий код (&man.printf.3;) в вызывающий проблему драйвер для обнаружения места, где прерывается функция восстановления. Наконец, попробуйте отключить ACPI и включить APM. Если приостановка/возобновление работает с APM, вам возможно лучше подойдет APM, особенно на старом оборудовании (до 2000). Включение корректной поддержки ACPI поставщиками оборудования требует времени и вероятно в старом оборудовании поддержка ACPI в BIOS была некорректна. Система останавливается (временно или постоянно) Большинство систем останавливаются в результате потери прерываний или шторма прерываний. В чипсетах существует много проблем, связанных с тем, как BIOS настраивает прерывания перед загрузкой, правильностью таблицы APIC (MADT), и маршрутизации System Control Interrupt (SCI). Шторм прерываний может быть обнаружен по потерянным прерываниям путем проверки вывода строки с acpi0 команды vmstat -i. Если счетчик увеличивается более, чем несколько раз в секунду, это шторм прерываний. Если система останавливается, попробуйте войти в DDB (CTRL ALTESC на консоли) и ввести show interrupts. Наиболее надежный способ избавиться от проблемы с прерываниями, это отключение поддержки APIC с помощью параметра loader.conf hint.apic.0.disabled="1". Паника Паника, связанная с ACPI, случается довольно редко и имеет наибольший приоритет исправления. Первый шаг это изоляция действий, приводящих к панике (если это возможно) и получение отладки. Следуйте инструкции по включению options DDB и настройке последовательной консоли (смотрите ) или настройке раздела &man.dump.8;. Вы можете получить отладочную информацию DDB с помощью tr. Если вы записываете отладку вручную, убедитесь, что переписали как минимум пять (5) строк снизу и пять (5) строк сверху. Затем попробуйте изолировать проблему, загрузившись с выключенным ACPI. Если это работает, вы можете изолировать подсистему ACPI, используя различные параметры . Обратитесь к странице справочника &man.acpi.4; за примерами. Система включается после приостановки или завершения работы Во-первых, попробуйте установить в &man.loader.conf.5; параметр hw.acpi.disable_on_poweroff="0". Это предотвращает отключение различных событий в ACPI во время завершения работы. В некоторых системах этот параметр необходимо установить в 1 (по умолчанию) по тем же причинам. Обычно это решает проблему, если система неожиданно включается после приостановки или отключения питания. Другие проблемы Если вы наблюдаете другие проблемы с ACPI (работа с внешним оборудованием, проблемы с обнаружением устройств, и т.д.), отправьте описание проблемы в список рассылки; однако, некоторые из этих проблем могут относиться к незавершенным частям подсистемы ACPI, поэтому может потребоваться время на их реализацию. Будьте терпеливы, и подготовьтесь к тестированию исправлений, которые мы можем вам выслать. <acronym>ASL</acronym>, <command>acpidump</command>, и <acronym>IASL</acronym> Наиболее часто встречается проблема, связанная с предоставлением поставщиками BIOS некорректного (или полностью ошибочного!) байткода. Это обычно проявляется появлением консольных сообщений ядра, подобных этому: ACPI-1287: *** Error: Method execution failed [\\_SB_.PCI0.LPC0.FIGD._STA] \\ (Node 0xc3f6d160), AE_NOT_FOUND Зачастую вы можете разрешить эти проблемы путем обновления BIOS до последней ревизии. Большинство консольных сообщений безвредны, но если существуют другие проблемы, такие как не работающий статус батареи, возможно существуют проблемы в AML. Байткод, известный как AML, компилируется из исходного текста на языке ASL. AML находится в таблице, известной как DSDT. Для получения копии ASL, используйте &man.acpidump.8;. Вы можете использовать оба параметра (показывать содержимое постоянных таблиц) и (дизассемблировать AML в ASL). Обратитесь к разделу Отправка отладочной информации за примером синтаксиса. Простейшая первая проверка, которую вы можете провести, это перекомпиляция ASL для поиска ошибок. Предупреждения обычно могут быть проигнорированы, но ошибки обычно не позволяют ACPI работать правильно. Для перекомпиляции ASL, выполните следующую команду: &prompt.root; iasl your.asl Исправление <acronym>ASL</acronym> В дальней перспективе, наша задача состоит в том, чтобы обеспечить поддержку ACPI практически для каждой системы без вмешательства пользователя. Однако, на данный момент мы все еще разрабатываем обходные пути для ошибок, которые часто делают поставщики BIOS. Интерпретатор µsoft; (acpi.sys и acpiec.sys) не занимается проверкой четкости соблюдения стандартов, поэтому многие поставщики BIOS, проверяющие ACPI только под &windows;, никогда не исправляют ASL. Мы надеемся продолжать обнаружение и документацию нестандартных поведений, позволяемых интерпретатором µsoft;, и воспроизводить их, чтобы &os; могла работать без необходимости исправления ASL пользователями. В качестве обходного пути для обнаружения неправильного поведения, вы можете исправить ASL вручную. Если исправления будут работать, пожалуйста отправьте &man.diff.1; между старым и новым ASL, чтобы мы могли реализовать обходной путь для неправильного поведения ACPI-CA, чтобы исправление вручную больше не требовалось. Вот список наиболее часто встречающихся проблем, их причин и способы исправления: OS зависимости Некоторые AML предполагают, что мир состоит из различных версий &windows;. Вы можете настроить &os;, чтобы она сообщала любое другое имя OS и посмотреть, исправит ли это имеющуюся проблему. Простой способ указания другого имени системы это установка переменной /boot/loader.conf hw.acpi.osname="Windows 2001" или в другое подобное значение, имеющееся в ASL. Отсутствие возврата значения Некоторые методы не возвращают значение явно, как того требует стандарт. Хотя ACPI-CA не обрабатывает эту ситуацию, в &os; существует обходной путь, позволяющей ей явно возвращать значение. Вы можете также добавить явные операторы Return (возврат) там, где требуется, если знаете, что значение должно быть возвращено. Для принудительного компилирования ASL командой iasl, используйте флаг . Перезапись <acronym>AML</acronym> по умолчанию После настройки your.asl для компиляции запустите: &prompt.root; iasl your.asl Вы можете добавить флаг для создания AML даже при наличии ошибок компиляции. Помните, что некоторые ошибки (например, отсутствующие операторы Return), автоматически обходятся интерпретатором. Файл DSDT.aml используется iasl по умолчанию. Вы можете загрузить его вместо ошибочной копии BIOS (которая остается в постоянной памяти) путем редактирования /boot/loader.conf: acpi_dsdt_load="YES" acpi_dsdt_name="/boot/DSDT.aml" Убедитесь, что скопировали DSDT.aml в каталог /boot. Получение отладочной информации <acronym>ACPI</acronym> Возможности отладки драйвера ACPI очень гибкие. Они позволяют вам указывать набор подсистем, а также уровень отладки. Подсистемы, которые вы хотите отлаживать, указываются как слои, и подразделяются на компоненты ACPI-CA (ACPI_ALL_COMPONENTS) и поддержку оборудования ACPI (ACPI_ALL_DRIVERS). Уровень отладки варьируется от ACPI_LV_ERROR (только сообщать об ошибках) до ACPI_LV_VERBOSE (все сообщения). Уровень отладки представляет собой битовую маску, поэтому возможна одновременная установка нескольких параметров, разделенных пробелами. На практике, при использовании для получения отладочной информации последовательной консоли, слишком большое количество информации может переполнить буфер консоли. Полный список отдельных слоев и уровней можно найти на странице справочника &man.acpi.4;. Вывод отладочной информации по умолчанию не включен. Для его включения добавьте параметр options ACPI_DEBUG к файлу настройки ядра, если ACPI встроен в ядро. Вы можете добавить параметр ACPI_DEBUG=1 в файл /etc/make.conf для глобального включения этого параметра. Если вы используете модуль acpi.ko , его можно пересобрать индивидуально: &prompt.root; cd /sys/modules/acpi/acpi && make clean && make ACPI_DEBUG=1 Установите acpi.ko в /boot/kernel и добавьте предпочитаемый уровень и слой к loader.conf. Этот пример включает отладочные сообщения для всех компонентов ACPI-CA и всех драйверов оборудования ACPI (CPU, LID и т.д.). Будут выводиться только сообщения об ошибках, наименьший уровень отладки. debug.acpi.layer="ACPI_ALL_COMPONENTS ACPI_ALL_DRIVERS" debug.acpi.level="ACPI_LV_ERROR" Если требуемая информация получается в результате определенного события (скажем, приостановка и восстановление), вы можете не изменять loader.conf и использовать для указания слоя и уровня sysctl после загрузки и подготовки системы к определенному событию. Имена переменных sysctl те же, что и имена параметров настройки в loader.conf. Ссылки Дальнейшую информацию о ACPI можно найти по следующим ссылкам: &a.acpi; Архивы списка рассылки ACPI Старые архивы списка рассылки ACPI Спецификация ACPI 2.0 Страницы справочника &os;: &man.acpi.4;, &man.acpi.thermal.4;, &man.acpidump.8;, &man.iasl.8;, &man.acpidb.8; Ресурс по отладке DSDT. (Использует в качестве примера Compaq, но обычно полезен.) diff --git a/ru_RU.KOI8-R/books/handbook/network-servers/chapter.sgml b/ru_RU.KOI8-R/books/handbook/network-servers/chapter.sgml index 0aadcc47e1..dc5d77e3af 100644 --- a/ru_RU.KOI8-R/books/handbook/network-servers/chapter.sgml +++ b/ru_RU.KOI8-R/books/handbook/network-servers/chapter.sgml @@ -1,5178 +1,5178 @@ Murray Stokely Реорганизовал Андрей Захватов Перевод на русский язык: Сетевые серверы Краткий обзор Эта глава посвящена некоторым наиболее часто используемым сетевым службам систем &unix;. Мы опишем, как установить, настроить, протестировать и поддерживать многие различные типы сетевых сервисов. Для облегчения вашей работы в главу включены примеры конфигурационных файлов. После чтения этой главы вы будете знать: Как управлять даемоном inetd. Как настроить сетевую файловую систему. Как настроить сетевой сервер информации для совместного использования учётных записей пользователей. Как настроить автоматическое конфигурирование сетевых параметров при помощи DHCP. Как настроить сервер имён. Как настроить Apache HTTP сервер. Как настроить файловый и принт сервер для &windows; клиентов с использованием Samba. Как синхронизировать дату и время, а также настроить сервер времени с протоколом NTP. Перед чтением этой главы вы должны: Понимать основы работы скриптов /etc/rc. Свободно владеть основными сетевыми терминами. Знать как устанавливать дополнительные программы сторонних разработчиков (). Chern Lee Текст предоставил <quote>Супер-сервер</quote> <application>inetd</application> Обзор &man.inetd.8; называют также супер-сервером Интернет, потому что он управляет соединениями к многим сервисам. Когда inetd принимает соединение, он определяет, для какой программы предназначено соединение, запускает соответствующий процесс и предоставляет ему сокет, ссылка на который передается процессу в качестве стандартных устройств ввода, вывода и сообщения об ошибках. Запуск одного экземпляра inetd уменьшает общую нагрузку на систему по сравнению с запуском каждого даемона индивидуально в выделенном режиме. В первую очередь inetd используется для вызова других даемонов, но несколько простых протоколов, таких, как chargen, auth и daytime, обслуживаются непосредственно. Этот раздел посвящен основам настройки inetd посредством его параметров командной строки и его конфигурационного файла, /etc/inetd.conf. Настройки inetd инициализируется посредством системы /etc/rc.conf. Параметр inetd_enable по умолчанию установлен в NO, однако часто включается утилитой sysinstall при выборе профиля среднего уровня безопасности. Указание inetd_enable="YES" или inetd_enable="NO" в файле /etc/rc.conf может задать или запретить запуск inetd во время загрузки. Кроме того, через inetd_flags даемону inetd могут быть переданы различные параметры командной строки. Параметры командной строки Формат вызова inetd: -d Включение отладочной информации. -l Включение регистрации успешных соединений. -w Включение механизма TCP Wrapping для внешних служб (по умолчанию включено). -W Включение механизма TCP Wrapping для внутренних служб, которые встроены в inetd (по умолчанию включено). -c maximum Определение максимального числа одновременных запусков каждой службы; по умолчание не ограничено. Может быть переопределено индивидуально для каждой службы при помощи параметра . -C rate Определение по умолчанию максимального количества раз, которое служба может быть вызвана с одного IP-адреса в минуту; по умолчанию не ограничено. Может быть переопределено для каждой службы параметром . -R rate Определяет максимальное количество раз, которое служба может быть вызвана в минуту; по умолчанию 256. Частота, равная 0, не ограничивает число вызовов. -a Задает один IP-адрес, к которому делается привязка. Альтернативно может быть указано имя хоста, и в этом случае используется соответствующий этому имени хоста адрес IPv4 или IPv6. Обычно имя хоста задается, когда inetd запускается в окружении &man.jail.8;, и в этом случае имя хоста соответствует этому &man.jail.8;-окружению. Если используется формат с именем хоста и требуется привязка как для IPv4, так и для IPv6, то для каждой привязки требуется запись с соответствующим типом протокола для каждой службы в файле /etc/inetd.conf. К примеру, службе на основе TCP потребуется две записи, в одной для протокола используется tcp4, а в другой используется tcp6. -p Задает альтернативный файл для хранения ID процесса. Эти параметры могут быть переданы в inetd при помощи inetd_flags в файле /etc/rc.conf. По умолчанию значение inetd_flags установлено в -wW, что включает механизм TCP wrapping для внутренних и внешних служб inetd. Новичкам эти параметры изменять и даже задавать их в файле /etc/rc.conf не нужно. Внешняя служба является даемоном вне inetd, который запускается при получении соединения к нему. С другой стороны, внутренней службой является услуга, которую inetd предоставляет сам. <filename>inetd.conf</filename> Настройка inetd управляется через файл /etc/inetd.conf. Если в файле /etc/inetd.conf делались изменения, то inetd можно заставить считать его конфигурационный файл повторно, послав сигнал HangUP процессу inetd, как показано здесь: Посылка сигнала HangUP процессу <application>inetd</application> &prompt.root; kill -HUP `cat /var/run/inetd.pid` В каждой строке конфигурационного файла описывается отдельный даемон. Комментариям в файле предшествует знак #. Файл /etc/inetd.conf имеет такой формат: service-name socket-type protocol {wait|nowait}[/max-child[/max-connections-per-ip-per-minute]] user[:group][/login-class] server-program server-program-arguments Пример записи для даемона ftpd, использующего IPv4: ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l service-name Это имя сервиса, предоставляемого конкретным даемоном. Оно должно соответствовать сервису, указанному в файле /etc/services. Здесь определяется, какой порт должен обслуживать inetd. При создании нового сервиса он должен помещаться сначала в файл /etc/services. socket-type stream, dgram, raw либо seqpacket. stream должен использоваться для ориентированных на соединение даемонов TCP, когда как dgram используется для даемонов, использующих транспортный протокол UDP. protocol Одно из следующих: Протокол Описание tcp, tcp4 TCP IPv4 udp, udp4 UDP IPv4 tcp6 TCP IPv6 udp6 UDP IPv6 tcp46 TCP как для IPv4, так и для v6 udp46 UDP как для IPv4, так и для v6 {wait|nowait}[/max-child[/max-connections-per-ip-per-minute]] определяет, может ли даемон, вызванный из inetd, работать с собственным сокетом, или нет. Сокеты типа должны использовать параметр , когда как даемоны с потоковыми сокетами, которые обычно многопоточны, должны использовать . обычно передает много сокетов одному даемону, когда как порождает даемон для каждого нового сокета. Максимальное число порожденных даемонов, которых может создать inetd, может быть задано параметром . Если нужно ограничение в десять экземпляров некоторого даемона, то после параметра нужно задать /10. Кроме , может быть задействован другой параметр, ограничивающий максимальное число соединений от одного источника. служит именно для этого. Здесь значение, равное десяти, будет ограничивать любой заданный IP-адрес на выполнение десяти попыток подключения к некоторому сервису в минуту. Это полезно для предотвращения намеренного или ненамеренного расходования ресурсов и атак типа Denial of Service (DoS) на машину. В этом поле или обязательны. и опциональны. Многопоточный даемон типа stream без ограничений или будет определен просто вот так: nowait. Тот же самый даемон с ограничением в максимум десять даемонов будет определен так: nowait/10. Наконец, та же конфигурация с ограничением в двадцать соединений на IP-адрес в минуту и общим ограничением в максимум десять порожденных даемонов выглядит так: nowait/10/20. Эти параметры, используемые все со значениями по умолчанию даемоном fingerd, имеют такой вид: finger stream tcp nowait/3/10 nobody /usr/libexec/fingerd fingerd -s user Это имя пользователя, под которым должен работать соответствующий даемон. Чаще всего даемоны работают как пользователь root. Для обеспечения безопасности некоторые серверы запускаются как пользователь daemon или как пользователь с минимальными правами nobody. server-program Полный маршрут к даемону, который будет выполняться при установлении соединения. Если даемон является сервисом, предоставляемым самим inetd, то нужно задать ключевое слово . server-program-arguments Этот параметр работает вместе с параметром , задавая параметры, начиная с argv[0], передаваемые даемону при запуске. Если в командной строке задано mydaemon -d, то mydaemon -d будет являться значением для . И снова, если даемон является внутренней службой, то здесь нужно использовать . Безопасность В зависимости от схемы безопасности, выбранной при установке, многие из даемонов inetd могут оказаться по умолчанию включенными. Если нет особой нужды в некотором даемоне, то выключите его! Поместите знак # перед ненужным даемоном в /etc/inetd.conf и пошлите сигнал для inetd. Некоторые даемоны, такие, как fingerd, вообще нежелательны, потому что они дают атакующему слишком много информации. Некоторые даемоны не заботятся о безопасности и имеют большие таймауты для соединений или вообще их не имеют. Это позволяет атакующему неспешно устанавливать соединения к конкретному даемону, истощая имеющиеся ресурсы. Может оказаться полезным задать для некоторых даемонов ограничения и . По умолчанию механизм TCP wrapping включен. Обратитесь к справочной странице по &man.hosts.access.5; для получения более подробной информации о задании ограничений TCP для различных даемонов, запускаемых посредством inetd. Разное daytime, time, echo, discard, chargen и auth все являются услугами, предоставляемыми самим inetd. Сервис auth предоставляет идентификационные сетевые услуги (ident, identd) и поддается настройке. Обратитесь к справочной странице по &man.inetd.8; для получения более подробной информации. Tom Rhodes Реорганизация и улучшения Bill Swingle Текст создал Network File System (NFS) NFS Кроме поддержки многих прочих типов файловых систем, во FreeBSD встроена поддержка сетевой файловой системы (Network File System), известной как NFS. NFS позволяет системе использовать каталоги и файлы совместно с другими машинами, посредством сети. Посредством NFS пользователи и программы могут получать доступ к файлам на удалённых системах точно так же, как если бы это были файлы на собственных дисках. Вот некоторые из наиболее заметных преимуществ, которые даёт использование NFS: Отдельно взятые рабочие станции используют меньше собственного дискового пространства, так как совместно используемые данные могут храниться на одной отдельной машине и быть доступными для других машин в сети. Пользователям не нужно иметь домашние каталоги, отдельные для каждой машины в вашей сети. Домашние каталоги могут располагаться на сервере NFS и их можно сделать доступными отовсюду в сети. Устройства хранения информации, такие, как дискеты, приводы CD-ROM и устройства &iomegazip;, могут использоваться другими машинами в сети. Это может привести к уменьшению переносимых устройств хранения информации в сети. Как работает <acronym>NFS</acronym> NFS строится по крайней мере из двух основных частей: сервера и одного или большего количества клиентов. Клиент обращается к данным, находящимся на сервере, в режиме удалённого доступа. Для того, чтобы это нормально функционировало, нужно настроить и запустить несколько процессов. В &os; 5.X, утилита portmap была заменена на утилиту rpcbind. Таким образом, при использовании &os; 5.X пользователю необходимо заменить в последующих примерах все команды portmap на rpcbind. На сервере работают следующие даемоны: NFS сервер файл сервер unix клиенты portmap mountd nfsd Даемон Описание nfsd Даемон NFS, обслуживающий запросы от клиентов NFS. mountd Даемон монтирования NFS, который выполняет запросы, передаваемые ему от &man.nfsd.8;. portmap Даемон отображения портов позволяет клиентам NFS определить порт, используемый сервером NFS. Клиент может запустить также даемон, называемый nfsiod. nfsiod обслуживает запросы, поступающие от сервера от сервера NFS. Он необязателен, увеличивает производительность, однако для нормальной и правильной работы не требуется. Для получения дополнительной информации обратитесь к разделу справочной системы о &man.nfsiod.8;. Настройка <acronym>NFS</acronym> NFS настройка Настройка NFS является достаточно незамысловатым процессом. Все процессы, которые должны быть запущены, могут быть запущены во время загрузки посредством нескольких модификаций в вашем файле /etc/rc.conf. Проверьте, что на NFS-сервере в файле /etc/rc.conf имеются такие строки: portmap_enable="YES" nfs_server_enable="YES" nfs_server_flags="-u -t -n 4" mountd_flags="-r" mountd запускается автоматически, если включена функция сервера NFS. На клиенте убедитесь, что в файле /etc/rc.conf присутствует такой параметр: nfs_client_enable="YES" Файл /etc/exports определяет, какие файловые системы на вашем сервере NFS будут экспортироваться (иногда их называют совместно используемыми). Каждая строка в /etc/exports задаёт файловую систему, которая будет экспортироваться и какие машины будут иметь к ней доступ. Кроме машин, имеющих доступ, могут задаваться другие параметры, влияющие на характеристики доступа. Имеется полный набор параметров, которые можно использовать, но здесь пойдёт речь лишь о некоторых из них. Описания остальных параметров можно найти на страницах справочной системы по &man.exports.5;. Вот несколько примерных строк из файла /etc/exports: NFS примеры экспортирования В следующих примерах даётся общая идея того, как экспортировать файловые системы, хотя конкретные параметры могут отличаться в зависимости от ваших условий и конфигурации сети. К примеру, чтобы экспортировать каталог /cdrom для трёх машин, находящихся в том же самом домене, что и сервер (поэтому отсутствует доменное имя для каждой машины) или для которых имеются записи в файле /etc/hosts. Флаг указывает на использование экспортируемой файловой системы в режиме только чтения. С этим флагом удалённая система не сможет никоим образом изменить экспортируемую файловую систему. /cdrom -ro host1 host2 host3 В следующей строке экспортируется файловая система /home, которая становится доступной трем хостам, указанным по их IP-адресам. Это полезно, если у вас есть собственная сеть без настроенного сервера DNS. Как вариант, файл /etc/hosts может содержать внутренние имена хостов; пожалуйста, обратитесь к справочную систему по &man.hosts.5; для получения дополнительной информации. Флаг позволяет рассматривать подкаталоги в качестве точек монтирования. Другими словами, это не монтирование подкаталогов, но разрешение клиентам монтировать только каталоги, которые им требуются или нужны. /home -alldirs 10.0.0.2 10.0.0.3 10.0.0.4 В строке, приведённой ниже, файловая система /a экспортируется таким образом, что она доступна двум клиентам из других доменов. Параметр позволяет пользователю root удалённой системы осуществлять запись на экспортируемую файловую систему как пользователь root. Если параметр -maproot=root не задан, то даже если пользователь имеет права доступа root на удалённой системе, он не сможет модифицировать файлы на экспортированной файловой системе. /a -maproot=root host.example.com box.example.org Для того, чтобы клиент смог обратиться к экспортированной файловой системе, он должен иметь права сделать это. Проверьте, что клиент указан в вашем файле /etc/exports. В файле /etc/exports каждая строка содержит информацию об экспортировании для отдельной файловой системы для отдельно взятого хоста. Удалённый хост может быть задан только один раз для каждой файловой системы, и может иметь только одну запись, используемую по умолчанию, для каждой локальной файловой системы. К примеру, предположим, что /usr является отдельной файловой системой. Следующий /etc/exports будет некорректен: # Invalid when /usr is one file system /usr/src client /usr/ports client Одна файловая система, /usr, имеет две строки, задающие экспортирование для одного и того же хоста, client. Правильный формат в этом случае таков: /usr/src /usr/ports client Свойства отдельной файловой системы, экспортируемой некоторому хосту, должны задаваться в одной строке. Строки без указания клиента воспринимаются как отдельный хост. Это ограничивает то, как вы можете экспортировать файловые системы, но для большинства это не проблема. Ниже приведён пример правильного списка экспортирования, где /usr и /exports являются локальными файловыми системами: # Экспортируем src и ports для client01 и client02, но # только client01 имеет права пользователя root на них /usr/src /usr/ports -maproot=root client01 /usr/src /usr/ports client02 # Клиентские машины имеют пользователя root и могут монтировать всё в # каталоге /exports. Кто угодно может монтировать /exports/obj в режиме чтения /exports -alldirs -maproot=root client01 client02 /exports/obj -ro Вы должны перезапустить mountd после того, как изменили /etc/exports, чтобы изменения вступили в силу. Это может быть достигнуто посылкой сигнала HUP процессу mountd: &prompt.root; kill -HUP `cat /var/run/mountd.pid` Как вариант, при перезагрузке FreeBSD всё настроится правильно. Хотя выполнять перезагрузку вовсе не обязательно. Выполнение следующих команд пользователем root запустит всё, что нужно. На сервере NFS: &prompt.root; portmap &prompt.root; nfsd -u -t -n 4 &prompt.root; mountd -r На клиенте NFS: &prompt.root; nfsiod -n 4 Теперь всё должно быть готово к реальному монтированию удалённой файловой системы. В приводимых примерах сервер будет носить имя server, а клиент будет носить имя client. Если вы только хотите временно смонтировать удалённую файловую систему, или всего лишь протестировать ваши настройки, то просто запустите команды, подобные приводимым здесь, работая как пользователь root на клиентской машине: NFS монтирование &prompt.root; mount server:/home /mnt По этой команде файловая система /home на сервере будет смонтирована в каталог /mnt на клиенте. Если всё настроено правильно, вы сможете войти в каталог /mnt на клиенте и увидеть файлы, находящиеся на сервере. Если вы хотите автоматически монтировать удалённую файловую систему при каждой загрузке компьютера, добавьте файловую систему в /etc/fstab. Вот пример: server:/home /mnt nfs rw 0 0 На страницах справочной системы по &man.fstab.5; перечислены все доступные параметры. Практическое использование У NFS есть много вариантов практического применения. Ниже приводится несколько наиболее широко распространённых способов её использования: NFS использование Настройка несколько машин для совместного использования CDROM или других носителей. Это более дешёвый и зачастую более удобный способ установки программного обеспечения на несколько машин. В больших сетях может оказаться более удобным настроить центральный сервер NFS, на котором размещаются все домашние каталоги пользователей. Эти домашние каталоги могут затем экспортироваться в сеть так, что пользователи всегда будут иметь один и тот же домашний каталог вне зависимости от того, на какой рабочей станции они работают. Несколько машин могут иметь общий каталог /usr/ports/distfiles. Таким образом, когда вам нужно будет установить порт на несколько машин, вы сможете быстро получить доступ к исходным текстам без их загрузки на каждой машине. Wylie Stilwell Текст предоставил Chern Lee Текст переписал Автоматическое монтирование с <application>amd</application> amd даемон автоматического монтирования &man.amd.8; (даемон автоматического монтирования) автоматически монтирует удалённую файловую систему, как только происходит обращение к файлу или каталогу в этой файловой системе. Кроме того, файловые системы, которые были неактивны некоторое время, будут автоматически размонтированы даемоном amd. Использование amd является простой альтернативой статическому монтированию, так как в последнем случае обычно всё должно быть описано в файле /etc/fstab. amd работает, сам выступая как сервер NFS для каталогов /host и /net. Когда происходит обращение к файлу в одном из этих каталогов, amd ищет соответствующий удаленный ресурс для монтирования и автоматически его монтирует. /net используется для монтирования экспортируемой файловой системы по адресу IP, когда как каталог /host используется для монтирования ресурса по удаленному имени хоста. Обращение к файлу в каталоге /host/foobar/usr укажет amd на выполнение попытки монтирования ресурса /usr, который находится на хосте foobar. Монтирование ресурса при помощи <application>amd</application> Вы можете посмотреть доступные для монтирования ресурсы отдалённого хоста командой showmount. К примеру, чтобы посмотреть ресурсы хоста с именем foobar, вы можете использовать: &prompt.user; showmount -e foobar Exports list on foobar: /usr 10.10.10.0 /a 10.10.10.0 &prompt.user; cd /host/foobar/usr Как видно из примера, showmount показывает /usr как экспортируемый ресурс. При переходе в каталог /host/foobar/usr даемон amd пытается разрешить имя хоста foobar и автоматически смонтировать требуемый ресурс. amd может быть запущен из скриптов начальной загрузки, если поместить такую строку в файл /etc/rc.conf: amd_enable="YES" Кроме того, даемону amd могут быть переданы настроечные флаги через параметр amd_flags. По умолчанию amd_flags настроен следующим образом: amd_flags="-a /.amd_mnt -l syslog /host /etc/amd.map /net /etc/amd.map" Файл /etc/amd.map задает опции, используемые по умолчанию при монтировании экспортируемых ресурсов. В файле /etc/amd.conf заданы настройки некоторых более сложных возможностей amd. Обратитесь к справочным страницам по &man.amd.8; и &man.amd.conf.5; для получения более полной информации. John Lind Текст предоставил Проблемы взаимодействия с другими системами Некоторые сетевые адаптеры для систем PC с шиной ISA имеют ограничения, которые могут привести к серьезным проблемам в сети, в частности, с NFS. Эти проблемы не специфичны для FreeBSD, однако эту систему они затрагивают. Проблема, которая возникает практически всегда при работе по сети систем PC (FreeBSD) с высокопроизводительными рабочими станциями, выпущенными такими производителями, как Silicon Graphics, Inc. и Sun Microsystems, Inc. Монтирование по протоколу NFS будет работать нормально, и некоторые операции также будут выполняться успешно, но неожиданно сервер окажется недоступным для клиент, хотя запросы к и от других систем будут продолжаться обрабатываться. Такое встречается с клиентскими системами, не зависимо от того, является ли клиент машиной с FreeBSD или рабочей станцией. Во многих системах при возникновении этой проблемы нет способа корректно завершить работу клиента. Единственным выходом зачастую является холодная перезагрузка клиента, потому что ситуация с NFS не может быть разрешена. Хотя правильным решением является установка более производительного и скоростного сетевого адаптера на систему FreeBSD, имеется простое решение, приводящее к удовлетворительным результатам. Если система FreeBSD является сервером, укажите параметр на клиенте при монтировании. Если система FreeBSD является клиентом, то смонтируйте файловую систему NFS с параметром . Эти параметры могут быть заданы в четвертом поле записи в файле fstab клиента при автоматическом монтировании, или при помощи параметра в команде &man.mount.8; при монтировании вручную. Нужно отметить, что имеется также другая проблема, ошибочно принимаемая за приведенную выше, когда серверы и клиенты NFS находятся в разных сетях. Если это тот самый случай, проверьте, что ваши маршрутизаторы пропускают нужную информацию UDP, в противном случае вы ничего не получите, что бы вы ни предпринимали. В следующих примерах fastws является именем хоста (интерфейса) высокопроизводительной рабочей станции, а freebox является именем хоста (интерфейса) системы FreeBSD со слабым сетевым адаптером. Кроме того, /sharedfs будет являться экспортируемой через NFS файловой системой (обратитесь к страницам справочной системы по команде &man.exports.5;), а /project будет точкой монтирования экспортируемой файловой системы на клиенте. В любом случае, отметьте, что для вашего приложения могут понадобиться дополнительные параметры, такие, как , или . Пример системы FreeBSD (freebox) как клиента в файле /etc/fstab на машине freebox: fastws:/sharedfs /project nfs rw,-r=1024 0 0 Команда, выдаваемая вручную на машине freebox: &prompt.root; mount -t nfs -o -r=1024 fastws:/sharedfs /project Пример системы FreeBSD в качестве сервера в файле /etc/fstab на машине fastws: freebox:/sharedfs /project nfs rw,-w=1024 0 0 Команда, выдаваемая вручную на машине fastws: &prompt.root; mount -t nfs -o -w=1024 freebox:/sharedfs /project Практически все 16-разрядные сетевые адаптеры позволят работать без указанных выше ограничений на размер блоков при чтении и записи. Для тех, кто интересуется, ниже описывается, что же происходит в при появлении этой ошибки, и объясняется, почему ее невозможно устранить. Как правило, NFS работает с блоками размером 8 килобайт (хотя отдельные фрагменты могут иметь меньшие размеры). Так, пакет Ethernet имеет максимальный размер около 1500 байт, то блок NFS разбивается на несколько пакетов Ethernet, хотя на более высоком уровне это все тот же единый блок, который должен быть принят, собран и подтвержден как один блок. Высокопроизводительные рабочие станции могут посылать пакеты, которые соответствуют одному блоку NFS, сразу друг за другом, насколько это позволяет делать стандарт. На слабых, низкопроизводительных адаптерах пакеты, пришедшие позже, накладываются поверх ранее пришедших пакетов того же самого блока до того, как они могут быть переданы хосту и блок как единое целое не может быть собран или подтвержден. В результате рабочая станция входит в ситуацию таймаута и пытается повторить передачу, но уже с полным блоком в 8 КБ, и процесс будет повторяться снова, до бесконечности. Задав размер блока меньше размера пакета Ethernet, мы достигаем того, что любой полностью полученный пакет Ethernet может быть подтвержден индивидуально, и избежим тупиковую ситуацию. Наложение пакетов может все еще проявляться, когда высокопроизводительные рабочие станции сбрасывают данные на PC-систему, однако повторение этой ситуации не обязательно с более скоростными адаптерами с блоками NFS. Когда происходит наложение, затронутые блоки будут переданы снова, и скорее всего, они будут получены, собраны и подтверждены. Bill Swingle Текст создал Eric Ogren Внёс добавления Udo Erdelhoff Network Information System (NIS/YP) Что это такое? NIS Solaris HP-UX AIX Linux NetBSD OpenBSD NIS, что является сокращением от Network Information Services (Сетевые Информационные Службы), которые были разработаны компанией Sun Microsystems для централизованного администрирования систем &unix; (изначально &sunos;). В настоящее время эти службы практически стали промышленным стандартом; все основные &unix;-подобные системы (&solaris;, HP-UX, &aix;, Linux, NetBSD, OpenBSD, FreeBSD и так далее) поддерживают NIS. yellow pages NIS NIS первоначально назывались Yellow Pages (или yp), но из-за проблем с торговым знаком Sun изменила это название. Старое название (и yp) всё ещё часто употребляется. NIS домены Это система клиент/сервер на основе вызовов RPC, которая позволяет группе машин в одном домене NIS совместно использовать общий набор конфигурационных файлов. Системный администратор может настроить клиентскую систему NIS только с минимальной настроечной информацией, а затем добавлять, удалять и модифицировать настроечную информацию из одного места. Windows NT Это похоже на систему доменов &windowsnt;; хотя их внутренние реализации не так уж и похожи, основные функции сравнимы. Термины/программы, о которых вы должны знать Существует несколько терминов и некоторое количество пользовательских программ, которые будут нужны, когда вы будете пытаться сделать NIS во FreeBSD, и в случае создания сервера, и в случае работы в качестве клиента NIS: portmap Термин Описание Имя домена NIS Главный сервер NIS и все его клиенты (включая вторичные серверы), имеют доменное имя NIS. Как и в случае с именем домена &windowsnt;, имя домена NIS не имеет ничего общего с DNS. portmap Для обеспечения работы RPC (Remote Procedure Call, Удалённого Вызова Процедур, сетевого протокола, используемого NIS), должен быть запущен даемон portmap. Если даемон portmap не запущен, невозможно будет запустить сервер NIS, или работать как NIS-клиент. ypbind Связывает NIS-клиента с его NIS-сервером. Он определяет имя NIS-домена системы, и при помощи RPC подключается к серверу. ypbind является основой клиент-серверного взаимодействия в среде NIS; если на клиентской машине программа ypbind перестанет работать, то эта машина не сможет получить доступ к серверу NIS. ypserv Программа ypserv, которая должна запускаться только на серверах NIS: это и есть сервер NIS. Если &man.ypserv.8; перестанет работать, то сервер не сможет отвечать на запросы NIS (к счастью, на этот случай предусмотрен вторичный сервер). Есть несколько реализаций NIS (к FreeBSD это не относится), в которых не производится попыток подключиться к другому серверу, если ранее используемый сервер перестал работать. Зачастую единственным средством, помогающим в этой ситуации, является перезапуск серверного процесса (или сервера полностью) или процесса ypbind на клиентской машине. rpc.yppasswdd Программа rpc.yppasswdd, другой процесс, который запускается только на главных NIS-серверах: это даемон, позволяющий клиентам NIS изменять свои пароли NIS. Если этот даемон не запущен, то пользователи должны будут входить на основной сервер NIS и там менять свои пароли. Как это работает? В системе NIS существует три типа хостов: основные (master) серверы, вторичные (slave) серверы и клиентские машины. Серверы выполняют роль централизованного хранилища информации о конфигурации хостов. Основные серверы хранят оригиналы этой информации, когда как вторичные серверы хранят ее копию для обеспечения избыточности. Клиенты связываются с серверами, чтобы предоставить им эту информацию. Информация во многих файлах может совместно использоваться следующим образом. Файлы master.passwd, group и hosts используются совместно через NIS. Когда процессу, работающему на клиентской машине, требуется информация, как правило, находящаяся в этих файлах локально, то он делает запрос к серверу NIS, с которым связан. Типы машин NIS главный сервер Основной сервер NIS. Такой сервер, по аналогии с первичным контроллером домена &windowsnt;, хранит файлы, используемые всеми клиентами NIS. Файлы passwd, group и различные другие файлы, используемые клиентами NIS, находятся на основном сервере. Возможно использование одной машины в качестве сервера для более чем одного домена NIS. Однако, в этом введении такая ситуация не рассматривается, и предполагается менее масштабное использование NIS. NIS вторичный сервер Вторичные серверы NIS. Похожие на вторичные контроллеры доменов &windowsnt;, вторичные серверы NIS содержат копии оригинальных файлов данных NIS. Вторичные серверы NIS обеспечивают избыточность, что нужно в критичных приложениях. Они также помогают распределять нагрузку на основной сервер: клиенты NIS всегда подключаются к тому серверу NIS, который ответил первым, в том числе и к вторичным серверам. NIS клиент Клиенты NIS. Клиенты NIS, как и большинство рабочих станций &windowsnt;, аутентифицируются на сервере NIS (или на контроллере домена &windowsnt; для рабочих станций &windowsnt;) во время входа в систему. Использование NIS/YP В этом разделе приводится пример настройки NIS. В этом разделе предполагается, что вы работаете с FreeBSD 3.3 или выше. Указания, приводимые здесь, скорее всего, будут работать с любой версией FreeBSD, выше, чем 3.0, однако нет гарантий, что это на самом деле так. Планирование Давайте предположим, что вы являетесь администратором в маленькой университетской лаборатории. В настоящий момент в этой лаборатории с 15 машинами отсутствует единая точка администрирования; на каждой машине имеются собственные файлы /etc/passwd и /etc/master.passwd. Эти файлы синхронизируются друг с другом только вручную; сейчас, когда вы добавляете пользователя в лаборатории, вы должны выполнить команду adduser на всех 15 машинах. Понятно, что такое положение вещей нужно исправлять, так что вы решили перевести сеть на использование NIS, используя две машины в качестве серверов. Итак, конфигурация лаборатории сейчас выглядит примерно так: Имя машины IP-адрес Роль машины ellington 10.0.0.2 Основной сервер NIS coltrane 10.0.0.3 Вторичный сервер NIS basie 10.0.0.4 Факультетская рабочая станция bird 10.0.0.5 Клиентская машина cli[1-11] 10.0.0.[6-17] Другие клиентские машины Если вы определяете схему NIS первый раз, ее нужно хорошо обдумать. Вне зависимости от размеров вашей сети, есть несколько ключевых моментов, которые требуют принятия решений. Выбор имени домена NIS NIS имя домена Это имя не должно быть именем домена, которое вы использовали. Более точно это имя называется именем домена NIS. Когда клиент рассылает запросы на получение информации, он включает в них имя домена NIS, частью которого является. Таким способом многие сервера в сети могут указать, какой сервер на какой запрос должен отвечать. Думайте о домене NIS как об имени группы хостов, которые каким-то образом связаны. Некоторые организации в качестве имени домена NIS используют свой домен Интернет. Это не рекомендуется, так как может вызвать проблемы в процессе решения сетевых проблем. Имя домена NIS должно быть уникальным в пределах вашей сети и хорошо, если оно будет описывать группу машин, которые представляет. Например, художественный отдел в компании Acme Inc. может находиться в домене NIS с именем acme-art. В нашем примере положим, что мы выбрали имя test-domain. SunOS Несмотря на это, некоторые операционные системы (в частности, &sunos;) используют свое имя домена NIS в качестве имени домена Интернет. Если одна или более машин в вашей сети имеют такие ограничения, вы обязаны использовать имя домена Интернет в качестве имени домена NIS. Требования к серверу Есть несколько вещей, которые нужно иметь в виду при выборе машины для использования в качестве сервера NIS. Одной из обескураживающей вещью, касающейся NIS, является уровень зависимости клиентов от серверов. Если клиент не может подключиться к серверу своего домена NIS, зачастую машину просто становится нельзя использовать. Отсутствие информации о пользователях и группах приводит к временной остановке работы большинства систем. Зная это, вы должны выбрать машину, которая не должна подвергаться частым перезагрузкам и не используется для разработки. Сервер NIS в идеале должен быть отдельно стоящей машиной, единственным целью в жизни которой является быть сервером NIS. Если вы работаете в сети, которая не так уж сильно загружена, то можно поместить сервер NIS на машине, на которой запущены и другие сервисы, просто имейте в виду, что если сервер NIS становится недоступным, то это негативно отражается на всех клиентах NIS. Серверы NIS Оригинальные копии всей информации NIS хранится на единственной машине, которая называется главным сервером NIS. Базы данных, которые используются для хранения информации, называются картами NIS. Во FreeBSD эти карты хранятся в /var/yp/[domainname], где [domainname] является именем обслуживаемого домена NIS. Один сервер NIS может поддерживать одновременно несколько доменов, так что есть возможность иметь несколько таких каталогов, по одному на каждый обслуживаемый домен. Каждый домен будет иметь свой собственный независимый от других набор карт. Основной и вторичный серверы обслуживают все запросы NIS с помощью даемона ypserv. ypserv отвечает за получение входящих запросов от клиентов NIS, распознавание запрашиваемого домена и отображение имени в путь к соответствующему файлы базы данных, а также передаче информации из базы данных обратно клиенту. Настройка основного сервера NIS NIS настройка сервера Настройка основного сервера NIS может оказаться сравнительно простой, в зависимости от ваших потребностей. В поставку FreeBSD сразу включена поддержка NIS. Все, что вам нужно, это добавить следующие строки в файл /etc/rc.conf, а FreeBSD сделает за вас всё остальное.. nisdomainname="test-domain" В этой строке задается имя домена NIS, которое будет test-domain, еще до настройки сети (например, после перезагрузки). nis_server_enable="YES" Здесь указывается FreeBSD на запуск процессов серверов NIS, когда дело доходит до сетевых настроек. nis_yppasswdd_enable="YES" Здесь указывается на запуск даемона rpc.yppasswdd, который, как это отмечено выше, позволит пользователям менять свой пароль NIS с клиентской машины. В зависимости от ваших настроек NIS, вам могут понадобиться дополнительные строки. Обратитесь к разделу о серверах NIS, которые являются и клиентами NIS ниже для получения подробной информации. А теперь всё, что вам нужно сделать, это запустить команду /etc/netstart, работая как администратор. По ней произойдет настройка всего, при этом будут использоваться значения, заданные в файле /etc/rc.conf. Инициализация карт NIS NIS карты Карты NIS являются файлами баз данных, которые хранятся в каталоге /var/yp. Они генерируются из конфигурационных файлов, находящихся в каталоге /etc основного сервера NIS, за одним исключением: файл /etc/master.passwd. На это есть весомая причина, вам не нужно распространять пароли пользователя root и других административных пользователей на все серверы в домене NIS. По этой причине, прежде чем инициализировать карты NIS, вы должны сделать вот что: &prompt.root; cp /etc/master.passwd /var/yp/master.passwd &prompt.root; cd /var/yp &prompt.root; vi master.passwd Вы должны удалить все записи, касающиеся системных пользователей (bin, tty, kmem, games и так далее), а также записи, которые вы не хотите распространять клиентам NIS (например, root и другие пользователи с UID, равным 0 (администраторы)). Проверьте, чтобы файл /var/yp/master.passwd был недоступен для записи ни для группы, ни для остальных пользователей (режим доступа 600)! Воспользуйтесь командой chmod, если это нужно. Tru64 UNIX Когда с этим будет покончено, самое время инициализировать карты NIS! В поставку FreeBSD включен скрипт с именем ypinit, который делает это (обратитесь к его справочной странице за дополнительной информацией). Отметьте, что этот скрипт имеется в большинстве операционных систем &unix;, но не во всех. В системе Digital Unix/Compaq Tru64 UNIX он называется ypsetup. Так как мы генерируем карты для главного сервера NIS, то при вызове программы ypinit мы передаем ей параметр . Для генерации карт NIS в предположении, что вы уже сделали шаги, описанные выше, выполните следующее: ellington&prompt.root; ypinit -m test-domain Server Type: MASTER Domain: test-domain Creating an YP server will require that you answer a few questions. Questions will all be asked at the beginning of the procedure. Do you want this procedure to quit on non-fatal errors? [y/n: n] n Ok, please remember to go back and redo manually whatever fails. If you don't, something might not work. At this point, we have to construct a list of this domains YP servers. rod.darktech.org is already known as master server. Please continue to add any slave servers, one per line. When you are done with the list, type a <control D>. master server : ellington next host to add: coltrane next host to add: ^D The current list of NIS servers looks like this: ellington coltrane Is this correct? [y/n: y] y [..вывод при генерации карт..] NIS Map update completed. ellington has been setup as an YP master server without any errors. Программа ypinit должна была создать файл /var/yp/Makefile из /var/yp/Makefile.dist. При создании этого файла предполагается, что вы работаете в окружении с единственным сервером NIS и только с машинами FreeBSD. Так как в домене test-domain имеется также и вторичный сервер, то вы должны отредактировать файл /var/yp/Makefile: ellington&prompt.root; vi /var/yp/Makefile Вы должны закомментировать строку, в которой указано NOPUSH = "True" (она уже не раскомментирована). Настройка вторичного сервера NIS NIS вторичный сервер Настройка вторичного сервера NIS осуществляется ещё проще, чем настройка главного сервера. Войдите на вторичный сервер и отредактируйте файл /etc/rc.conf точно также, как вы делали это ранее. Единственным отличием является то, что при запуске программы ypinit мы теперь должны использовать опцию . Применение опции требует также указание имени главного сервера NIS, так что наша команда должна выглядеть так: coltrane&prompt.root; ypinit -s ellington test-domain Server Type: SLAVE Domain: test-domain Master: ellington Creating an YP server will require that you answer a few questions. Questions will all be asked at the beginning of the procedure. Do you want this procedure to quit on non-fatal errors? [y/n: n] n Ok, please remember to go back and redo manually whatever fails. If you don't, something might not work. There will be no further questions. The remainder of the procedure should take a few minutes, to copy the databases from ellington. Transferring netgroup... ypxfr: Exiting: Map successfully transferred Transferring netgroup.byuser... ypxfr: Exiting: Map successfully transferred Transferring netgroup.byhost... ypxfr: Exiting: Map successfully transferred Transferring master.passwd.byuid... ypxfr: Exiting: Map successfully transferred Transferring passwd.byuid... ypxfr: Exiting: Map successfully transferred Transferring passwd.byname... ypxfr: Exiting: Map successfully transferred Transferring group.bygid... ypxfr: Exiting: Map successfully transferred Transferring group.byname... ypxfr: Exiting: Map successfully transferred Transferring services.byname... ypxfr: Exiting: Map successfully transferred Transferring rpc.bynumber... ypxfr: Exiting: Map successfully transferred Transferring rpc.byname... ypxfr: Exiting: Map successfully transferred Transferring protocols.byname... ypxfr: Exiting: Map successfully transferred Transferring master.passwd.byname... ypxfr: Exiting: Map successfully transferred Transferring networks.byname... ypxfr: Exiting: Map successfully transferred Transferring networks.byaddr... ypxfr: Exiting: Map successfully transferred Transferring netid.byname... ypxfr: Exiting: Map successfully transferred Transferring hosts.byaddr... ypxfr: Exiting: Map successfully transferred Transferring protocols.bynumber... ypxfr: Exiting: Map successfully transferred Transferring ypservers... ypxfr: Exiting: Map successfully transferred Transferring hosts.byname... ypxfr: Exiting: Map successfully transferred coltrane has been setup as an YP slave server without any errors. Don't forget to update map ypservers on ellington. Теперь у вас должен быть каталог с именем /var/yp/test-domain. Копии карт главного сервера NIS должны быть в этом каталоге. Вы должны удостовериться, что этот каталог обновляется. Следующие строки в /etc/crontab вашего вторичного сервера должны это делать: 20 * * * * root /usr/libexec/ypxfr passwd.byname 21 * * * * root /usr/libexec/ypxfr passwd.byuid Эти две строки заставляют вторичный сервер синхронизировать свои карты с картами главного сервера. Хотя эти строчки не обязательны, так как главный сервер делает попытки передать все изменения в своих картах NIS на свои вторичные серверы, но из-за того, что информация для входа в систему настолько жизненно важна для систем, зависящих от сервера, что выполнение регулярных обновлений является совсем не плохой идеей. Это ещё более важно в загруженных сетях, в которых обновления карт могут не всегда завершаться успешно. А теперь точно также запустите команду /etc/netstart на вторичном сервере, по которой снова выполнится запуск сервера NIS. Клиенты NIS Клиент NIS выполняет так называемую привязку к конкретному серверу NIS при помощи даемона ypbind. ypbind определяет домен, используемый в системе по умолчанию (тот, который устанавливается по команде domainname), и начинает широковещательную рассылку запросов RPC в локальной сети. В этих запросах указано имя домена, к серверу которого ypbind пытается осуществить привязку. Если сервер, который был настроен для обслуживания запрашиваемого домена, получит широковещательный запрос, он ответит ypbind, который, в свою очередь запомнит адрес сервера. Если имеется несколько серверов (например, главный и несколько вторичных), то ypbind будет использовать адрес первого ответившего. С этого момента клиентская система будет направлять все свои запросы NIS на этот сервер. Время от времени ypbind будет пинать сервер для проверки его работоспособности. Если на один из тестовых пакетов не удастся получить ответа за разумное время, то ypbind пометит этот домен как домен, с которым связка разорвана, и снова начнет процесс посылки широковещательных запросов в надежде найти другой сервер. Настройка клиента NIS NIS настройка клиента Настройка машины с FreeBSD в качестве клиента NIS достаточно проста. Отредактируйте файл /etc/rc.conf, добавив туда следующие строки для того, чтобы задать имя домена NIS и запустить ypbind во время запуска сетевых служб: nisdomainname="test-domain" nis_client_enable="YES" Для импортирования всех возможных учётных записей от сервера NIS, удалите все записи пользователей из вашего файла /etc/master.passwd и воспользуйтесь командой vipw для добавления следующей строки в конец файла: +::::::::: Эта строчка даст всем пользователям с корректной учетной записью в картах учетных баз пользователей доступ к этой системе. Есть множество способов настроить ваш клиент NIS, изменив эту строку. Посмотрите ниже текст, касающийся сетевых групп, чтобы получить более подробную информацию. Дополнительная информация для изучения находится в книге издательства O'Reilly под названием Managing NFS and NIS. Вы должны оставить хотя бы одну локальную запись (то есть не импортировать ее через NIS) в вашем /etc/master.passwd и эта запись должна быть также членом группы wheel. Если с NIS что-то случится, эта запись может использоваться для удаленного входа в систему, перехода в режим администратора и исправления неисправностей. Для импортирования всех возможных записей о группах с сервера NIS, добавьте в ваш файл /etc/group такую строчку: +:*:: После завершения выполнения этих шагов у вас должно получиться запустить команду ypcat passwd и увидеть карту учетных записей сервера NIS. Безопасность NIS В общем-то любой пользователь, зная имя вашего домена, может выполнить запрос RPC к &man.ypserv.8; и получить содержимое ваших карт NIS. Для предотвращения такого неавторизованного обмена &man.ypserv.8; поддерживает так называемую систему securenets, которая может использоваться для ограничения доступа к некоторой группе хостов. При запуске &man.ypserv.8; будет пытаться загрузить информацию, касающуюся securenets, из файла /var/yp/securenets. Имя каталога зависит от параметра, указанного вместе с опцией . Этот файл содержит записи, состоящие из указания сети и сетевой маски, разделенных пробелом. Строчки, начинающиеся со знака #, считаются комментариями. Примерный файл securenets может иметь примерно такой вид: # allow connections from local host -- mandatory 127.0.0.1 255.255.255.255 # allow connections from any host # on the 192.168.128.0 network 192.168.128.0 255.255.255.0 # allow connections from any host # between 10.0.0.0 to 10.0.15.255 # this includes the machines in the testlab 10.0.0.0 255.255.240.0 Если &man.ypserv.8; получает запрос от адреса, который соответствует одному из этих правил, он будет отрабатывать запрос обычным образом. Если же адрес не подпадает ни под одно правило, запрос будет проигнорирован и в журнал будет записано предупреждающее сообщение. Если файл /var/yp/securenets не существует, ypserv будет обслуживать соединения от любого хоста. Программа ypserv также поддерживает пакет программ tcpwrapper от Wietse Venema. Это позволяет администратору для ограничения доступа вместо /var/yp/securenets использовать конфигурационные файлы tcpwrapper. Хотя оба этих метода управления доступом обеспечивают некоторую безопасность, они, как основанные на проверке привилегированного порта, оба подвержены атакам типа IP spoofing. Весь сетевой трафик, связанный с работой NIS, должен блокироваться вашим - межсетевым экраном. + брандмауэром. Серверы, использующие файл /var/yp/securenets, могут быть не в состоянии обслуживать старых клиентов NIS с древней реализацией протокола TCP/IP. Некоторые из этих реализаций при рассылке широковещательных запросов устанавливают все биты машинной части адреса в ноль и/или не в состоянии определить маску подсети при вычислении адреса широковещательной рассылки. Хотя некоторые из этих проблем могут быть решены изменением конфигурации клиента, другие могут привести к отказу от использования /var/yp/securenets. Использование /var/yp/securenets на сервере с такой архаичной реализацией TCP/IP является весьма плохой идеей, и приведёт к потере работоспособности NIS в большой части вашей сети. tcpwrapper Использование пакета tcpwrapper увеличит время отклика вашего сервера NIS. Дополнительной задержки может оказаться достаточно для возникновения таймаутов в клиентских программах, особенно в загруженных сетях или с медленными серверами NIS. Если одна или более ваших клиентских систем страдают от таких проблем, вы должны преобразовать такие клиентские системы во вторичные серверы NIS и сделать принудительную их привязку к самим себе. Запрет входа некоторых пользователей В нашей лаборатории есть машина basie, о которой предполагается, что она является исключительно факультетской рабочей станцией. Мы не хотим исключать эту машину из домена NIS, однако файл passwd на главном сервере NIS содержит учетные записи как для работников факультета, так и студентов. Что мы можем сделать? Есть способ ограничить вход некоторых пользователей на этой машине, даже если они присутствуют в базе данных NIS. Чтобы это сделать, вам достаточно добавить -username в конец файла /etc/master.passwd на клиентской машине, где username является именем пользователя, которому вы хотите запретить вход. Рекомендуется сделать это с помощью утилиты vipw, так как vipw проверит ваши изменения в /etc/master.passwd, а также автоматически перестроит базу данных паролей по окончании редактирования. Например, если мы хотим запретить пользователю bill осуществлять вход на машине basie, то мы сделаем следующее: basie&prompt.root; vipw [add -bill to the end, exit] vipw: rebuilding the database... vipw: done basie&prompt.root; cat /etc/master.passwd root:[password]:0:0::0:0:The super-user:/root:/bin/csh toor:[password]:0:0::0:0:The other super-user:/root:/bin/sh daemon:*:1:1::0:0:Owner of many system processes:/root:/sbin/nologin operator:*:2:5::0:0:System &:/:/sbin/nologin bin:*:3:7::0:0:Binaries Commands and Source,,,:/:/sbin/nologin tty:*:4:65533::0:0:Tty Sandbox:/:/sbin/nologin kmem:*:5:65533::0:0:KMem Sandbox:/:/sbin/nologin games:*:7:13::0:0:Games pseudo-user:/usr/games:/sbin/nologin news:*:8:8::0:0:News Subsystem:/:/sbin/nologin man:*:9:9::0:0:Mister Man Pages:/usr/share/man:/sbin/nologin bind:*:53:53::0:0:Bind Sandbox:/:/sbin/nologin uucp:*:66:66::0:0:UUCP pseudo-user:/var/spool/uucppublic:/usr/libexec/uucp/uucico xten:*:67:67::0:0:X-10 daemon:/usr/local/xten:/sbin/nologin pop:*:68:6::0:0:Post Office Owner:/nonexistent:/sbin/nologin nobody:*:65534:65534::0:0:Unprivileged user:/nonexistent:/sbin/nologin +::::::::: -bill basie&prompt.root; Udo Erdelhoff Текст предоставил Использование сетевых групп сетевые группы Способ, описанный в предыдущем разделе, работает достаточно хорошо, если вам нужны особые правила для очень малой группы пользователей или машин. В более крупных сетях вы забудете о запрете входа определенных пользователей на важные машины или даже будете настраивать каждую машину по отдельности, теряя таким образом главное преимущество использования NIS: централизованное администрирование. Ответом разработчиков NIS на эту проблему являются сетевые группы. Их назначение и смысл можно сравнить с обычными группами, используемыми в файловых системах &unix;. Главное отличие заключается в отсутствии числового идентификатора и возможности задать сетевую группу включением как пользователей, так и других сетевых групп. Сетевые группы были разработаны для работы с большими, сложными сетями с сотнями пользователей и машин. С одной стороны, хорошо, если вам приходится с такой ситуацией. С другой стороны, эта сложность делает невозможным описание сетевых групп с помощью простых примеров. Пример, используемый в дальнейшем, демонстрирует эту проблему. Давайте предположим, что успешное внедрение системы NIS в вашей лаборатории заинтересовало ваше руководство. Вашим следующим заданием стало расширение домена NIS для включения в него некоторых других машин студенческого городка. В двух таблицах перечислены имена новых машин и пользователей, а также их краткое описание. Имена пользователей Описание alpha, beta Обычные служащие IT-департамента charlie, delta Практиканты IT-департамента echo, foxtrott, golf, ... Обычные сотрудники able, baker, ... Проходящие интернатуру Имена машин Описание war, death, famine, pollution Ваши самые важные серверы. Только служащим IT позволяется входить на эти машины. pride, greed, envy, wrath, lust, sloth Менее важные серверы. Все сотрудники департамента IT могут входить на эти машины. one, two, three, four, ... Обычные рабочие станции. Только реально нанятым служащим позволяется использовать эти машины. trashcan Очень старая машина без каких-либо критичных данных. Даже проходящим интернатуру разрешено ее использовать. Если вы попытаетесь реализовать эти требования, ограничивая каждого пользователя по отдельности, то вам придется добавить на каждой машине в файл passwd по одной строчке -user для каждого пользователя, которому запрещено входить на эту систему. Если вы забудете даже одну строчку, у вас могут начаться проблемы. Гораздо проще делать это правильно во время начальной установки, однако вы постепенно будете забывать добавлять строчки для новых пользователей во время повседневной работы. В конце концов, Мерфи был оптимистом. Использование в этой ситуации сетевых групп дает несколько преимуществ. Нет необходимости описывать по отдельности каждого пользователя; вы ставите в соответствие пользователю одну или несколько сетевых групп и разрешаете или запрещаете вход всем членам сетевой группы. Если вы добавляете новую машину, вам достаточно определить ограничения на вход для сетевых групп. Если добавляется новый пользователь, вам достаточно добавить его к одной или большему числу сетевых групп. Эти изменения независимы друг от друга: нет больше комбинаций для каждого пользователя и машины. Если настройка вашей системы NIS тщательно спланирована, то для разрешения или запрещения доступа к машинам вам нужно будет модифицировать единственный конфигурационный файл. Первым шагом является инициализация карты NIS по имени netgroup. Программа &man.ypinit.8; во FreeBSD по умолчанию этой карты не создаёт, хотя реализация NIS будет её поддерживает, как только она будет создана. Чтобы создать пустую карту, просто наберите ellington&prompt.root; vi /var/yp/netgroup и начните добавлять содержимое. Например, нам нужно по крайней мере четыре сетевых группы: сотрудники IT, практиканты IT, обычные сотрудники и интернатура. IT_EMP (,alpha,test-domain) (,beta,test-domain) IT_APP (,charlie,test-domain) (,delta,test-domain) USERS (,echo,test-domain) (,foxtrott,test-domain) \ (,golf,test-domain) INTERNS (,able,test-domain) (,baker,test-domain) IT_EMP, IT_APP и так далее являются именами сетевых групп. Несколько слов в скобках служат для добавления пользователей в группу. Три поля внутри группы обозначают следующее: Имя хоста или хостов, к которым применимы последующие записи. Если имя хоста не указано, то запись применяется ко всем хостам. Если же указывается имя хоста, то вы получите мир темноты, ужаса и страшной путаницы. Имя учетной записи, которая принадлежит этой сетевой группе. Домен NIS для учетной записи. Вы можете импортировать в вашу сетевую группу учетные записи из других доменов NIS, если вы один из тех несчастных, имеющих более одного домена NIS. Каждое из этих полей может содержать шаблоны, подробности даны в странице справочника по &man.netgroup.5;. сетевые группы Не нужно использовать имена сетевых групп длиннее 8 символов, особенно если в вашем домене NIS имеются машины, работающие под управлением других операционных систем. Имена чувствительны к регистру; использование заглавных букв для имен сетевых групп облегчает распознавание пользователей, имен машин и сетевых групп. Некоторые клиенты NIS (отличные от FreeBSD) не могут работать с сетевыми группами, включающими большое количество записей. Например, в некоторых старых версиях &sunos; возникают проблемы, если сетевая группа содержит более 15 записей. Вы можете обойти это ограничение, создав несколько подгрупп с 15 или меньшим количеством пользователей и настоящую сетевую группу, состоящую из подгрупп: BIGGRP1 (,joe1,domain) (,joe2,domain) (,joe3,domain) [...] BIGGRP2 (,joe16,domain) (,joe17,domain) [...] BIGGRP3 (,joe31,domain) (,joe32,domain) BIGGROUP BIGGRP1 BIGGRP2 BIGGRP3 Вы можете повторить этот процесс, если вам нужно иметь более 225 пользователей в одной сетевой группе. Активация и распространение вашей карты NIS проста: ellington&prompt.root; cd /var/yp ellington&prompt.root; make Это приведет к созданию трех карт NIS netgroup, netgroup.byhost и netgroup.byuser. Воспользуйтесь утилитой &man.ypcat.1; для проверки доступности ваших новых карт NIS: ellington&prompt.user; ypcat -k netgroup ellington&prompt.user; ypcat -k netgroup.byhost ellington&prompt.user; ypcat -k netgroup.byuser Вывод первой команды должен соответствовать содержимому файла /var/yp/netgroup. Вторая команда не выведет ничего, если вы не зададите сетевые группы, специфичные для хоста. Третья команда может использоваться пользователем для получения списка сетевых групп. Настройка клиента достаточно проста. Чтобы настроить сервер war, вам достаточно запустить &man.vipw.8; и заменить строку +::::::::: на +@IT_EMP::::::::: Теперь только данные, касающиеся пользователей, определенных в сетевой группе IT_EMP, импортируются в базу паролей машины war и только этим пользователям будет разрешен вход. К сожалению, это ограничение также касается и функции ~ командного процессора и всех подпрограмм, выполняющих преобразование между именами пользователей и их числовыми ID. Другими словами, команда cd ~user работать не будет, команда ls -l будет выдавать числовые идентификаторы вместо имён пользователей, а find . -user joe -print работать откажется, выдавая сообщение No such user. Чтобы это исправить, вам нужно будет выполнить импорт всех записей о пользователях без разрешения на вход на ваши серверы. Это можно сделать, добавив еще одну строку в файл /etc/master.passwd. Эта строка должна содержать: +:::::::::/sbin/nologin, что означает Произвести импортирование всех записей с заменой командного процессора на /sbin/nologin в импортируемых записях. Вы можете заменить любое поле в строке с паролем, указав значение по умолчанию в вашем /etc/master.passwd. Проверьте, что строка +:::::::::/sbin/nologin помещена после +@IT_EMP:::::::::. В противном случае все пользовательские записи, импортированные из NIS, будут иметь /sbin/nologin в качестве оболочки. После этого изменения при появлении нового сотрудника IT вам будет достаточно изменять только одну карту NIS. Вы можете применить подобный метод для менее важных серверов, заменяя старую строку +::::::::: в их файлах /etc/master.passwd на нечто, подобное следующему: +@IT_EMP::::::::: +@IT_APP::::::::: +:::::::::/sbin/nologin Соответствующие строки для обычных рабочих станций могут иметь такой вид: +@IT_EMP::::::::: +@USERS::::::::: +:::::::::/sbin/nologin И все было прекрасно до того момента, когда через несколько недель изменилась политика: Департамент IT начал нанимать интернатуру. Интернатуре в IT позволили использовать обычные рабочие станции и менее важные серверы; практикантам позволили входить на главные серверы. Вы создали новую сетевую группу IT_INTERN, добавили в нее новую интернатуру и начали изменять настройки на всех и каждой машине... Как говорит старая мудрость: Ошибки в централизованном планировании приводят к глобальному хаосу. Возможность в NIS создавать сетевые группы из других сетевых групп может использоваться для предотвращения подобных ситуаций. Одним из вариантов является создание сетевых групп на основе ролей. Например, вы можете создать сетевую группу с именем BIGSRV для задания ограничений на вход на важные серверы, другую сетевую группу с именем SMALLSRV для менее важных серверов и третью сетевую группу под названием USERBOX для обычных рабочих станций. Каждая из этих сетевых групп содержит сетевые группы, которым позволено входить на эти машины. Новые записи для вашей карты NIS сетевой группы должны выглядеть таким образом: BIGSRV IT_EMP IT_APP SMALLSRV IT_EMP IT_APP ITINTERN USERBOX IT_EMP ITINTERN USERS Этот метод задания ограничений на вход работает весьма хорошо, если вы можете выделить группы машин с одинаковыми ограничениями. К сожалению, такая ситуация может быть исключением, но не правилом. В большинстве случаев вам нужна возможность определять ограничения на вход индивидуально для каждой машины. Задание сетевых групп в зависимости от машин является другой возможностью, которой можно воспользоваться при изменении политики, описанной выше. При таком развитии событий файл /etc/master.passwd на каждой машине содержит две строки, начинающиеся с +. Первая из них добавляет сетевую группу с учётными записями, которым разрешено входить на эту машину, а вторая добавляет все оставшиеся учетные записи с /sbin/nologin в качестве командного процессора. Хорошей идеей является использование ИМЕНИ МАШИНЫ заглавными буквами для имени сетевой группы. Другими словами, строки должны иметь такой вид: +@BOXNAME::::::::: +:::::::::/sbin/nologin Как только вы завершите эту работу для всех ваших машин, вам не нужно будет снова модифицировать локальные версии /etc/master.passwd. Все будущие изменения могут быть выполнены изменением карты NIS. Вот пример возможной карты сетевой группы для этого случая с некоторыми полезными дополнениями: # Сначала определяем группы пользователей IT_EMP (,alpha,test-domain) (,beta,test-domain) IT_APP (,charlie,test-domain) (,delta,test-domain) DEPT1 (,echo,test-domain) (,foxtrott,test-domain) DEPT2 (,golf,test-domain) (,hotel,test-domain) DEPT3 (,india,test-domain) (,juliet,test-domain) ITINTERN (,kilo,test-domain) (,lima,test-domain) D_INTERNS (,able,test-domain) (,baker,test-domain) # # Теперь задаем несколько групп на основе ролей USERS DEPT1 DEPT2 DEPT3 BIGSRV IT_EMP IT_APP SMALLSRV IT_EMP IT_APP ITINTERN USERBOX IT_EMP ITINTERN USERS # # И группы для специальных задач # Открыть пользователям echo и golf доступ к антивирусной машине SECURITY IT_EMP (,echo,test-domain) (,golf,test-domain) # # Сетевые группы, специфичные для машин # Наши главные серверы WAR BIGSRV FAMINE BIGSRV # Пользователю india необходим доступ к этому серверу POLLUTION BIGSRV (,india,test-domain) # # Этот очень важен и ему требуются большие ограничения доступа DEATH IT_EMP # # Антивирусная машина, упомянутая выше ONE SECURITY # # Ограничить машину единственным пользователем TWO (,hotel,test-domain) # [...далее следуют другие группы] Если вы используете какие-либо базы данных для управления учетными записями ваших пользователей, вы должны смочь создать первую часть карты с помощью инструментов построения отчетов вашей базы данных. В таком случае новые пользователи автоматически получат доступ к машинам. И последнее замечание: Не всегда бывает разумно использовать сетевые группы на основе машин. Если в студенческих лабораториях вы используете несколько десятков или даже сотен одинаковых машин, то вам нужно использовать сетевые группы на основе ролей, а не основе машин, для того, чтобы размеры карты NIS оставались в разумных пределах. Важные замечания Есть некоторые действия, которые нужно будет выполнять по-другому, если вы работаете с NIS. Каждый раз, когда вы собираетесь добавить пользователя в лаборатории, вы должны добавить его только на главном сервере NIS и обязательно перестроить карты NIS. Если вы забудете сделать это, то новый пользователь не сможет нигде войти, кроме как на главном сервере NIS. Например, если в лаборатории нам нужно добавить нового пользователя jsmith, мы делаем вот что: &prompt.root; pw useradd jsmith &prompt.root; cd /var/yp &prompt.root; make test-domain Вместо pw useradd jsmith вы можете также запустить команду adduser jsmith. Не помещайте административные учетные записи в карты NIS. Вам не нужно распространять административных пользователей и их пароли на машины, которые не должны иметь доступ к таким учётным записям. Сделайте главный и вторичные серверы NIS безопасными и минимизируйте их время простоя. Если кто-то либо взломает, либо просто отключит эти машины, то люди без права входа в лабораторию с легкостью получат доступ. Это основное уязвимое место в любой централизованно администрируемой системе. Если вы не защищаете ваши серверы NIS, вы будете иметь дело с толпой разозлённых пользователей! Совместимость с NIS v1 ypserv из поставки FreeBSD имеет встроенную поддержку для обслуживания клиентов NIS v1. Реализация NIS во FreeBSD использует только протокол NIS v2, хотя другие реализации имеют поддержку протокола v1 для совместимости со старыми системами. Даемоны ypbind, поставляемые с такими системами, будут пытаться осуществить привязку к серверу NIS v1, даже если это им не нужно (и они будут постоянно рассылать широковещательные запросы в поиске такого сервера даже после получения ответа от сервера v2). Отметьте, что хотя имеется поддержка обычных клиентских вызовов, эта версия ypserv не отрабатывает запросы на передачу карт v1; следовательно, она не может использоваться в качестве главного или вторичного серверов вместе с другими серверами NIS, поддерживающими только протокол v1. К счастью, скорее всего, в настоящий момент такие серверы практически не используются. Серверы NIS, которые также являются клиентами NIS Особое внимание следует уделить использованию ypserv в домене со многими серверами, когда серверные машины являются также клиентами NIS. Неплохо бы заставить серверы осуществить привязку к самим себе, запретив рассылку запросов на привязку и возможно, перекрестную привязку друг к другу. Если один сервер выйдет из строя, а другие будут зависеть от него, то в результате могут возникнуть странные ситуации. Постепенно все клиенты попадут в таймаут и попытаются привязаться к другим серверам, но полученная задержка может быть значительной, а странности останутся, так как серверы снова могут привязаться друг к другу. Вы можете заставить хост выполнить привязку к конкретному серверу, запустив команду ypbind с флагом . Если вы не хотите делать это вручную каждый раз при перезагрузке вашего сервера NIS, то можете добавить в файл /etc/rc.conf такие строки: nis_client_enable="YES" # run client stuff as well nis_client_flags="-S NIS domain,server" Дополнительную информацию можно найти на странице справки по &man.ypbind.8;. Форматы паролей NIS форматы паролей Одним из общих вопросов, которые возникают в начале работы с NIS, является вопрос совместимости форматов паролей. Если ваш сервер NIS использует пароли, зашифрованные алгоритмом DES, то он будет поддерживать только тех клиентов, что также используют DES. К примеру, если в вашей сети имеются клиенты NIS, использующие &solaris;, то вам, скорее всего, необходимо использовать пароли с шифрованием по алгоритму DES. Чтобы понять, какой формат используют ваши серверы и клиенты, загляните в файл /etc/login.conf. Если хост настроен на использование паролей, зашифрованных по алгоритму DES, то класс default будет содержать запись вроде следующей: default:\ :passwd_format=des:\ :copyright=/etc/COPYRIGHT:\ [Последующие строки опущены] Другими возможными значениями для passwd_format являются blf и md5 (для паролей, шифруемых по стандартам Blowfish и MD5 соответственно). Если вы внесли изменения в файл /etc/login.conf, то вам также нужно перестроить базу данных параметров входа в систему, что достигается запуском следующей команды пользователем root: &prompt.root; cap_mkdb /etc/login.conf Формат паролей, которые уже находятся в файле /etc/master.passwd, не будет изменён до тех пор, пока пользователь не сменит свой пароль после перестроения базы данных параметров входа в систему. После этого, чтобы удостовериться в том, что пароли зашифрованы в том формате, который выбран вами, нужно проверить, что строка crypt_default в /etc/auth.conf указывает предпочтение выбранного вами формата паролей. Для этого поместите выбранный формат первым в списке. Например, при использовании DES-шифрования паролей строка будет выглядеть так: crypt_default = des blf md5 Выполнив вышеперечисленные шаги на каждом из серверов и клиентов NIS, работающих на FreeBSD, вы можете обеспечить их согласованность относительно используемого в вашей сети формата паролей. Если у вас возникли проблемы с аутентификацией клиента NIS, начать её решать определённо стоит отсюда. Запомните: если вы хотите использовать сервер NIS в гетерогенной сети, вам, наверное, нужно будет использовать DES на всех системах в силу того, что это минимальный общий стандарт. Greg Sutter Текст написал Автоматическая настройка сети (DHCP) Что такое DHCP? Dynamic Host Configuration Protocol DHCP Internet Software Consortium (ISC) DHCP, или Dynamic Host Configuration Protocol (Протокол Динамической Конфигурации Хостов), описывает порядок, по которому система может подключиться к сети и получить необходимую информацию для работы в ней. Во FreeBSD используется реализация DHCP от ISC (Internet Software Consortium), так что вся информация, описывающая особенности, зависящие от реализации, относится к дистрибутиву ISC. Что описывается в этом разделе В этом разделе описываются компоненты системы ISC DHCP как со стороны клиента, так и со стороны сервера. Программа, работающая на клиентской стороне, dhclient, интегрирована в поставку FreeBSD, а серверная часть доступна в виде порта net/isc-dhcp3-server. Кроме ссылок ниже, много полезной информации находится на страницах справочной системы, описывающих &man.dhclient.8;, &man.dhcp-options.5; и &man.dhclient.conf.5;. Как это работает UDP Когда на клиентской машине выполняется программа dhclient, являющаяся клиентом DHCP, она начинает широковещательную рассылку запросов на получение настроечной информации. По умолчанию эти запросы делаются на 68 порт UDP. Сервер отвечает на UDP 67, выдавая клиенту адрес IP и другую необходимую информацию, такую, как сетевую маску, маршрутизатор и серверы DNS. Вся эта информация даётся в форме аренды DHCP и верна только определенное время (что настраивается администратором сервера DHCP). При таком подходе устаревшие адреса IP тех клиентов, которые больше не подключены к сети, могут автоматически использоваться повторно. Клиенты DHCP могут получить от сервера очень много информации. Подробный список находится в странице Справочника &man.dhcp-options.5;. Интеграция с FreeBSD Клиент DHCP от ISC, dhclient, полностью интегрирован во FreeBSD. Поддержка клиента DHCP есть как в программе установки, так и в самой системе, что исключает необходимость в знании подробностей конфигурации сети в любой сети, имеющей сервер DHCP. Утилита dhclient включена во все версии FreeBSD, начиная с 3.2. sysinstall DHCP поддерживается утилитой sysinstall. При настройке сетевого интерфейса из программы sysinstall первый вопрос, который вам задается: Do you want to try DHCP configuration of this interface? (Хотите ли вы попробовать настроить этот интерфейс через DHCP?). Утвердительный ответ приведёт к запуску программы dhclient, и при удачном его выполнении к автоматическому заданию информации для настройки интерфейса. Есть две вещи, которые вы должны сделать для того, чтобы ваша система использовала DHCP при загрузке: DHCP требования Убедитесь, что устройство bpf включено в компиляцию вашего ядра. Чтобы это сделать, добавьте строчку device bpf (pseudo-device bpf в &os; 4.X) в конфигурационный файл ядра и перестройте ядро. Более подробная информация о построении ядер имеется в . Устройство bpf уже является частью ядра GENERIC, которое поставляется вместе с FreeBSD, так что, если вы не используете другое ядро, то вам и не нужно его делать для того, чтобы работал DHCP. Те, кто беспокоится о безопасности, должны иметь в виду, что устройство bpf является также тем самым устройством, которое позволяет работать программам-снифферам пакетов (хотя для этого они должны быть запущены пользователем root). Наличие устройства bpf необходимо для использования DHCP, но если вы чересчур беспокоитесь о безопасности, то вам нельзя добавлять устройство bpf в ядро только для того, чтобы в неопределённом будущем использовать DHCP. Отредактируйте ваш файл /etc/rc.conf, включив в него следующее: ifconfig_fxp0="DHCP" Обязательно замените fxp0 на имя интерфейса, который вы хотите настраивать динамически, как это описано в . Если dhclient в вашей системе находится в другом месте или если вы хотите задать дополнительные параметры для dhclient, то также укажите следующее (изменив так, как вам нужно): dhcp_program="/sbin/dhclient" dhcp_flags="" DHCP сервер Сервер DHCP, dhcpd, включён как часть порта net/isc-dhcp3-server в коллекцию портов. Этот порт содержит DHCP-сервер от ISC и документацию. Файлы DHCP конфигурационные файлы /etc/dhclient.conf dhclient требует наличия конфигурационного файла, /etc/dhclient.conf. Как правило, файл содержит только комментарии, а настройки по умолчанию достаточно хороши. Этот настроечный файл описан на страницах справочной системы по &man.dhclient.conf.5;. /sbin/dhclient dhclient скомпонован статически и находится в каталоге /sbin. На страница Справочника &man.dhclient.8; дается более подробная информация о dhclient. /sbin/dhclient-script dhclient-script является специфичным для FreeBSD скриптом настройки клиента DHCP. Он описан в &man.dhclient-script.8;, но для нормального функционирования никаких модификаций со стороны пользователя не требуется. /var/db/dhclient.leases В этом файле клиент DHCP хранит базу данных выданных к использованию адресов в виде журнала. На странице &man.dhclient.leases.5; дается гораздо более подробное описание. Дополнительная литература Полное описание протокола DHCP дается в RFC 2131. Кроме того, дополнительная информация есть на сервере . Установка и настройка сервера DHCP Чему посвящён этот раздел Этот раздел даёт информацию о том, как настроить систему FreeBSD для работы в качестве сервера DHCP на основе реализации пакета DHCP от ISC (Internet Software Consortium). Серверная часть пакета не поставляется как часть FreeBSD, так что вам потребуется установить порт net/isc-dhcp3-relay для получения этого сервиса. Обратитесь к для получения более полной информации об использовании коллекции портов. Установка сервера DHCP DHCP установка Для того, чтобы настроить систему FreeBSD на работу в качестве сервера DHCP, вам необходимо обеспечить присутствие устройства &man.bpf.4;, вкомпилированного в ядро. Для этого добавьте строку device bpf (pseudo-device bpf в &os; 4.X) в файл конфигурации вашего ядра. Для получения более полной информации о построении ядер, обратитесь к . Устройство bpf уже входит в состав ядра GENERIC, поставляемого с FreeBSD, так что вам не нужно создавать собственное ядро для обеспечения работы DHCP. Те, кто обращает особое внимание на вопросы безопасности, должны заметить, что bpf является тем устройством, что позволяет нормально работать снифферам пакетов (хотя таким программам требуются привилегированный доступ). Наличие устройства bpf обязательно для использования DHCP, но если вы очень обеспокоены безопасностью, наверное, вам не нужно включать bpf в ваше ядро только потому, что в отдалённом будущем вы собираетесь использовать DHCP. Следующим действием, которое вам нужно выполнить, является редактирование примерного dhcpd.conf, который устанавливается в составе порта net/isc-dhcp3-server. По умолчанию это файл /usr/local/etc/dhcpd.conf.sample, и вы должны скопировать его в файл /usr/local/etc/dhcpd.conf перед тем, как его редактировать. Настройка сервера DHCP DHCP dhcpd.conf dhcpd.conf состоит из деклараций относительно подсетей и хостов, и проще всего описывается на примере: option domain-name "example.com"; option domain-name-servers 192.168.4.100; option subnet-mask 255.255.255.0; default-lease-time 3600; max-lease-time 86400; ddns-update-style none; subnet 192.168.4.0 netmask 255.255.255.0 { range 192.168.4.129 192.168.4.254; option routers 192.168.4.1; } host mailhost { hardware ethernet 02:03:04:05:06:07; fixed-address mailhost.example.com; } Этот параметр задаёт домен, который будет выдаваться клиентам в качестве домена, используемого по умолчанию при поиске. Обратитесь к страницам справочной системы по &man.resolv.conf.5; для получения дополнительной информации о том, что это значит. Этот параметр задаёт список разделённых запятыми серверов DNS, которые должен использовать клиент. Маска сети, которая будет выдаваться клиентам. Клиент может запросить определённое время, которое будет действовать выданная информация. В противном случае сервер выдаст настройки с этим сроком (в секундах). Это максимальное время, на которое сервер будет выдавать конфигурацию. Если клиент запросит больший срок, он будет подтверждён, но будет действовать только max-lease-time секунд. Этот параметр задаёт, будет ли сервер DHCP пытаться обновить DNS при выдаче или освобождении конфигурационной информации. В реализации ISC этот параметр является обязательным. Это определение того, какие IP-адреса должны использоваться в качестве резерва для выдачи клиентам. IP-адреса между и включая границы, будут выдаваться клиентам. Объявление маршрутизатора, используемого по умолчанию, который будет выдаваться клиентам. Аппаратный MAC-адрес хоста (чтобы сервер DHCP мог распознать хост, когда тот делает запрос). Определение того, что хосту всегда будет выдаваться один и тот же IP-адрес. Заметьте, что указание здесь имени хоста корректно, так как сервер DHCP будет разрешать имя хоста самостоятельно до того, как выдать конфигурационную информацию. Как только вы закончите составлять свой dhcpd.conf, вы можете продолжить работу запуском сервера при помощи следующей команды: &prompt.root; /usr/local/etc/rc.d/isc-dhcpd.sh start Если в будущем вам понадобится сделать изменения в настройке вашего сервера, то важно заметить, что посылка сигнала SIGHUP приложению dhcpd не приведёт к перезагрузке настроек, как это бывает для большинства даемонов. Вам нужно послать сигнал SIGTERM для остановки процесса, а затем перезапустить его при помощи вышеприведённой команды. Файлы DHCP конфигурационный файлы /usr/local/sbin/dhcpd dhcpd скомпонован статически и расположен в каталоге /usr/local/sbin. Страницы справочной системы &man.dhcpd.8;, устанавливаемые портом, содержат более полную информацию о dhcpd. /usr/local/etc/dhcpd.conf dhcpd требует наличия конфигурационного файла, /usr/local/etc/dhcpd.conf, до того, как он будет запущен и начнёт предоставлять сервис клиентам. Необходимо, чтобы этот файл содержал все данные, которая будет выдаваться обслуживаемым клиентам, а также информацию о работе сервера. Этот конфигурационный файл описывается на страницах справочной системы &man.dhcpd.conf.5;, которые устанавливаются портом. /var/db/dhcpd.leases Сервер DHCP ведёт базу данных выданной информации в этом файле, который записывается в виде протокола. Страницы справочной системы &man.dhcpd.leases.5;, устанавливаемые портом, дают гораздо более подробное описание. /usr/local/sbin/dhcrelay dhcrelay используется в сложных ситуациях, когда сервер DHCP пересылает запросы от клиента другому серверу DHCP в отдельной сети. Если вам нужна такая функциональность, то установите порт net/isc-dhcp3-server. На страницах справочной системы &man.dhcrelay.8;, которые устанавливаются портом, даётся более полное описание. Chern Lee Текст предоставил Domain Name System (DNS) Обзор BIND По умолчанию во FreeBSD используется одна из версий программы BIND (Berkeley Internet Name Domain), являющейся самой распространенной реализацией протокола DNS. DNS - это протокол, при помощи которого имена преобразуются в IP-адреса и наоборот. Например, в ответ на запрос о www.FreeBSD.org будет получен IP-адрес веб-сервера Проекта FreeBSD, а запрос о ftp.FreeBSD.org возвратит IP-адрес соответствующей машины с FTP-сервером. Точно также происходит и обратный процесс. Запрос, содержащий IP-адрес машины, возвратит имя хоста. Для выполнения запросов к DNS вовсе не обязательно иметь в системе работающий сервер имён. DNS В сети Интернет DNS управляется через достаточно сложную систему авторизированных корневых серверов имён, и других менее крупных серверов имён, которые содержат и кэшируют информацию о конкретных доменах. В этом документа рассматривается BIND 8.x, так как это стабильная версия, используемая во FreeBSD. BIND 9.x может быть установлен как порт net/bind9. Протокол DNS стандартизован в RFC1034 и RFC1035. На данный момент пакет BIND поддерживается Internet Software Consortium . Используемая терминология Для понимания этого документа нужно понимать значения некоторых терминов, связанных с работой DNS. резолвер обратный DNS корневая зона Термин Определение Прямой запрос к DNS (forward DNS) Преобразование имён хостов в адреса IP Ориджин (origin) Обозначает домен, покрываемый конкретным файлом зоны named, bind, сервер имён Общеупотребительные названия для обозначения пакета BIND, обеспечивающего работу сервера имён во FreeBSD. Резолвер Системный процесс, посредством которого машина обращается к серверу имён для получения информации о зоне Обратный DNS (reverse DNS) Операция, обратная прямому запросу к DNS; преобразование адресов IP в имена хостов Корневая зона Начало иерархии зон Интернет. Все зоны находятся под корневой зоной, подобно тому, как все файлы располагаются ниже корневого каталога. Зона Отдельный домен, поддомен или часть DNS, управляемая одним сервером. зоны примеры Примеры зон: . является корневой зоной org. является зоной ниже корневой зоны example.org является зоной под зоной org. foo.example.org. является поддоменом, зоной под зоной example.org. 1.2.3.in-addr.arpa является зоной, в которую включены все IP-адреса, формирующие пространство адресов 3.2.1.*. Как можно видеть, уточняющая часть имени хоста появляется слева. Например, example.org. более точен, чем org., также, как org. более точен, чем корневая зона. Расположение каждой части имени хоста сильно похоже на файловую систему: каталог /dev расположен в корневой файловой системе, и так далее. Причины, по которым вам может понадобиться сервер имён Сервера имён обычно используются в двух видах: авторитетный сервер имён и кэширующий сервер имён. Авторитетный сервер имён нужен, когда: нужно предоставлять информацию о DNS остальному миру, отвечая на запросы авторизированно. зарегистрирован домен, такой, как example.org и в этом домене требуется поставить имена машин в соответствие с их адресами IP. блоку адресов IP требуется обратные записи DNS (IP в имена хостов). резервный (slave) сервер имён должен отвечать на запросы о домене, когда основной не работает или не доступен. Кэширующий сервер имён нужен, когда: локальный сервер DNS может кэшировать информацию и отвечать на запросы быстрее, чем это происходит при прямом опросе внешнего сервера имён. требуется уменьшение общего сетевого трафика (DNS составляет около 5% всего трафика Интернет, или чуть больше). Например, когда кто-нибудь запрашивает информацию о www.FreeBSD.org, то обычно резолвер обращается к серверу имён вашего провайдера, посылает запрос и ожидает ответа. С локальным кэширующим сервером DNS запрос во внешний мир будет делаться всего один раз. Каждый дополнительный запрос не будет посылаться за пределы локальной сети, потому что информация уже имеется в кэше. Как это работает Во FreeBSD даемон BIND, по очевидным причинам, называется named. Файл Описание named даемон BIND ndc программа управления даемоном сервера имён /etc/namedb каталог, в котором располагается вся информация о зонах BIND /etc/namedb/named.conf конфигурационный файл для даемона Файлы зон обычно располагаются в каталоге /etc/namedb и содержат информацию о зоне DNS, за которую отвечает сервер имён. Запуск BIND BIND запуск Так как сервер имён BIND устанавливается по умолчанию, его настройка сравнительно проста. Чтобы даемон named запускался во время загрузки, поместите в /etc/rc.conf следующую строку: named_enable="YES" Для запуска даемона вручную (после его настройки): &prompt.root; ndc start Конфигурационные файлы BIND конфигурационные файлы Использование <command>make-localhost</command> Обязательно выполните следующие команды: &prompt.root; cd /etc/namedb &prompt.root; sh make-localhost для того, чтобы правильно создать файл /etc/namedb/localhost.rev локальной обратной зоны для loopback-интерфейса. <filename>/etc/namedb/named.conf</filename> // $FreeBSD$ // // Refer to the named(8) manual page for details. If you are ever going // to setup a primary server, make sure you've understood the hairy // details of how DNS is working. Even with simple mistakes, you can // break connectivity for affected parties, or cause huge amount of // useless Internet traffic. options { directory "/etc/namedb"; // In addition to the "forwarders" clause, you can force your name // server to never initiate queries of its own, but always ask its // forwarders only, by enabling the following line: // // forward only; // If you've got a DNS server around at your upstream provider, enter // its IP address here, and enable the line below. This will make you // benefit from its cache, thus reduce overall DNS traffic in the Internet. /* forwarders { 127.0.0.1; }; */ Как и говорится в комментариях, если вы хотите получить эффект от использования кэша провайдера, то можно включить раздел forwarders. В обычном случае сервер имён будет рекурсивно опрашивать определённые серверы имён Интернет до тех пор, пока не получит ответ на свой запрос. При включении этого раздела он будет автоматически опрашивать сервер имён вашего провайдера (или тот, который здесь указан), используя преимущества его кэша. наличия нужной информации. Если соответствующий сервер имён провайдера работает быстро и имеет хороший канал связи, то в результате такой настройки вы можете получить хороший результат. 127.0.0.1 здесь работать не будет. Измените его на IP-адрес сервера имён провайдера. /* * If there is a firewall between you and name servers you want * to talk to, you might need to uncomment the query-source * directive below. Previous versions of BIND always asked * questions using port 53, but BIND 8.1 uses an unprivileged * port by default. */ // query-source address * port 53; /* * If running in a sandbox, you may have to specify a different * location for the dumpfile. */ // dump-file "s/named_dump.db"; }; // Note: the following will be supported in a future release. /* host { any; } { topology { 127.0.0.0/8; }; }; */ // Setting up secondaries is way easier and the rough picture for this // is explained below. // // If you enable a local name server, don't forget to enter 127.0.0.1 // into your /etc/resolv.conf so this server will be queried first. // Also, make sure to enable it in /etc/rc.conf. zone "." { type hint; file "named.root"; }; zone "0.0.127.IN-ADDR.ARPA" { type master; file "localhost.rev"; }; zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.INT" { type master; file "localhost.rev"; }; // NB: Do not use the IP addresses below, they are faked, and only // serve demonstration/documentation purposes! // // Example secondary config entries. It can be convenient to become // a secondary at least for the zone where your own domain is in. Ask // your network administrator for the IP address of the responsible // primary. // // Never forget to include the reverse lookup (IN-ADDR.ARPA) zone! // (This is the first bytes of the respective IP address, in reverse // order, with ".IN-ADDR.ARPA" appended.) // // Before starting to setup a primary zone, better make sure you fully // understand how DNS and BIND works, however. There are sometimes // unobvious pitfalls. Setting up a secondary is comparably simpler. // // NB: Don't blindly enable the examples below. :-) Use actual names // and addresses instead. // // NOTE!!! FreeBSD runs BIND in a sandbox (see named_flags in rc.conf). // The directory containing the secondary zones must be write accessible // to BIND. The following sequence is suggested: // // mkdir /etc/namedb/s // chown bind:bind /etc/namedb/s // chmod 750 /etc/namedb/s Дополнительная информация о запуске BIND в ограниченном окружении находится в соответствующем разделе. /* zone "example.com" { type slave; file "s/example.com.bak"; masters { 192.168.1.1; }; }; zone "0.168.192.in-addr.arpa" { type slave; file "s/0.168.192.in-addr.arpa.bak"; masters { 192.168.1.1; }; }; */ Это примеры описаний прямой и обратной зон из файла named.conf для вторичных серверов. Для каждого новой зоны, которую будет обслуживать сервер имён, в файл named.conf должна быть добавлена запись. К примеру, самая простая запись для домена example.org может выглядеть вот так: zone "example.org" { type master; file "example.org"; }; Зона является первичной, что отражается в поле , и информация о зоне хранится в файле /etc/namedb/example.org, что указывается в поле . zone "example.org" { type slave; file "example.org"; }; В случае вторичной зоны информация о ней передается с основного сервера имён для заданной зоны и сохраняется в указанном файле. Если и когда основной сервер имён выходит и строя или недосягаем, то скачанная информация о зоне будет находиться на вторичных серверах и они смогут обслуживать эту зону. Файлы зон Пример файла зоны example.org для основного сервера (располагающийся в файле /etc/namedb/example.org) имеет такой вид: $TTL 3600 example.org. IN SOA ns1.example.org. admin.example.org. ( 5 ; Serial 10800 ; Refresh 3600 ; Retry 604800 ; Expire 86400 ) ; Minimum TTL ; DNS Servers @ IN NS ns1.example.org. @ IN NS ns2.example.org. ; Machine Names localhost IN A 127.0.0.1 ns1 IN A 3.2.1.2 ns2 IN A 3.2.1.3 mail IN A 3.2.1.10 @ IN A 3.2.1.30 ; Aliases www IN CNAME @ ; MX Record @ IN MX 10 mail.example.org. Заметьте, что все имена хостов, оканчивающиеся на ., задают полное имя, тогда как все имена без символа . на конце считаются заданными относительно origin. Например, www преобразуется в www.origin. В нашем воображаемом файле ориджином является example.org., так что www преобразуется в www.example.org. Файл зоны имеет следующий формат: recordname IN recordtype value DNS записи Наиболее часто используемые записи DNS: SOA начало зоны ответственности NS авторитативный сервер имен A адрес хоста CNAME каноническое имя для алиаса MX обмен почтой PTR указатель на доменное имя (используется в обратных зонах DNS) example.org. IN SOA ns1.example.org. admin.example.org. ( 5 ; Serial 10800 ; Refresh after 3 hours 3600 ; Retry after 1 hour 604800 ; Expire after 1 week 86400 ) ; Minimum TTL of 1 day example.org. имя домена, а также ориджин для этого файла зоны. ns1.example.org. основной/авторитативный сервер имён для этой зоны. admin.example.org. человек, отвечающий за эту зону, адрес электронной почты с подменённым символом @. (admin@example.org становится admin.example.org) 5 последовательный номер файла. При каждом изменении файла зоны это число должно увеличиваться. В настоящее время для нумерации многие администраторы предпочитают формат ггггммддвв. 2001041002 будет означать, что файл последний раз изменялся 10.04.2001, а последнее число 02 означает, что это была вторая модификация файла за день. Последовательный номер важен, так как он служит для того, чтобы вторичные серверы узнавали об обновлении зоны. @ IN NS ns1.example.org. Это NS-запись. Такие записи должны иметься для всех серверов имён, которые будут отвечать за зону. Символ @, используемый здесь, преобразуется в example.org. Этот символ @ соответствует ориджину. localhost IN A 127.0.0.1 ns1 IN A 3.2.1.2 ns2 IN A 3.2.1.3 mail IN A 3.2.1.10 @ IN A 3.2.1.30 Записи типа A служат для обозначения имён машин. Как это видно выше, имя ns1.example.org будет преобразовано в 3.2.1.2. И снова здесь используется символ ориджина @, обозначая, что example.org будет преобразовано в 3.2.1.30. www IN CNAME @ Записи с каноническими именами обычно используются для присвоения машинам псевдонимов. В этом примере www является псевдонимом для машины, соответствующей ориджину, то есть example.org (3.2.1.30). Записи CNAME могут использоваться для присвоения псевдонимов именам хостов или для использования одного имени несколькими машинами по очереди. MX record @ IN MX 10 mail.example.org. MX-запись указывает, какие почтовые серверы отвечают за обработку входящей электронной почты для зоны. mail.example.org является именем почтового сервера, а 10 обозначает приоритет этого почтового сервера. Можно иметь несколько почтовых серверов с приоритетами 3, 2 и 1. Почтовый сервер, пытающийся доставить почту для example.org, сначала попробует связаться с машиной, имеющий MX-запись с самым большим приоритетом, затем с приоритетом поменьше и так далее, до тех пор, пока почта не будет отправлена. Для файлов зон in-addr.arpa (обратные записи DNS) используется тот же самый формат, отличающийся только использованием записей PTR вместо A или CNAME. $TTL 3600 1.2.3.in-addr.arpa. IN SOA ns1.example.org. admin.example.org. ( 5 ; Serial 10800 ; Refresh 3600 ; Retry 604800 ; Expire 3600 ) ; Minimum @ IN NS ns1.example.org. @ IN NS ns2.example.org. 2 IN PTR ns1.example.org. 3 IN PTR ns2.example.org. 10 IN PTR mail.example.org. 30 IN PTR example.org. В этом файле дается полное соответствие имён хостов IP-адресам в нашем описанном ранее вымышленном домене. Кэширующий сервер имён BIND кэширующий сервер имён Кэширующий сервер имён - это сервер имён, не отвечающий ни за какую зону. Он просто выполняет запросы от своего имени и сохраняет результаты для последующего использования. Для настройки такого сервера достаточно исключить все описания зон из стандартной конфигурации сервера имён. Запуск <application>named</application> в песочнице BIND работа в песочнице chroot Для дополнительной безопасности вам может потребоваться запускать &man.named.8; с правами непривилегированного пользователя и настроить его на выполнение &man.chroot.8; в каталог-песочницу. Это позволит сделать недоступным для даемона named все, что расположено вне песочницы. Если named будет взломан, то это поможет уменьшить возможный ущерб. По умолчанию во FreeBSD имеются пользователь и группа с именами bind, которые предназначены именно для такого использования. Многие рекомендуют вместо настройки named на использование chroot, запускать named внутри &man.jail.8;. В этом разделе такой подход не рассматривается. Так как named не сможет обратиться ни к чему вне песочницы (например, совместно используемым библиотекам, сокетам протоколов и так далее), то нужно выполнить несколько шагов, чтобы named смог работать нормально. В следующем списке предполагается, что каталогом песочницы является /etc/namedb и что вы не делали никаких изменений в содержимом этого каталога. Выполните следующие шаги, работая как пользователь root: Создайте все каталоги, которые ожидает увидеть named: &prompt.root; cd /etc/namedb &prompt.root; mkdir -p bin dev etc var/tmp var/run master slave &prompt.root; chown bind:bind slave var/* Программе named нужен доступ с правом записи в эти каталоги, так что это все, что мы ей предоставим. Измените и создайте базовые файлы зоны и настроек: &prompt.root; cp /etc/localtime etc &prompt.root; mv named.conf etc && ln -sf etc/named.conf &prompt.root; mv named.root master &prompt.root; sh make-localhost && mv localhost.rev localhost-v6.rev master &prompt.root; cat > master/named.localhost $ORIGIN localhost. $TTL 6h @ IN SOA localhost. postmaster.localhost. ( 1 ; serial 3600 ; refresh 1800 ; retry 604800 ; expiration 3600 ) ; minimum IN NS localhost. IN A 127.0.0.1 ^D Это позволит программе named протоколировать правильное время в &man.syslogd.8;. syslog лог файлы DNS Если вы используете &os; версии ранее 4.9-RELEASE, то постройте статически скомпонованную копию named-xfer и скопируйте её в песочницу: &prompt.root; cd /usr/src/lib/libisc &prompt.root; make cleandir && make cleandir && make depend && make all &prompt.root; cd /usr/src/lib/libbind &prompt.root; make cleandir && make cleandir && make depend && make all &prompt.root; cd /usr/src/libexec/named-xfer &prompt.root; make cleandir && make cleandir && make depend && make NOSHARED=yes all &prompt.root; cp named-xfer /etc/namedb/bin && chmod 555 /etc/namedb/bin/named-xfer После установки статически скомпонованного named-xfer, во избежание появления старых копий библиотек и программ в дереве исходного кода, требуется некоторая зачистка: &prompt.root; cd /usr/src/lib/libisc &prompt.root; make cleandir &prompt.root; cd /usr/src/lib/libbind &prompt.root; make cleandir &prompt.root; cd /usr/src/libexec/named-xfer &prompt.root; make cleandir Иногда при выполнении этого шага возникают ошибки. Если это случилось, выполните такую команду: &prompt.root; cd /usr/src && make cleandir && make cleandir и удалите ваше дерево /usr/obj: &prompt.root; rm -fr /usr/obj && mkdir /usr/obj При этом из вашего дерева исходных текстов будет удалён весь мусор, и повторение вышеописанных шагов должно выполниться успешно. Если вы используете &os; 4.9-RELEASE или более позднюю версию, то копия named-xfer в каталоге /usr/libexec по умолчанию является статически скомпонованной, и вы можете просто скопировать её в песочницу при помощи команды &man.cp.1;. Создайте файл устройства dev/null, который named может видеть и писать в него: &prompt.root; cd /etc/namedb/dev && mknod null c 2 2 &prompt.root; chmod 666 null Создайте символическую ссылку /var/run/ndc на /etc/namedb/var/run/ndc: &prompt.root; ln -sf /etc/namedb/var/run/ndc /var/run/ndc Это просто для того, чтобы не задавать опцию при каждом запуске &man.ndc.8;. Так как содержимое каталога /var/run удаляется при загрузке, и если это показалось вам полезным, то вы можете добавить эту команду в crontab для root с использованием параметра . Обратитесь к справочной странице по &man.crontab.5; для получения более полной информации относительно этого. syslog лог файлы named Настройте &man.syslogd.8; на создание дополнительного протоколирующего сокета log, в который может писать named. Для этого добавьте -l /etc/namedb/dev/log к переменной syslogd_flags из файла /etc/rc.conf. chroot Задайте запуск named и выполнение chroot в песочницу, добавив следующее в /etc/rc.conf: named_enable="YES" named_flags="-u bind -g bind -t /etc/namedb /etc/named.conf" Заметьте, что конфигурационный файл /etc/named.conf именуется по полному имени относительно песочницы, то есть в вышеприведённой строке указывается файл, который на самом деле является файлом /etc/namedb/etc/named.conf. Следующим шагом является редактирование файла /etc/namedb/etc/named.conf так, чтобы named знал, какую зону загружать и где найти их на диске. Далее следует прокомментированный пример (все, что специально не прокомментировано, ничем не отличается от настройки сервера DNS, работающего не в песочнице): options { directory "/"; named-xfer "/bin/named-xfer"; version ""; // Не выдавайте версию BIND query-source address * port 53; }; // управляющий сокет ndc controls { unix "/var/run/ndc" perm 0600 owner 0 group 0; }; // Далее следуют зоны: zone "localhost" IN { type master; file "master/named.localhost"; allow-transfer { localhost; }; notify no; }; zone "0.0.127.in-addr.arpa" IN { type master; file "master/localhost.rev"; allow-transfer { localhost; }; notify no; }; zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.int" { type master; file "master/localhost-v6.rev"; allow-transfer { localhost; }; notify no; }; zone "." IN { type hint; file "master/named.root"; }; zone "private.example.net" in { type master; file "master/private.example.net.db"; allow-transfer { 192.168.10.0/24; }; }; zone "10.168.192.in-addr.arpa" in { type slave; masters { 192.168.10.2; }; file "slave/192.168.10.db"; }; В директиве directory указан каталог /, так как все файлы, которые нужны для named, находятся внутри этого каталога (вспомните, что это равнозначно обычному пользовательскому /etc/namedb). Задает полный путь к двоичному выполнимому файлу named-xfer (внутри границ видимости named). Это необходимо, так как named компилируется с тем, чтобы брать named-xfer по умолчанию из /usr/libexec. Задает имя файла (относительно директивы directory выше), в котором named может найти файл зоны для этой зоны. Задает имя файла (относительно директивы directory выше), в котором named должен записывать копию файла зоны для этой зоны после успешной передачи ее с основного сервера. Вот почему нам нужно изменить владельца каталога slave на bind на этапах настроек выше. После выполнения шагов выше либо перезагрузите ваш сервер, либо перезапустите &man.syslogd.8; и запустите &man.named.8;, не забыв использовать новые опции, заданные в syslogd_flags и named_flags. Теперь named должен заработать в песочнице! Безопасность Хотя BIND является самой распространенной реализацией DNS, всегда стоит вопрос об обеспечении безопасности. Время от времени обнаруживаются возможные и реальные бреши в безопасности. Весьма полезно прочесть сообщения безопасности CERT и подписаться на &a.security-notifications; для того, чтобы быть в курсе текущих проблем с обеспечением безопасности Internet и FreeBSD. Если возникают проблемы, то наличие последних исходных текстов и свежеоткомпилированного named не помешает. Дополнительная литература Справочная информация по BIND/named: &man.ndc.8;, &man.named.8; и &man.named.conf.5; Официальная страница ISC BIND FAQ по BIND Книга издательства O'Reilly DNS and BIND 4th Edition RFC1034 - Domain Names - Concepts and Facilities RFC1035 - Domain Names - Implementation and Specification Tom Rhodes Автор: Dmitry Morozovsky Перевод на русский язык: <acronym>BIND</acronym>9 и &os; bind9 установка &os; начиная с версии 5.3 содержит в базовой поставке сервер DNS BIND9. Среди прочих нововведений стоит отметить новые возможности, связанные с безопасностью, новую организацию файлов конфигурации и автоматическое использование опции &man.chroot.8;. Первая часть этой главы посвящена обсуждению новых возможностей и их использования, вторая описывает процесс обновления сервера DNS при переходе на &os; 5.3. Мы будем ссылаться на сервер BIND как &man.named.8;. Мы подразумеваем, что читатель знаком с терминологией, описываемой в предыдущей главе. Файлы конфигурации для named в настоящее время располагаются в каталоге /var/named/etc/namedb/ и требуют модификации перед началом использования сервера. Большая часть работы по конфигурации сервера DNS происходит именно в этом каталоге. Конфигурация основной (Master) зоны Для создания основной зоны перейдите в каталог /var/named/etc/namedb/ и выполните команду &prompt.root; sh make-localhost При удачном стечении обстоятельств в каталоге master появится два новых файла: localhost.rev для локального домена и localhost-v6.rev для локальной зоны IPv6. В поставляемом стандартном файле конфигурации named.conf уже есть ссылки на оба файла зон. Конфигурация зависимой (Slave) Зоны Дополнительные домены и поддомены могут быть добавлены как зависимые зоны. В большинстве случаев достаточно просто скопировать файл master/localhost.rev в каталог slave и изменить копию. После изменения файлов зон нужно добавить ссылки на них в основной файл конфигурации named.conf, например, так: zone "example.com" { type slave; file "slave/example.com"; masters { 10.0.0.1; }; }; zone "0.168.192.in-addr.arpa" { type slave; file "slave/0.168.192.in-addr.arpa"; masters { 10.0.0.1; }; }; Отметим, что использованный в этом примере IP адрес является адресом, с которого будут копироваться файлы зон; этот адрес не обязательно является публичным сервером DNS. Стартовая конфигурация системы Для автоматического запуска даемона named при загрузке системы добавьте в файл стартовой конфигурации rc.conf строку named_enable="YES" Есть и другие параметры конфигурации, но эта строка — минимально необходима. Список параметров можно найти на странице справочника &man.rc.conf.5;. Если запуск named не разрешен в rc.conf, сервер можно запустить вручную командой &prompt.root; /etc/rc.d/named start <acronym>BIND</acronym>9: вопросы безопасности &os автоматически запускает named в ограниченном пространстве &man.chroot.8;; кроме того, существует еще несколько средств, помогающих защитить сервис DNS от возможных атак. Списки ограничения доступа Для ограничения доступа к зонам могут применяться списки доступа. Для этого опишите для домена список IP адресов, которым разрешены запросы к содержимому доменной зоны, и используйте имя этого списка в конфигурации зоны. Вот пример описания списка ограничения доступа: acl "example.com" { 192.168.0.0/24; }; zone "example.com" { type slave; file "slave/example.com"; masters { 10.0.0.1; }; allow-query { example.com; }; }; zone "0.168.192.in-addr.arpa" { type slave; file "slave/0.168.192.in-addr.arpa"; masters { 10.0.0.1; }; allow-query { example.com; }; }; Версия сервера Разрешать всем запросы о версии вашего DNS сервера может быть не самой лучшей идеей: возможный злоумышленник может воспользоваться ей для выяснения известных ошибок и уязвимостей и применить их вашего сервера. Для предотвращения этого в раздел options файла конфигурации named.conf можно вписать строку, скрывающую версию сервера: options { directory "/etc/namedb"; pid-file "/var/run/named/pid"; dump-file "/var/dump/named_dump.db"; statistics-file "/var/stats/named.stats"; version "None of your business"; Murray Stokely Предоставил Apache HTTP сервер веб сервер настройка Apache Обзор &os; используется в качестве платформы для многих из самых нагруженных серверов в мире. Большинство серверов в интернет используют Apache HTTP сервер. Пакеты Apache должны быть включены в поставку FreeBSD. Если вы не установили их во вместе с системой, воспользуйтесь портами www/apache13 или www/apache2. Как только Apache был успешно установлен, его необходимо настроить. В этом разделе рассказывается о версии 1.3.X Apache HTTP сервера, поскольку эта версия наиболее широко используется в &os;. Apache 2.X содержит много новых технологий, но здесь они не обсуждаются. За дополнительной информацией о Apache 2.X, обращайтесь к . Настройка Apache файл настройки В &os; основной файл настройки Apache HTTP сервера устанавливается в /usr/local/etc/apache/httpd.conf. Это обычный текстовый &unix; файл настройки с строками комментариев, начинающимися с символа #. Исчерпывающее описание всех возможных параметров настройки находится за пределом рассмотрения этой книги, поэтому здесь будут описаны только наиболее часто модифицируемые директивы. ServerRoot "/usr/local" Указывает верхний каталог установки Apache по умолчанию. Бинарные файлы находятся в bin и sbin, подкаталоги расположены относительно корневого каталога сервера, файлы настройки находятся в etc/apache. ServerAdmin you@your.address Адрес, на который должны будут отправляться сообщения о проблемах с сервером. Этот адрес выводится на некоторые генерируемые сервером страницы, например с сообщениями об ошибках. ServerName www.example.com ServerName позволяет вам устанавливать имя хоста, которое отправляется обратно клиентам, если оно отличается от того, с которым настроен хост (например, использование www вместо реального имени хоста). DocumentRoot "/usr/local/www/data" DocumentRoot: Каталог, внутри которого будут храниться документы. По умолчанию, все запросы обрабатываются внутри этого каталога, но символические ссылки и синонимы могут использоваться для указания на другие каталоги. Хорошей идеей будет сделать резервные копии настроек Apache перед внесением изменений. Как только вы будете удовлетворены первоначальной настройкой, можно запускать Apache. Запуск <application>Apache</application> Apache запуск или остановка Apache не запускается из inetd, как это делают многие другие сетевые серверы. Он настроен для автономного запуска, чтобы обеспечивать большую производительность при обработке HTTP запросов от браузеров клиентов. Для упрощения запуска, остановки и перезапуска сервера существует shell скрипт. Для запуска Apache в первый раз просто выполните: &prompt.root; /usr/local/sbin/apachectl start Вы можете остановить сервер в любой момент, выполнив: &prompt.root; /usr/local/sbin/apachectl stop После внесения любых изменений в файл настроек, вам потребуется перезапустить сервер: &prompt.root; /usr/local/sbin/apachectl restart Для запуска Apache при старте системы, добавьте в /etc/rc.conf следующую строку: apache_enable="YES" Если вы хотите передать программе Apache httpd дополнительные параметры командной при загрузке системы, они могут быть помещены в дополнительную строку rc.conf: apache_flags="" Теперь, когда веб сервер запущен, вы можете просмотреть свой веб сайт, задав в строке браузера адрес http://localhost/. По умолчанию отображается веб страница /usr/local/www/data/index.html. Виртуальный хостинг Apache поддерживает два различных типа виртуального хостинга (Virtual Hosting). Первый метод основан на именах (Name-based Virtual Hosting). Он использует полученные от клиента заголовки HTTP/1.1 для определения имени хоста. Это позволяет многим различным доменам использовать один и тот же IP адрес. Для настройки Apache на использование этого типа хостинга добавьте в httpd.conf запись подобную следующей: NameVirtualHost * Если веб сервер назывался www.domain.tld и вы хотите настроить виртуальный домен для www.someotherdomain.tld, необходимо добавить в httpd.conf следующие записи: <VirtualHost *> ServerName www.domain.tld DocumentRoot /www/domain.tld <VirtualHost> <VirtualHost *> ServerName www.someotherdomain.tld DocumentRoot /www/someotherdomain.tld </VirtualHost> Замените адреса и пути к документам на те, что вы будете использовать. За дополнительной информацией по настройке виртуальных хостов обращайтесь к официальной документации Apache: Модули Apache Apache модули Существуют множество различных модулей Apache, которые добавляют функциональность к основному серверу. Коллекция портов FreeBSD предоставляет простой способ установки Apache с некоторыми наиболее популярными дополнительными модулями. mod_ssl веб сервер защита SSL криптография Модуль mod_ssl использует библиотеку OpenSSL для сильной криптографии через протоколы Secure Sockets Layer (SSL v2/v3) и Transport Layer Security (TLS v1). Этот модуль содержит все необходимое для запроса подписанного сертификата из центра сертификации для защищенного веб сервера на &os;. Если вы еще не установили Apache, версия Apache с mod_ssl может быть установлена через порт www/apache13-modssl. Поддержка SSL также присутствует и включена по умолчанию для порта www/apache2. mod_perl Perl Проект интеграции Apache/Perl объединяет мощь языка программирования Perl и HTTP сервера Apache. С модулем mod_perl возможно написание модулей Apache полностью на Perl. Кроме того, постоянно запущенный встроенный в сервер интерпретатор позволяет не тратить ресурсы на запуск внешнего интерпретатора и время на запуск Perl. Если вы еще не установили Apache, его версия с модулем mod_perl может быть установлена через порт www/apache13-modperl. PHP PHP PHP, сокращение от PHP: Hypertext Preprocessor это широко используемый Open Source скриптовый язык общего назначения, который в основном предназначен для веб разработки и может быть встроен в HTML. Его синтаксис был взят от C, &java;, и Perl и язык легок в изучении. Основное преимущество языка в том, что он позволяет веб разработчикам создавать веб страницы быстро, но есть и множество других возможностей. PHP может быть установлен из порта lang/php5. Murray Stokely Предоставил Файл сервер и печать для µsoft.windows; клиентов (Samba) Samba сервер Microsoft Windows файл сервер Windows клиенты принт сервер Windows клиенты Обзор Samba это популярный пакет программ с открытыми исходными текстами, которая предоставляет файловые и принт-сервисы µsoft.windows; клиентам. Эти клиенты могут подключаться и использовать файловое пространство FreeBSD, как если бы это был локальный диск, или принтеры FreeBSD, как если бы это были локальные принтеры. Пакет Samba должен быть включен в поставку FreeBSD. Если вы не установили Samba при первой установке системы, ее можно установить из порта или пакета net/samba3. Настройка Файл настройки Samba по умолчанию устанавливается в /usr/local/etc/smb.conf.default. Этот файл необходимо скопировать в /usr/local/etc/smb.conf и отредактировать перед использованием Samba. В файле smb.conf находится информация, необходимая для работы Samba, например определение принтеров и общих каталогов, которые будут использоваться совместно с &windows; клиентами. В пакет Samba входит программа с веб интерфейсом, называемая swat, которая дает простой способ редактирования файла smb.conf. Использование Samba Web Administration Tool (SWAT) Программа веб администрирования Samba (Samba Web Administration Tool, SWAT) запускается как даемон из inetd. Следовательно, в /etc/inetd.conf необходимо снять комментарий перед тем, как использовать swat для настройки Samba: swat stream tcp nowait/400 root /usr/local/sbin/swat Как описано в , после изменения настроек inetd необходимо отправить HangUP сигнал. Как только swat был включен inetd.conf, вы можете использовать браузер для подключения к . Сначала необходимо зарегистрироваться с системной учетной записью root. После успешного входа на основную страницу настройки Samba, вы можете просмотреть документацию или начать настройку, нажав на кнопку Globals. Раздел Globals соответствует переменным, установленным в разделе [global] файла /usr/local/etc/smb.conf. Глобальные настройки Независимо от того, используете ли вы swat, или редактируете /usr/local/etc/smb.conf непосредственно, первые директивы, которые вы скорее всего встретите при настройке Samba, будут следующими: workgroup Имя домена или рабочей группы NT для компьютеров, которые будут получать доступ к этому серверу. netbios name NetBIOS Устанавливает имя NetBIOS, под которым будет работать Samba сервер. По умолчанию оно устанавливается равным первому компоненту DNS имени хоста. server string Устанавливает строку, которая будет показана командой net view и некоторыми другими сетевыми инструментами, которые отображают строку описания сервера. Настройки безопасности Две из наиболее важных настроек в /usr/local/etc/smb.conf отвечают за выбор модели безопасности и за формат паролей для клиентов. Эти параметры контролируются следующими директивами: security Два наиболее часто используемых параметра это security = share и security = user. Если имена пользователей для клиентов совпадают с их именами на компьютере &os;, вы возможно захотите включить безопасность уровня пользователя (user). Это политика безопасности по умолчанию, она требует, чтобы клиент авторизовался перед доступом к совместно используемым ресурсам. На уровне безопасности share клиенту не требуется входить на сервер перед подключением к ресурсу. Эта модель безопасности использовалась по умолчанию в старых версиях Samba. passdb backend NIS+ LDAP SQL база данных Samba поддерживает несколько различных подсистем аутентификации. Вы можете аутентифицировать клиентов с помощью LDAP, NIS+, базы данных SQL, или через модифицированный файл паролей. Метод аутентификации по умолчанию smbpasswd, и здесь рассматривается только он. Предполагая, что используется подсистема по умолчанию smbpasswd, необходимо создать файл /usr/local/private/smbpasswd, чтобы Samba могла аутентифицировать клиентов. Если вы хотите разрешить всем учетным записям &unix; доступ с &windows; клиентов, используйте следующую команду: &prompt.root; grep -v "^#" /etc/passwd | make_smbpasswd > /usr/local/private/smbpasswd &prompt.root; chmod 600 /usr/local/private/smbpasswd Обратитесь к документации на Samba за дополнительной информацией о параметрах настройки. Основные настройки, рассмотренные здесь, достаточны для первого запуска Samba. Запуск <application>Samba</application> Для запуска Samba при загрузке системы, добавьте в /etc/rc.conf следующую строку: samba_enable="YES" Затем вы можете запустить Samba в любой момент, набрав: &prompt.root; /usr/local/etc/rc.d/samba.sh start Starting SAMBA: removing stale tdbs : Starting nmbd. Starting smbd. Samba состоит из трех отдельных даемонов. Вы можете видеть, что nmbd и smbd запускаются скриптом samba.sh. Если вы включили сервис разрешения имен winbind в smb.conf, то увидите также запуск даемона winbindd. Вы можете остановить Samba в любой момент, набрав: &prompt.root; /usr/local/etc/rc.d/samba.sh stop Samba это сложный программный набор с функциональностью, позволяющей полную интеграцию в сети µsoft.windows;. За дальнейшей информацией о функциях, выходящих за рамки описанной здесь базовой установки, обращайтесь к . Murray Stokely Предоставил Протокол передачи файлов (FTP) FTP сервер Обзор Протокол передачи файлов (File Transfer Protocol, FTP) дает пользователям простой путь передачи файлов на и с FTP сервера. В &os; серверная программа FTP, ftpd, включена в базовую систему. Это упрощает настройку и администрирование FTP сервера в FreeBSD. Настройка Наиболее важный шаг заключается в определении того, каким учетным записям будет позволено получать доступ к FTP серверу. В обычной системе FreeBSD есть множество системных учетных записей, используемых различными даемонами, но пользователям должно быть запрещен вход с использованием этих учетных записей. В файле /etc/ftpusers находится список пользователей, которым запрещен доступ по FTP. По умолчанию он включает упомянутые системные учетные записи, но в него можно добавить и определенных пользователей, которым будет запрещен доступ по FTP. Вам может понадобиться ограничить доступ определенных пользователей без полного запрета использования FTP. Это можно сделать через файл /etc/ftpchroot. В нем находится список пользователей и групп, к которым применяется ограничение доступа. На странице справочника &man.ftpchroot.5; дана подробная информация, и она не будет дублироваться здесь. Если вы захотите разрешить анонимный FTP доступ на сервер, в системе &os; необходимо создать пользователя ftp. Этот пользователь сможет входить на FTP сервер с именем пользователя ftp или anonymous, с любым паролем (существует соглашение об использовании почтового адреса пользователя в качестве пароля). FTP сервер выполнит &man.chroot.2; при входе пользователя anonymous для ограничения доступа только домашним каталогом пользователя ftp. Существуют два текстовых файла, определяющих сообщение, отправляемое FTP клиентам. Содержимое файла /etc/ftpwelcome будет выведено пользователям перед приглашением на вход. После успешного входа будет выведено содержимое файла /etc/ftpmotd. Обратите внимание, что путь к этому файлу задается относительно домашнего каталога пользователя, так что анонимным пользователям будет отправляться ~ftp/etc/ftpmotd. Как только FTP сервер был правильно настроен, он должен быть включен в /etc/inetd.conf. Все, что необходимо, это удалить символ комментария # из начала существующей строки ftpd: ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l Как описано в , сигнал HangUP должен быть отправлен inetd после того, как этот файл настройки был изменен. Теперь вы можете войти на FTP сервер, введя: &prompt.user; ftp localhost Поддержка syslog лог файлы FTP Для протоколирования даемон ftpd использует сообщения &man.syslog.3;. По умолчанию, &man.syslog.3; поместит сообщения, относящиеся к FTP, в файл /var/log/xferlog. Местоположение лог файла FTP может быть изменено путем изменения следующей строки в файле /etc/syslog.conf: ftp.info /var/log/xferlog Учитывайте потенциальные проблемы, возникающие с анонимным FTP сервером. В частности, вы должны дважды подумать, прежде чем позволить анонимным пользователям загружать файлы на сервер. Вы можете обнаружить, что FTP сайт стал форумом, на котором происходит обмен нелицензионным коммерческим программным обеспечением или чем-то еще хуже. Если вам необходимо разрешить анонимную выгрузку файлов на FTP, права должны быть настроены таким образом, чтобы эти файлы не могли прочитать другие анонимные пользователи до их рассмотрения администратором. Tom Hukins Текст предоставил Синхронизация часов через NTP NTP Обзор С течением времени часы компьютера имеют тенденцию отставать. Network Time Protocol - Сетевой Протокол Времени (NTP) является одним из способов вести точное время. Многие сервисы Интернет опираются или сильно зависят от точности часов компьютеров. К примеру, веб-сервер может получать запрос на посылку файла, который был недавно модифицирован. В локальной сети необходимо, чтобы часы компьютеров, совместно использующих файлы, были синхронизированы, чтобы время модификации файлов устанавливалось правильно. Такие службы, как &man.cron.8;, также зависят от правильности установки системных часов, поскольку запускают команды в определенное время. NTP ntpd FreeBSD поставляется с сервером NTP &man.ntpd.8;, который можно использовать для опроса других серверов NTP для установки часов на вашей машине или предоставления услуг точного времени. Выбор подходящих серверов NTP NTP выбор серверов Для синхронизации ваших часов вам нужно найти для использования один или большее количество серверов NTP. Ваш сетевой администратор или провайдер могут иметь сервер NTP для этой цели—обратитесь к ним, так ли это в вашем случае. Существует онлайн список общедоступных серверов NTP, которым можно воспользоваться для поиска ближайшего к вам сервера NTP. Не забудьте выяснить политику выбранного вами сервера и спросить разрешения, если это требуется. Выбор нескольких несвязанных серверов NTP является хорошей идеей в том случае, если один из используемых вами серверов станет недоступным или его часы неточны. &man.ntpd.8; использует ответы, которые он получает от других серверов с умом—он делает предпочтение надежным серверам. Настройка вашей машины NTP настройка Базовая конфигурация ntpdate Если вам нужно только синхронизировать ваши часы при загрузке машины, вы можете воспользоваться утилитой &man.ntpdate.8;. Это может подойти для некоторых настольных машин, которые часто перезагружаются и только требуют изредка синхронизироваться, но на большинстве машин должен работать &man.ntpd.8;. Использование &man.ntpdate.8; при загрузке также хорошо для машин, на которых запущен даемон &man.ntpd.8;. Программа &man.ntpd.8; изменяет время постепенно, тогда как &man.ntpdate.8; устанавливает время вне зависимости от того, насколько велика разница между текущим временем машины и точным временем. Для включения &man.ntpdate.8; во время загрузки, добавьте строчку ntpdate_enable="YES" в файл /etc/rc.conf. Вам также потребуется указать все серверы, с которыми вы хотите синхронизироваться, и все параметры, которые передаются в &man.ntpdate.8;, в ntpdate_flags. NTP ntp.conf Общие настройки NTP настраивается в файле /etc/ntp.conf, формат которого описан в &man.ntp.conf.5;. Вот простой пример: server ntplocal.example.com prefer server timeserver.example.org server ntp2a.example.net driftfile /var/db/ntp.drift Параметр server задает, какие серверы будут использоваться, по одному в каждой строке. Если сервер задан с аргументом prefer, как ntplocal.example.com, то этому серверу отдается предпочтение перед остальными. Ответ от предпочтительного сервера будет отброшен, если он значительно отличается от ответов других серверов, в противном случае он будет использоваться безотносительно к другим ответам. Аргумент prefer обычно используется для серверов NTP, о которых известно, что они очень точны, такими, на которых используется специальное оборудование точного времени. Параметр driftfile задает файл, который используется для хранения смещения частоты системных часов. Программа &man.ntpd.8; использует его для автоматической компенсации естественного смещения часов, позволяя ему поддерживать достаточно правильную настройку, даже если он на некоторый период отключается от внешнего источника информации о времени. Параметр driftfile задает, какой файл используется для сохранения информации о предыдущих ответах от серверов NTP, которые вы используете. Этот файл содержит внутреннюю информацию для NTP. Он не должен изменяться никакими другими процессами. Управление доступом к вашему серверу По умолчанию ваш сервер NTP будет доступен всем хостам в Интернет. Параметр restrict в файле /etc/ntp.conf позволяет вам контролировать, какие машины могут обращаться к вашему серверу. Если вы хотите запретить всем машинам обращаться к вашему серверу NTP, добавьте следующую строку в файл /etc/ntp.conf: restrict default ignore Если вы хотите разрешить синхронизировать свои часы с вашим сервером только машинам в вашей сети, но запретить им настраивать сервер или быть равноправными участниками синхронизации времени, то вместо указанной добавьте строчку restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap где 192.168.1.0 является адресом IP вашей сети, а 255.255.255.0 её сетевой маской. /etc/ntp.conf может содержать несколько директив restrict. Для получения подробной информации обратитесь к подразделу Access Control Support (Поддержка Управления Доступом) в &man.ntp.conf.5;. Запуск сервера NTP Для того, чтобы сервер NTP запускался при загрузке, добавьте строку xntpd_enable="YES" в файл /etc/rc.conf. Если вы хотите передать дополнительные опции в &man.ntpd.8;, то отредактируйте параметр xntpd_flags в файле /etc/rc.conf. Для запуска сервера без перезагрузки вашей машины, выполните команду ntpd, не забыв задать дополнительные параметры из переменной xntpd_flags в файле /etc/rc.conf. К примеру: &prompt.root; ntpd -p /var/run/ntpd.pid Во &os; 5.X различные параметры из /etc/rc.conf были переименованы. В частности, в списке параметров вам необходимо заменить каждую строчку xntpd на ntpd. Использование ntpd с временным подключением к Интернет Для нормальной работы программе &man.ntpd.8; не требуется постоянное подключение к Интернет. Однако если ваше временное подключение к Интернет настроено для дозвона по требованию, хорошо бы запретить трафику NTP вызывать дозвон или поддерживать соединение постоянно. Если вы используете пользовательский PPP, то можете воспользоваться директивами filter в файле /etc/ppp/ppp.conf. К примеру: set filter dial 0 deny udp src eq 123 # Prevent NTP traffic from initiating dial out set filter dial 1 permit 0 0 set filter alive 0 deny udp src eq 123 # Prevent incoming NTP traffic from keeping the connection open set filter alive 1 deny udp dst eq 123 # Prevent outgoing NTP traffic from keeping the connection open set filter alive 2 permit 0/0 0/0 Более подробную информацию можно найти в разделе PACKET FILTERING (ФИЛЬТРАЦИЯ ПАКЕТОВ) в &man.ppp.8;, а примеры в /usr/share/examples/ppp/. Некоторые провайдеры Интернет блокируют трафик по портам с маленькими номерами, что приводит к неработоспособности NTP, так как ответы никогда не достигают вашей машины. Дополнительная литература Документация по серверу NTP может быть найдена в каталоге /usr/share/doc/ntp/ в формате HTML. diff --git a/ru_RU.KOI8-R/books/handbook/preface/preface.sgml b/ru_RU.KOI8-R/books/handbook/preface/preface.sgml index 18580ecd84..c518d4e66d 100644 --- a/ru_RU.KOI8-R/books/handbook/preface/preface.sgml +++ b/ru_RU.KOI8-R/books/handbook/preface/preface.sgml @@ -1,660 +1,660 @@ Предисловие Целевая аудитория Люди, которые используют FreeBSD с недавнего времени, найдут, что первая часть этой книги проводит читателя через процесс установки FreeBSD и кратко освещает идеи и традиции, на которых базируется &unix;. Работа с этой частью требует несколько большего, чем просто желание исследовать – необходима возможность принимать к сведению новые идеи. Вторая, много большая часть Руководства, является всеобъемлющим справочником о всех темах, которые могут интересовать администраторов FreeBSD. Некоторые из глав этой части могут рекомендовать вам предварительное чтение других документов, о чём упоминается в кратком обзоре в начале каждой главы. Список рекомендуемой дополнительной литературы вы можете найти здесь: . Изменения по сравнению со второй редакцией Третья редакция является кульминацией более чем двух лет работы отдельных членов проекта документации FreeBSD. Вот основные изменения в новой редакции: , Настройка и оптимизация, была расширена новой информацией о ACPI управлении питанием и ресурсами, системной утилите cron и дополнительных параметрах оптимизации ядра. , Безопасность, была расширена новой информацией о виртуальных частных сетях (VPN), списках контроля доступа файловой системы (ACL), и сообщениях безопасности. , Принудительный контроль доступа (MAC), новая глава этой редакции. Она описывает, что такое MAC и как этот механизм может быть использован для защиты системы FreeBSD. , Устройства хранения, была расширена новой информацией о устройствах хранения USB, образах файловой системы, квотах файловой системы, файловых системах в файлах и в сети, зашифрованных дисковых разделах. , Vinum, новая глава этой редакции. В ней описано как использовать Vinum, менеджер логических томов, который предоставляет независимые от устройств логические диски и программные уровни RAID-0, RAID-1 и RAID-5. К , PPP и SLIP, был добавлен раздел о решении проблем. , Электронная почта, была расширена новой информацией об использовании альтернативных транспортных агентов, SMTP аутентификации, UUCP, fetchmail, procmail, и другими разделами повышенной сложности. , Сетевые серверы, появилась в этой редакции. Эта главы включает информацию о установке Apache HTTP Server, FTPd, и настройке Samba сервера для клиентов Microsoft Windows. Некоторые разделы были перемещены сюда из , Сложные вопросы работы в сети. , Сложные вопросы работы в сети, была расширена новой информацией об использовании устройств Bluetooth в FreeBSD, настройке беспроводных сетей, и сетях Asynchronous Transfer Mode (ATM). Был добавлен глоссарий, объединяющий информацию о технических терминах, используемых в книге. Множество эстетических улучшений были внесены в таблицы и иллюстрации этой книги. Изменения во второй редакции Вторая редакция является кульминацией более чем двухлетней работы членов Проекта документации FreeBSD. Нижеследующий список перечисляет все значительные изменения, внесенные в эту редакцию: Был добавлен полный указатель тем. Все ASCII-иллюстрации были заменены на графические. Был добавлен стандартный краткий обзор к каждому разделу для того, чтобы читатель мог получить представление о содержании раздела и о том, что необходимо знать для его изучения. Содержимое было логически реорганизовано на три части: В Начале, Системное администрирование и Приложения. (Установка FreeBSD) был полностью переписан, добавлено большое количество снимков экрана, чтобы облегчить понимание текста для новых пользователей. (Основы &unix;) был расширен и содержит дополнительную информацию о процессах, даемонах и сигналах. (Установка приложений: порты и пакеты) был расширен и содержит дополнительную информации об управлении бинарными пакетами. (X Window System) был полностью переписан и обращает больше внимания на современные технологии для рабочего стола, такие, как KDE и GNOME на &xfree86; 4.X. (Процесс загрузки FreeBSD) был расширен. (Устройства хранения) был составлен из того, что раньше было двумя различными разделами Диски и Резервное копирование. Нам кажется, что данные темы будут легче и исчерпывающе описаны как один раздел. Была добавлена секция о программном и аппаратном RAID. (Последовательные коммуникации) был полностью реорганизован и актуализирован для FreeBSD 4.X/5.X. (PPP и SLIP) был существенно обновлён. Было добавлено множество новых секций в (Сложные вопросы работы в сети). (Электронная почта) был расширен, теперь он включает больше информации о настройке sendmail. (Работа с приложениями, написанными для &linux;) был дополнен включением информации об установке &oracle; и &sap.r3;. Следующие новые темы были рассмотрены в этой, второй, редакции: Настройка и оптимизация (). Мультимедиа () Структура этой книги Эта книга разбита на пять частей. В первой части, В начале, рассматривается установка и основные навыки использования FreeBSD. Предполагается, что читатель освоит эти разделы последовательно, возможно пропуская разделы, в которых обсуждаются уже знакомые для него темы. Вторая часть, Общие задачи, рассказывает о некоторых наиболее часто используемых возможностях FreeBSD. Этот раздел и все последующие могут быть прочитаны не по порядку. Каждая глава начинается с краткого обзора, который описывает, о чём говорится в ней и что читатель должен будет знать для прочтения этой главы. Это сделано для того, чтобы случайно встретивший этот материал читатель мог найти разделы, которые его интересуют. В третьей части, Системное администрирование, рассмотрены вопросы администрирования. В четвертой части, Сетевые коммуникации, охвачены темы, связанные с серверами и сетью. Пятая часть содержит приложения и справочную информацию. , Введение Знакомит пользователя с FreeBSD. Рассказывает об истории проекта FreeBSD, его задачах и модели разработки. , Установка Проводит пользователя через весь процесс установки. Некоторые более сложные вопросы установки, такие как установка по последовательной консоли, также обсуждаются. , Основы &unix; Рассказывает об основных командах и функциональности операционной системы FreeBSD. Если вы знакомы с &linux; или другой &unix;-подобной операционной системой, возможно, вы можете пропустить эту главу. , Установка приложений: порты и пакеты Рассказывает о процессе установки программного обеспечения сторонних производителей с использованием Коллекции Портов FreeBSD и стандартных бинарных пакетов. , The X Window System Описывает X Window System вообще и использование &xfree86; под управлением FreeBSD в частности. Также описывает популярные окружения рабочего стола, такие как KDE и GNOME. , Прикладные программы Перечисляет некоторые популярные приложения для рабочей станции, такие как веб-браузеры и офисные пакеты и описывает процесс их установки на FreeBSD. , Мультимедиа Показывает, как настроить поддержку воспроизведения звука и видео на вашей системе. Также описывает некоторые примеры приложений для воспроизведения звука и видео. , Настройка ядра FreeBSD Объясняет почему вам может понадобиться перенастроить ядро и детально описывает процесс настройки, сборки и установки нового ядра. , Печать Рассказывает об управлении принтерами в FreeBSD, включая информацию об титульных страницах, учёте использования принтеров и первоначальной настройке. , Работа с приложениями, написанными для &linux; Описывает возможности &linux;-совместимости в FreeBSD. Также предоставляет детальные инструкции по установке для многих популярных приложений для &linux;, таких как: &oracle;, &sap.r3; и &mathematica;. , Настройка и оптимизация Описывает всевозможные параметры настройки FreeBSD, которые может использовать системный администратор для оптимальной настройки системы. Также описывает различные конфигурационные файлы, используемые в FreeBSD и расположение этих файлов на диске. , Процесс загрузки Рассказывает о процессе загрузки FreeBSD и объясняет, как управлять этим процессом при помощи различных настроек. , Пользователи и основы управления учётными записями Рассказывает о создании и управлении пользовательскими учётными записями. Также обсуждает установку ограничений ресурсов для пользователей и другие задачи управления пользователями. , Безопасность Описывает множество различных утилит, которые помогут вам поддерживать FreeBSD в безопасном, надёжном состоянии, включая - Kerberos, IPsec, OpenSSH и межсетевые экраны. + Kerberos, IPsec, OpenSSH и брандмауэры. , Принудительный контроль доступа (MAC) Описывает что такое принудительный контроль доступа (Mandatory Access Control, MAC) и как этот механизм может быть использован для защиты системы FreeBSD. , Устройства хранения Описывает как управлять накопителями информации и файловыми системами в FreeBSD, включая физические диски, массивы RAID, оптические и ленточные носители, диски в оперативной памяти и сетевые файловые системы. , Vinum Рассказывает как использовать Vinum, менеджер логических разделов, при помощи которого можно создавать и использовать независимые от устройств хранения логические диски и программно реализовывать RAID-0, RAID-1 и RAID-5. , Локализация Описывает использование FreeBSD на языках, отличных от английского. Рассказывает о локализации на уровне системы и отдельных приложений. , На переднем крае разработок Объясняет различия между FreeBSD-STABLE, FreeBSD-CURRENT и FreeBSD-RELEASE. Рассказывает, кому из пользователей будет полезно отслеживать версию системы в разработке и вкратце описывает этот процесс. , Последовательные коммуникации Объясняет как подключать терминалы и модемы к вашей FreeBSD как в серверном, так и в клиентском режиме. , PPP и SLIP Описывает использование PPP, SLIP или PPP через Ethernet для соединения с удалёнными системами при помощи FreeBSD. , Электронная почта Объясняет использование различных компонентов почтового сервера и более углублённо рассматривает простые вопросы конфигурации для наиболее популярного программного обеспечения почтовых серверов: sendmail. , Сетевые серверы Предоставляет детальные инструкции и примеры файлов настройки для использования компьютера с FreeBSD в качестве файлового сервера (NFS), сервера доменных имен (DNS), сервера сетевой информационной системы (⋼), или сервера точного времени (ntpd). , Сложные вопросы работы в сети Рассматривает множество вопросов работы с сетью, включая совместный доступ компьютеров в вашей локальной сети к Internet, расширенные вопросы маршрутизации, беспроводные соединения, bluetooth, ATM, IPv6 и многое другое. , Получение FreeBSD Перечисляет различные источники, из которых можно получить FreeBSD на CDROM или DVD, равно как и различные сайты в Internet, с которых можно скачать и установить FreeBSD. , Библиография Эта книга касается многих различных тем, которые могут сподвигнуть вас на более детальное изучение. Библиография перечисляет множество отличных книг, которые упоминаются в тексте. , Ресурсы в Internet Описывает множество форумов, доступных для пользователей FreeBSD, в которых можно задать вопросы и поучаствовать в технических обсуждениях FreeBSD. , Ключи PGP Содержит ключи PGP некоторых разработчиков FreeBSD. Договоренности, используемые в этой книге Для того чтобы обеспечить целостность и простоту чтения текста в данной книге мы применяем некоторые договорённости. Типографические договорённости Наклонный шрифт Наклонный шрифт используется для имен файлов, адресов в Internet (URL), выделенного текста и первого применения технических терминов. Моноширинный шрифт Моноширинных шрифт используется для сообщений об ошибках, команд, имен пользователей, названий групп, названий устройств, переменных и фрагментов кода. Полужирный шрифт Полужирный шрифт используется для обозначения приложений, команд и параметров. Пользовательский ввод Клавиши представляются в виде полужирного текста для того, чтобы выделяться среди остального текста. Комбинации клавиш, которые должны вводиться одновременно разделяются символом `+', например: Ctrl Alt Del Это будет означать, что пользователь должен нажать клавиши Ctrl, Alt и Del одновременно. Комбинации клавиш, которые должны вводиться последовательно, разделяются запятыми, например: Ctrl X , Ctrl S Это будет означать, что пользователь должен нажать Ctrl и X одновременно, после чего одновременно нажать Ctrl и S. Примеры Примеры, которые начинаются с E:\> обозначают команды &ms-dos;. Пока не указано противного, эти команды могут вводиться из окна Сеанс &ms-dos; в современных системах µsoft.windows;. E:\> tools\fdimage floppies\kern.flp A: Примеры, которые начинаются с &prompt.root; обозначают команды, которые должны быть запущены с правами суперпользователя в FreeBSD. Вы можете войти в систему как пользователь root для того, чтобы ввести эти команды или войти в систему обычным пользователем и использовать &man.su.1; для того, чтобы получить привилегии суперпользователя. &prompt.root; dd if=kern.flp of=/dev/fd0 Примеры, начинающиеся с &prompt.user; указывают, что команда должна быть исполнена с правами обычного пользователя. Пока не указано противного, используется синтаксис C-shell для установки переменных окружения и других команд. &prompt.user; top Благодарности Книга, которую вы держите в руках являет собой результат труда многих сотен людей по всему миру. Не имеет значения, присылали ли они исправления опечаток или предоставляли целые главы, их труд был полезен. Несколько компаний поддерживали разработку этого документа, оплачивая авторам их труд, оплачивая публикацию и т.д. В частности, BSDi (в последствии приобретённая компанией Wind River Systems) оплачивала труд по улучшению этой книги участникам Проекта Документации FreeBSD, что в итоге сделало возможным выпуск первой печатной версии в марте 2000 года (ISBN 1-57176-241-8). Впоследствии компания Wind River Systems оплатила работу нескольких авторов по улучшению генерации книги в удобном для печати виде и добавлению нескольких глав. Кульминация этой работы являла собой публикацию второй печатной версии в ноябре 2001 года (ISBN 1-57176-303-1). В 2003-2004 годах FreeBSD Mall, Inc заплатила нескольким контрибьюторам за улучшение Handbook при подготовке к третьей редакции.