diff options
author | Andrey Zakhvatov <andy@FreeBSD.org> | 2004-01-18 05:50:47 +0000 |
---|---|---|
committer | Andrey Zakhvatov <andy@FreeBSD.org> | 2004-01-18 05:50:47 +0000 |
commit | a48d4977fcb60bdd3d217a334611b08eeb6ba696 (patch) | |
tree | 761acbe110642d45ee86648bbe5ab53ce504ec5f | |
parent | 7874c73dccc3d3c666ca769828e48f42ac0b1568 (diff) | |
download | doc-a48d4977fcb60bdd3d217a334611b08eeb6ba696.tar.gz doc-a48d4977fcb60bdd3d217a334611b08eeb6ba696.zip |
MFen 1.266
Notes
Notes:
svn path=/head/; revision=19708
-rw-r--r-- | ru_RU.KOI8-R/books/handbook/advanced-networking/chapter.sgml | 7955 |
1 files changed, 6420 insertions, 1535 deletions
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 2db6d7903f..04413fe6c8 100644 --- a/ru_RU.KOI8-R/books/handbook/advanced-networking/chapter.sgml +++ b/ru_RU.KOI8-R/books/handbook/advanced-networking/chapter.sgml @@ -2,1166 +2,3022 @@ The FreeBSD Russian Documentation Project $FreeBSD$ - $FreeBSDru: frdp/doc/ru_RU.KOI8-R/books/handbook/advanced-networking/chapter.sgml,v 1.7 2000/11/17 15:46:38 andy Exp $ + $FreeBSDru: frdp/doc/ru_RU.KOI8-R/books/handbook/advanced-networking/chapter.sgml,v 1.84 2004/01/11 18:41:27 andy Exp $ - Original revision: 1.32 + Original revision: 1.266 --> <chapter id="advanced-networking"> -<title>Сложные вопросы работы в сети</title> + <title>Сложные вопросы работы в сети</title> -<sect1> - <title>Краткий обзор</title> + <sect1 id="advanced-networking-synopsis"> + <title>Краткий обзор</title> - <para>Последующая глава посвящена некоторым более часто используемым - сетевым службам UNIX-систем. Это, конечно же, будет касаться настройки - указанных служб в Вашей системе FreeBSD.</para> -</sect1> + <para>Эта глава посвящена некоторым наиболее часто используемым сетевым + службам систем &unix;. Мы опишем, как запустить, настроить, + протестировать и поддерживать работу всех сетевых служб, используемых во + FreeBSD. Кроме того, для облегчения вашей работы в главу включены + примеры конфигурационных файлов.</para> -<sect1 id="routing"> - <title>Сетевые шлюзы и маршруты</title> - - <para><emphasis>Предоставил &a.gryphon;, 6 октября 1995.</emphasis></para> - - <para>Чтобы некоторая машина могла найти другую, должен иметься механизм - описания того, как добраться от одной машине к другой. Такой механизм - называется маршрутизацией. <quote>Маршрут</quote> задается парой - адресов: <quote>адресом назначения</quote> (destination) и - <quote>сетевым шлюзом</quote> (gateway). Эта пара означает, что, если - Вы пытаетесь соединиться с <emphasis>адресом назначения</emphasis>, то - вам нужно будет пройти через <quote>сетевой шлюз</quote>. Существует - три типа адресов назначения: отдельные хосты, подсети и - <quote>маршрут по умолчанию</quote> (default). <quote>Маршрут по - умолчанию</quote> (default route) используется, если не подходит ни один - из других маршрутов. Мы поговорим немного подробнее о маршрутах по - умолчанию позже. Также имеется и три типа сетевых шлюзов: отдельные - хосты, интерфейсы (также называемые <quote>подключениями</quote> - (links)) и аппаратные адреса ethernet.</para> + <para>После чтения этой главы вы будете знать:</para> - <sect2> - <title>Пример</title> + <itemizedlist> + <listitem> + <para>Основные понятия о маршрутизации и маршрутах.</para> + </listitem> + + <listitem> + <para>Как заставить FreeBSD работать в качестве сетевого + моста.</para> + </listitem> + + <listitem> + <para>Как настроить сетевую файловую систему.</para> + </listitem> + + <listitem> + <para>Как настроить загрузку по сети для бездисковой машины.</para> + </listitem> - <para>Для иллюстрации различных аспектов маршрутизации мы будем - использовать следующий пример, который является результатом работы - команды <command>netstat -r</command>:</para> + <listitem> + <para>Как настроить сетевой сервер информации для совместного + использования учётных записей пользователей.</para> + </listitem> + + <listitem> + <para>Как настроить автоматическое конфигурирование сетевых параметров + при помощи DHCP.</para> + </listitem> + + <listitem> + <para>Как настроить сервер имён.</para> + </listitem> - <screen> -Destination Gateway Flags Refs Use Netif Expire + <listitem> + <para>Как синхронизировать дату и время, а также настроить сервер + времени с протоколом NTP.</para> + </listitem> + + <listitem> + <para>Как настроить трансляцию сетевых адресов.</para> + </listitem> + + <listitem> + <para>Как управлять даемоном <application>inetd</application>.</para> + </listitem> + + <listitem> + <para>Как соединить два компьютера посредством PLIP.</para> + </listitem> + + <listitem> + <para>Как настроить IPv6 на машине FreeBSD.</para> + </listitem> + </itemizedlist> + + <para>Перед чтением этой главы вы должны:</para> + + <itemizedlist> + <listitem> + <para>Понимать основы работы скриптов + <filename>/etc/rc</filename>.</para> + </listitem> + + <listitem> + <para>Свободно владеть основными сетевыми терминами.</para> + </listitem> + </itemizedlist> + </sect1> + + <sect1 id="network-routing"> + <sect1info> + <authorgroup> + <author> + <firstname>Coranth</firstname> + <surname>Gryphon</surname> + <contrib>Текст предоставил</contrib> + </author> + </authorgroup> + </sect1info> + + <title>Сетевые шлюзы и маршруты</title> + + <indexterm><primary>маршрутизация</primary></indexterm> + <indexterm><primary>шлюз</primary></indexterm> + <indexterm><primary>подсеть</primary></indexterm> + <para>Чтобы некоторая машина могла найти в сети другую, должен иметься + механизм описания того, как добраться от одной машине к другой. Такой + механизм называется <firstterm>маршрутизацией</firstterm>. + <quote>Маршрут</quote> задаётся + парой адресов: <quote>адресом назначения</quote> (destination) и + <quote>сетевым шлюзом</quote> (gateway). Эта пара указывает на то, что + если Вы пытаетесь соединиться с <emphasis>адресом назначения</emphasis>, + то вам нужно устанавливать связь через <quote>сетевой шлюз</quote>. + Существует три типа адресов назначения: отдельные хосты, подсети и + <quote>маршрут по умолчанию</quote> (default). <quote>Маршрут по + умолчанию</quote> (default route) используется, если не подходит ни один + из других маршрутов. Мы поговорим немного подробнее о маршрутах по + умолчанию позже. Также имеется и три типа сетевых шлюзов: отдельные + хосты, интерфейсы (также называемые <quote>подключениями</quote> + (links)) и аппаратные адреса Ethernet (MAC-адреса).</para> + + <sect2> + <title>Пример</title> + + <para>Для иллюстрации различных аспектов маршрутизации мы будем + использовать следующий пример использования команды + <command>netstat</command>:</para> + + <screen>&prompt.user; <userinput>netstat -r</userinput> +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 -foobar.com link#1 UC 0 0 +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.foobar.com link#1 UC 0 0 -224 link#1 UC 0 0 - </screen> - - <para>В первых двух строках фигурируют маршрут по умолчанию (который - будет описан в следующем разделе) и маршрут на - <hostid>localhost</hostid>.</para> - - <para>Интерфейс (колонка <literal>Netif</literal>), который будет - использоваться для <literal>localhost</literal>, и который назван - <devicename>lo0</devicename>, имеет также второе название, устройство - loopback. Это значит сохранение всего трафика для указанного адреса - назначения внутри, без посылки его по сети, так как он все равно - будет направлен туда, откуда был создан.</para> - - <para>Следующими выделяющимися адресами являются строчки <hostid - role="mac">0:e0:...</hostid>. Это аппаратные адреса ethernet. - FreeBSD будет автоматически распознавать любой хост (в нашем - примере это <hostid>test0</hostid>) в локальной сети ethernet и - добавит маршрут для этого хоста, указывающий непосредственно на - интерфейс ethernet, <devicename>ed0</devicename>. С этим типом - маршрута также связан параметр таймаута (колонка - <literal>Expire</literal>), используемый в случае неудачной попытки - услышать этот хост в течении некоторого периода времени. В таком - случае маршрут будет автоматически удален. Такие хосты поддерживаются - при помощи механизма, известного как RIP (Routing Information - Protocol), который вычисляет маршруты к хостам локальной сети при - помощи определения кратчайшего расстояния.</para> - - <para>FreeBSD добавит также все маршруты к подсетям для локальных - подсетей (<hostid role="ipaddr">10.20.30.255</hostid> является - широковещательным адресом для подсети <hostid - role="ipaddr">10.20.30</hostid>, а имя <hostid - role="domainname">foobar.com</hostid> является именем домена, связанным - с этой подсетью). Назначение <literal>link#1</literal> соответствует - первому сетевому адаптеру в машине. Отметьте отсутствие - дополнительного интерфейса для этих строк.</para> - - <para>В обеих этих группах (хосты и подсети локальной сети) маршруты - конфигурируются автоматически даемоном, который называется - <command>routed</command>. Если он не запущен, то будут существовать - только статически заданные (то есть введенные явно) маршруты.</para> - - <para>Строка <literal>host1</literal> относится к нашему хосту, который - известен по адресу ethernet. Так как мы являемся посылающим хостом, - FreeBSD знает, что нужно использовать loopback-интерфейс - (<devicename>lo0</devicename>) вместо того, чтобы осуществлять - посылку в интерфейс ethernet.</para> - - <para>Две строки <literal>host2</literal> являются примером того, что - происходит при использовании алиасов в команде ifconfig (обратитесь - к разделу об ethernet для объяснения того, почему мы это делаем). - Символ <literal>=></literal> после интерфейса - <devicename>lo0</devicename> указывает на то, что мы используем не - просто интерфейс loopback (так как это адрес, обозначающий локальный - хост), но к тому же это алиас. Такие маршруты появляются только - на хосте, поддерживающем алиасы; для всех остальных хостов в локальной - сети в таких случаях будут показаны просто строчки - <literal>link#1</literal>.</para> - - <para>Последняя строчка (подсеть назначения <literal>224</literal>) - имеет отношение к многоадресной посылке, которая будет рассмотрена в - другом разделе.</para> - - <para>Другим столбцом, о котором стоит сказать, является - <literal>Flags</literal>. Каждый маршрут имеет различные атрибуты, - которые перечислены в этой колонке. Ниже приведена краткая таблица - значений некоторых этих флагов и их значений:</para> - - <informaltable frame="none"> - <tgroup cols="2"> - <tbody> - <row> - <entry>U</entry> - <entry>Up: Маршрут актуален.</entry> - </row> - - <row> - <entry>H</entry> - <entry>Host: Адресом назначения является отдельный хост.</entry> - </row> - - <row> - <entry>G</entry> - <entry>Gateway: Посылать все для этого адреса назначения на указанную - удаленную систему, которая будет сама определять дальнейший путь - прохождения информации.</entry> - </row> - - <row> - <entry>S</entry> - <entry>Static: Маршрут был настроен вручную, а не автоматически - сгенерирован системой.</entry> - </row> - - <row> - <entry>C</entry> - <entry>Clone: Новый маршрут сгенерирован на основе указанного для - машин, к которым мы подключены. Такой тип маршрута обычно - используется для локальных сетей.</entry> - </row> - - <row> - <entry>W</entry> - <entry>WasCloned: Указывает на то, что маршрут был автоматически - сконфигурирован на основе маршрута в локальной - сети (Clone).</entry> - </row> - - <row> - <entry>L</entry> - <entry>Link: Маршрут включает ссылку на аппаратный адрес - ethernet.</entry> - </row> - </tbody> - </tgroup> - </informaltable> - </sect2> +host2.example.com link#1 UC 0 0 +224 link#1 UC 0 0</screen> + + <indexterm><primary>маршрут по умолчанию</primary></indexterm> + + <para>В первых двух строках задаются маршрут по умолчанию (который + будет описан в <link linkend="network-routing-default">следующем + разделе</link>) и маршрут на <hostid>localhost</hostid>.</para> + + <indexterm><primary>устройство loopback</primary></indexterm> + <para>Интерфейс (колонка <literal>Netif</literal>), который указан в + этой таблице маршрутов для использования с + <literal>localhost</literal> и который назван + <devicename>lo0</devicename>, имеет также второе название, устройство + loopback. Это значит сохранение всего трафика для указанного адреса + назначения внутри, без посылки его по сети, так как он все равно + будет направлен туда, где был создан.</para> + + <indexterm> + <primary>Ethernet</primary> + <secondary>MAC адрес</secondary> + </indexterm> + <para>Следующими выделяющимися адресами являются адреса, начинающиеся с + <hostid role="mac">0:e0:...</hostid>. Это аппаратные адреса Ethernet, + или MAC-адреса. FreeBSD будет автоматически распознавать любой хост + (в нашем примере это <hostid>test0</hostid>) в локальной сети Ethernet + и добавит маршрут для этого хоста, указывающий непосредственно на + интерфейс Ethernet, <devicename>ed0</devicename>. С этим типом + маршрута также связан параметр таймаута (колонка + <literal>Expire</literal>), используемый в случае неудачной попытки + услышать этот хост в течении некоторого периода времени. Если такое + происходит, то маршрут до этого хоста будет автоматически удалён. + Такие хосты поддерживаются + при помощи механизма, известного как RIP (Routing Information + Protocol), который вычисляет маршруты к хостам локальной сети при + помощи определения кратчайшего расстояния.</para> + + <indexterm><primary>подсеть</primary></indexterm> + <para>FreeBSD добавит также все маршруты к подсетям для локальных + подсетей (<hostid role="ipaddr">10.20.30.255</hostid> является + широковещательным адресом для подсети <hostid + role="ipaddr">10.20.30</hostid>, а имя <hostid + role="domainname">example.com</hostid> является именем домена, связанным + с этой подсетью). Назначение <literal>link#1</literal> соответствует + первому адаптеру Ethernet в машине. Отметьте отсутствие + дополнительного интерфейса для этих строк.</para> + + <para>В обеих этих группах (хосты и подсети локальной сети) маршруты + конфигурируются автоматически даемоном, который называется + <application>routed</application>. Если он не запущен, то будут + существовать только статически заданные (то есть введенные явно) + маршруты.</para> + + <para>Строка <literal>host1</literal> относится к нашему хосту, который + известен по адресу Ethernet. Так как мы являемся посылающим хостом, + FreeBSD знает, что нужно использовать loopback-интерфейс + (<devicename>lo0</devicename>) вместо того, чтобы осуществлять + посылку в интерфейс Ethernet.</para> + + <para>Две строки <literal>host2</literal> являются примером того, что + происходит при использовании алиасов в команде &man.ifconfig.8; + (обратитесь к разделу об Ethernet для объяснения того, почему мы это + делаем). Символ <literal>=></literal> после интерфейса + <devicename>lo0</devicename> указывает на то, что мы используем не + просто интерфейс loopback (так как это адрес, обозначающий локальный + хост), но к тому же это алиас. Такие маршруты появляются только + на хосте, поддерживающем алиасы; для всех остальных хостов в локальной + сети для таких маршрутов будут показаны просто строчки + <literal>link#1</literal>.</para> + + <para>Последняя строчка (подсеть назначения <hostid + role="ipaddr">224</hostid>) имеет отношение к многоадресной посылке, + которая будет рассмотрена в другом разделе.</para> + + <para>И наконец, различные атрибуты каждого маршрута перечисляются в + колонке <literal>Flags</literal>. Ниже приводится краткая таблица + некоторых из этих флагов и их значений:</para> + + <informaltable frame="none"> + <tgroup cols="2"> + <tbody> + <row> + <entry>U</entry> + <entry>Up: Маршрут актуален.</entry> + </row> + + <row> + <entry>H</entry> + <entry>Host: Адресом назначения является отдельный хост.</entry> + </row> + + <row> + <entry>G</entry> + <entry>Gateway: Посылать все для этого адреса назначения на + указанную удаленную систему, которая будет сама определять + дальнейший путь прохождения информации.</entry> + </row> + + <row> + <entry>S</entry> + <entry>Static: Маршрут был настроен вручную, а не автоматически + сгенерирован системой.</entry> + </row> + + <row> + <entry>C</entry> + <entry>Clone: Новый маршрут сгенерирован на основе указанного для + машин, к которым мы подключены. Такой тип маршрута обычно + используется для локальных сетей.</entry> + </row> + + <row> + <entry>W</entry> + <entry>WasCloned: Указывает на то, что маршрут был автоматически + сконфигурирован на основе маршрута в локальной + сети (Clone).</entry> + </row> + + <row> + <entry>L</entry> + <entry>Link: Маршрут включает ссылку на аппаратный адрес + Ethernet.</entry> + </row> + </tbody> + </tgroup> + </informaltable> + </sect2> - <sect2> - <title>Маршруты по умолчанию</title> - - <para>Когда локальной системе нужно установить соединение с удаленным - хостом, она обращается к таблице маршрутов для того, чтобы определить, - существует ли такой маршрут. Если удаленный хост попадает в подсеть, - для которой известен способ ее достижения (маршруты типа Cloned), то - система определяет возможность подключиться к ней по этому - интерфейсу.</para> - - <para>Если все известные маршруты не подходят, у системы имеется - последняя возможность: маршрут <quote>default</quote>. Это маршрут - с особым типом сетевого шлюза (обычно единственным, присутствующим - в системе), и в поле флагов он всегда помечен как <literal>c</literal>. - Для хостов в локальной сети этот сетевой шлюз указывает на машину, - имеющую прямое подключение к внешнему миру (неважно, используется ли - связь по протоколу PPP или устройство, подключенное к выделенной - линии).</para> - - <para>Если вы настраиваете маршрут по умолчанию на машине, которая сама - является сетевым шлюзом во внешний мир, то маршрутом по умолчанию - будет являться сетевой шлюз у Вашего провайдера Интернет (ISP).</para> - - <para>Давайте взглянем на примеры маршрутов по умолчанию. Вот типичная - конфигурация:</para> - - <literallayout> + <sect2 id="network-routing-default"> + <title>Маршруты по умолчанию</title> + + <indexterm><primary>маршрут по умолчанию</primary></indexterm> + <para>Когда локальной системе нужно установить соединение с удаленным + хостом, она обращается к таблице маршрутов для того, чтобы определить, + существует ли такой маршрут. Если удаленный хост попадает в подсеть, + для которой известен способ ее достижения (маршруты типа Cloned), то + система определяет возможность подключиться к ней по этому + интерфейсу.</para> + + <para>Если все известные маршруты не подходят, у системы имеется + последняя возможность: маршрут <quote>default</quote>. Это маршрут + с особым типом сетевого шлюза (обычно единственным, присутствующим + в системе), и в поле флагов он всегда помечен как <literal>c</literal>. + Для хостов в локальной сети этот сетевой шлюз указывает на машину, + имеющую прямое подключение к внешнему миру (неважно, используется ли + связь по протоколу PPP, канал DSL, кабельный модем, T1 или какой-то + другой сетевой интерфейс).</para> + + <para>Если вы настраиваете маршрут по умолчанию на машине, которая сама + является сетевым шлюзом во внешний мир, то маршрутом по умолчанию + будет являться сетевой шлюз у Вашего провайдера Интернет (ISP).</para> + + <para>Давайте взглянем на примеры маршрутов по умолчанию. Вот типичная + конфигурация:</para> + + <mediaobject> + <imageobject> + <imagedata fileref="advanced-networking/net-routing"> + </imageobject> + + <textobject> + <literallayout class="monospaced"> [Local2] <--ether--> [Local1] <--PPP--> [ISP-Serv] <--ether--> [T1-GW] - </literallayout> - - <para>Хосты <hostid>Local1</hostid> и <hostid>Local2</hostid> находятся в - нашей сети, первый хост служит для подключения по протоколу PPP к - серверу доступа вашего ISP. У Вашего провайдера имеется локальная - сеть, в которой, кроме всего прочего, находится сервер, к которому вы - подключены, и аппаратура (T1-GW) обеспечивающая собственное подключение - провайдера к Интернет.</para> - - <para>Маршруты по умолчанию для каждой из ваших машин будут - следующими:</para> - - <informaltable frame="none"> - <tgroup cols="3"> - <thead> - <row> - <entry>хост</entry> - <entry>маршрут по умолчанию</entry> - <entry>интерфейс</entry> - </row> - </thead> - - <tbody> - <row> - <entry>Local2</entry> - <entry>Local1</entry> - <entry>ethernet</entry> - </row> - - <row> - <entry>Local1</entry> - <entry>T1-GW</entry> - <entry>PPP</entry> - </row> - </tbody> - </tgroup> - </informaltable> - - <para>Часто задается вопрос <quote>Почему (или каким образом) в качестве - шлюза по умолчанию для машины Local1 мы указываем T1-GW, а не сервер - провайдера, к которому подключаемся?</quote>.</para> - - <para>Запомните, что из-за использования PPP-интерфейсом адреса в сети - провайдера Интернет с вашей стороны соединения, маршруты для всех - других машин в локальной сети провайдера будут сгенерированы - автоматически. Таким образом, вы уже будете знать, как достичь машины - T1-GW, так что нет нужды в промежуточной точке при посылке трафика к - серверу ISP.</para> - - <para>И напоследок отметим, что в локальной сети адрес <hostid - role="ipaddr">...1</hostid> часто используется в качестве адреса - сетевого шлюза. Тогда (при использовании того же самого примера) - если пространство адресов класса C вашей локальной сети было задано - как <hostid role="ipaddr">10.20.30</hostid>, а ваш провайдер использует - <hostid role="ipaddr">10.9.9</hostid>, то маршруты по умолчанию будут - такие:</para> - - <literallayout> -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) - </literallayout> - </sect2> + </literallayout> + </textobject> + </mediaobject> + + <para>Хосты <hostid>Local1</hostid> и <hostid>Local2</hostid> находятся в + нашей сети. <hostid>Local1</hostid> подключён к ISP через + коммутируемое соединение по протоколу PPP. Этот компьютер с сервером + PPP подключён посредством локальной сети к другому шлюзовому компьютеру + через внешний интерфейс самого ISP к Интернет.</para> + + <para>Маршруты по умолчанию для каждой из ваших машин будут + следующими:</para> + + <informaltable frame="none"> + <tgroup cols="3"> + <thead> + <row> + <entry>Хост</entry> + <entry>Маршрут по умолчанию</entry> + <entry>Интерфейс</entry> + </row> + </thead> + + <tbody> + <row> + <entry>Local2</entry> + <entry>Local1</entry> + <entry>Ethernet</entry> + </row> + + <row> + <entry>Local1</entry> + <entry>T1-GW</entry> + <entry>PPP</entry> + </row> + </tbody> + </tgroup> + </informaltable> - <sect2> - <title>Хосты с двойным подключением</title> - - <para>Есть еще один тип подключения, который мы должны рассмотреть, и - это случай, когда хост находится в двух различных сетях. Технически, - любая машина, работающая как сетевой шлюз (в примере выше - использовалось PPP-соединение), считается хостом с двойным - подключением. Однако этот термин реально используется для описания - машины, находящейся в двух локальных сетях.</para> - - <para>В одном случае у машины имеется два адаптера ethernet, каждый - имеющий адрес в разделенных подсетях. Как альтернативу можно - рассмотреть вариант с одним ethernet-адаптером и использованием - алиасов в команде ifconfig. В первом случае используются два физически - разделенных сети ethernet, в последнем имеется один физический сегмент - сети, но две логически разделенных подсети.</para> - - <para>В любом случае таблицы маршрутизации настраиваются так, что для - каждой подсети эта машина определена как шлюз (входной маршрут) в - другую подсеть. Такая конфигурация, при которой машина выступает в - роли моста между двумя подсетями, часто используется, если нужно - реализовать систему безопасности на основе фильтрации пакетов или - функций межсетевого экрана в одном или обоих направлениях.</para> - </sect2> + <para>Часто задаётся вопрос <quote>Почему (или каким образом) в качестве + шлюза по умолчанию для машины <hostid>Local1</hostid> мы указываем + <hostid>T1-GW</hostid>, а не сервер провайдера, к которому + подключаемся?</quote>.</para> + + <para>Запомните, что из-за использования PPP-интерфейсом адреса в сети + провайдера Интернет с вашей стороны соединения, маршруты для всех + других машин в локальной сети провайдера будут сгенерированы + автоматически. Таким образом, вы уже будете знать, как достичь машины + <hostid>T1-GW</hostid>, так что нет нужды в промежуточной точке при + посылке трафика к серверу ISP.</para> + + <para>В локальных сетях адрес <hostid + role="ipaddr">X.X.X.1</hostid> часто используется в качестве адреса + сетевого шлюза. Тогда (при использовании того же самого примера) + если пространство адресов класса C вашей локальной сети было задано + как <hostid role="ipaddr">10.20.30</hostid>, а ваш провайдер использует + <hostid role="ipaddr">10.9.9</hostid>, то маршруты по умолчанию будут + такие:</para> + + <informaltable frame="none"> + <tgroup cols="2"> + <thead> + <row> + <entry>Хост</entry> + <entry>Маршрут по умолчанию</entry> + </row> + </thead> + + <tbody> + <row> + <entry>Local2 (10.20.30.2)</entry> + <entry>Local1 (10.20.30.1)</entry> + </row> + + <row> + <entry>Local1 (10.20.30.1, 10.9.9.30)</entry> + <entry>T1-GW (10.9.9.1)</entry> + </row> + </tbody> + </tgroup> + </informaltable> - <sect2> - <title>Распространение маршрутов</title> - - <para>Мы уже говорили о том, как мы задаем наши маршруты во внешний мир, - но не упоминали о том, как внешний мир находит нас.</para> - - <para>Мы уже знаем, что таблицы маршрутизации могут быть настроены так, - что весь трафик для некоторого диапазона адресов (в нашем примере это - подсеть класса C) может быть направлен заданному хосту в той сети, - которая будет перенаправлять входящие пакеты дальше.</para> - - <para>При получении адресного пространства, выделенного Вашей сети, - Ваш провайдер настроит свои таблицы маршрутизации так, что весь трафик - для Вашей подсети будет пересылаться по PPP-соединению к Вашей сети. - Но как серверы по всей стране узнают, что Ваш трафик нужно посылать - Вашему ISP?</para> - - <para>Существует система (подобная распределению информации DNS), которая - отслеживает все назначенные пространства адресов и определяет точку - подключения к магистрали Интернет. <quote>Магистралью</quote> называют - главные каналы, по которым идет трафик Интернет внутри страны и по - всему миру. Каждая магистральная машина имеет копию основного набора - таблиц, согласно которой трафик для конкретной сети направляется по - конкретному магистральному каналу, и затем, передаваясь по цепочке - провайдеров, он достигает вашей сети.</para> - - <para>Задачей вашего провайдера является объявить на магистрали о том, - что он отвечает за подключение (и поэтому на него указывает маршрут) - вашей сети. Этот процесс называется распространением маршрута.</para> - </sect2> + <para>Вы можете легко задать используемый по умолчанию маршрутизатор + посредством файла <filename>/etc/rc.conf</filename>. В нашем примере + на машине <hostid>Local2</hostid> мы добавили такую строку в файл + <filename>/etc/rc.conf</filename>:</para> - <sect2> - <title>Устранение неполадок</title> - - <para>Иногда с распространением маршрута возникают проблемы, и некоторые - сайты не могут к вам подключиться. Наверное, самой полезной командой - для определения точки неверной работы маршрутизации является - &man.traceroute.8;. Она также полезна и когда вы сами не можете - подключиться к удаленной машине (то есть команда &man.ping.8; не - срабатывает).</para> - - <para>Команда &man.traceroute.8; запускается с именем удаленного хоста, с - которым вы хотите установить соединение, в качестве параметра. Она - показывает промежуточные сетевые шлюзы по пути следования, в конце - концов достигая адрес назначения или прерывая свою работу из-за - отсутствия соединения.</para> - - <para>За дополнительной информацией обратитесь к странице Справочника по - &man.traceroute.8;.</para> - </sect2> -</sect1> + <programlisting>defaultrouter="10.20.30.1"</programlisting> -<sect1 id="bridging"> - <title>Мосты</title> + <para>Это также возможно сделать и непосредственно из командной строки + при помощи команды &man.route.8;:</para> - <para><emphasis>Написано Стивом Питерсоном (Steve Peterson) - <email>steve@zpfe.com</email></emphasis>.</para> + <screen>&prompt.root; <userinput>route add default 10.20.30.1</userinput></screen> - <sect2> - <title>Введение</title> - - <para>Иногда полезно разделить одну физическую сеть (другими словами, - сегмент Ethernet) на два отдельных сегмента сети без необходимости - создания подсетей IP и использования маршрутизатора для соединения - сегментов. Устройство, которое соединяет две сети на такой манер, - называется мостом, а система FreeBSD с двумя сетевыми адаптерами - может выступать в роли моста.</para> - - <para>Мост работает на основе изучения адресов уровня MAC (то есть - адресов Ethernet) устройств на каждом своем сетевом интерфейсе. - Он перенаправляет трафик между двумя сетями, только когда адреса - отправителя и получателя находятся в разных сетях.</para> - - <para>По многим параметрам мост работает также, как коммутатор Ethernet - с малым количеством портов.</para> - </sect2> + <para>Для получения дополнительной информации об управлении таблицами + маршрутизации, обратитесь к справочной странице по команде + &man.route.8;.</para> + </sect2> - <sect2> - <title>Ситуации, когда можно использовать мосты</title> + <sect2> + <title>Хосты с двойным подключением</title> + + <indexterm><primary>хосты с двойным подключением</primary></indexterm> + <para>Есть еще один тип подключения, который мы должны рассмотреть, и это + случай, когда хост находится в двух различных сетях. Технически, + любая машина, работающая как сетевой шлюз (в примере выше + использовалось PPP-соединение), считается хостом с двойным + подключением. Однако этот термин реально используется для описания + машины, находящейся в двух локальных сетях.</para> + + <para>В одном случае у машины имеется два адаптера Ethernet, каждый + имеющий адрес в разделенных подсетях. Как альтернативу можно + рассмотреть вариант с одним Ethernet-адаптером и использованием + алиасов в команде &man.ifconfig.8;. В первом случае используются два + физически разделённые сети Ethernet, в последнем имеется один + физический сегмент сети, но две логически разделённые подсети.</para> + + <para>В любом случае таблицы маршрутизации настраиваются так, что для + каждой подсети эта машина определена как шлюз (входной маршрут) в + другую подсеть. Такая конфигурация, при которой машина выступает в + роли маршрутизатора между двумя подсетями, часто используется, если + нужно реализовать систему безопасности на основе фильтрации пакетов или + функций межсетевого экрана в одном или обоих направлениях.</para> + + <para>Если вы хотите, чтобы эта машина действительно перемещала пакеты + между двумя интерфейсами, то вам нужно указать FreeBSD на включение + этой функции. Обратитесь к следующей главе, чтобы узнать, как это + сделать.</para> + </sect2> - <para>На сегодняшний день есть две ситуации, когда можно использовать - мост.</para> + <sect2 id="network-dedicated-router"> + <title>Построение маршрутизатора</title> - <sect3> - <title>Большой трафик в сегменте</title> - - <para>Первая ситуация возникает, когда ваша физическая сеть перегружена - трафиком, но по каким-то соображениям вы не хотите разделять сеть - на подсети и соединять их с помощью маршрутизатора.</para> - - <para>Давайте рассмотрим в качестве примера газету, в которой - редакторский и производственный отделы находятся в одной и той же - подсети. Пользователи в редакторском отделе все используют сервер A - для служб доступа к файлам, а пользователи производственного отдела - используют сервер B. Для объединения всех пользователей используется - Ethernet, а высокая нагрузка на сеть замедляет работу.</para> - - <para>Если пользователи редакторского отдела могут быть собраны в - одном сегменте сети, а пользователи производственного отдела в - другом, то два сетевых сегмента можно объединить мостом. Только - сетевой трафик, предназначенный для интерфейсов с "другой" стороны - моста, будет посылаться в другую сеть, тем самым снижая уровень - нагрузки на каждый сегмент сети.</para> - </sect3> + <indexterm><primary>маршрутизатор</primary></indexterm> - <sect3> - <title>Межсетевой экран с возможностями фильтрации/ограничения - пропускной способности трафика</title> - - <para>Второй распространенной ситуацией является необходимость в - обеспечении функций межсетевого экрана без трансляции - IP-адресов (NAT).</para> - - <para>Для примера можно взять маленькую компанию, которая подключена - к своему провайдеру по каналу DSL или ISDN. Для нее провайдер - выделил 13 IP-адресов для имеющихся в сети 10 персональных - компьютеров. В такой ситуации использование межсетевого экрана - на основе маршрутизатора затруднено из=а проблем с разделением на - подсети.</para> - - <para>Межсетевой экран на основе моста может быть настроен и включен - между маршрутизаторами DSL/ISDN без каких-либо проблем с - IP-адресацией.</para> - </sect3> - </sect2> + <para>Сетевой маршрутизатор является обычной системой, которая + пересылает пакеты с одного интерфейса на другой. Стандарты Интернет и + хорошая инженерная практика не позволяют Проекту FreeBSD включать эту + функцию по умолчанию во FreeBSD. Вы можете включить эту возможность, + изменив значение следующей переменной в <literal>YES</literal> в файле + &man.rc.conf.5;:</para> - <sect2> - <title>Настройка моста</title> + <programlisting>gateway_enable=YES # Set to YES if this host will be a gateway</programlisting> - <sect3> - <title>Выбор сетевого адаптера</title> + <para>Этот параметр изменит значение &man.sysctl.8;-переменной + <varname>net.inet.ip.forwarding</varname> в + <literal>1</literal>. Если вам временно нужно выключить маршрутизацию, + вы можете на время сбросить это значение в <literal>0</literal>.</para> - <para>Для работы моста требуются по крайней мере два сетевых адаптера. - К сожалению, не все сетевые адаптеры во FreeBSD 4.0 поддерживают - функции моста. Прочтите страницу Справочника по &man.bridge.4; для - выяснения подробностей о поддерживаемых адаптерах.</para> + <para>Вашему новому маршрутизатору нужна информация о маршрутах для того, + чтобы знать, куда пересылать трафик. Если ваша сеть достаточно проста, + то вы можете использовать статические маршруты. С FreeBSD также + поставляется стандартный даемон BSD для маршрутизации &man.routed.8;, + который умеет работать с RIP (как версии 1, так и версии 2) и IRDP. + Поддержка BGP v4, OSPF v2 и других сложных протоколов маршрутизации + имеется в пакете <filename role="package">net/zebra</filename>. Также + существуют и коммерческие продукты, применяемые как более комплексное + решение проблемы маршрутизации в сети, такие как + <application>&gated;</application>.</para> - <para>Перед тем, как продолжить, сначала установите и протестируйте - два сетевых адаптера.</para> - </sect3> + <indexterm><primary>BGP</primary></indexterm> - <sect3> - <title>Изменения в конфигурации ядра</title> + <indexterm><primary>RIP</primary></indexterm> - <para>Для включения поддержки функций моста в ядре, добавьте - строчку</para> + <indexterm><primary>OSPF</primary></indexterm> - <programlisting>options BRIDGE</programlisting> + <para>Даже когда FreeBSD настроена таким образом, она не полностью + соответствует стандартным требованиям Интернет для маршрутизаторов. + Однако для обычного использования такое неполное соответствие + достаточно.</para> + </sect2> - <para>в файл конфигурации вашего ядра, и перестройте ядро.</para> - </sect3> + <sect2> + <title>Распространение маршрутов</title> + + <indexterm><primary>распространение маршрутов</primary></indexterm> + <para>Мы уже говорили о том, как мы задаем наши маршруты во внешний мир, + но не упоминали о том, как внешний мир находит нас.</para> + + <para>Мы уже знаем, что таблицы маршрутизации могут быть настроены так, + что весь трафик для некоторого диапазона адресов (в нашем примере это + подсеть класса C) может быть направлен заданному хосту в той сети, + которая будет перенаправлять входящие пакеты дальше.</para> + + <para>При получении адресного пространства, выделенного Вашей сети, + Ваш провайдер настроит свои таблицы маршрутизации так, что весь трафик + для Вашей подсети будет пересылаться по PPP-соединению к Вашей сети. + Но как серверы по всей стране узнают, что Ваш трафик нужно посылать + Вашему ISP?</para> + + <para>Существует система (подобная распределению информации DNS), которая + отслеживает все назначенные пространства адресов и определяет точку + подключения к магистрали Интернет. <quote>Магистралью</quote> называют + главные каналы, по которым идет трафик Интернет внутри страны и по + всему миру. Каждая магистральная машина имеет копию основного набора + таблиц, согласно которой трафик для конкретной сети направляется по + конкретному магистральному каналу, и затем, передаваясь по цепочке + провайдеров, он достигает вашей сети.</para> + + <para>Задачей вашего провайдера является объявить на магистрали о том, + что он отвечает за подключение (и поэтому на него указывает маршрут) + вашей сети. Этот процесс называется распространением маршрута.</para> + </sect2> - <sect3> - <title>Поддержка функций межсетевого экрана</title> - - <para>Если вы планируете использовать мост в качестве межсетевого - экрана, вам нужно также добавить опцию IPFIREWALL. Прочтите раздел - <xref linkend="firewalls">, содержащий общую информацию о настройке - моста в качестве межсетевого экрана.</para> - - <para>Если вам необходимо обеспечить прохождение не-IP пакетов (таких, - как ARP) через мост, то имеется недокументированная опция межсетевого - экрана, которую можно задать. Это опция - <literal>IPFIREWALL_DEFAULT_TO_ACCEPT</literal>. Заметьте, что при - этом правило, используемое межсетевым экраном по умолчанию, меняется - на разрешительное для всех пакетов. Перед тем, как задавать эту - опцию, убедитесь, что вы понимаете работу вашего набора - правил.</para> - </sect3> + <sect2> + <title>Устранение неполадок</title> + + <indexterm> + <primary>traceroute</primary> + </indexterm> + <para>Иногда с распространением маршрута возникают проблемы, и некоторые + сайты не могут к вам подключиться. Наверное, самой полезной командой + для определения точки неверной работы маршрутизации является + &man.traceroute.8;. Она также полезна и когда вы сами не можете + подключиться к удаленной машине (то есть команда &man.ping.8; не + срабатывает).</para> + + <para>Команда &man.traceroute.8; запускается с именем удаленного хоста, с + которым вы хотите установить соединение, в качестве параметра. Она + показывает промежуточные сетевые шлюзы по пути следования, в конце + концов достигая адрес назначения или прерывая свою работу из-за + отсутствия соединения.</para> + + <para>За дополнительной информацией обратитесь к странице Справочника по + &man.traceroute.8;.</para> + </sect2> - <sect3> - <title>Поддержка функций ограничения пропускной способности</title> + <sect2> + <title>Маршрутизация многоадресного трафика</title> - <para>Если вы хотите использовать мост в качестве машины, - ограничивающей пропускную способность, то добавьте в файл - конфигурации ядра опцию <literal>DUMMYNET</literal>. Дополнительную - информацию можно почерпнуть из страницы Справочника по - &man.dummynet.4;.</para> - </sect3> - </sect2> + <indexterm> + <primary>multicast</primary> - <sect2> - <title>Включение функций моста</title> + <secondary>options MROUTING</secondary> + </indexterm> - <para>Добавьте строку</para> + <para>FreeBSD изначально поддерживает как приложения, работающие с + многоадресным трафиком, так и его маршрутизацию. Такие приложения не + требуют особой настройки FreeBSD; обычно они работают сразу. + Для маршрутизации многоадресного трафика требуется, чтобы поддержка + этого была включена в ядро:</para> - <programlisting>net.link.ether.bridge=1</programlisting> + <programlisting>options MROUTING</programlisting> - <para>в файл <filename>/etc/sysctl.conf</filename> для включения функций - моста во время работы системы. Если вы хотите, чтобы пакеты, - проходящие через мост, фильтровались через ipfw, вы должны также туда - добавить строчку</para> + <para>Кроме того, даемон многоадресной маршрутизации, &man.mrouted.8;, + должен быть настроен посредством файла + <filename>/etc/mrouted.conf</filename> на использование туннелей и + DVMRP. Дополнительную информацию о настройки многоадресного трафика + можно найти на страницах справочной системы, посвящённых даемону + &man.mrouted.8;.</para> + </sect2> + </sect1> - <programlisting>net.link.ether.bridge_ipfw=1</programlisting> - </sect2> + <sect1 id="network-wireless"> + <sect1info> + <authorgroup> + <author> + <firstname>Eric</firstname> + <surname>Anderson</surname> + <contrib>Текст предоставил </contrib> + </author> + + <author> + <firstname>Андрей</firstname> + <surname>Захватов</surname> + <contrib>Перевёл на русский язык</contrib> + </author> + </authorgroup> + </sect1info> + + <title>Беспроводные сети</title> + + <indexterm> + <primary>беспроводные сети</primary> + </indexterm> + + <indexterm> + <primary>802.11</primary> + <see>беспроводные сети</see> + </indexterm> + + <sect2> + <title>Введение</title> + + <para>Было бы весьма полезным иметь возможность использовать компьютер + без хлопот, связанных с постоянно подключенным сетевым кабелем. + FreeBSD может использоваться как клиент беспроводной сети, и даже + в качестве <quote>точки доступа</quote> к ней.</para> + </sect2> - <sect2> - <title>Производительность</title> - - <para>Я использую в качестве моста/межсетевого экрана машину Pentium 90 с - двумя сетевыми адаптерами: 3Com 3C900B и 3C905B. Защищенная часть сети - работает в полудуплексном режиме на скорости 10Мбит/сек, а связь между - мостом и моим маршрутизатором (Cisco 675) осуществляется на скорости - 100Мбит/сек в полнодуплексном режиме. Без функций фильтрации пакетов - дополнительная задержка составляет около 0.4 миллисекунды для пакета - утилиты ping между защищенной сетью, работающей на скорости 10 Мбит, - и маршрутизатором Cisco 675.</para> - </sect2> + <sect2> + <title>Режимы работы беспроводной связи</title> + + <para>Существуют два варианта конфигурации устройств беспроводного + доступа 802.11: BSS и IBSS.</para> + + <sect3> + <title>Режим BSS</title> + + <para>Режим BSS является наиболее часто используемым. Режим BSS также + называют режимом инфраструктуры. В этом редиме несколько точек + доступа беспроводной сети подключаются к проводной сети передачи + данных. Каждое беспроводная сеть имеет собственное имя. Это имя + является идентификатором SSID сети.</para> + + <para>Клиенты беспроводной сети подключаются к этим точкам доступа + беспроводной сети. Стандарт IEEE 802.11 определяет протокол, + используемый для связи в беспроводных сетях. Клиент сети + беспроводного доступа может подключаться к некоторой сети, если + задан её SSID. Клиент может также подключаться к любой сети, если + SSID не задан.</para> + </sect3> + + <sect3> + <title>Режим IBSS</title> + + <para>Режим 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.</para> + </sect3> + </sect2> - <sect2> - <title>Дополнительные замечания</title> + <sect2> + <title>Режим инфраструктуры</title> + + <sect3> + <title>Точки доступа</title> + + <para>Точки доступа представляют собой беспроводные сетевые устройства, + позволяющие одному или большему количеству клиентов беспроводной сети + использовать эти устройства в качестве центрального сетевого + концентратора. При использовании точки доступа все клиенты работают + через неё. Зачастую используются несколько точек доступа для полного + покрытия беспроводной сетью некоторой зоны, такой, как дом, офис или + парк.</para> + + <para>Точки доступа обычно имеют несколько подключений к сети: адаптер + беспроводной связи и один или большее количество сетевых + ethernet-адаптеров для подключения к остальной части сети.</para> + + <para>Точки доступа могут быть либо приобретены уже настроенными, либо + вы можете создать собственную при помощи FreeBSD и поддерживаемого + адаптера беспроводной связи. Несколько производителей выпускают + точки беспроводного доступа и адаптеры беспроводной связи с + различными возможностями.</para> + </sect3> + + <sect3> + <title>Построение точки доступа с FreeBSD</title> + + <indexterm> + <primary>беспроводные сети</primary> + <secondary>точка доступа</secondary> + </indexterm> + + <sect4> + <title>Требования</title> + + <para>Для того, чтобы создать беспроводную точку доступа на FreeBSD, + вам нужно иметь совместимый адаптер беспроводной связи. На данный + момент поддерживаются адаптеры толко на основе набора микросхем + Prism. Вам также потребуется поддерживаемый FreeBSD адаптер + проводной сети (найти такой будет нетрудно, FreeBSD поддерживает + множество различных устройств). В этом руководстве мы будем + полагать, что вы будете строить сетевой мост (&man.bridge.4;) для + пропуска всего трафика между устройством беспроводной связи и + сетью, подключенной к обычному Ethernet-адаптеру.</para> + + <para>Функциональность hostap, которая используется FreeBSD для + организации точки доступа, работает лучше всего с некоторыми + версиями микрокода. Адаптеры Prism 2 должны использовать микрокод + версии 1.3.4 или более новый. Адаптеры Prism 2.5 и Prism 3 должны + использовать микрокод версии 1.4.9. Более старые версии микрокода + могут работать нормально, а могут и некорректно. В настоящее время + единственным способом обновления адаптеров является использование + утилит обновления для &windows;, которые можно получить у + производителя ваших адаптеров.</para> + </sect4> + + <sect4> + <title>Настройка</title> + + <para>Первым делом убедитесь, что ваша система распознаёт адаптер + беспроводной связи:</para> + + <screen>&prompt.root; <userinput>ifconfig -a</userinput> +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</screen> + + <para>На данном этапе не беспокойтесь о деталях, просто убедитесь, + что выдаётся нечто, указывающее на установленный адаптер + беспроводной связи. Если при этом у вас есть проблемы с + недоступностью интерфейса беспроводной связи, и вы используете + PC Card, то обратитесь к страницам справочной системы, описывающим + &man.pccardc.8; и &man.pccardd.8; для получения более полной + информации.</para> + + <para>Теперь вам нужно загрузить модуль для подготовки той части + FreeBSD, что отвечает за организацию сетевых мостов, для работы + с точкой доступа. Для загрузки модуля &man.bridge.4; просто + выполните следующую команду:</para> + + <screen>&prompt.root; <userinput>kldload bridge</userinput></screen> + + <para>При загрузке модуля никаких сообщений об ошибках быть не + должно. Если это всё же произошло, вам может потребоваться + вкомпилировать код для модуля &man.bridge.4; в ядро. В этом вам + должен помочь раздел Руководства об <link + linkend="network-bridging">организации сетевых + мостов</link>.</para> + + <para>Теперь, когда вы завершили с той частью, что касается + организации сетевого моста, нам нужно указать ядру FreeBSD, какие + интерфейсы должны объединяться в сеетвом мосте. Это мы делаем + при помощи &man.sysctl.8;:</para> + + <screen>&prompt.root; <userinput>sysctl net.link.ether.bridge=1</userinput> +&prompt.root; <userinput>sysctl net.link.ether.bridge_cfg="wi0 xl0"</userinput> +&prompt.root; <userinput>sysctl net.inet.ip.forwarding=1</userinput></screen> + + <para>Во &os; 5.2-RELEASE и последующих версиях нужно + использовать вместо указанных следующие параметры:</para> + + <screen>&prompt.root; <userinput>sysctl net.link.ether.bridge.enable=1</userinput> +&prompt.root; <userinput>sysctl net.link.ether.bridge.config="wi0 xl0"</userinput> +&prompt.root; <userinput>sysctl net.inet.ip.forwarding=1</userinput></screen> + + <para>Теперь необходимо настроить адаптер беспроводной сети.</para> + + <para>Следующая команда заставит адаптер работать в режиме точки + доступа:</para> + + <screen>&prompt.root; <userinput>ifconfig wi0 ssid my_net channel 11 media DS/11Mbps mediaopt hostap up stationname "FreeBSD AP"</userinput></screen> + + <para>Строчка &man.ifconfig.8; активизирует интерфейс + <devicename>wi0</devicename>, конфигурирует его SSID как + <literal>my_net</literal>, а имя станции как <literal>FreeBSD + AP</literal>. <option>media DS/11Mbps</option> переводит адаптер в + режим 11Mbps и нужен только для того, чтобы сработал параметр + <option>mediaopt</option>. Параметр <option>mediaopt + hostap</option> переводит интерфейс в режим точки доступа. + Параметр <option>channel 11</option> задаёт использование канала + 802.11b. Страница справки по команде &man.wicontrol.8; перечисляет + корректные значения каналов для ваших нужд.</para> + + <para>Теперь у вас должна получиться полнофункциональная работающая + точка доступа. Настоятельно советуем прочесть страницы справочной + по &man.wicontrol.8;, &man.ifconfig.8;, и &man.wi.4; для + получения дополнительной информации.</para> + + <para>Также полагаем, что вы прочтёте следующий раздел о + шифровании.</para> + </sect4> + + <sect4> + <title>Информация о состоянии</title> + + <para>После того, как точка доступа сконфигурирована и начала свою + работу, операторам может понадобиться видеть клиентов, связанных + с этой точкой. В любой момент оператор может набрать:</para> + + <screen>&prompt.root; <userinput>wicontrol -l</userinput> +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</screen> + + <para>Это показывает, что имеется одна связанная станция с + перечислеными характеристиками. Выдаваемое значение сигнала должно + использоваться только как сравнительный индикатор его силы. Его + перевод в dBm или другие единицы измерения различаются в разных + версиях микрокода.</para> + </sect4> + </sect3> + + <sect3> + <title>Клиенты</title> + + <para>Клиент в беспроводной сети представляет собой систему, которая + обращается к точке доступа или непосредственно к другому + клиенту.</para> + + <para>Как правило, клиенты беспроводной сети имеют только один сетевой + адаптер, а именно адаптер беспроводной сети.</para> + + <para>Существует несколько различных способов конфигурации клиента + беспроводной сети. Они основаны на различных режимах работы в + беспроводной сети, обычно BSS (режим инфраструктуры, который требует + точки доступа) или IBSS (ad-hoc или режим одноранговой сети). В + нашем примере мы будем использовать самый популярный их них, режим + BSS, для связи с точкой доступа.</para> + + <sect4> + <title>Требования</title> + + <para>Существует только одно жёсткое условие для настройки FreeBSD в + качестве клиента беспроводной сети. Вам нужен адаптер беспроводной + связи, поддерживаемый FreeBSD.</para> + </sect4> + + <sect4> + <title>Конфигурация FreeBSD как клиента беспроводной сети</title> + + <para>Перед тем, как подключиться к беспроводной сети, вам нужно + будет узнать о ней несколько вещей. В этом примере мы подключаемся + к сети, которая называется <literal>my_net</literal>, и шифрование + в ней отключено.</para> + + <para>Замечание: В этом примере мы не используем шифрование, но + это небезопасно. В следующем разделе вы узнаете, как её включить, + почему это так важно, и почему некоторые технологии шифрования всё + же не могут полностью обеспечить вашу информационную + безопасность.</para> + + <para>Удостоверьтесь, что ваш адаптер распознаётся во FreeBSD:</para> + + <screen>&prompt.root; <userinput>ifconfig -a</userinput> +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</screen> + + <para>Теперь мы изменим настройки адаптера на те, что соответствуют + нашей сети:</para> + + <screen>&prompt.root; <userinput>ifconfig wi0 inet 192.168.0.20 netmask 255.255.255.0 ssid my_net</userinput></screen> + + <para>Замените <hostid role="IPAddr">192.168.0.20</hostid> и <hostid + role="Netmask">255.255.255.0</hostid> на правильные IP-адрес и + сетевую маску в вашей проводной сети. Запомните, что наша точка + доступа выступает в роли моста для данных между беспроводной и + проводной сетями, так что они будут доступны для других устройств, + находящихся в сети, как будто они тоже находятся в проводной + сети.</para> + + <para>Как только вы это выполнили, то сможете получить ping от хостов + в проводной сети, как будто вы подключены посредством обычных + проводов.</para> + + <para>Если вы столкнулись с проблемами при работе в беспроводной + сети, удостоверьтесь, что вы ассоциированы (подключены) с точкой + доступа:</para> + + <screen>&prompt.root; <userinput>ifconfig wi0</userinput></screen> + + <para>должна выдать некоторую информацию, и вы должны увидеть:</para> + + <screen>status: associated</screen> + + <para>Если статус не будет соответствовать ассоциированному, то это + может значить, что вы оказались вне зоны досягаемости точки + доступа, не включили шифрование или, возможно, имеются проблемы с + конфигурацией.</para> + </sect4> + </sect3> + + <sect3> + <title>Шифрование</title> + + <indexterm> + <primary>беспроводные сети</primary> + <secondary>шифрование</secondary> + </indexterm> + + <para>Шифрование в беспроводной сети имеет важное значение, потому что + у вас нет больше возможности ограничить сеть хорошо защищённой + областью. Данные вашей беспроводной сети вещаются по всей + окрестности, так что любой заинтересовавшийся может их считать. Вот + здесь используется шифрование. Шифруя данные, посылаемые в + эфир, вы делаете их прямой перехват гораздо более сложным для всех + любопытных.</para> + + <para>Двумя наиболее широко применяемыми способами шифрации данных + между вашим клиентом и точкой доступа являются WEP + и &man.ipsec.4;.</para> + + <sect4> + <title>WEP</title> + + <indexterm> + <primary>WEP</primary> + </indexterm> + + <para>WEP является сокращением от Wired Equivalency Protocol + (Протокол Соответствия Проводной сети). WEP является попыткой + сделать беспроводные сети такими же надёжными и безопасными, как + проводные. К сожалению, он был взломан и сравнительно легко + поддаётся вскрытию. Это означает также, что он не тот протокол, + на который следует опираться, когда речь идёт о шифровании + критически важных данных.</para> + + <para>Он лучше, чем ничего, так что используйте следующую команду для + включения WEP в вашей новой точке доступа FreeBSD:</para> + + <screen>&prompt.root; <userinput>ifconfig wi0 inet up ssid my_net wepmode on wepkey 0x1234567890 media DS/11Mbps mediaopt hostap</userinput></screen> + + <para>Вы можете включить WEP на клиенте следующей командой:</para> + + <screen>&prompt.root; <userinput>ifconfig wi0 inet 192.168.0.20 netmask 255.255.255.0 ssid my_net wepmode on wepkey 0x1234567890</userinput></screen> + + <para>Отметьте, что вы должны заменить + <literal>0x1234567890</literal> на более уникальный ключ.</para> + </sect4> + + <sect4> + <title>IPsec</title> + + <para>&man.ipsec.4; является гораздо более надёжным и мощным + средством шифрования данных в сети. Этот метод определённо + является предпочтительным для шифрования данных в беспроводной + сети. Более детально ознакомиться с безопасностью и применением + &man.ipsec.4; вы можете в разделе об <link + linkend="ipsec">IPsec</link> Руководства.</para> + </sect4> + </sect3> + + <sect3> + <title>Утилиты</title> + + <para>Имеется несколько утилит, которые можно использовать для + настройки и отладки вашей беспроводной сети, и здесь мы попытаемся + описать некоторые из них и что они могут делать.</para> + + <sect4> + <title>Пакет <application>bsd-airtools</application></title> + + <para>Пакет <application>bsd-airtools</application> представляет + собой полный набор инструментов, включая инструменты для проверки + беспроводной сети на предмет взлома WEP-ключа, + обнаружения точки доступа и тому подобное.</para> + + <para>Утилиты <application>bsd-airtools</application> можно + установить из порта <filename + role="package">net/bsd-airtools</filename>. Информацию + об установке портов можно найти в Главе <xref linkend="ports"> + Руководства.</para> + + <para>Программа <command>dstumbler</command> является инструментом, + предназначенным для обнаружения точки доступа и выдачи отношения + уровня сигнала к шуму. Если у вас с трудом получается запустить + точку доступа, <command>dstumbler</command> может помочь вам + начать.</para> + + <para>Для тестирования информационной безопасности вашей беспроводной + сети, вы можете воспользоваться набором <quote>dweputils</quote> + (<command>dwepcrack</command>, <command>dwepdump</command> и + <command>dwepkeygen</command>), который может помочь + понять, является ли WEP подходящим решением для обеспечения ваших + потребностей в информационной безопасности.</para> + </sect4> + + <sect4> + <title>Утилиты <application>wicontrol</application>, + <application>ancontrol</application> и + <application>raycontrol</application></title> + + <para>Это инструменты, которые используются для управления поведением + адаптера беспроводной связи в сети. В примере выше мы выбирали + &man.wicontrol.8;, так как нашим адаптером беспроводной сети был + интерфейс <devicename>wi0</devicename>. Если у вас установлено + устройство беспроводного доступа от Cisco, этим интерфейсом будет + <devicename>an0</devicename>, и тогда вы будете + использовать &man.ancontrol.8;.</para> + </sect4> + + <sect4> + <title>Команда <application>ifconfig</application></title> + + <indexterm> + <primary>ifconfig</primary> + </indexterm> + + <para>Утилита &man.ifconfig.8; может использоваться для установки + многих из тех параметров, что задаёт &man.wicontrol.8;, однако + работа с некоторыми параметрами в ней отсутствует. Обратитесь к + &man.ifconfig.8; для выяснения параметров и опций командной + строки.</para> + </sect4> + </sect3> + + <sect3> + <title>Поддерживаемые адаптеры</title> + + <sect4> + <title>Точки доступа</title> + + <para>Единственными адаптерами, которые на данный момент + поддерживаются в режиме BSS (как точка доступа), являются те + устройства, что сделаны на основе набора микросхем Prism 2, 2.5 + или 3). Полный список можно увидеть в &man.wi.4;.</para> + </sect4> + + <sect4> + <title>Клиенты</title> + + <para>Практически все адаптеры беспроводной связи 802.11b на данный + момент во FreeBSD поддерживаются. Большинство адаптеров, + построенных на основе Prism, Spectrum24, Hermes, Aironet и Raylink, + будут работать в качестве адаптера беспроводной сети в режиме + IBSS (ad-hoc, одноранговая сеть и BSS).</para> + </sect4> + </sect3> + </sect2> + </sect1> - <para>Если вы хотите осуществлять удаленный доступ на мост по протоколу - telnet из сети, то нет проблем в назначении одному из сетевых адаптеров - IP-адреса. Общепринято, что назначение адреса обоим сетевым адаптерам - является не самой хорошей идеей.</para> + <sect1 id="network-bluetooth"> + <sect1info> + <authorgroup> + <author> + <firstname>Pav</firstname> + + <surname>Lucistnik</surname> + + <contrib>Текст предоставил</contrib> + + <affiliation> + <address><email>pav@oook.cz</email></address> + </affiliation> + </author> + </authorgroup> + </sect1info> + + <title>Bluetooth</title> + + <indexterm><primary>Bluetooth</primary></indexterm> + + <sect2> + <title>Введение</title> + + <para>Bluetooth является беспроводной технологией для создания + персональных сетей на расстоянии не более 10 метров, работающей на + частоте 2.4 ГГц, которая не подлежащит лицензированию. Обычно такие + сети формируются из портативных устройств, таких, как сотовые телефоны, + КПК и лаптопы. В отличие от Wi-Fi, другой популярной беспроводной + технологии, Bluetooth предоставляет более высокий уровень сервиса, + например, файловые серверы типа FTP, передачу файлов, голоса, эмуляцию + последовательного порта и другие.</para> + + <para>Стек протоколов 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 и более новых версиях системы.</para> + </sect2> - <para>Если в вашей сети присутствует несколько мостов, не должно быть - более одного маршрута между любыми двумя рабочими станциями. С - технической точки зрения это означает отсутствие поддержки протокола - spanning tree.</para> - </sect2> -</sect1> + <sect2> + <title>Подключение устройства</title> + + <para>По умолчанию драйверы устройств Bluetooth поставляются в виде + модулей ядра. Перед подключением устройства вам необходимо подгрузить + драйвер в ядро.</para> + + <screen>&prompt.root; <userinput>kldload ng_ubt</userinput></screen> + + <para>Если Bluetooth-устройство в момент запуска системы подключено, то + загружайте модуль из файла + <filename>/boot/loader.conf</filename>.</para> + + <programlisting>ng_ubt_load="YES"</programlisting> + + <para>Подключите ваше USB-устройство. На консоли (или в журнале + syslog) появится примерно такое сообщение.</para> + + <screen>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</screen> + + <para>Скопируйте файл + <filename>/usr/share/examples/netgraph/bluetooth/rc.bluetooth</filename> + в какое-нибудь подходящее место, например, в файл + <filename>/etc/rc.bluetooth</filename>. Этот скрипт используется для + запуска и остановки работы Bluetooth-стека. Перед отключением + устройства рекомендуется остановить его работы, хотя (обычно) это не + фатально. При запуске стека вы получите сообщения, подобные + следующим:</para> + + <screen>&prompt.root; <userinput>/etc/rc.bluetooth start ubt0</userinput> +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</screen> + </sect2> -<sect1 id="nfs"> - <title>NFS</title> + <indexterm><primary>HCI</primary></indexterm> + + <sect2> + <title>Host Controller Interface (HCI)</title> + + <para>Host Controller Interface (HCI) предоставляет интерфейс для + управления контроллером передатчика и менеджером соединений, а также + доступ к данным о состоянии оборудования и его управляющим регистрам. + Этот интерфейс предоставляет унифицированный метод доступа к + передающим возможностям Bluetooth. Уровень HCI на управляющей машине + обменивается данными и командами с микрокодом HCI в оборудовании + Bluetooth. Драйвер для Host Controller Transport Layer (то есть + физической шины) предоставляет обоим слоям HCI возможность обмениваться + данными друг с другом.</para> + + <para>Для одного Bluetooth-устройства создаётся один узел Netgraph типа + <emphasis>hci</emphasis>. HCI-узел обычно подключается к узлу драйвера + устройства Bluetooth (входящий поток) и к узлу L2CAP (исходящий поток). + Все операции с HCI должны выполняться на узле HCI, но не на узле + драйвера устройства. В качестве имени по умолчанию для узла HCI + используется <quote>devicehci</quote>. Дополнительные подробности + можно найти на справочной странице &man.ng.hci.4;.</para> + + <para>Одной из самой часто выполняемой задач является обнаружение + Bluetooth-устройств в радиусе RF-доступности. Эта операция называется + <emphasis>опросом</emphasis> (inquiry). Опрос и другие операции, + связанные с HCI, выполняются при помощи утилиты &man.hccontrol.8;. + Пример ниже показывает, как найти доступные устройства Bluetooth. + Список таких устройств должен быть получен в течение нескольких секунд. + Заметьте, что удалённые устройства будут отвечать на опрос, если только + они находятся в режиме <emphasis>обнаруживаемости</emphasis> + (discoverable).</para> + + <screen>&prompt.user; <userinput>hccontrol -n ubt0hci inquiry</userinput> +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]</screen> + + <para><literal>BD_ADDR</literal> является уникальным адресом устройства + Bluetooth, вроде MAC-адресов сетевых адаптеров. Этот адрес необходим + для дальнейшей работы с устройством. Адресу BD_ADDR можно присвоить + удобное для чтения имя. Файл <filename>/etc/bluetooth/hosts</filename> + содержит информацию об известных хостах Bluetooth. В следующем примере + показано, как получить имя, назначенное удалённому устройству.</para> + + <screen>&prompt.user; <userinput>hccontrol -n ubt0hci remote_name_request 00:80:37:29:19:a4</userinput> +BD_ADDR: 00:80:37:29:19:a4 +Name: Pav's T39</screen> + + <para>Если вы выполните опрос на другом Bluetooth-устройстве, но ваш + компьютер будет опознан как <quote>your.host.name (ubt0)</quote>. + Имя, назначаемое локальному устройству, может быть в любой момент + изменено.</para> + + <para>Система Bluetooth предоставляет услуги по соединениям типа + точка-точка (при этом задействованы только два устройства Bluetooth) + или точка-ко-многим-точкам. В последнем случае соединение используется + совместно несколькими устройствам Bluetooth. В следующем примере + показывается, как получить список активных для локального устройства + соединений.</para> + + <screen>&prompt.user; <userinput>hccontrol -n ubt0hci read_connection_list</userinput> +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</screen> + + <para>Идентификатор соединения (<emphasis>connection handle</emphasis>) + полезен, когда необходимо прекратить соединение. Заметьте, что обычно + нет нужды делать это вручную. Стек будет автоматически разрывать + неактивные соединения.</para> + + <screen>&prompt.root; <userinput>hccontrol -n ubt0hci disconnect 41</userinput> +Connection handle: 41 +Reason: Connection terminated by local host [0x16]</screen> + + <para>Обратитесь к помощи посредством <command>hccontrol help</command> + для получения полного списка доступных HCI-команд. Большинство команд + HCI для выполнения не требуют прав администратора системы.</para> + </sect2> - <para><emphasis>Этот раздел написал &a.unfurl;, 4 марта - 2000.</emphasis></para> + <indexterm><primary>L2CAP</primary></indexterm> + + <sect2> + <title>Logical Link Control and Adaptation Protocol (L2CAP)</title> + + <para>Протокол L2CAP (Logical Link Control and Adaptation Protocol) + предоставляет услуги по работе с данными, как ориентированные на + соединения, так и без ориентации на них, протоколам более высокого + уровня с возможностями мультиплексирования и обеспечением операций по + сегментации и обратной сборке. L2CAP позволяет протоколам более + высокого уровня и приложениям передавать и получать пакеты данных + L2CAP длиной до 64 Кбайт.</para> + + <para>L2CAP основан на концепции <emphasis>каналов</emphasis>. Каналом + является логическое соединение поверх соединения по радиоканалу. + Каждый канал привязан к некоторому протоколу по принципу + многие-к-одному. Несколько каналов могут быть привязаны к одному и + тому же протоколу, но канал не может быть привязан к нескольким + протоколам. Каждый пакет L2CAP, получаемый каналом, перенаправляется + к соответствующему протоколу более высокого уровня. Несколько каналов + могут совместно использовать одно и то же радиосоединение.</para> + + <para>Для одного Bluetooth-устройства содается один узел Netgraph типа + <emphasis>l2cap</emphasis>. Узел L2CAP обычно подключается к узлу + Bluetooth HCI (нижестоящий) и узлам Bluetooth-сокетов (вышестоящие). + По умолчанию для узла L2CAP используется имя + <quote>devicel2cap</quote>. Для получения дополнительной информации + обратитесь к справочной странице по &man.ng.l2cap.4;.</para> + + <para>Полезной является программа &man.l2ping.8;, которая может + использоваться для проверки связи с другими устройствами. Некоторые + реализации Bluetooth могут не возвращать все данные, посылаемые им, + так что <emphasis>0 bytes</emphasis> в следующем примере - это + нормально.</para> + + <screen>&prompt.root; <userinput>l2ping -a 00:80:37:29:19:a4</userinput> +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</screen> + + <para>Утилита &man.l2control.8; используется для выполнения различных + операций с узлами L2CAP. В этом примере показано, как получить список + логических соединений (каналов) и перечень радиосоединений локального + устройства.</para> + + <screen>&prompt.user; <userinput>l2control -a 00:02:72:00:d4:1a read_channel_list</userinput> +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; <userinput>l2control -a 00:02:72:00:d4:1a read_connection_list</userinput> +L2CAP connections: +Remote BD_ADDR Handle Flags Pending State +00:07:e0:00:0b:ca 41 O 0 OPEN</screen> + + <para>Ещё одним диагностическим инструментом является &man.btsockstat.1;. + Она выполняет действия, подобные тем, что обычно выполняет + &man.netstat.1;, но со структурами данных, связанных с работой в сети + Bluetooth. В примере ниже описывается то же самое логическое + соединение, что и с &man.l2control.8; выше.</para> + + <screen>&prompt.user; <userinput>btsockstat</userinput> +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</screen> + </sect2> - <para>Среди многих типов файловых систем, которые поддерживаются во - FreeBSD, особое место занимает система Network File System, или NFS. NFS - позволяет вам использовать каталоги и файлы, находящиеся на одной машине, - совместно с еще одной или несколькими машинами по сети, к которой они - подключены. При помощи NFS пользователи и программы могут получать доступ - к файлам на удаленных системах точно так же, как если бы это были - файлы на собственных дисках.</para> + <indexterm><primary>RFCOMM</primary></indexterm> + + <sect2> + <title>Протокол RFCOMM</title> + + <para>Протокол RFCOMM эмулирует последовательные порты поверх протокола + L2CAP. Он основан на ETSI-стандарте TS 07.10. RFCOMM представляет + собой простой транспортный протокол, с дополнительными возможностями по + эмуляции 9 цепей последовательных портов RS-232 (EIATIA-232-E). + Протокол RFCOMM поддерживает одновременно до 60 соединений (каналов + RFCOMM) между двумя устройствами Bluetooth.</para> + + <para>В рамках RFCOMM полный коммуникационный маршрут включает два + приложения, работающие на разных устройствах (конечные коммуникационные + точки) с коммуникационным сегментом между ними. RFCOMM предназначен + для сокрытия приложений, использующих последовательные порты устройств, + в которых они расположены. Коммуникационный сегмент по сути является + Bluetooth-связью от одного устройства к другому (прямое + соединение).</para> + + <para>RFCOMM имеет дело с соединением между устройствами в случае прямого + соединения, или между устройством и модемом в сетевом случае. RFCOMM + может поддерживать и другие конфигурации, такие, как модули, работающие + через беспроводную технологию Bluetooth с одной стороны и + предоставляющие проводное соединение с другой стороны.</para> + + <para>Во &os; протокол RFCOMM реализован на уровне сокетов + Bluetooth.</para> + </sect2> - <para>Использование NFS имеет несколько преимуществ:</para> + <indexterm><primary>pairing</primary></indexterm> + + <sect2> + <title>Pairing of Devices</title> + + <para>По умолчанию связь Bluetooth не аутентифицируется, поэтому любое + устройство может обзаться с любым другим. Устройство Bluetooth + (например, сотовый телефон) может задать обязательность аутентификации + для предоставления определённого сервиса (в частности, услугу доступа + по коммутируемой линии). Bluetooth-аутентификация обычно выполняется + через <emphasis>PIN-коды</emphasis>. PIN-код представляет из себя + ASCII-строку длиной до 16 символов. Пользователь обязан ввести один и + тот же PIN-код на обоих устройствах. Как только он введёт PIN-код, + оба устройства сгенерируют <emphasis>ключ связи</emphasis>. После + этого ключ может быть сохранён либо в самом устройстве, либо на + постоянном носителе. В следующий раз оба устройства будут использовать + ранее сгенерированный ключ соединения. Процедура, описанная выше, + носит название <emphasis>подгонки пары</emphasis> (pairing). Заметьте, + что если ключ связи потерян любой из сторон, то подбор пары должен быть + повторен.</para> + + <para>За обработку всех запросов на Bluetooth-аутентификацию отвечает + даемон &man.hcsecd.8;. По умолчанию файл конфигурации называется + <filename>/etc/bluetooth/hcsecd.conf</filename>. Пример раздела, + содержащего информацию о сотовом телефоне с явно заданным PIN-кодом + <quote>1234</quote> приведен ниже.</para> + + <programlisting>device { + bdaddr 00:80:37:29:19:a4; + name "Pav's T39"; + key nokey; + pin "1234"; + }</programlisting> + + <para>Кроме длины, на PIN-коды не накладывается никаких ограничений. + Некоторые устройства (например, Bluetooth-гарнитуры) могут иметь + фиксированный встроенный PIN-код. Параметр <option>-d</option> + позволяет запустить &man.hcsecd.8; как нефоновый процесс, что облегчает + просмотр происходящих событий. Задайте получение парного ключа на + удалённом устройстве и инициируйте Bluetooth-соединение с этим + устройством. Удалённое устройство должно подтвердить получение пары и + запросить PIN-код. Введите тот же самый код, что находится в + <filename>hcsecd.conf</filename>. Теперь ваш ПК и удалённое устройство + спарены. Альтернативным способом является инициация процесса создания + пары на удалённом устройстве. Ниже даётся пример выдачи протокола + команды <command>hcsecd</command>.</para> + +<programlisting>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</programlisting> + </sect2> - <itemizedlist> - <listitem> - <para>Отдельно взятым рабочим станциям не нужно иметь столь много - дискового пространства, так как совместно используемые данные могут - храниться на одной отдельной машине и быть доступными для всех машин - в сети.</para> - </listitem> + <indexterm><primary>SDP</primary></indexterm> + + <sect2> + <title>Service Discovery Protocol (SDP)</title> + + <para>Протокол обнаружения сервисов SDP даёт возможность клиентским + приложениям осуществлять поиск услуг, предоставляемых серверными + приложениями, а также характеристик этих услуг. В перечень атрибутов + сервиса включается тип класса предлагаемого сервиса и информация о + механизме или протоколе, требуемом для использования сервиса.</para> + + <para>SDP подразумевает коммуникации между SDP-сервером и SDP-клиентом. + Сервер поддерживает список сервисов, в котором описываются параметры + сервисов, связанных с сервером. Каждая запись об услуге содержит + информацию об одном сервисе. Клиент может запросить информацию об + опеределённом сервисе, обслуживаемом SDP-сервером, выдавая SDP-запрос. + Если клиент или приложение, связанное с клиентом, решат воспользоваться + сервисом, то для его использования необходимо открыть отдельное + соединение к устройству, предоставляющему сервис. SDP предоставляет + механизм обнаружения услуг и их параметров, но не даёт механизма + использования этих сервисов.</para> + + <para>Обычно SDP-клиент выполняет поиск услуг на основе некоторых + желаемых характеристик услуг. Однако иногда возникает необходимость + выяснить полный перечень типов услуг, предоставляемых SDP-сервером, + не имея никакой информации об имеющихся сервисах. Такой процесс + всех предлагаемых сервисов называется <emphasis>обзором</emphasis> + (browsing).</para> + + <para>Существующие на данный момент серверы и клиенты SDP реализованы в + пакете стороннего разработчика <application>sdp-1.5</application>, + который можно сгрузить <ulink + url="http://www.geocities.com/m_evmenkin/">здесь</ulink>. Утилита + <application>sdptool</application> является SDP-клиентом, управляемым + из командной строки. В следующем примере показано, как выполнять + запрос на SDP-обзор.</para> + + <screen>&prompt.root; <userinput>sdptool browse 00:80:37:29:19:a4</userinput> +Browsing 00:80:37:29:19:A4 ... +Service Name: Dial-up Networking +Protocol Descriptor List: + "L2CAP" (0x0100) + "RFCOMM" (0x0003) + Channel: 1 + +Service Name: Fax +Protocol Descriptor List: + "L2CAP" (0x0100) + "RFCOMM" (0x0003) + Channel: 2 + +Service Name: Voice gateway +Service Class ID List: + "Headset Audio Gateway" (0x1112) + "Generic Audio" (0x1203) +Protocol Descriptor List: + "L2CAP" (0x0100) + "RFCOMM" (0x0003) + Channel: 3</screen> + + <para>... и так далее. Заметьте, что каждый сервис имеет перечень + атрибутов (например, канал RFCOMM). В зависимости от сервиса вам может + потребоваться где-то сохранить эти атрибуты. Некоторые реализации + Bluetooth не поддерживают просмотр сервисов и могут возвращать пустой + список. В этом случае возможен поиск конкретной услуги. В примере + ниже показано, как выполнить поиск службы OBEX Object Push + (OPUSH).</para> + + <screen>&prompt.root; <userinput>sdptool search --bdaddr 00:07:e0:00:0b:ca OPUSH</userinput></screen> + + <para>Во &os; предоставление сервисов клиентам Bluetooth осуществляется + сервером <application>sdpd</application>.</para> + + <screen>&prompt.root; <userinput>sdpd</userinput></screen> + + <para>Для регистрации сервиса в лкальном SDP-сервере также применяется + утилита <application>sdptool</application>. В примере ниже + показывается, как зарегистрировать Network Access с услугой PPP (LAN). + Заметьте, что некоторые сервисы требуют указания их атрибутов + (например, канала RFCOMM).</para> + + <screen>&prompt.root; <userinput>sdptool add --channel=7 LAN</userinput></screen> + + <para>Перечень сервисов, зарегистрированных в локальном SDP-сервере, + может быть получен посылкой SDP-запроса на просмотр + <quote>специального</quote> адреса BD_ADDR.</para> + + <screen>&prompt.root; <userinput>sdptool browse ff:ff:ff:00:00:00</userinput></screen> + </sect2> - <listitem> - <para>Пользователям не нужно иметь уникальные для каждой машины - домашние каталоги. Если у них есть каталог, доступный по NFS, он - может использоваться отовсюду.</para> - </listitem> + <sect2> + <title>Доступ к сети по коммутируемой линии связи (DUN) и по протоколу + PPP (LAN)</title> - <listitem> - <para>Устройства хранения информации, такие, как дискеты и приводы - компакт-дисков, могут использоваться другими машинами в сети, - что избавляет от необходимости в приобретении дополнительного - оборудования.</para> - </listitem> - </itemizedlist> + <para>Модуль работы с коммутируемым доступом к сети (DUN - Dial-Up + Networking) в большинстве случаев используется с модемами и сотовыми + телефонами. Этот модуль покрывает следующие случаи:</para> - <sect2> - <title>Как это работает</title> + <itemizedlist> + <listitem> + <para>сотовый телефон или модем используется вместе с компьютером + в качестве беспроводного модема для подключения к серверу + коммутируемого доступа в Интернет, или другой коммутируемой + услуге;</para> + </listitem> + + <listitem> + <para>сотовый телефон или модем используется компьютером для приёма + входящих соединений.</para> + </listitem> + </itemizedlist> + + <para>Модуль доступа к сети по протоколу PPP (Network Access with + PPP - LAN) может использоваться в следующих ситуациях:</para> + + <itemizedlist> + <listitem> + <para>доступ к ЛВС для одного Bluetooth-устройства;</para> + </listitem> + + <listitem> + <para>доступ к ЛВС для нескольких Bluetooth-устройств;</para> + </listitem> + + <listitem> + <para>связь между двумя ПК (при помощи протокола PPP поверх + эмулируемого последовательного канала связи).</para> + </listitem> + </itemizedlist> + + <para>Во &os; оба случая реализуются при помощи сервисных программ + &man.ppp.8; и &man.rfcomm.pppd.8; - это обработчик, преобразующий + RFCOMM-соединения Bluetooth в нечто, с чем может работать PPP. Перед + тем, как использовать любой модуль, в файле + <filename>/etc/ppp/ppp.conf</filename> должна быть создана новая + PPP-метка. Примеры использования можно найти в справочной странице к + &man.rfcomm.pppd.8;.</para> + + <para>В следующем примере &man.rfcomm.pppd.8; будет использоваться для + открытия RFCOMM-соединения к удалённому устройству с BD_ADDR + 00:80:37:29:19:a4 на DUN RFCOMM-канале. Реальный номер RFCOMM-канала + будет получаться с удалённого устройства через SDP. Возможно указать + RFCOMM-канал вручную, и в этом случае &man.rfcomm.pppd.8; не будет + выполнять SDP-запрос. Для нахождения RFCOMM-канала на удалённом + устройстве используйте утилиту + <application>sdptool</application>.</para> + + <screen>&prompt.root; <userinput>rfcomm_pppd -a 00:80:37:29:19:a4 -c -C dun -l rfcomm-dialup</userinput></screen> + + <para>Для того, чтобы организовать сервис Network Access with PPP (LAN), + необходимо запустить сервер <application>sdpd</application>. Также + необходимо зарегистрировать сервис LAN на локальном SDP-сервере. + Заметьте, что сервис LAN требует наличия RFCONN-канала. В файле + <filename>/etc/ppp/ppp.conf</filename> должна быть создана новая запись + для клиентов LAN. Примеры можно найти в справке по + &man.rfcomm.pppd.8;. Наконец, должен быть запущен сервер RFCOMM PPP, + который работает и прослушивает на том же самом RFCOMM-канале, что + зарегистрирован на локальном SDP-сервере. В примере ниже показано, как + запустить сервер RFCOMM PPP.</para> + + <screen>&prompt.root; <userinput>rfcomm_pppd -s -C 7 -l rfcomm-server</userinput></screen> + </sect2> + + <indexterm><primary>OBEX</primary></indexterm> + + <sect2> + <title>OBEX Push (OPUSH) Profile</title> + + <para>OBEX является широкоиспользуемым протоколом для простой передачи + файлов между мобильными устройствами. В основном он используется в + коммуникациях через инфракрасный порт для передачи файлов между + ноутбуками или КПК компании Palm, а также для пересылки визитных + карточек или календарных планов между сотовыми телефонами и + другими устройствами с персональными информационными + менеджерами.</para> + + <para>Сервер и клиент OBEX реализованы в виде пакета стороннего + разработчика <application>obexapp-1.0</application>, который можно + сгрузить <ulink + url="http://www.geocities.com/m_evmenkin/">отсюда</ulink>. Пакет + требует наличия библиотеки <application>openobex</application> (она + включена в пакет) и порта <filename + role="package">devel/glib12</filename>. Заметьте, что для работы + <application>obexapp</application> привилегий администратора системы + не требуются.</para> + + <para>Клиент OBEX используется для посылки или приёма объектов с сервера + OBEX. Объектом, к примеру, может быть визитная карточка или + указание. Клиент OBEX может получить номер RFCOMM-канала, указав + вместо него имя сервиса. Поддерживаются следующие имена сервиса: IrMC, + FTRN и OPUSH. Канал RFCOMM можно задать его номером. Ниже даётся + пример сеанса OBEX, где с сотового телефона забирается объект с + информацией об устройстве, а новый объект (визитная карточка) + передаётся в каталог сотового телефона.</para> + + <screen>&prompt.user; <userinput>obexapp -a 00:80:37:29:19:a4 -C IrMC</userinput> +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)</screen> + + <para>Для того, чтобы предоставить сервис OBEX Push, должен быть запущен + сервер <application>sdpd</application>. Он также требуется и для + регистрации услуги OPUSH на локальном SDP-сервере. Заметьте, что + сервис OPUSH требует для своей работы RFCOMM-канал. Должен быть создан + корневой каталог, в котором будут сохраняться все поступающие объекты. + По умолчанию корневым каталогом является + <filename>/var/spool/obex</filename>. Наконец, сервер OBEX должен + работать и прослушивать тот же самый RFCOMM-канал, что зарегистрирован + на локальном SDP-сервере. В примере ниже показано, как запустить + OBEX-сервер.</para> + + <screen>&prompt.root; <userinput>obexapp -s -C 10</userinput></screen> + </sect2> + + <sect2> + <title>Модуль последовательного порта (SP)</title> + + <para>Модуль последовательного порта (SP - Serial Port) позволяет + Bluetooth-устройству осуществлять эмуляцию последовательного порта + RS232 (или подобного). Этот модуль покрывает случаи, касающиеся + работы унаследованных приложений с Bluetooth в качестве замены + кабельному соединению, при это используется абстракция виртуального + последовательного порта.</para> + + <para>Утилита &man.rfcomm.sppd.1; является модулем, реализующим + последовательный порт. В качестве виртуального последовательного порта + используется всевдотерминал. В примере ниже показано, как подключиться + к сервису Serial Port удалённого устройства. Заметьте, что вы не + указываете RFCOMM-канал - &man.rfcomm.sppd.1; может получить его с + удалённого устройства через SDP. Если вы хотите переопределить это, + укажите RFCOMM-канал явно в командной строке.</para> + + <screen>&prompt.root; <userinput>rfcomm_sppd -a 00:07:E0:00:0B:CA -t /dev/ttyp6</userinput> +rfcomm_sppd[94692]: Starting on /dev/ttyp6...</screen> + + <para>После подключения псевдотерминал можно использовать как + последовательный порт.</para> + + <screen>&prompt.root; <userinput>cu -l ttyp6</userinput></screen> + </sect2> + + <sect2> + <title>Решение проблем</title> + + <sect3> + <title>Удалённое устройство не подключается</title> + + <para>Некоторые старые Bluetooth-устройства не поддерживают + переключение ролей. По умолчанию, когда &os; подтверждает новое + соединение, она пытается выполнить переключение роли и стать ведущим + устройством. Устройства, которые это не поддерживают, не смогут + подключиться. Заметьте, что переключение ролей выполняется при + установлении нового соединения, поэтому невозможно выяснить, + поддерживает ли удалённое устройство переключение ролей. На + локальной машине имеется возможность отключить переключение ролей при + помощи HCI-параметра.</para> + + <screen>&prompt.root; <userinput>hccontrol -n ubt0hci write_node_role_switch 0</userinput></screen> + </sect3> + + <sect3> + <title>Что-то идёт не так, можно ли посмотреть, что в точности + происходит?</title> + + <para>Да, можно. Воспользуйтесь пакетом + <application>hcidump-1.5</application> стороннего разработчика, + который доступен для сгрузки <ulink + url="http://www.geocities.com/m_evmenkin/">здесь</ulink>. Утилита + <application>hcidump</application> похожа на &man.tcpdump.1;. Она + может использоваться для вывода на терминал содержимого + Bluetooth-пакетов и сбрасывать пакеты Bluetooth в файл.</para> + </sect3> + </sect2> + </sect1> + + <sect1 id="network-bridging"> + <sect1info> + <authorgroup> + <author> + <firstname>Steve</firstname> + <surname>Peterson</surname> + <contrib>Текст создал</contrib> + </author> + </authorgroup> + </sect1info> + + <title>Мосты</title> + + <sect2> + <title>Введение</title> + + <indexterm><primary>подсеть IP</primary></indexterm> + <indexterm><primary>сетевой мост</primary></indexterm> + <para>Иногда полезно разделить одну физическую сеть (такую, как + сегмент Ethernet) на два отдельных сегмента сети без необходимости + создания подсетей IP и использования маршрутизатора для соединения + сегментов. Устройство, которое соединяет две сети на такой манер, + называется <quote>сетевым мостом</quote> (<quote>bridge</quote>). + Система FreeBSD с двумя сетевыми адаптерами может выступать в роли + моста.</para> + + <para>Мост работает на основе изучения адресов уровня MAC (адресов + Ethernet) устройств на каждом из своих сетевых интерфейсах. + Он перенаправляет трафик между двумя сетями, только когда адреса + отправителя и получателя находятся в разных сетях.</para> + + <para>По многим параметрам мост работает также, как коммутатор Ethernet + с малым количеством портов.</para> + </sect2> + + <sect2> + <title>Ситуации, когда можно использовать мосты</title> + + <para>На сегодняшний день есть две ситуации, когда можно использовать + мост.</para> + + <sect3> + <title>Большой трафик в сегменте</title> + + <para>Первая ситуация возникает, когда ваша физическая сеть перегружена + трафиком, но по каким-то соображениям вы не хотите разделять сеть + на подсети и соединять их с помощью маршрутизатора.</para> + + <para>Давайте рассмотрим в качестве примера газету, в которой + редакторский и производственный отделы находятся в одной и той же + подсети. Пользователи в редакторском отделе все используют сервер + <hostid>A</hostid> для служб доступа к файлам, а пользователи + производственного отдела используют сервер <hostid>B</hostid>. Для + объединения всех пользователей используется сеть Ethernet, а высокая + нагрузка на сеть замедляет работу.</para> + + <para>Если пользователи редакторского отдела могут быть собраны в + одном сегменте сети, а пользователи производственного отдела в + другом, то два сетевых сегмента можно объединить мостом. Только + сетевой трафик, предназначенный для интерфейсов с + <quote>другой</quote> стороны моста, будет посылаться в другую сеть, + тем самым снижая уровень нагрузки на каждый сегмент сети.</para> + </sect3> + + <sect3> + <title>Межсетевой экран с возможностями фильтрации/ограничения + пропускной способности трафика</title> + + <indexterm><primary>межсетевой экран</primary></indexterm> + + <indexterm><primary>трансляция сетевых адресов</primary></indexterm> + + <para>Второй распространенной ситуацией является необходимость в + обеспечении функций межсетевого экрана без трансляции + сетевых адресов (NAT).</para> + + <para>Для примера можно взять маленькую компанию, которая подключена + к своему провайдеру по каналу DSL или ISDN. Для неё провайдер выделил + 13 глобально доступных IP-адресов для имеющихся в сети 10 персональных + компьютеров. В такой ситуации использование межсетевого экрана + на основе маршрутизатора затруднено из-за проблем с разделением на + подсети.</para> + + <indexterm><primary>маршрутизатор</primary></indexterm> + <indexterm><primary>DSL</primary></indexterm> + <indexterm><primary>ISDN</primary></indexterm> + <para>Межсетевой экран на основе моста может быть настроен и включен + между маршрутизаторами DSL/ISDN без каких-либо проблем с + IP-адресацией.</para> + </sect3> + </sect2> + + <sect2> + <title>Настройка моста</title> + + <sect3> + <title>Выбор сетевого адаптера</title> + + <para>Для работы моста требуются по крайней мере два сетевых адаптера. + К сожалению, не все сетевые адаптеры во FreeBSD 4.0 поддерживают + функции моста. Прочтите страницу Справочника по &man.bridge.4; для + выяснения подробностей о поддерживаемых адаптерах.</para> + + <para>Перед тем, как продолжить, сначала установите и протестируйте + два сетевых адаптера.</para> + </sect3> + + <sect3> + <title>Изменения в конфигурации ядра</title> + + <indexterm> + <primary>параметры ядра</primary> + <secondary>options BRIDGE</secondary> + </indexterm> + + <para>Для включения поддержки функций моста в ядре, добавьте + строчку</para> + + <programlisting>options BRIDGE</programlisting> + + <para>в файл конфигурации вашего ядра, и перестройте ядро.</para> + </sect3> + + <sect3> + <title>Поддержка функций межсетевого экрана</title> + + <indexterm><primary>межсетевой экран</primary></indexterm> + + <para>Если вы планируете использовать мост в качестве межсетевого + экрана, вам нужно также добавить опцию <literal>IPFIREWALL</literal>. + Прочтите раздел <xref linkend="firewalls">, содержащий общую + информацию о настройке моста в качестве межсетевого экрана.</para> + + <para>Если вам необходимо обеспечить прохождение не-IP пакетов (таких, + как ARP) через мост, то имеется опция межсетевого + экрана, которую можно задать. Это опция + <literal>IPFIREWALL_DEFAULT_TO_ACCEPT</literal>. Заметьте, что при + этом правило, используемое межсетевым экраном по умолчанию, меняется + на разрешительное для всех пакетов. Перед тем, как задавать эту + опцию, убедитесь, что вы понимаете работу вашего набора + правил.</para> + </sect3> + + <sect3> + <title>Поддержка функций ограничения пропускной способности</title> + + <para>Если вы хотите использовать мост в качестве машины, + ограничивающей пропускную способность, то добавьте в файл + конфигурации ядра опцию <literal>DUMMYNET</literal>. Дополнительную + информацию можно почерпнуть из страницы Справочника по + &man.dummynet.4;.</para> + </sect3> + </sect2> + + <sect2> + <title>Включение функций моста</title> + + <para>Добавьте строку</para> + + <programlisting>net.link.ether.bridge=1</programlisting> + + <para>в файл <filename>/etc/sysctl.conf</filename> для включения функций + моста во время работы системы, и строку:</para> + + <programlisting>net.link.ether.bridge_cfg=<replaceable>if1</replaceable>,<replaceable>if2</replaceable></programlisting> + + <para>для включения функций моста для указанных интерфейсов (замените + <replaceable>if1</replaceable> и <replaceable>if2</replaceable> на + имена двух ваших сетевых интерфейсов). Если вы хотите, чтобы + проходящие через мост пакеты фильтровались посредством &man.ipfw.8;, + вы должны добавить строчку:</para> + + <programlisting>net.link.ether.bridge_ipfw=1</programlisting> + + <para>Во &os; 5.2-RELEASE и последующих версиях нужно использовать + вместо указанных следующие строки:</para> + + <programlisting>net.link.ether.bridge.enable=1 +net.link.ether.bridge.config=<replaceable>if1</replaceable>,<replaceable>if2</replaceable> +net.link.ether.bridge.ipfw=1</programlisting> + </sect2> - <para>NFS строится их двух компонент – клиент и сервер. - Представляйте их в связке хочу/имею. Клиент <emphasis>хочет</emphasis> - данные, которые сервер <emphasis>имеет</emphasis>. Сервер делится - своими данными с клиентом. Для того, чтобы эта система нормально - функционировала, нужно правильно настроить и запустить несколько - процессов.</para> + <sect2> + <title>Дополнительные замечания</title> - <para>На сервере работают следующие даемоны:</para> + <para>Если вы хотите осуществлять удалённый доступ на мост через + &man.telnet.1; из сети, то корректно назначить одному из сетевых + адаптеров IP-адрес. Общепринято, что назначение адреса обоим сетевым + адаптерам является не самой хорошей идеей.</para> + + <para>Если в вашей сети присутствует несколько мостов, не должно быть + более одного маршрута между любыми двумя рабочими станциями. С + технической точки зрения это означает отсутствие поддержки протокола + spanning tree.</para> + + <para>Сетевой мост может увеличить задержки в замерах командой + &man.ping.8;, особенно для трафика между двумя разными + сегментами.</para> + </sect2> + </sect1> + + <sect1 id="network-nfs"> + <sect1info> + <authorgroup> + <author> + <firstname>Tom</firstname> + <surname>Rhodes</surname> + <contrib>Реорганизация и улучшения </contrib> + </author> + </authorgroup> + + <authorgroup> + <author> + <firstname>Bill</firstname> + <surname>Swingle</surname> + <contrib>Текст создал</contrib> + </author> + </authorgroup> + </sect1info> + + <title>NFS</title> + + <indexterm><primary>NFS</primary></indexterm> + <para>Кроме поддержки многих прочих типов файловых систем, во FreeBSD + встроена поддержка сетевой файловой системы (Network File System), + известной как <acronym>NFS</acronym>. <acronym>NFS</acronym> позволяет + системе использовать каталоги и файлы совместно с другими машинами, + посредством сети. Посредством <acronym>NFS</acronym> пользователи и + программы могут получать доступ к файлам на удалённых системах точно так + же, как если бы это были файлы на собственных дисках.</para> + + <para>Вот некоторые из наиболее заметных преимуществ, которые даёт + использование <acronym>NFS</acronym>:</para> <itemizedlist> <listitem> - <para><command>nfsd</command> - NFS Daemon, обслуживающий запросы от - клиентов NFS.</para> + <para>Отдельно взятые рабочие станции используют меньше собственного + дискового пространства, так как совместно используемые данные могут + храниться на одной отдельной машине и быть доступными для других + машин в сети.</para> </listitem> <listitem> - <para><command>mountd</command> - NFS Mount Daemon, который выполняет - запросы, передаваемые ему от nfsd.</para> + <para>Пользователям не нужно иметь домашние каталоги, отдельные + для каждой машины в вашей сети. Домашние каталоги могут + располагаться на сервере <acronym>NFS</acronym> и их можно сделать + доступными отовсюду в сети.</para> </listitem> - </itemizedlist> - - <para>На стороне клиента должен быть запущен только один-единственный - даемон:</para> - <itemizedlist> <listitem> - <para><command>nfsiod</command> - NFS async I/O Daemon (даемон - асинхронного ввода/вывода), обслуживающий запросы от своего - NFS-сервера.</para> + <para>Устройства хранения информации, такие, как дискеты, приводы + CD-ROM и устройства ZIP, могут использоваться другими машинами в + сети. Это может привести к уменьшению переносимых устройств хранения + информации в сети.</para> </listitem> </itemizedlist> - </sect2> - <sect2> - <title>Настройка NFS</title> + <sect2> + <title>Как работает <acronym>NFS</acronym></title> - <para>К счастью для нас, на системах FreeBSD эта настройка проста. - Процессы, которые должны быть запущены, все могут быть запущены - во время загрузки ценой нескольких модификаций в вашем файле - <filename>/etc/rc.conf</filename>.</para> + <para><acronym>NFS</acronym> строится по крайней мере из двух основных + частей: сервера и одного или большего количества клиентов. Клиент + обращается к данным, находящимся на сервере, в режиме удалённого + доступа. Для того, чтобы это нормально функционировало, нужно + настроить и запустить несколько процессов:</para> - <para>Проверьте, что на NFS-сервере у вас есть такие строки:</para> + <note> + <para>В &os; 5.X, утилита <application>portmap</application> была + заменена на <command>rpcbind</command>. Таким образом, при + использовании &os; 5.X пользователю необходимо заменить в + последующих примерах все команды <application>portmap</application> + на <command>rpcbind</command>.</para> + </note> + + <para>На сервере работают следующие даемоны:</para> + + <indexterm> + <primary>NFS</primary> + <secondary>сервер</secondary> + </indexterm> + + <indexterm> + <primary><application>portmap</application></primary> + </indexterm> + + <indexterm> + <primary><application>mountd</application></primary> + </indexterm> + + <indexterm> + <primary><application>nfsd</application></primary> + </indexterm> + + <informaltable frame="none"> + <tgroup cols="2"> + <thead> + <row> + <entry>Даемон</entry> + <entry>Описание</entry> + </row> + </thead> + <tbody> + <row> + <entry>nfsd</entry> + <entry>Даемон <acronym>NFS</acronym>, обслуживающий запросы от + клиентов <acronym>NFS</acronym>.</entry> + </row> + + <row> + <entry>mountd</entry> + <entry>Даемон монтирования <acronym>NFS</acronym>, который + выполняет запросы, передаваемые ему от &man.nfsd.8;.</entry> + </row> + + <row> + <entry>portmap</entry> + <entry>Даемон отображения портов позволяет клиентам + <acronym>NFS</acronym> определить порт, используемый сервером + <acronym>NFS</acronym>.</entry> + </row> + </tbody> + </tgroup> + </informaltable> - <programlisting> + <para>Клиент может запустить также даемон, называемый + <application>nfsiod</application>. <application>nfsiod</application> + обслуживает запросы, поступающие от сервера от сервера + <acronym>NFS</acronym>. Он необязателен, увеличивает + производительность, однако для нормальной и правильной работы не + требуется. Для получения дополнительной информации обратитесь к + разделу справочной системы о &man.nfsiod.8;.</para> + </sect2> + + <sect2 id="network-configuring-nfs"> + <title>Настройка <acronym>NFS</acronym></title> + + <indexterm> + <primary>NFS</primary> + <secondary>настройка</secondary> + </indexterm> + + <para>Настройка <acronym>NFS</acronym> является достаточно незамысловатым + процессом. Все процессы, которые должны быть запущены, могут быть + стартованы во время загрузки посредством нескольких модификаций в + вашем файле <filename>/etc/rc.conf</filename>.</para> + + <para>Проверьте, что на <acronym>NFS</acronym>-сервере в файле + <filename>/etc/rc.conf</filename> имеются такие строки:</para> + + <programlisting>portmap_enable="YES" nfs_server_enable="YES" nfs_server_flags="-u -t -n 4" -mountd_flags="-r" - </programlisting> - - <para><command>mountd</command> запускается автоматически, если включен - сервер NFS. Флаги <option>-u</option> и <option>-t</option> в команде - <command>nfsd</command> указывают на обслуживание клиентов, работающих - по протоколам UDP и TCP. Параметр <option>-n 4</option> указывает - команде <command>nfsd</command> на запуск 4 своих копий.</para> - - <para>На клиентской строне убедитесь в наличии таких строк:</para> - - <programlisting> -nfs_client_enable="YES" -nfs_client_flags="-n 4" - </programlisting> - - <para>Как и в случае <command>nfsd</command>, параметр - <option>-n 4</option> указывает <command>nfsiod</command> на запуск - 4 своих копий.</para> - - <para>Последний этап настройки требует создания файла с именем - <filename>/etc/exports</filename>. Файл экспортирования перечисляет, - какие файловые системы на вашем сервере будут использоваться совместно - с другими машинами (или <quote>экспортироваться</quote>), и с какими - именно. Каждая строка в файле описывает файловую систему, которая - будет предоставляться на доступ. Имеется полный набор параметров, - который можно использовать, но я коснусь только некоторых. Описания - остальных параметров можно найти в Справочнике - по &man.exports.5;.</para> - - <para>Вот несколько примерных строк из файла - <filename>/etc/exports</filename>:</para> - - <para>В следующей строке экспортируется <filename>/cdrom</filename> для - для трех машинок, находящихся в том же самом домене, что и сервер - (из-за отсутствия доменного имени для каждой машины) или которые - имеют описания в файле <filename>/etc/hosts</filename>. Флаг - <option>-ro</option> указывает на использование экспортируемой файловой - системы в режиме только для чтения. С этим флагом удаленная система не - сможет никоим образом изменить экспортируемую файловую систему.</para> - - <programlisting>/cdrom -ro moe larry curly</programlisting> - - <para>В следующей строке экспортируется файловая система - <filename>/home</filename>, которая становится доступной трем хостам, - указанным по их IP-адресам. Это полезно, если у вас есть собственная - сеть, но сервис DNS не используется. Флаг <option>-alldirs</option> - позволяет также экспортировать все каталоги, находящиеся ниже в - указанной файловой системе.</para> - - <programlisting>/home -alldirs 10.0.0.2 10.0.0.3 10.0.0.4</programlisting> - - <para>В строке, приведенной ниже, файловая система - <filename>/a</filename> экспортируется для двух машин, которые - находятся в различных, не совпадающих с серверным, доменах. Флаг - <option>-maproot=0</option> позволяет пользователю root удаленной - системы осуществлять запись на совместно используемую файловую систему - как пользователь root. Без флага -maproot=0 даже если кто-то имеет - права доступа root на удаленной системе, он не сможет модифицировать - файлы на совместно используемой файловой системе.</para> - - <programlisting> - /a -maproot=0 host.domain.com box.example.com - </programlisting> - - <para>Для того, чтобы клиент смог использовать экспортированную файловую - систему, он должен иметь права сделать это. Проверьте, что клиент - указан в вашем файле <filename>/etc/exports</filename>.</para> - - <para>Теперь, после того, как вы сделали все эти изменения, вы можете - просто перезагрузиться, а FreeBSD запустит все во время загрузки, - либо последовательно запустить следующие команды, работая как - пользователь root:</para> - - <para>На сервере NFS:</para> - - <screen> +mountd_flags="-r"</programlisting> + + <para><command>mountd</command> запускается автоматически, если включена + функция сервера <acronym>NFS</acronym>.</para> + + <para>На клиенте убедитесь, что в файле <filename>/etc/rc.conf</filename> + присутствует такой параметр:</para> + + <programlisting>nfs_client_enable="YES"</programlisting> + + <para>Файл <filename>/etc/exports</filename> определяет, какие + файловые системы на вашем сервере <acronym>NFS</acronym> будут + экспортироваться (иногда их называют <quote>совместно + используемыми</quote>). Каждая строка в + <filename>/etc/exports</filename> задаёт файловую систему, которая + будет экспортироваться и какие машины будут иметь к ней доступ. Кроме + машин, имеющих доступ, могут задаваться другие параметры, влияющие на + характеристики доступа. Имеется полный набор параметров, + которые можно использовать, но здесь пойдёт речь лишь о некоторых из + них. Описания остальных параметров можно найти на страницах справочной + системы по &man.exports.5;.</para> + + <para>Вот несколько примерных строк из файла + <filename>/etc/exports</filename>:</para> + + <indexterm> + <primary>NFS</primary> + <secondary>примеры экспортирования</secondary> + </indexterm> + + <para>В следующих примерах даётся общая идея того, как экспортировать + файловые системы, хотя конкретные параметры могут отличаться в + зависимости от ваших условий и конфигурации сети. К примеру, чтобы + экспортировать каталог <filename>/cdrom</filename> для трёх машин, + находящихся в том же самом домене, что и сервер (поэтому отсутствует + доменное имя для каждой машины) или для которых имеются записи в + файле <filename>/etc/hosts</filename>. Флаг <option>-ro</option> + указывает на использование экспортируемой файловой + системы в режиме только чтения. С этим флагом удалённая система не + сможет никоим образом изменить экспортируемую файловую систему.</para> + + <programlisting>/cdrom -ro host1 host2 host3</programlisting> + + <para>В следующей строке экспортируется файловая система + <filename>/home</filename>, которая становится доступной трем хостам, + указанным по их IP-адресам. Это полезно, если у вас есть собственная + сеть без настроенного сервера <acronym>DNS</acronym>. Как вариант, + файл <filename>/etc/hosts</filename> может содержать внутренние имена + хостов; пожалуйста, обратитесь к справочную систему по &man.hosts.5; + для получения дополнительной информации. Флаг + <option>-alldirs</option> позволяет рассматривать подкаталоги в + качестве точек монтирования. Другими словами, это не монтирование + подкаталогов, но разрешение клиентам монтировать только каталоги, + которые им требуются или нужны.</para> + + <programlisting>/home -alldirs 10.0.0.2 10.0.0.3 10.0.0.4</programlisting> + + <para>В строке, приведённой ниже, файловая система + <filename>/a</filename> экспортируется таким образом, что она доступна + двум клиентам из других доменов. Параметр + <option>-maproot=root</option> позволяет пользователю + <username>root</username> удалённой системы осуществлять запись на + экспортируемую файловую систему как пользователь + <username>root</username>. Если параметр + <literal>-maproot=root</literal> не задан, + то даже если пользователь имеет права доступа <username>root</username> + на удалённой системе, он не сможет модифицировать + файлы на экспортированной файловой системе.</para> + + <programlisting>/a -maproot=root host.example.com box.example.org</programlisting> + + <para>Для того, чтобы клиент смог обратиться к экспортированной файловой + системе, он должен иметь права сделать это. Проверьте, что клиент + указан в вашем файле <filename>/etc/exports</filename>.</para> + + <para>В файле <filename>/etc/exports</filename> каждая строка содержит + информацию об экспортировании для отдельной файловой системы для + отдельно взятого хоста. Удалённый хост может быть задан только + один раз для каждой файловой системы, и может иметь + только одну запись, используемую по умолчанию, для каждой локальной + файловой системы. К примеру, предположим, что + <filename>/usr</filename> является отдельной файловой системой. + Следующий <filename>/etc/exports</filename> будет некорректен:</para> + + <programlisting>/usr/src client +/usr/ports client</programlisting> + + <para>Одна файловая система, <filename>/usr</filename>, имеет две + строки, задающие экспортирование для одного и того же хоста, + <hostid>client</hostid>. Правильный формат в этом случае таков:</para> + + <programlisting>/usr/src /usr/ports client</programlisting> + + <para>Свойства отдельной файловой системы, экспортируемой некоторому + хосту, должны задаваться в одной строке. Строки без указания клиента + воспринимаются как отдельный хост. Это ограничивает то, как вы можете + экспортировать файловые системы, но для большинства это не + проблема.</para> + + <para>Ниже приведён пример правильного списка экспортирования, где + <filename>/usr</filename> и <filename>/exports</filename> являются + локальными файловыми системами:</para> + + <programlisting># Экспортируем 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</programlisting> + + <para>Вы должны перезапустить <command>mountd</command> после того, как + изменили <filename>/etc/exports</filename>, чтобы изменения вступили в + силу. Это может быть достигнуто посылкой сигнала HUP процессу + <command>mountd</command>:</para> + + <screen>&prompt.root; <userinput>kill -HUP `cat /var/run/mountd.pid`</userinput></screen> + + <para>Как вариант, при перезагрузке FreeBSD всё настроится правильно. + Хотя выполнять перезагрузку вовсе не обязательно. Выполнение следующих + команд пользователем <username>root</username> запустит всё, что + нужно.</para> + + <para>На сервере <acronym>NFS</acronym>:</para> + + <screen>&prompt.root; <userinput>portmap</userinput> &prompt.root; <userinput>nfsd -u -t -n 4</userinput> -&prompt.root; <userinput>mountd -r</userinput> - </screen> - - <para>На клиенте NFS:</para> - - <screen> -&prompt.root; <userinput>nfsiod -n 4</userinput> - </screen> - - <para>Теперь вы готовы к реальному монтированию удаленной файловой - системы. Это может быть сделано двумя способами. В приводимых - примерах сервер будет носить имя <literal>server</literal>, а клиент - будет носить имя <literal>client</literal>. Если вы просто хотите - временно смонтировать удаленную файловую систему, или всего лишь - протестировать ваши настройки, то вы можете запустить команды, подобные - приводимым здесь, работая как пользователь root на клиентской - машине:</para> - - <screen> -&prompt.root; <userinput>mount server:/home /mnt</userinput> - </screen> - - <para>По этой команде файловая система <filename>/home</filename> на - сервере будет смонтирована в каталог <filename>/mnt</filename> на - клиенте. Если все настроено правильно, вы сможете перейти в каталог - /mnt на клиенте и увидеть файлы, находящиеся на сервере.</para> - - <para>Если вы хотите иметь удаленную файловую систему смонтированной - постоянно (каждый раз при загрузке), то добавьте ее в ваш файл - <filename>/etc/fstab</filename>. Вот примерная строка:</para> - - <programlisting> -server:/home /mnt nfs rw 0 0 - </programlisting> - - <para>Read the &man.fstab.5; man page for more options.</para> - </sect2> +&prompt.root; <userinput>mountd -r</userinput></screen> - <sect2> - <title>Практическое использование</title> - - <para>Имеется много способов использовать NFS в работе. Я достаточно - часто использую ее в локальной сети, которую администрирую. Вот - несколько способов ее полезного применения.</para> - - <para>В моей сети имеется несколько машин, но всего лишь на одной из них - имеется привод компакт-дисков. Почему? Потому что этот единственный - привод используется совместно всеми другими машинами через NFS. То же - самое может быть сделано с приводами НГМД.</para> - - <para>С таким большим количеством машин ваши личные файлы приходят в - беспорядок и распределяются по всем машинам. У меня сделан центральный - сервер NFS, на котором размещены все домашние каталоги пользователей - и они экспортируются на все другие машины в локальной сети, так что - вне зависимости от того, с какой машины я вошел в сеть, я получаю один - и тот же домашний каталог.</para> - - <para>Когда вы переустанавливаете FreeBSD на одной из ваших машин, это - можно делать через NFS. Просто поместите компакт-диск с дистрибутивом - на файловый сервер.</para> - - <para>Каталог <filename>/usr/ports/distfiles</filename> у меня является - общим для всех машин. Таким образом, когда я устанавливаю порт, - который уже устанавливался ранее на другой машине, мне не нужно - снова скачивать архив с исходным кодом.</para> - </sect2> + <para>На клиенте <acronym>NFS</acronym>:</para> - <sect2> - <title>Проблемы взаимодействия с другими системами</title> - - <para><emphasis>Предоставил &a.jlind;.</emphasis></para> - - <para>Некоторые сетевые адаптеры для систем PC с шиной ISA имеют - ограничения, которые могут привести к серьезным проблемам в сети, в - частности, с NFS. Эти проблемы не специфичны для FreeBSD, однако - эту систему они затрагивают.</para> - - <para>Проблема, которая возникает практически всегда при работе по сети - систем PC (FreeBSD) с высокопроизводительными рабочими станциями, - выпущенными такими производителями, как Silicon Graphics, Inc. и Sun - Microsystems, Inc. Монтирование по протоколу NFS будет работать - нормально, и некоторые операции также будут выполняться успешно, но - неожиданно сервер окажется недоступным для клиент, хотя запросы к и - от других систем будут продолжаться обрабатываться. Такое встречается - с клиентскими системами, не зависимо от того, является ли клиент - машиной с FreeBSD или рабочей станцией. Во многих системах при - возникновении этой проблемы нет способа корректно завершить работу - клиента. Единственным выходом зачастую является холодная перезагрузка - клиента, потому что ситуация с NFS не может быть разрешена.</para> - - <para>Хотя <quote>правильным</quote> решением является установка более - производительного и скоростного сетевого адаптера на систему FreeBSD, - имеется простое решение, приводящее к удовлетворительным результатам. - Если система FreeBSD является <emphasis>сервером</emphasis>, укажите - параметр <option>-w=1024</option> на клиенте при монтировании. Если - система FreeBSD является <emphasis>клиентом</emphasis>, то смонтируйте - файловую систему NFS с параметром <option>-r=1024</option>. Эти - параметры могут быть заданы в четвертом поле записи в файле - <filename>fstab</filename> клиента при автоматическом монтировании, - или при помощи параметра <option>-o</option> в команде mount при - монтировании вручную.</para> - - <para>Нужно отметить, что имеется также другая проблема, ошибочно - принимаемая за приведенную выше, когда серверы и клиенты NFS находятся - в разных сетях. Если это тот самый случай, - <emphasis>проверьте</emphasis>, что ваши маршрутизаторы пропускают - нужную информацию UDP, в противном случае вы ничего не получите, что - бы вы ни предпринимали.</para> - - <para>В следующих примерах <hostid>fastws</hostid> является именем хоста - (интерфейса) высокопроизводительной рабочей станции, а - <hostid>freebox</hostid> является именем хоста (интерфейса) системы - FreeBSD со слабым сетевым адаптером. Кроме того, - <filename>/sharedfs</filename> будет являться экспортируемой через NFS - файловой системой (смотри команду <command>man exports</command>), а - <filename>/project</filename> будет точкой монтирования экспортируемой - файловой системы на клиенте. В любом случае, отметьте, что для - вашего приложения могут понадобиться дополнительные параметры, такие, - как <option>hard</option>, <option>soft</option> или - <option>bg</option>.</para> - - <para>Примеры для системы FreeBSD (<hostid>freebox</hostid>) является - клиентом: в файле <filename>/etc/fstab</filename> на машине - freebox:</para> - - <programlisting> -fastws:/sharedfs /project nfs rw,-r=1024 0 0 - </programlisting> - - <para>Команда, выдаваемая вручную на машине - <hostid>freebox</hostid>:</para> - - <screen> -&prompt.root; <userinput>mount -t nfs -o -r=1024 fastws:/sharedfs /project</userinput> - </screen> - - <para>Примеры для системы FreeBSD в качестве сервера: в файле - <filename>/etc/fstab</filename> на машине - <hostid>fastws</hostid>:</para> - - <programlisting> -freebox:/sharedfs /project nfs rw,-w=1024 0 0 - </programlisting> - - <para>Команда, выдаваемая вручную на машине - <hostid>fastws</hostid>:</para> - - <screen> -&prompt.root; <userinput>mount -t nfs -o -w=1024 freebox:/sharedfs /project</userinput> - </screen> - - <para>Практически все 16-разрядные сетевые адаптеры позволят работать - без указанных выше ограничений на размер блоков при чтении и - записи.</para> - - <para>Для тех, кто интересуется, ниже описывается, что же происходит в - при появлении этой ошибки, и объясняется, почему ее невозможно - устранить. Как правило, NFS работает с <quote>блоками</quote> размером - 8 килобайт (хотя отдельные фрагменты могут иметь меньшие размеры). Так - пакет Ethernet имеет максимальный размер около 1500 байт, то - <quote>блок</quote> NFS разбивается на несколько пакетов Ethernet, хотя - на более высоком уровне это все тот же единый блок, который должен быть - принят, собран и <emphasis>подтвержден</emphasis> как один блок. - Высокопроизводительные рабочие станции могут посылать пакеты, которые - соответствуют одному блоку NFS, сразу друг за другом, насколько это - позволяет делать стандарт. На слабых, низкопроизводительных адаптерах - пакеты, пришедшие позже, накладываются поверх ранее пришедших пакетов - того же самого блока до того, как они могут быть переданы хосту и - блок как единое целое не может быть собран или подтвержден. В - результате рабочая станция входит в ситуацию таймаута и пытается - повторить передачу, но уже с полным блоком в 8КБ, и процесс будет - повторяться снова, до бесконечности.</para> - - <para>Задав размер блока меньше размера пакета Ethernet, мы достигаем - того, что любой полностью полученный пакет Ethernet может быть - подтвержден индивидуально, и избежим тупиковую ситуацию.</para> - - <para>Наложение пакетов может все еще проявляться, когда - высокопроизводительные рабочие станции сбрасывают данные на PC-систему, - однако повторение этой ситуации не обязательно с более скоростными - адаптерами с <quote>блоками</quote> NFS. Когда происходит наложение, - затронутые блоки будут переданы снова, и скорее всего, они будут - получены, собраны и подтверждены.</para> - </sect2> -</sect1> + <screen>&prompt.root; <userinput>nfsiod -n 4</userinput></screen> -<sect1 id="diskless"> - <title>Работа с бездисковыми станциями</title> + <para>Теперь всё должно быть готово к реальному монтированию удалённой + файловой системы. В приводимых примерах сервер будет носить имя + <literal>server</literal>, а клиент будет носить имя + <literal>client</literal>. Если вы только хотите + временно смонтировать удалённую файловую систему, или всего лишь + протестировать ваши настройки, то просто запустите команды, подобные + приводимым здесь, работая как пользователь <username>root</username> на + клиентской машине:</para> - <para><emphasis>Текст предоставил &a.martin;.</emphasis></para> + <indexterm> + <primary>NFS</primary> + <secondary>монтирование</secondary> + </indexterm> - <para><filename>netboot.com</filename>/<filename>netboot.rom</filename> - позволяют вам загрузить вашу машину с FreeBSD по сети и работать с - FreeBSD даже без наличия диска на клиентской машине. В версии 2.0 - возможно даже иметь локальный раздел подкачки. Поддерживается также - подкачка поверх NFS.</para> + <screen>&prompt.root; <userinput>mount server:/home /mnt</userinput></screen> - <para>Список поддерживаемых адаптеров Ethernet включает: Western - Digital/SMC 8003, 8013, 8216 и совместимые с ними; NE1000/NE2000 и - совместимые с ними (требуется перекомпиляция)</para> + <para>По этой команде файловая система <filename>/home</filename> на + сервере будет смонтирована в каталог <filename>/mnt</filename> на + клиенте. Если всё настроено правильно, вы сможете войти в каталог + <filename>/mnt</filename> на клиенте и увидеть файлы, находящиеся на + сервере.</para> - <sect2> - <title>Инструкции по настройке</title> + <para>Если вы хотите автоматически монтировать удалённую файловую + систему при каждой загрузке компьютера, добавьте файловую систему в + <filename>/etc/fstab</filename>. Вот пример:</para> - <procedure> - <step> - <para>Найдите машину, которая будет вашим сервером. Эта машина должна - иметь достаточное количество дискового пространства для того, чтобы - на ней поместились бинарные файлы FreeBSD 2.0, и на ней должны - быть запущены сервисы bootp, tftp и NFS. Протестированные - машины:</para> + <programlisting>server:/home /mnt nfs rw 0 0</programlisting> - <itemizedlist> - <listitem> - <para>HP9000/8xx под управлением HP-UX 9.04 и выше (версии до - 9.04 не работают)</para> - </listitem> + <para>На страницах справочной системы по &man.fstab.5; перечислены все + доступные параметры.</para> + </sect2> - <listitem> - <para>Sun/Solaris 2.3. (вам может потребоваться найти - bootp)</para> - </listitem> - </itemizedlist> - </step> + <sect2> + <title>Практическое использование</title> - <step> - <para>Настройте сервер bootp, чтобы он сообщал клиенту его IP, - сетевой шлюз и маску подсети.</para> + <para>У <acronym>NFS</acronym> есть много вариантов практического + применения. Ниже приводится несколько наиболее широко распространённых + способов её использования:</para> - <programlisting> -diskless:\ - :ht=ether:\ - :ha=0000c01f848a:\ - :sm=255.255.255.0:\ - :hn:\ - :ds=192.1.2.3:\ - :ip=192.1.2.4:\ - :gw=192.1.2.5:\ - :vm=rfc1048: - </programlisting> - </step> - - <step> - <para>Настройте сервер TFTP (на той же самой машине, что и сервер - bootp) для того, чтобы он сообщал клиенту загрузочную информацию. - Имя этого файла - <filename>cfg.<replaceable>X.X.X.X</replaceable></filename> (или - <filename>/tftpboot/cfg.<replaceable>X.X.X.X</replaceable></filename>, - будут пробоваться оба), где <replaceable>X.X.X.X</replaceable> - - это IP-адрес клиента. Этот файл может содержать любые корректные - команды netboot. В версии 2.0 netboot воспринимает следующие - команды:</para> - - <informaltable frame="none"> - <tgroup cols="2"> - <tbody> - <row> - <entry>help</entry> - <entry>вывод справочной информации</entry> - </row> - - <row> - <entry>ip - <option><replaceable>X.X.X.X</replaceable></option></entry> - <entry>вывод/задание IP-адреса клиента</entry> - </row> - - <row> - <entry>server - <option><replaceable>X.X.X.X</replaceable></option></entry> - <entry>вывод/задание адреса сервера bootp/tftp</entry> - </row> - - <row> - <entry>netmask - <option><replaceable>X.X.X.X</replaceable></option></entry> - <entry>вывод/задание маски подсети</entry> - </row> - - <row> - <entry>hostname <replaceable>name</replaceable></entry> - <entry>вывод/задание имени хоста</entry> - </row> - - <row> - <entry>kernel - <option><replaceable>name</replaceable></option></entry> - <entry>вывод/задание имени ядра</entry> - </row> - - <row> - <entry>rootfs - <option><replaceable>ip:/fs</replaceable></option></entry> - <entry>вывод/задание корневой файловой системы</entry> - </row> - - <row> - <entry>swapfs - <option><replaceable>ip:/fs</replaceable></option></entry> - <entry>вывод/задание файловой системы для подкачки</entry> - </row> - - <row> - <entry>swapsize - <option><replaceable>size</replaceable></option></entry> - <entry>задание размера файла подкачки в КБайтах для бездисковой - работы</entry> - </row> - - <row> - <entry>diskboot</entry> - <entry>загрузка с диска</entry> - </row> - - <row> - <entry>autoboot</entry> - <entry>продолжить процесс загрузки</entry> - </row> - - <row> - <entry>trans - <option>on</option>|<option>off</option></entry> - <entry>включить/выключить передатчик</entry> - </row> - - <row> - <entry>flags - <option>b</option><option>c</option><option>d</option><option>h</option><option>s</option><option>v</option></entry> - <entry>задать параметры загрузки</entry> - </row> - </tbody> - </tgroup> - </informaltable> + <indexterm> + <primary>NFS</primary> + <secondary>использование</secondary> + </indexterm> - <para>Типичный полный cfg-файл для бездисковой работы может - содержать следующее:</para> + <itemizedlist> + <listitem> + <para>Настройка несколько машин для совместного использования CDROM + или других носителей. Это более дешёвый и зачастую более удобный + способ установки программного обеспечения на несколько машин.</para> + </listitem> + + <listitem> + <para>В больших сетях может оказаться более удобным настроить + центральный сервер <acronym>NFS</acronym>, на котором размещаются + все домашние каталоги пользователей. Эти домашние каталоги могут + затем экспортироваться в сеть так, что пользователи всегда будут + иметь один и тот же домашний каталог вне зависимости от того, на + какой рабочей станции они работают.</para> + </listitem> + + <listitem> + <para>Несколько машин могут иметь общий каталог + <filename>/usr/ports/distfiles</filename>. Таким образом, когда + вам нужно будет устанить порт на несколько машин, вы сможете быстро + получить доступ к исходным текстам без их сгрузки на каждой + машине.</para> + </listitem> + </itemizedlist> + </sect2> - <programlisting> -rootfs 192.1.2.3:/rootfs/myclient -swapfs 192.1.2.3:/swapfs -swapsize 20000 -hostname myclient.mydomain - </programlisting> + <sect2 id="network-amd"> + <sect2info> + <authorgroup> + <author> + <firstname>Wylie</firstname> + <surname>Stilwell</surname> + <contrib>Текст предоставил</contrib> + </author> + </authorgroup> + + <authorgroup> + <author> + <firstname>Chern</firstname> + <surname>Lee</surname> + <contrib>Текст переписал</contrib> + </author> + </authorgroup> + </sect2info> + + <title>Автоматическое монтирование с + <application>amd</application></title> + + <indexterm> + <primary>amd</primary> + </indexterm> + + <indexterm> + <primary>даемон автоматического монтирования</primary> + </indexterm> + + <para>&man.amd.8; (даемон автоматического монтирования) автоматически + монтирует удалённую файловую систему, + как только происходит обращение к файлу или каталогу в этой файловой + системе. Кроме того, файловые системы, которые были неактивны + некоторое время, будут автоматически размонтированы даемоном + <application>amd</application>. Использование + <application>amd</application> является простой альтернативой + статическому монтированию, так как в последнем случае обычно всё должно + быть описано в файле <filename>/etc/fstab</filename>.</para> + + <para><application>amd</application> работает, сам выступая как сервер + NFS для каталогов <filename>/host</filename> и + <filename>/net</filename>. Когда происходит обращение к файлу в одном + из этих каталогов, <application>amd</application> ищет соответствующий + удаленный ресурс для монтирования и автоматически его монтирует. + <filename>/net</filename> используется для монтирования экспортируемой + файловой системы по адресу IP, когда как каталог + <filename>/host</filename> используется для монтирования ресурса по + удаленному имени хоста.</para> + + <para>Обращение к файлу в каталоге + <filename>/host/foobar/usr</filename> укажет + <application>amd</application> на выполнение попытки монтирования + ресурса <filename>/usr</filename>, который находится на хосте + <hostid>foobar</hostid>.</para> + + <example> + <title>Монтирование ресурса при помощи + <application>amd</application></title> + + <para>Вы можете посмотреть доступные для монтирования ресурсы + отдалённого хоста командой <command>showmount</command>. К примеру, + чтобы посмотреть ресурсы хоста с именем <hostid>foobar</hostid>, вы + можете использовать:</para> + + <screen>&prompt.user; <userinput>showmount -e foobar</userinput> +Exports list on foobar: +/usr 10.10.10.0 +/a 10.10.10.0 +&prompt.user; <userinput>cd /host/foobar/usr</userinput></screen> + </example> + + <para>Как видно из примера, <command>showmount</command> показывает + <filename>/usr</filename> как экспортируемый ресурс. При перехоже в + каталог <filename>/host/foobar/usr</filename> даемон + <application>amd</application> пытается разрешить имя хоста + <hostid>foobar</hostid> и автоматически смонтировать требуемый + ресурс.</para> + + <para><application>amd</application> может быть запущен из скриптов + начальной загрузки, если поместить такую строку в файл + <filename>/etc/rc.conf</filename>:</para> + + <programlisting>amd_enable="YES"</programlisting> + + <para>Кроме того, даемону <application>amd</application> могут быть + переданы настроечные флаги через параметр + <varname>amd_flags</varname>. По умолчанию + <varname>amd_flags</varname> настроен следующим образом:</para> + + <programlisting>amd_flags="-a /.amd_mnt -l syslog /host /etc/amd.map /net /etc/amd.map"</programlisting> + + <para>Файл <filename>/etc/amd.map</filename> задает опции, используемые + по умолчанию при монтировании экспортируемых ресурсов. В файле + <filename>/etc/amd.conf</filename> заданы настройки некоторых более + сложных возможностей <application>amd</application>.</para> + + <para>Обратитесь к справочным страницам по &man.amd.8; и &man.amd.conf.5; + для получения более полной информации.</para> + </sect2> - <para>cfg-файл для машины с локальным разделом подкачки может - содержать следующее:</para> + <sect2 id="network-nfs-integration"> + <sect2info> + <authorgroup> + <author> + <firstname>John</firstname> + <surname>Lind</surname> + <contrib>Текст предоставил</contrib> + </author> + </authorgroup> + </sect2info> + + <title>Проблемы взаимодействия с другими системами</title> + + <para>Некоторые сетевые адаптеры для систем PC с шиной ISA имеют + ограничения, которые могут привести к серьезным проблемам в сети, в + частности, с NFS. Эти проблемы не специфичны для FreeBSD, однако + эту систему они затрагивают.</para> + + <para>Проблема, которая возникает практически всегда при работе по сети + систем PC (FreeBSD) с высокопроизводительными рабочими станциями, + выпущенными такими производителями, как Silicon Graphics, Inc. и Sun + Microsystems, Inc. Монтирование по протоколу NFS будет работать + нормально, и некоторые операции также будут выполняться успешно, но + неожиданно сервер окажется недоступным для клиент, хотя запросы к и + от других систем будут продолжаться обрабатываться. Такое встречается + с клиентскими системами, не зависимо от того, является ли клиент + машиной с FreeBSD или рабочей станцией. Во многих системах при + возникновении этой проблемы нет способа корректно завершить работу + клиента. Единственным выходом зачастую является холодная перезагрузка + клиента, потому что ситуация с NFS не может быть разрешена.</para> + + <para>Хотя <quote>правильным</quote> решением является установка более + производительного и скоростного сетевого адаптера на систему FreeBSD, + имеется простое решение, приводящее к удовлетворительным результатам. + Если система FreeBSD является <emphasis>сервером</emphasis>, укажите + параметр <option>-w=1024</option> на клиенте при монтировании. Если + система FreeBSD является <emphasis>клиентом</emphasis>, то смонтируйте + файловую систему NFS с параметром <option>-r=1024</option>. Эти + параметры могут быть заданы в четвертом поле записи в файле + <filename>fstab</filename> клиента при автоматическом монтировании, + или при помощи параметра <option>-o</option> в команде mount при + монтировании вручную.</para> + + <para>Нужно отметить, что имеется также другая проблема, ошибочно + принимаемая за приведенную выше, когда серверы и клиенты NFS находятся + в разных сетях. Если это тот самый случай, + <emphasis>проверьте</emphasis>, что ваши маршрутизаторы пропускают + нужную информацию UDP, в противном случае вы ничего не получите, что + бы вы ни предпринимали.</para> + + <para>В следующих примерах <hostid>fastws</hostid> является именем хоста + (интерфейса) высокопроизводительной рабочей станции, а + <hostid>freebox</hostid> является именем хоста (интерфейса) системы + FreeBSD со слабым сетевым адаптером. Кроме того, + <filename>/sharedfs</filename> будет являться экспортируемой через NFS + файловой системой (обратитесь к страницам справочной системы по команде + &man.exports.5;), а <filename>/project</filename> будет точкой + монтирования экспортируемой файловой системы на клиенте. В любом + случае, отметьте, что для вашего приложения могут понадобиться + дополнительные параметры, такие, как <option>hard</option>, + <option>soft</option> или <option>bg</option>.</para> + + <para>Пример системы FreeBSD (<hostid>freebox</hostid>) как клиента + в файле <filename>/etc/fstab</filename> на машине freebox:</para> + + <programlisting>fastws:/sharedfs /project nfs rw,-r=1024 0 0</programlisting> + + <para>Команда, выдаваемая вручную на машине + <hostid>freebox</hostid>:</para> + + <screen>&prompt.root; <userinput>mount -t nfs -o -r=1024 fastws:/sharedfs /project</userinput></screen> + + <para>Пример системы FreeBSD в качестве сервера в файле + <filename>/etc/fstab</filename> на машине + <hostid>fastws</hostid>:</para> + + <programlisting>freebox:/sharedfs /project nfs rw,-w=1024 0 0</programlisting> + + <para>Команда, выдаваемая вручную на машине + <hostid>fastws</hostid>:</para> + + <screen>&prompt.root; <userinput>mount -t nfs -o -w=1024 freebox:/sharedfs /project</userinput></screen> + + <para>Практически все 16-разрядные сетевые адаптеры позволят работать + без указанных выше ограничений на размер блоков при чтении и + записи.</para> + + <para>Для тех, кто интересуется, ниже описывается, что же происходит в + при появлении этой ошибки, и объясняется, почему ее невозможно + устранить. Как правило, NFS работает с <quote>блоками</quote> размером + 8 килобайт (хотя отдельные фрагменты могут иметь меньшие + размеры). Так, пакет Ethernet имеет максимальный размер около + 1500 байт, то + <quote>блок</quote> NFS разбивается на несколько пакетов Ethernet, хотя + на более высоком уровне это все тот же единый блок, который должен быть + принят, собран и <emphasis>подтвержден</emphasis> как один блок. + Высокопроизводительные рабочие станции могут посылать пакеты, которые + соответствуют одному блоку NFS, сразу друг за другом, насколько это + позволяет делать стандарт. На слабых, низкопроизводительных адаптерах + пакеты, пришедшие позже, накладываются поверх ранее пришедших пакетов + того же самого блока до того, как они могут быть переданы хосту и + блок как единое целое не может быть собран или подтвержден. В + результате рабочая станция входит в ситуацию таймаута и пытается + повторить передачу, но уже с полным блоком в 8 КБ, и процесс будет + повторяться снова, до бесконечности.</para> + + <para>Задав размер блока меньше размера пакета Ethernet, мы достигаем + того, что любой полностью полученный пакет Ethernet может быть + подтвержден индивидуально, и избежим тупиковую ситуацию.</para> + + <para>Наложение пакетов может все еще проявляться, когда + высокопроизводительные рабочие станции сбрасывают данные на PC-систему, + однако повторение этой ситуации не обязательно с более скоростными + адаптерами с <quote>блоками</quote> NFS. Когда происходит наложение, + затронутые блоки будут переданы снова, и скорее всего, они будут + получены, собраны и подтверждены.</para> + </sect2> + </sect1> - <programlisting> -rootfs 192.1.2.3:/rootfs/myclient -hostname myclient.mydomain - </programlisting> - </step> + <sect1 id="network-diskless"> + <sect1info> + <authorgroup> + <author> + <firstname>Jean-François</firstname> + <surname>Dockès</surname> + <contrib>Текст обновил</contrib> + </author> + </authorgroup> + </sect1info> - <step> - <para>Проверьте, что ваш сервер NFS экспортирует корневую файловую - систему (и, если нужно, подкачку) для вашего клиента, а клиент - имеет доступ с правами администратора к этим файловым системам. - Типичный файл <filename>/etc/exports</filename> на системе - FreeBSD может иметь такой вид:</para> + <title>Работа с бездисковыми станциями</title> - <programlisting> -/rootfs/myclient -maproot=0:0 myclient.mydomain -/swapfs -maproot=0:0 myclient.mydomain - </programlisting> + <indexterm><primary>работа без диска</primary></indexterm> - <para>А на системе HP-UX:</para> + <para>Машина с FreeBSD может загружаться по сети и работать без наличия + локального диска, используя файловые системы, монтируемые с сервера NFS. + Кроме стандартных конфигурационных файлов, не нужны никакие модификации + в системе. Такую систему легко настроить, потому что все необходимые + элементы уже готовы:</para> - <programlisting> -/rootfs/myclient -root=myclient.mydomain -/swapfs -root=myclient.mydomain - </programlisting> - </step> - - <step> - <para>Если вы осуществляете подкачку поверх NFS (полностью - бездисковая конфигурация), то создайте файл подкачки для вашего - клиента при помощи команды <command>dd</command>. Если команде - <command>swapfs</command> задан параметр - <filename>/swapfs</filename> и указан размер 20000, как в примере - выше, то файл подкачки для машины myclient будет называться - <filename>/swapfs/swap.<replaceable>X.X.X.X</replaceable></filename>, - где <replaceable>X.X.X.X</replaceable> является IP-адресом клиента, - например:</para> + <itemizedlist> + <listitem> + <para>Имеется по крайней мере два возможных способа загрузки ядра по + сети:</para> + + <itemizedlist> + <listitem> + <para><emphasis>PXE</emphasis>: Система &intel; Preboot Execution + Environment является формой загрузочного ПЗУ, встроенного в + некоторые сетевые адаптеры или материнские платы. Обратитесь к + справочной странице по &man.pxeboot.8; для получения более полной + информации.</para> + </listitem> + + + <listitem> + <para><emphasis>Порт + <application>etherboot</application></emphasis> (<filename + role="package">net/etherboot</filename>) генерирует код, + который может применяться в ПЗУ для загрузки ядра по сети. Код + может быть либо прошит в загрузочный PROM на сетевом адаптере, + либо загружен с локальной дискеты (или винчестера), или с + работающей системы &ms-dos;. Поддерживаются многие сетевые + адаптеры.</para> + </listitem> + </itemizedlist> + </listitem> - <screen> -&prompt.root; <userinput>dd if=/dev/zero of=/swapfs/swap.192.1.2.4 bs=1k count=20000</userinput> - </screen> + <listitem> + <para>Примерный скрипт + (<filename>/usr/share/examples/diskless/clone_root</filename>) + облегчает создание и поддержку корневой файловой системы рабочей + станции на сервере. Скрипт, скорее всего, потребует некоторых + настроек, но он позволит вам быстро начать работу.</para> + </listitem> + + <listitem> + <para>Стандартные файлы начального запуска системы, располагающиеся в + <filename>/etc</filename>, распознают и поддерживают загрузку системы + в бездисковом варианте.</para> + </listitem> + + <listitem> + <para>Подкачка, если она нужна, может выполняться через файл NFS либо + на локальный диск.</para> + </listitem> + </itemizedlist> + + <para>Существует много способов начтройки бездисковой рабочей станции. При + этом задействованы многие компоненты, и большинство из них могут быть + настроены для удовлетворения ваших вкусов. Далее будет описана полная + настройка системы, при этом упор будет делаться на простоту и + совместимость с стандартной системой скриптов начальной загрузки FreeBSD. + Описываемая система имеет такие характеристики:</para> + + <itemizedlist> + <listitem> + <para>Бездисковые рабочие станции совместно используют + <filename>корневую</filename> файловую систему в режиме только + чтения, а также используют <filename>/usr</filename> совместно тоже + в режиме только чтения.</para> + + <para><filename>Корневая</filename> файловая система является копией + стандартной корневой системы FreeBSD (обычно сервера), с некоторыми + настроечными файлами, измененными кем-то специально для бездисковых + операций или, возможно, для рабочей станции, которой она + предназначена.</para> + + <para>Части <filename>корневой</filename> файловой системы, которые + должны быть доступны для записи, перекрываются файловыми системами + &man.mfs.8;. Любые изменения будут потеряны при перезагрузках + системы.</para> + </listitem> - <para>Кроме того, дисковое пространство подкачки после начала его - использования может содержать важную информацию, так что - постарайтесь ограничить доступ к этому файлу для предотвращения - несанкционированного доступа:</para> + <listitem> + <para>Ядро загружается посредством + <application>etherboot</application>, при помощи DHCP (или BOOTP) и + TFTP.</para> + </listitem> + </itemizedlist> + + <caution> + <para>Как описано, эта система незащищена. Она должна располагаться в + защищенной части сети, а другие хосты не должны на нее + полагаться.</para> + </caution> + + <sect2> + <title>Инструкции по настройке</title> + + <sect3> + <title>Настройка DHCP/BOOTP</title> + + <indexterm> + <primary>бездисковые конфигурации</primary> + <secondary>загрузка</secondary> + </indexterm> + + <para>Есть два протокола, часто используемых для загрузки рабочих + станций, которые запрашивают свою конфигурацию по сети: BOOTP и DHCP. + При начальной загрузке рабочей станции они используются в нескольких + местах:</para> + + <itemizedlist> + <listitem> + <para><application>etherboot</application> использует (по + умолчанию) DHCP или BOOTP (требуется опция при настройке) для + поиска ядра. (PXE использует DHCP).</para> + </listitem> + + <listitem> + <para>Ядро использует BOOTP для поиска корневой файловой системы в + NFS.</para> + </listitem> + </itemizedlist> + + <para>Возможна настройка системы на использование исключительно BOOTP. + Программа сервера &man.bootpd.8; включена в базовую систему + FreeBSD.</para> + + <para>Однако DHCP имеет некоторый набор преимуществ перед BOOTP (лучше + настроечные файлы, возможность использования PXE, плюс множество + других, напрямую не связанных к работе без диска), и мы опишем как + конфигурацию с чистым BOOTP, так и BOOTP+DHCP, с упором на последнее, + в котором используется пакет DHCP от ISC.</para> + + <sect4> + <title>Конфигурация с использованием ISC DHCP</title> + + <indexterm> + <primary>DHCP</primary> + <secondary>бездисковые конфигурации</secondary> + </indexterm> + + <para>Сервер <application>isc-dhcp</application> может обрабатывать + как запросы BOOTP, так и запросы DHCP.</para> + + <para>Начиная с релиза 4.4, <application>isc-dhcp 3.0</application> + не включается в поставку системы. Сначала вам нужно будет + установить порт <filename role="package">net/isc-dhcp3</filename> + или соответствующий пакадж. Пожалуйста, обратитесь к <xref + linkend="ports"> для получения общего представления о портах и + пакаджах.</para> + + <para>После установки <application>isc-dhcp</application> ему для + работы требуется конфигурационный файл (обычно называемый + <filename>/usr/local/etc/dhcpd.conf</filename>). Вот + прокомментированный пример:</para> + + <programlisting> + 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; <co id="co-dhcp-host-name"> + 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;<co id="co-dhcp-next-server"> + filename "/tftpboot/kernel.diskless";<co id="co-dhcp-filename"> + option root-path "192.168.4.4:/data/misc/diskless";<co + id="co-dhcp-root-path"> + } + } + </programlisting> + + <calloutlist> + <callout arearefs="co-dhcp-host-name"> + <para>Этот параметр указывает <command>dhcpd</command> посылать + значения деклараций <literal>host</literal> как имя хоста для + бездисковой машины. Альтернативным способом было бы добавление + <literal>option host-name + <replaceable>margaux</replaceable></literal> внутри объявлений + хоста.</para> + </callout> + + + <callout arearefs="co-dhcp-next-server"> + <para>Директива <literal>next-server</literal> определяет сервер + TFTP (по умолчанию используется тот же самый хост, на котором + расположен сервер DHCP).</para> + </callout> + + <callout arearefs="co-dhcp-filename"> + <para>Директива <literal>filename</literal> определяет файл, + который будет загружать <application>etherboot</application> в + качестве ядра. + <note> + <para>Похоже, что PXE предпочитает относительное имя файла, + и он загружает <command>pxeboot</command>, а не ядро + (<literal>option filename "pxeboot"</literal>).</para> + </note> + </para> + </callout> + + <callout arearefs="co-dhcp-root-path"> + <para>Параметр <literal>root-path</literal> определяет путь к + корневой файловой системе, в обычной нотации NFS.</para> + </callout> + </calloutlist> + </sect4> + + <sect4> + <title>Настройка с использованием BOOTP</title> + + <indexterm> + <primary>BOOTP</primary> + <secondary>бездисковые конфигурации</secondary> + </indexterm> + + <para>Далее описана эквивалентная конфигурация с использованием + <command>bootpd</command>. Она будет располагаться в + <filename>/etc/bootptab</filename>.</para> + + <para>Пожалуйста, отметьте, что <application>etherboot</application> + должен быть откомпилирован с нестандартной опцией + <literal>NO_DHCP_SUPPORT</literal> для того, чтобы можно было + использовать BOOTP, и что для работы PXE + <emphasis>необходим</emphasis> DHCP. Единственным очевидным + преимуществом <application>bootpd</application> является его + наличие в поставке системы.</para> + + + <programlisting> + .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 + </programlisting> + </sect4> + </sect3> + + <sect3> + <title>Подготовка программы загрузки при помощи + <application>Etherboot</application></title> + + <indexterm> + <primary>Etherboot</primary> + </indexterm> + + <para><ulink url="http://etherboot.sourceforge.net">Сайт + Etherboot</ulink> содержит <ulink + url="http://etherboot.sourceforge.net/doc/html/userman/t1.html"> + подробную документацию</ulink>, в основном предназначенную для систем + Linux, но несомненно, она полезна. Далее будет просто кратко + описано, как вы должны использовать + <application>etherboot</application> в системе FreeBSD.</para> + + <para>Сначала вы должны установить пакадж или порт <filename + role="package">net/etherboot</filename>. Порт + <application>etherboot</application> обычно расположен в + <filename>/usr/ports/net/etherboot</filename>. Если в вашей системе + установлено дерево портов, просто наберите <literal>make</literal> в + этом каталоге, все остальное быдет сделано за вас. Либо обратитесь к + <xref linkend="ports"> для получения информации о портах и + пакаджах.</para> + + <para>В нашей ситуации мы будем использовать загрузочную дискету. Для + других методов (PROM или программа DOS) пожалуйста, обратитесь к + документации по <application>etherboot</application>.</para> + + <para>Для создания загрузочной дискеты, вставьте дискету в дисковод на + машине, где установлен <application>etherboot</application>, затем + перейдите в каталог <filename>src</filename> в дереве + <application>etherboot</application> и наберите:</para> <screen> -&prompt.root; <userinput>chmod 0600 /swapfs/swap.192.1.2.4</userinput> + &prompt.root; <userinput>gmake bin32/<replaceable>devicetype</replaceable>.fd0</userinput> </screen> - </step> - <step> - <para>Распакуйте корневую файловую систему в каталоге, который будет - использоваться клиентом для своей корневой файловой системы - (<filename>/rootfs/myclient</filename> в примере выше).</para> + <para><replaceable>devicetype</replaceable> зависит от типа адаптера + Ethernet на бездисковой рабочей станции. Обратитесь к файлу + <filename>NIC</filename> в том же самом каталоге для определения + правильного значения для + <replaceable>devicetype</replaceable>.</para> + </sect3> - <itemizedlist> - <listitem> - <para>На системах HP-UX: Сервер должен работать под управлением - HP-UX версии 9.04 или выше для машин серий HP9000/800. Более - ранние версии не допускают создания файлов устройств - поверх NFS.</para> - </listitem> + <sect3> + <title>Настройка серверов TFTP и NFS</title> - <listitem> - <para>При распаковке каталога <filename>/dev</filename> в - <filename>/rootfs/myclient</filename> обратите внимание то - то, что некоторые системы (HPUX) не создадут файлы устройств, - которые нужны FreeBSD. Вам может потребоваться при первой - загрузке перейти в однопользовательский режим (нажав control-c - во время процесса загрузки), перейти в каталог - <filename>/dev</filename> и выполнить команду - <command>sh ./MAKEDEV all</command> с клиента для того, чтобы - все исправить.</para> - </listitem> - </itemizedlist> - </step> - - <step> - <para>Запустите на клиентской машине программу - <command>netboot.com</command> или прошейте ПЗУ файлом - <filename>netboot.rom</filename></para> - </step> - </procedure> - </sect2> + <indexterm> + <primary>TFTP</primary> + <secondary>бездисковые конфигурации</secondary> + </indexterm> - <sect2> - <title>Совместное использование файловых систем <filename>/</filename> и - <filename>/usr</filename></title> - - <para>В настоящее время нет официально одобренного способа сделать это, - хотя для каждого клиента я использую общую файловую систему - <filename>/usr</filename> и индивидуальную <filename>/</filename>. - Если у кого-либо появятся соображения о том, как сделать это корректно, - пожалуйста, дайте знать мне и/или &a.core;.</para> - </sect2> + <indexterm> + <primary>NFS</primary> + <secondary>бездисковые конфигурации</secondary> + </indexterm> - <sect2> - <title>Компиляция netboot для специфичных ситуаций</title> + <para>Вам нужно включить <command>tftpd</command> на сервере + TFTP:</para> - <para>Netboot может быть перекомпилирован для поддержки адаптеров - NE1000/2000 изменением настроек в файле - <filename>/sys/i386/boot/netboot/Makefile</filename>. Посмотрите - комментарии в самом начале этого файла.</para> - </sect2> -</sect1> + <procedure> + <step> + <para>Создайте каталог, файлы которого будет обслуживать + <command>tftpd</command>, например, + <filename>/tftpboot</filename>.</para> + </step> -<sect1 id="isdn"> - <title>ISDN</title> + <step> + <para>Добавьте в ваш <filename>/etc/inetd.conf</filename> такую + строчку:</para> + + <programlisting>tftp dgram udp wait root /usr/libexec/tftpd tftpd -s /tftpboot</programlisting> + + <note> + <para>Бывает, что некоторым версиям PXE требуется TCP-вариант + TFTP. В таком случае добавьте вторую строчку, заменяющую + <literal>dgram udp</literal> на <literal>stream + tcp</literal>.</para> + </note> + </step> + + <step> + <para>Укажите <command>inetd</command> на повторное чтение своего + конфигурационного файла:</para> + + <screen>&prompt.root; <userinput>kill -HUP `cat /var/run/inetd.pid`</userinput></screen> + </step> + </procedure> + + <para>Вы можете поместить каталог <filename>tftpboot</filename> в любом + месте на сервере. Проверьте, что это местоположение указано как в + <filename>inetd.conf</filename>, так и в + <filename>dhcpd.conf</filename>.</para> + + <para>Вам также нужно включить NFS и экспортировать + соответствующую файловую систему на сервере NFS.</para> + + <procedure> + <step> + <para>Добавьте следующее в + <filename>/etc/rc.conf</filename>:</para> + + <programlisting>nfs_server_enable="YES"</programlisting> + </step> + + <step> + <para>Проэкспортируйте файловую систему, в которой расположен + корневой каталог для бездисковой рабочей станции, добавив + следующую строку в <filename>/etc/exports</filename> (подправьте + точку монтирования и замените <replaceable>margaux</replaceable> + на имя бездисковой рабочей станции):</para> + + <programlisting><replaceable>/data/misc</replaceable> -alldirs -ro <replaceable>margaux</replaceable></programlisting> + </step> + + <step> + <para>Укажите <command>mountd</command> на повторное чтение + настроечного файла. На самом деле если вам потребовалось на + первом шаге включить NFS в <filename>/etc/rc.conf</filename>, то + вам нужно будет выполнить перезагрузку.</para> + + <screen>&prompt.root; <userinput>kill -HUP `cat /var/run/mountd.pid`</userinput></screen> + </step> + </procedure> + </sect3> + + <sect3> + <title>Построение ядра для бездисковой рабочей станции</title> + + <indexterm> + <primary>бездисковые конфигурации</primary> + <secondary>настройка ядра</secondary> + </indexterm> + + <para>Создайте конфигурационный файл ядра для бездискового клиента со + следующими параметрами (вдобавок к обычным):</para> - <para><emphasis>Последний раз внес изменения &a.wlloyd;</emphasis>.</para> + <programlisting> + options BOOTP # Use BOOTP to obtain IP address/hostname + options BOOTP_NFSROOT # NFS mount root filesystem using BOOTP info + options BOOTP_COMPAT # Workaround for broken bootp daemons. + </programlisting> - <para>Полезным источником информации о технологии ISDN и его аппаратном - обеспечении является <ulink url="http://alumni.caltech.edu/~dank/isdn/"> - Страница Дэна Кегела (Dan Kegel) об ISDN</ulink>.</para> + <para>Вам может потребоваться использовать + <literal>BOOTP_NFSV3</literal> и <literal>BOOTP_WIRED_TO</literal> + (посмотрите <filename>LINT</filename>).</para> + + <para>Постройте ядро (обратитесь к <xref linkend="kernelconfig">) и + скопируйте его в каталог tftp под именем, указанным в + <filename>dhcpd.conf</filename>.</para> + </sect3> + + <sect3> + <title>Подготовка корневой файловой системы</title> + + <indexterm> + <primary>корневая файловая система</primary> + <secondary>бездисковые конфигурации</secondary> + </indexterm> + + <para>Вам нужно создать корневую файловую систему для бездисковых + рабочих станций, в месоположении, заданном как + <literal>root-path</literal> в + <filename>dhcpd.conf</filename>.</para> + + <para>Самым простым способом сделать это является использование скрипта + <filename>/usr/share/examples/diskless/clone_root</filename>. Этот + скрипт требуется настроить, по крайней мере, подправив место, где + будет создана файловая система (переменная + <literal>DEST</literal>).</para> + + <para>Прочтите комментарии в начале скрипта для получения указаний. + Там описано, как строится основная файловая система, и как файлы + могут быть выборочно заменены версиями, предназначенными для работы + без диска, для подсети или для отдельной рабочей станции. Также + здесь даются примеры бездисковых файлов + <filename>/etc/fstab</filename> и + <filename>/etc/rc.conf</filename>.</para> + + <para>Файлы <filename>README</filename> в + <filename>/usr/share/examples/diskless</filename> много интересной + информации, но вместе с другими примерами из каталога + <filename>diskless</filename> они на самом деле описывают метод + настройки, который отличается от того, что используется в + <filename>clone_root</filename> и + <filename>/etc/rc.diskless[12]</filename>, этим несколько запутывая + дело. Используйте их только для справки, за исключением того случая, + когда вы выберете метод, ими описываемый, и тогда вам нужны + исправленные скрипты <filename>rc</filename>.</para> + </sect3> + + <sect3> + <title>Настройка области подкачки</title> + + <para>Если это нужно, то файл подкачки, расположенный на сервере, можно + использовать посредством NFS. Точные параметры + <filename>bootptab</filename> или <filename>dhcpd.conf</filename> + пока плохо документированы. Сообщается, что работает следующая + конфигурация с использованием isc-dhcp 3.0rc11.</para> + + <procedure> + <step> + <para>Добавьте следующие строки в + <filename>dhcpd.conf</filename>:</para> - <para>Быстрое введение в ISDN:</para> + <programlisting> + # Global section + option swap-path code 128 = string; + option swap-size code 129 = integer 32; + + host margaux { + ... # Стандартные строки, смотрите выше + option swap-path <replaceable>"192.168.4.4:/netswapvolume/netswap"</replaceable>; + option swap-size <replaceable>64000</replaceable>; + } + </programlisting> - <itemizedlist> - <listitem> - <para>Если вы живете в Европе, то рекомендую вам изучить раздел об - ISDN-адаптерах.</para> - </listitem> + <para>Идея заключается в том, что, по крайней мере для клиента + FreeBSD, дополнительный параметр DHCP/BOOTP под кодом 128 + является маршрутом к файлу подкачки NFS, а параметр с кодом 129 + задает размер области подкачки в килобайтах. Более старые версии + <command>dhcpd</command> разрешали использовать синтаксис типа + <literal>option option-128 "...</literal>, который больше не + работает.</para> + + <para>Во <filename>/etc/bootptab</filename> будет использоваться + такой синтаксис:</para> + + <para><literal>T128="192.168.4.4:/netswapvolume/netswap":T129=64000</literal></para> + </step> + + <step> + <para>На файловом сервере NFS создайте файл (или файлы) + подкачки</para> + + <screen> + &prompt.root; <userinput>mkdir <replaceable>/netswapvolume/netswap</replaceable></userinput> + &prompt.root; <userinput>cd <replaceable>/netswapvolume/netswap</replaceable></userinput> + &prompt.root; <userinput>dd if=/dev/zero bs=1024 count=<replaceable>64000</replaceable> of=swap.<replaceable>192.168.4.6</replaceable></userinput> + &prompt.root; <userinput>chmod 0600 swap.<replaceable>192.168.4.6</replaceable></userinput> + </screen> + + <para><replaceable>192.168.4.6</replaceable> является IP-адресом + бездискового клиента.</para> + </step> + + <step> + <para>На файловом сервере NFS, в <filename>/etc/exports</filename> + добавьте такую строку:</para> + + <programlisting> + <replaceable>/netswapvolume</replaceable> -maproot=0:10 -alldirs <replaceable>margaux</replaceable> + </programlisting> + + <para>Затем укажите <application>mountd</application> на повторное + чтение файла exports, как описано ранее.</para> + </step> + </procedure> + </sect3> + + <sect3> + <title>Различные проблемы</title> + + <sect4> + <title>Работа с <filename>/usr</filename>, доступной только для + чтения</title> + + <indexterm> + <primary>бездисковые конфигурации</primary> + <secondary>/usr только для чтения</secondary> + </indexterm> + + <para>Если бездисковая рабочая станция настроена на запуск X, вам + нужно подправить настроечный файл для xdm, который по умолчанию + помещает протокол ошибок в <filename>/usr</filename>.</para> + </sect4> + + <sect4> + <title>Использование не-FreeBSD сервера</title> + + <para>Если сервер с корневой файловой системой работает не под + управлением FreeBSD, вам потребуется создать корневую файловую + систему на машине FreeBSD, а затем скопировать ее в нужно место, + при помощи <command>tar</command> или + <command>cpio</command>.</para> + + <para>В такой ситуации иногда возникают проблемы со + специальными файлами в <filename>/dev</filename> из-за различной + разрядности целых чисел для старшего/младшего чисел. Решением + этой проблемы является экспортирование каталога с не-FreeBSD + сервера, монтирование его на машине с FreeBSD и запуск + скрипта <command>MAKEDEV</command> на машине с FreeBSD для создания + правильных файлов устройств (во FreeBSD 5.0 и более поздних версиях + используется &man.devfs.5; для создания файлов устройств прозрачно + для пользователя, запуск <command>MAKEDEV</command> в этих версиях + бесполезен).</para> + </sect4> + </sect3> + </sect2> + </sect1> + + <sect1 id="network-isdn"> + <title>ISDN</title> + + <indexterm> + <primary>ISDN</primary> + </indexterm> + + <para>Полезным источником информации о технологии ISDN и его аппаратном + обеспечении является <ulink + url="http://www.alumni.caltech.edu/~dank/isdn/"> + Страница Дэна Кегела (Dan Kegel) об ISDN</ulink>.</para> + + <para>Быстрое введение в ISDN:</para> + + <itemizedlist> + <listitem> + <para>Если вы живёте в Европе, то вам может понадобиться изучить раздел + об ISDN-адаптерах.</para> + </listitem> <listitem> <para>Если вы планируете использовать ISDN в основном для соединений с Интернет через провайдера по коммутируемому, невыделенному - соединению, я рекомендую посмотреть информацию о терминальных + соединению, рекомендутся посмотреть информацию о терминальных адаптерах. Это даст вам самую большую гибкость и наименьшее количество проблем при смене провайдера.</para> </listitem> <listitem> <para>Если вы объединяете две локальные сети или подключаетесь к - Интернет через постоянное ISDN-соединение, я рекомендую остановиться - на отдельном мосте/маршрутизаторе.</para> + Интернет через постоянное ISDN-соединение, рекомендуем остановить свой + выбор на отдельном мосте/маршрутизаторе.</para> </listitem> </itemizedlist> @@ -1169,62 +3025,85 @@ hostname myclient.mydomain Далее перечислены все возможности от самого дешевого до самого дорогого варианта.</para> - <sect2> - <title>Адаптеры ISDN</title> - - <para><emphasis>Текст предоставил &a.hm;.</emphasis></para> - - <para>Этот раздел на самом деле имеет отношение только к пользователям - ISDN в странах, где поддерживается стандарт DSS1/Q.931.</para> - - <para>Некоторое все увеличивающееся количество ISDN-адаптеров для PC - поддерживается во FreeBSD 2.2.x и выше пакетом isdn4bsd. Он находится - в разработке, но сообщения говорят о том, что он успешно используется - по всей Европе.</para> - - <para>Самая последняя версия isdn4bsd доступна по адресу <ulink - url="ftp://isdn4bsd@ftp.consol.de/pub/"> - ftp://isdn4bsd@ftp.consol.de/pub/</ulink>, на главном ftp-сервере - isdn4bsd (войдите как пользователь <username>isdn4bsd</username>, - указав свой адрес электронной почты в качестве пароля, и перейдите в - каталог <filename>pub</filename>. Вход на общедоступный ftp - как пользователь <username>ftp</username> или - <username>anonymous</username> <emphasis>не</emphasis> даст желаемого - результата).</para> - - <para>Isdn4bsd позволяет вам подключаться к другим маршрутизаторам ISDN - с использованием как IP поверх HDLC, так и PPP на синхронном канале. - Имеется также программа-автоответчик.</para> - - <para>Поддерживаются многие ISDN-адаптеры для PC, в основном с набором - ISDN-микросхем Siemens (ISAC/HSCX), поддержка других наборов (фирм - Motorola, Cologne Chip Designs) находится в разработке. Актуальный - список поддерживаемых адаптеров находится в файле <ulink - url="ftp://isdn4bsd@ftp.consol.de/pub/README">README</ulink>.</para> - - <para>Если вы заинтересованы в добавлении поддержки другого протокола - ISDN, неподдерживаемого в данный момент адаптера или каком-то другом - усовершенствовании isdn4bsd, то обратитесь по адресу - <email>hm@kts.org</email>.</para> - - <para>Имеется список рассылки, управляемый пакетом majordomo. Чтобы к - нему присоединиться, пошлите письмо на адрес &a.majordomo; и - укажите:</para> - - <programlisting> -subscribe freebsd-isdn - </programlisting> - - <para>в тексте вашего сообщения.</para> - </sect2> + <sect2 id="network-isdn-cards"> + <sect2info> + <authorgroup> + <author> + <firstname>Hellmuth</firstname> + <surname>Michaelis</surname> + <contrib>Текст предоставил</contrib> + </author> + </authorgroup> + </sect2info> + + <title>Адаптеры ISDN</title> + + <indexterm> + <primary>ISDN</primary> + <secondary>адаптеры</secondary> + </indexterm> + + <para>Реализация ISDN во FreeBSD поддерживает только стандарт DSS1/Q.931 + (или Евро-ISDN) при помощи пассивных адаптеров. Начиная с + FreeBSD 4.4 поддерживаются некоторые активные адаптеры, прошивки + которых поддерживают также другие сигнальные протоколы; также сюда + впервые включена поддержка адаптеров ISDN Primary Rate (PRI).</para> + + <para>Пакет программ <application>isdn4bsd</application> позволяет вам + поключаться к другим маршрутизаторам ISDN при помощи IP поверх DHLC, + либо при помощи синхронного PPP; лиюо при помощи PPP на уровне ядра с + <literal>isppp</literal>, модифицированного драйвера &man.sppp.4;, или + при помощи пользовательского + &man.ppp.8;. При использовании пользовательского &man.ppp.8; возможно + использование двух и большего числа B-каналов ISDN. Также имеется + приложение, работающее как автоответчик, и много утилит, таких, как + программный модем на 300 Бод.</para> + + <para>Во FreeBSD поддерживается все возрастающее число адаптеров ISDN для + ПК, и сообщения показывабт, что они успешно используются по всей Европе + и других частях света.</para> + + <para>Из пассивных адаптеров 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.</para> + + <para>На данный момент из активных адаптеров ISDN поддерживаются AVM B1 + (ISA и PCI) адаптеры BRI и AVM T1 PCI адаптеры PRI.</para> + + <para>Документацию по <application>isdn4bsd</application> можно найти в + каталоге <filename>/usr/share/examples/isdn/</filename> вашей системы + FreeBSD или на <ulink url="http://www.freebsd-support.de/i4b/">домашней + странице isdn4bsd</ulink>, на которой также размещены ссылки на советы, + замечания по ошибкам и более подробную информацию, например, на <ulink + url="http://people.FreeBSD.org/~hm/">руководство по + isdn4bsd</ulink>.</para> + + <para>Если вы заинтересованы в добавлении поддержки для различных + протоколов ISDN, неподдерживаемых на данный момент адаптеров ISDN для + PC или каких-то других усовершенствованиях + <application>isdn4bsd</application>, пожалуйста, свяжитесь с + &a.hm;.</para> + + <para>Для обсуждения вопросов, связанных с установкой, настройкой и + устранением неисправностей <application>isdn4bsd</application>, + имеется список рассылки &a.isdn.name;.</para> + + <para><literal>subscribe freebsd-isdn</literal></para> + </sect2> <sect2> <title>Терминальные адаптеры ISDN</title> - <para>Терминальные адаптеры(TA) для ISDN выполняют ту же роль, что и + <para>Терминальные адаптеры (TA) для ISDN выполняют ту же роль, что и модемы для обычных телефонных линий.</para> - <para>Большинство TA используют стандартный набор модемных AT-команд, + <indexterm><primary>модем</primary></indexterm> + + <para>Большинство TA используют стандартный набор AT-команд Hayes-модемов, и могут использоваться в качестве простой замены для модемов.</para> <para>TA будут работать точно так же, как и модемы, за исключением @@ -1234,6 +3113,7 @@ subscribe freebsd-isdn модема. Проверьте, что вы задали скорость работы последовательного порта максимально высокой.</para> + <indexterm><primary>PPP</primary></indexterm> <para>Главным преимуществом использования TA для подключения к провайдеру Интернет является возможность использования динамического PPP. Так как пространство адресов IP истощается все больше, большинство @@ -1247,11 +3127,11 @@ subscribe freebsd-isdn настроено соединение PPP. Однако, в тоже время любые проблемы, которые возникают с программой PPP, отражаются и здесь.</para> - <para>Если вы хотите максимальной надежности, используйте параметр ядра - <link linkend="ppp">PPP</link>, а не пользовательский <link - linkend="userppp">iijPPP</link>.</para> + <para>Если вы хотите максимальной надёжности, используйте <link + linkend="ppp">PPP</link> на уровне параметра ядра, а не <link + linkend="userppp">пользовательский PPP</link>.</para> - <para>Известно, что следующие TA работают с FreeBSD.</para> + <para>Известно, что следующие TA работают с FreeBSD:</para> <itemizedlist> <listitem> @@ -1271,16 +3151,17 @@ subscribe freebsd-isdn потребность в хорошем последовательном адаптере на вашем компьютере.</para> - <para>Вы должны прочесть раздел о <link linkend="uart">последовательных - портах</link> Руководства для того, чтобы в деталях понять работу - последовательных устройств, и осознать различие асинхронными и + <para>Вы должны прочесть учебник <ulink + url="../../articles/serial-uart/index.html">Последовательные устройства + во FreeBSD</ulink> для того, чтобы в деталях понять работу + последовательных устройств и осознать различие между асинхронными и синхронными последовательными портами.</para> <para>TA, работающий со стандартным последовательным (асинхронным) портом - PC, ограничивает вас скоростью 115.2Кбс, хотя реально у вас соединение - на скорости 128Кбс. Чтобы использовать 128Кбс, которые обеспечивает - ISDN, полностью, вы должны подключить TA к синхронному - последовательному адаптеру.</para> + PC, ограничивает вас скоростью 115.2 Кбит/с, хотя реально у вас + соединение на скорости 128 Кбит/с. Чтобы использовать + 128 Кбит/с, которые обеспечивает ISDN, полностью, вы должны + подключить TA к синхронному последовательному адаптеру.</para> <para>Не обманывайте себя, думая, что покупка встроенного TA поможет избежать проблемы синхронности/асинхронности. Встроенные TA просто @@ -1292,30 +3173,35 @@ subscribe freebsd-isdn отдельный маршрутизатор, а если он работает под управлением машины класса 386 с FreeBSD, то это гораздо более гибкое решение.</para> - <para>Выбор sync/TA по сравнению с отдельным маршрутизатором в большей - степени вопрос религиозный. По этому поводу в списках рассылки была - некоторая дискуссия. Рекомендую поискать в <ulink - url="http://www.FreeBSD.org/search.html">архивах</ulink> обсуждение + <para>Выбор между использованием синхронного адаптера/TA или отдельного + маршрутизатора в большей степени является религиозным вопросом. По этому + поводу в списках рассылки была некоторая дискуссия. Рекомендуем поискать + в <ulink url="../../../../search/index.html">архивах</ulink> обсуждение полностью.</para> </sect2> <sect2> <title>Отдельные мосты/маршрутизаторы ISDN</title> + <indexterm> + <primary>ISDN</primary> + <secondary>отдельно стоящие мосты/маршрутизаторы</secondary> + </indexterm> + <para>Мосты или маршрутизаторы ISDN не так уж специфичны для FreeBSD или для любой другой операционной системы. Для более подробного описания технологий маршрутизации и работы мостов, пожалуйста, - обратитесь к книге по сетевым технологиям.</para> + обратитесь к справочникам по сетевым технологиям.</para> - <para>В контексте этой страницы я буду использовать термины маршрутизатор - и мост как взаимозаменяемые.</para> + <para>В контексте этого раздела термины маршрутизатор и сетевой мост будут + использоваться как взаимозаменяемые.</para> <para>Вместе с падением цен на простые мосты/маршрутизаторы ISDN, они становятся все более популярными. Маршрутизатор ISDN представляет собой маленькую коробочку, которая подключается непосредственно в - вашу сеть (или адаптер) Ethernet, и поддерживает связь с другим - мостом/маршрутизатором. Все программное обеспечение для работы по - PPP и другим протоколам, встроено в маршрутизатор.</para> + вашу сеть Ethernet, и поддерживает связь с другим мостом/маршрутизатором. + Всё программное обеспечение для работы по PPP и другим протоколам + встроено в маршрутизатор.</para> <para>Маршрутизатор обладает гораздо большей пропускной способностью, чем стандартный TA, так как он использует полное синхронное соединение @@ -1324,9 +3210,9 @@ subscribe freebsd-isdn <para>Основной проблемой с маршрутизаторами и мостами ISDN является то, что их совместная работа с оборудованием других производителей может оказаться под вопросом. Если вы собираетесь подключаться к провайдеру, - я рекомендую обсудить с ним то, что вам нужно.</para> + то вы должны обсудить с ним то, что вам нужно.</para> - <para>Если вы планируете объединить два сегмента локальной сети, то есть + <para>Если вы планируете объединить два сегмента локальной сети, например, домашнюю сеть с сетью офиса, это самое простое решение с минимальными издержками на обслуживание. Так как вы покупаете оборудование для обоих сторон соединения, то можете быть уверены, что связь будет @@ -1334,27 +3220,38 @@ subscribe freebsd-isdn <para>Например, для соединения домашнего компьютера или сети подразделения к сети центрального офиса, может использоваться такая - настройка.</para> + настройка:</para> <example> <title>Офис подразделения или домашняя сеть</title> - <para>Сеть построена на основе 10 Base T Ethernet. Подключите - маршрутизатор к сетевому кабелю с помощью трансивера AUI/10BT, - если это нужно.</para> + <indexterm><primary>10 base 2</primary></indexterm> + <para>Сеть построена в топологии общей шины на основе 10 base 2 Ethernet + (<quote>thinnet</quote> - <quote>тонкий Ethernet</quote>). Подключите + маршрутизатор к сетевому кабелю с помощью трансивера AUI/10BT, если + это нужно.</para> - <!-- Здесь должен быть рисунок --> - <programlisting> ----Рабочая станция Sun + <mediaobject> + <imageobject> + <imagedata fileref="advanced-networking/isdn-bus"> + </imageobject> + + <textobject> + <literallayout class="monospaced">---Рабочая станция Sun | ---Машина с FreeBSD | ----Windows 95 (Do not admit to owning it) +---Windows 95 | Отдельный маршрутизатор | -Канал ISDN BRI - </programlisting> +Канал ISDN BRI</literallayout> + </textobject> + + <textobject> + <phrase>10 Base 2 Ethernet</phrase> + </textobject> + </mediaobject> <para>Если ваш домашний или удаленный офис представляет собой один компьютер, то для непосредственного подключения к маршрутизатору вы @@ -1364,11 +3261,17 @@ subscribe freebsd-isdn <example> <title>Центральный офис или другая локальная сеть</title> - <para>Сеть построена на Ethernet с витой парой.</para> + <indexterm><primary>10 base T</primary></indexterm> + <para>Сеть построена в топологии звезды на основе 10 Base T Ethernet + (<quote>витая пара</quote>).</para> - <!-- Здесь должен быть рисунок --> - <programlisting> - -------Сервер Novell + <mediaobject> + <imageobject> + <imagedata fileref="advanced-networking/isdn-twisted-pair"> + </imageobject> + + <textobject> + <literallayout class="monospaced"> -------Сервер Novell | H | | ---Sun | | @@ -1378,15 +3281,20 @@ subscribe freebsd-isdn | B | |___---Отдельно стоящий маршрутизатор | - Канал ISDN BRI - </programlisting> + Канал ISDN BRI</literallayout> + </textobject> + + <textobject> + <phrase>Схема сети с ISDN</phrase> + </textobject> + </mediaobject> </example> <para>Одним большим преимуществом большинства маршрутизаторов/мостов является то, что они позволяют иметь 2 <emphasis>отдельных независимых</emphasis> соединения PPP к 2 различным сайтам <emphasis>одновременно</emphasis>. Это не поддерживается в большинстве - TA, кроме специальных (дорогих) моделей, имеющих по два + TA, кроме специальных (обычно дорогих) моделей, имеющих по два последовательных порта. Не путайте это с балансировкой нагрузки, MPP и так далее.</para> @@ -1394,121 +3302,183 @@ subscribe freebsd-isdn у вас имеется постоянное ISDN-соединение в вашем офисе, и вы хотите им воспользоваться, но не хотите задействовать дополнительный канал ISDN на работе. Маршрутизатор, расположенный в офисе, может - использовать выделенное соединение по каналу B (64Кбс) для Интернет, + использовать выделенное соединение по каналу B (64 Кбит/с) для + Интернет, и одновременно другой канал B для отдельного соединения для передачи данных. Второй канал B может использоваться для входящих, исходящих - и динамически распределяемых соединений (MPP и другие) совместно с + и динамически распределяемых соединений (MPP и так далее) совместно с первым каналом B для повышения пропускной способности.</para> + <indexterm><primary>IPX/SPX</primary></indexterm> <para>Мост Ethernet также позволяет вам передавать больше, чем просто - трафик IP, вы можете передавать IPX/SPX и любые другие протоколы, + трафик IP. Вы сможете передавать IPX/SPX и любые другие протоколы, которые вы используете.</para> </sect2> </sect1> -<sect1 id="nis"> - <title>NIS/YP</title> - - <para><emphasis>Текст написал &a.unfurl; 21 января 2000, дополнения и - комментарии частично от Эрика Огрена (Eric Ogren) - <email>eogren@earthlink.net</email> и Удо Эрделхоффа (Udo Erdelhoff) - <email>ue@nathan.ruhr.de</email> сделаны в июне 2000.</emphasis></para> - - <sect2> - <title>Что это такое?</title> - - <para>NIS, что является сокращением от Network Information Services - (Сетевые Информационные Службы), которые были разработаны компанией - Sun Microsystems для централизованного администрирования систем Unix - (первоначально SunOS). В настоящее время эти службы практически стали - промышленным стандартом; все основные версии Unix (Solaris, HP-UX, AIX, - Linux, NetBSD, OpenBSD, FreeBSD, и так далее) поддерживают NIS.</para> - - <para>NIS первоначально назывались Yellow Pages (или yp), но из-за - проблем с авторскими правами, Sun была вынуждена изменить это - название.</para> - - <para>Это система клиент/сервер на основе вызовов RPC, которая позволяет - группе машин в одном домене NIS совместно использовать общий набор - конфигурационных файлов. Системный администратор может настроить - клиентскую систему NIS только с минимальной настроечной информацией, а - затем добавлять, удалять и модифицировать настроечную информацию из - одного места.</para> - - <para>Это похоже на систему доменов Windows NT; хотя их внутренние - реализации не так уж и похожи, основные функции сравнимы.</para> - </sect2> - - <sect2> - <title>Термины/программы, о которых вы должны знать</title> - - <para>Существует несколько терминов и некоторое количество - пользовательских программ, которые будут нужны, когда вы будете - пытаться сделать NIS во FreeBSD, и в случае создания сервера, и - в случае работы в качестве клиента NIS:</para> - - <itemizedlist> - <listitem> - <para><emphasis>Имя домена NIS</emphasis>. Главный сервер NIS и - все его клиенты (включая вторичные серверы), имеют доменное имя - NIS. Как и в случае с именем домена NT, имя домена NIS не имеет - ничего общего с DNS.</para> - </listitem> - - <listitem> - <para><emphasis>portmap</emphasis>. Для обеспечения работы RPC - (Remote Procedure Call, Удаленного Вызова Процедур, сетевого - протокола, используемого NIS), должен быть запущен даемон - <command>portmap</command>. Если даемон <command>portmap</command> - не запущен, невозможно будет запустить сервер NIS, или работать как - NIS-клиент.</para> - </listitem> + <sect1 id="network-nis"> + <sect1info> + <authorgroup> + <author> + <firstname>Bill</firstname> + <surname>Swingle</surname> + <contrib>Текст создал</contrib> + </author> + </authorgroup> + + <authorgroup> + <author> + <firstname>Eric</firstname> + <surname>Ogren</surname> + <contrib>Внёс добавления</contrib> + </author> + <author> + <firstname>Udo</firstname> + <surname>Erdelhoff</surname> + </author> + </authorgroup> + </sect1info> + + <title>NIS/YP</title> + + <sect2> + <title>Что это такое?</title> + + <indexterm><primary>NIS</primary></indexterm> + <indexterm><primary>Solaris</primary></indexterm> + <indexterm><primary>HP-UX</primary></indexterm> + <indexterm><primary>AIX</primary></indexterm> + <indexterm><primary>Linux</primary></indexterm> + <indexterm><primary>NetBSD</primary></indexterm> + <indexterm><primary>OpenBSD</primary></indexterm> + + <para>NIS, что является сокращением от Network Information Services + (Сетевые Информационные Службы), которые были разработаны компанией + Sun Microsystems для централизованного администрирования систем &unix; + (изначально &sunos;). В настоящее время эти службы практически стали + промышленным стандартом; все основные &unix;-подобные системы + (&solaris;, HP-UX, &aix;, Linux, NetBSD, OpenBSD, FreeBSD и так далее) + поддерживают NIS.</para> + + <indexterm> + <primary>yellow pages</primary> + <see>NIS</see> + </indexterm> + + <para>NIS первоначально назывались Yellow Pages (или yp), но из-за + проблем с торговым знаком Sun изменила это название. Старое название + (и yp) всё ещё часто употребляется.</para> + + <indexterm> + <primary>NIS</primary> + <secondary>домены</secondary> + </indexterm> + + <para>Это система клиент/сервер на основе вызовов RPC, которая позволяет + группе машин в одном домене NIS совместно использовать общий набор + конфигурационных файлов. Системный администратор может настроить + клиентскую систему NIS только с минимальной настроечной информацией, а + затем добавлять, удалять и модифицировать настроечную информацию из + одного места.</para> + + <indexterm><primary>Windows NT</primary></indexterm> + + <para>Это похоже на систему доменов &windowsnt;; хотя их внутренние + реализации не так уж и похожи, основные функции сравнимы.</para> + </sect2> - <listitem> - <para><emphasis>ypbind</emphasis>. <command>ypbind</command> - “связывает” NIS-клиента с его NIS-сервером. Он - определяет имя NIS-домена системы, и при помощи RPC подключается к - серверу. <command>ypbind</command> является основой - клиент-серверного взаимодействия в среде NIS; если на клиентской - машине программа <command>ypbind</command> перестанет работать, то - эта машина не сможет получить доступ к серверу NIS.</para> - </listitem> + <sect2> + <title>Термины/программы, о которых вы должны знать</title> - <listitem> - <para><emphasis>ypserv</emphasis>. Программа - <command>ypserv</command>, которая должна запускаться только на - серверах NIS, собственно и является сервером NIS. Если ypserv - перестанет работать, то сервер не сможет отвечать на запросы NIS - (к счастью, на этот случай предусмотрен вторичный сервер).</para> + <para>Существует несколько терминов и некоторое количество + пользовательских программ, которые будут нужны, когда вы будете + пытаться сделать NIS во FreeBSD, и в случае создания сервера, и + в случае работы в качестве клиента NIS:</para> - <note> - <para>Есть несколько реализаций NIS (к FreeBSD это не относится), - в которых не производится попыток подключиться к другому серверу, - если ранее используемый сервер перестал работать. Зачастую - единственным средством, помогающим в этой ситуации, является - перезапуск серверного процесса (или сервера полностью) или - процесса <command>ypbind</command> на клиентской машине.</para> - </note> - </listitem> + <indexterm> + <primary><application>portmap</application></primary> + </indexterm> - <listitem> - <para><emphasis>rpc.yppasswdd</emphasis>. Программа - <command>rpc.yppasswdd</command>, другой процесс, который - запускается только на главных NIS-серверах, является даемоном, - позволяющим клиентам NIS изменять свои пароли NIS. Если этот - даемон не запущен, то пользователи должны будут входить на - основной сервер NIS и там менять свои пароли.</para> - </listitem> + <informaltable> + <tgroup cols="2"> + <thead> + <row> + <entry>Термин</entry> + <entry>Описание</entry> + </row> + </thead> + + <tbody> + <row> + <entry>Имя домена NIS</entry> + + <entry>Главный сервер NIS и все его клиенты (включая вторичные + серверы), имеют доменное имя NIS. Как и в случае с именем + домена &windowsnt;, имя домена NIS не имеет ничего общего с + DNS.</entry> + </row> + + <row> + <entry>portmap</entry> + + <entry>Для обеспечения работы RPC (Remote Procedure Call, + Удалённого Вызова Процедур, сетевого протокола, используемого + NIS), должен быть запущен даемон <command>portmap</command>. + Если даемон <command>portmap</command> не запущен, невозможно + будет запустить сервер NIS, или работать как + NIS-клиент.</entry> + </row> + + <row> + <entry>ypbind</entry> + + <entry><quote>Связывает</quote> + NIS-клиента с его NIS-сервером. Он определяет имя NIS-домена + системы, и при помощи RPC подключается к серверу. + <command>ypbind</command> является основой клиент-серверного + взаимодействия в среде NIS; если на клиентской машине + программа <command>ypbind</command> перестанет работать, то + эта машина не сможет получить доступ к серверу NIS.</entry> + </row> + + <row> + <entry>ypserv</entry> + + <entry>Программа <command>ypserv</command>, которая должна + запускаться только на серверах NIS: это и есть + сервер NIS. Если &man.ypserv.8; перестанет работать, то + сервер не сможет отвечать на запросы NIS (к счастью, на этот + случай предусмотрен вторичный сервер). Есть несколько + реализаций NIS (к FreeBSD это не относится), в которых не + производится попыток подключиться к другому серверу, если ранее + используемый сервер перестал работать. Зачастую единственным + средством, помогающим в этой ситуации, является перезапуск + серверного процесса (или сервера полностью) или процесса + <command>ypbind</command> на клиентской машине.</entry> + </row> + + <row> + <entry>rpc.yppasswdd</entry> + + <entry>Программа <command>rpc.yppasswdd</command>, другой + процесс, который запускается только на главных NIS-серверах: + это даемон, позволяющий клиентам NIS изменять свои + пароли NIS. Если этот даемон не запущен, то пользователи + должны будут входить на основной сервер NIS и там менять свои + пароли.</entry> + </row> + </tbody> + </tgroup> + </informaltable> <!-- XXX Отсутствует: rpc.ypxfrd (хотя это не очень важно) Может работать только на основном сервере --> - </itemizedlist> - </sect2> + </sect2> <sect2> <title>Как это работает?</title> - <para>В системе NIS существует три типа хостов; основные (master) + <para>В системе NIS существует три типа хостов: основные (master) серверы, вторичные (slave) серверы и клиентские машины. Серверы выполняют роль централизованного хранилища информации о конфигурации хостов. Основные серверы хранят оригиналы этой информации, когда как @@ -1518,20 +3488,24 @@ subscribe freebsd-isdn <para>Информация во многих файлах может совместно использоваться следующим образом. Файлы <filename>master.passwd</filename>, - <filename>group</filename>, и <filename>hosts</filename> используются + <filename>group</filename> и <filename>hosts</filename> используются совместно через NIS. Когда процессу, работающему на клиентской машине, требуется информация, как правило, находящаяся в этих файлах локально, - он делает запрос к серверу, с которым связан, для получения этой - информации.</para> + то он делает запрос к серверу NIS, с которым связан.</para> <sect3> <title>Типы машин</title> <itemizedlist> + <indexterm> + <primary>NIS</primary> + <secondary>главный сервер</secondary> + </indexterm> + <listitem> <para><emphasis>Основной сервер NIS</emphasis>. - Такой сервер, по аналогии с первичным контроллером домена Windows - NT, хранит файлы, используемые всеми клиентами NIS. Файлы + Такой сервер, по аналогии с первичным контроллером домена + &windowsnt;, хранит файлы, используемые всеми клиентами NIS. Файлы <filename>passwd</filename>, <filename>group</filename> и различные другие файлы, используемые клиентами NIS, находятся на основном сервере.</para> @@ -1544,9 +3518,13 @@ subscribe freebsd-isdn </note> </listitem> + <indexterm> + <primary>NIS</primary> + <secondary>вторичный сервер</secondary> + </indexterm> <listitem> - <para><emphasis>Вторичные серверы NIS</emphasis>. - Похожие на вторичные контроллеры доменов NT, вторичные серверы + <para><emphasis>Вторичные серверы NIS</emphasis>. Похожие на + вторичные контроллеры доменов &windowsnt;, вторичные серверы NIS содержат копии оригинальных файлов данных NIS. Вторичные серверы NIS обеспечивают избыточность, что нужно в критичных приложениях. Они также помогают распределять нагрузку на @@ -1555,11 +3533,16 @@ subscribe freebsd-isdn серверам.</para> </listitem> + <indexterm> + <primary>NIS</primary> + <secondary>клиент</secondary> + </indexterm> <listitem> <para><emphasis>Клиенты NIS</emphasis>. - Клиенты NIS, как и большинство машин NT Workstation, + Клиенты NIS, как и большинство рабочих станций &windowsnt;, аутентифицируются на сервере NIS (или на контроллере домена - в случае NT Workstation) во время входа в систему.</para> + &windowsnt; в случае работы с &windowsnt; Workstation) во время + входа в систему.</para> </listitem> </itemizedlist> </sect3> @@ -1571,8 +3554,8 @@ subscribe freebsd-isdn <para>В этом разделе приводится пример настройки NIS.</para> <note> - <para>В этом разделе предполагается, что вы работаете с FreeBSD версии - 3.3 или выше. Указания, приводимые здесь, скорее всего, + <para>В этом разделе предполагается, что вы работаете с FreeBSD 3.3 + или выше. Указания, приводимые здесь, скорее всего, <emphasis>будут</emphasis> работать с любой версией FreeBSD, выше, чем 3.0, однако нет гарантий, что это на самом деле так.</para> </note> @@ -1646,6 +3629,10 @@ subscribe freebsd-isdn <sect4> <title>Выбор имени домена NIS</title> + <indexterm> + <primary>NIS</primary> + <secondary>имя домена</secondary> + </indexterm> <para>Это имя не должно быть <quote>именем домена</quote>, которое вы использовали. Более точно это имя называется <quote>именем домена NIS</quote>. Когда клиент рассылает запросы на получение @@ -1661,11 +3648,12 @@ subscribe freebsd-isdn быть уникальным в пределах вашей сети и хорошо, если оно будет описывать группу машин, которые представляет. Например, художественный отдел в компании Acme Inc. может находиться в - домене NIS с именем "acme-art". В нашем примере положим, что - мы выбрали имя <emphasis>test-domain</emphasis>.</para> + домене NIS с именем <quote>acme-art</quote>. В нашем примере + положим, что мы выбрали имя <emphasis>test-domain</emphasis>.</para> + <indexterm><primary>SunOS</primary></indexterm> <para>Несмотря на это, некоторые операционные системы (в частности, - SunOS) используют свое имя домена NIS в качестве имени домена + &sunos;) используют свое имя домена NIS в качестве имени домена Интернет. Если одна или более машин в вашей сети имеют такие ограничения, вы <emphasis>обязаны</emphasis> использовать имя домена Интернет в качестве имени домена NIS.</para> @@ -1708,7 +3696,7 @@ subscribe freebsd-isdn будет иметь свой собственный независимый от других набор карт.</para> <para>Основной и вторичный серверы обслуживают все запросы NIS с - помощью даемона <command>ypserv</command>. <command>Ypserv</command> + помощью даемона <command>ypserv</command>. <command>ypserv</command> отвечает за получение входящих запросов от клиентов NIS, распознавание запрашиваемого домена и отображение имени в путь к соответствующему файлы базы данных, а также передаче информации из @@ -1717,36 +3705,48 @@ subscribe freebsd-isdn <sect4> <title>Настройка основного сервера NIS</title> + <indexterm> + <primary>NIS</primary> + <secondary>настройка сервера</secondary> + </indexterm> <para>Настройка основного сервера NIS может оказаться сравнительно простой, в зависимости от ваших потребностей. В поставку FreeBSD сразу включена поддержка NIS. Все, что вам нужно, это добавить следующие строки в файл <filename>/etc/rc.conf</filename>, а - FreeBSD сделает за вас все остальное..</para> + FreeBSD сделает за вас всё остальное..</para> - <itemizedlist> - <listitem> + <procedure> + <step> <para><programlisting>nisdomainname="test-domain"</programlisting> В этой строке задается имя домена NIS, которое будет <emphasis>test-domain</emphasis>, еще до настройки сети (например, после перезагрузки).</para> - </listitem> + </step> - <listitem> + <step> <para><programlisting>nis_server_enable="YES"</programlisting> Здесь указывается FreeBSD на запуск процессов серверов NIS, когда дело доходит до сетевых настроек.</para> - </listitem> + </step> - <listitem> + <step> <para><programlisting>nis_yppasswdd_enable="YES"</programlisting> Здесь указывается на запуск даемона <command>rpc.yppasswdd</command>, который, как это отмечено выше, позволит пользователям менять свой пароль NIS с клиентской машины.</para> - </listitem> - </itemizedlist> + </step> + </procedure> + + <note> + <para>В зависимости от ваших настроек NIS, вам могут понадобиться + дополнительные строки. Обратитесь к <link + linkend="network-nis-server-is-client">разделу о серверах NIS, + которые являются и клиентами NIS</link> ниже для получения + подробной информации.</para> + </note> - <para>А теперь все, что вам нужно сделать, это запустить команду + <para>А теперь всё, что вам нужно сделать, это запустить команду <command>/etc/netstart</command>, работая как администратор. По ней произойдет настройка всего, при этом будут использоваться значения, заданные в файле <filename>/etc/rc.conf</filename>.</para> @@ -1755,26 +3755,30 @@ subscribe freebsd-isdn <sect4> <title>Инициализация карт NIS</title> + <indexterm> + <primary>NIS</primary> + <secondary>карты</secondary> + </indexterm> <para><emphasis>Карты NIS</emphasis> являются файлами баз данных, которые хранятся в каталоге <filename>/var/yp</filename>. Они генерируются из конфигурационных файлов, находящихся в каталоге <filename>/etc</filename> основного сервера NIS, за одним исключением: файл <filename>/etc/master.passwd</filename>. На это есть весомая причина; вам не нужно распространять пароли - пользователя root и других административных пользователей на все - серверы в домене NIS. По этой причине, прежде чем инициализировать - карты NIS, вы должны сделать вот что:</para> + пользователя <username>root</username> и других административных + пользователей на все серверы в домене NIS. По этой причине, прежде + чем инициализировать карты NIS, вы должны сделать вот что:</para> - <screen> -&prompt.root; <userinput>cp /etc/master.passwd /var/yp/master.passwd</userinput> + <screen>&prompt.root; <userinput>cp /etc/master.passwd /var/yp/master.passwd</userinput> &prompt.root; <userinput>cd /var/yp</userinput> -&prompt.root; <userinput>vi master.passwd</userinput> - </screen> +&prompt.root; <userinput>vi master.passwd</userinput></screen> <para>Вы должны удалить все записи, касающиеся системных - пользователей (bin, tty, kmem, games и так далее), а также записи, - которые вы не хотите распространять клиентам NIS (например, root - и другие пользователи с UID, равным 0 (администраторы)).</para> + пользователей (<username>bin</username>, <username>tty</username>, + <username>kmem</username>, <username>games</username> и так далее), а + также записи, которые вы не хотите распространять клиентам NIS + (например, <username>root</username> и другие пользователи с UID, + равным 0 (администраторы)).</para> <note> <para>Проверьте, чтобы файл @@ -1784,20 +3788,20 @@ subscribe freebsd-isdn если это нужно.</para> </note> + <indexterm><primary>Tru64 UNIX</primary></indexterm> <para>Когда с этим будет покончено, самое время проинициализировать карты NIS! В поставку FreeBSD включен скрипт с именем <command>ypinit</command>, который делает это (обратитесь к его справочной странице за дополнительной информацией). Отметьте, что - этот скрипт имеется на большинстве ОС UNIX, но не во всех. В - системе Digital Unix/Compaq Tru64 Unix он называется + этот скрипт имеется в большинстве операционных систем &unix;, но не + во всех. В системе Digital Unix/Compaq Tru64 UNIX он называется <command>ypsetup</command>. Так как мы генерируем карты для главного сервера NIS, то при вызове программы <command>ypinit</command> мы передаем ей параметр <option>-m</option>. Для генерации карт NIS в предположении, что вы уже сделали шаги, описанные выше, выполните следующее:</para> - <screen> -ellington&prompt.root; <userinput>ypinit -m test-domain</userinput> + <screen>ellington&prompt.root; <userinput>ypinit -m test-domain</userinput> 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. @@ -1819,8 +3823,7 @@ Is this correct? [y/n: y] <userinput>y</userinput> [..вывод при генерации карт..] NIS Map update completed. -ellington has been setup as an YP master server without any errors. - </screen> +ellington has been setup as an YP master server without any errors.</screen> <para>Программа <command>ypinit</command> должна была создать файл <filename>/var/yp/Makefile</filename> из @@ -1831,18 +3834,24 @@ ellington has been setup as an YP master server without any errors. то вы должны отредактировать файл <filename>/var/yp/Makefile</filename>:</para> - <screen> -ellington&prompt.root; <userinput>vi /var/yp/Makefile</userinput> - </screen> + <screen>ellington&prompt.root; <userinput>vi /var/yp/Makefile</userinput></screen> + + <para>Вы должны закомментировать строку, в которой указано</para> - <para>Вы должны закомментировать строку, в которой указано - `NOPUSH = "True"' (она уже не раскомментирована).</para> + <programlisting>NOPUSH = "True"</programlisting> + + <para>(она уже не раскомментирована).</para> </sect4> <sect4> <title>Настройка вторичного сервера NIS</title> - <para>Настройка вторичного сервера NIS осуществляется еще проще, + <indexterm> + <primary>NIS</primary> + <secondary>вторичный сервер</secondary> + </indexterm> + + <para>Настройка вторичного сервера NIS осуществляется ещё проще, чем настройка главного сервера. Войдите на вторичный сервер и отредактируйте файл <filename>/etc/rc.conf</filename> точно также, как вы делали это ранее. Единственным отличием является то, что @@ -1851,8 +3860,7 @@ ellington&prompt.root; <userinput>vi /var/yp/Makefile</userinput> <option>-s</option> требует также указание имени главного сервера NIS, так что наша команда должна выглядеть так:</para> - <screen> -coltrane&prompt.root; <userinput>ypinit -s ellington test-domain</userinput> + <screen>coltrane&prompt.root; <userinput>ypinit -s ellington test-domain</userinput> Server Type: SLAVE Domain: test-domain Master: ellington @@ -1907,8 +3915,7 @@ 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. - </screen> +Don't forget to update map ypservers on ellington.</screen> <para>Теперь у вас должен быть каталог с именем <filename>/var/yp/test-domain</filename>. Копии карт главного @@ -1917,18 +3924,16 @@ Don't forget to update map ypservers on ellington. <filename>/etc/crontab</filename> вашего вторичного сервера должны это делать:</para> - <programlisting> -20 * * * * root /usr/libexec/ypxfr passwd.byname -21 * * * * root /usr/libexec/ypxfr passwd.byuid - </programlisting> + <programlisting>20 * * * * root /usr/libexec/ypxfr passwd.byname +21 * * * * root /usr/libexec/ypxfr passwd.byuid</programlisting> <para>Эти две строки заставляют вторичный сервер синхронизировать - свои карты с картами главного сервера. Хотя делать это не - обязательно, потому что главный сервер делает попытки передать - все изменения в своих картах NIS на свои вторичные серверы, - информация для входа в систему настолько жизненно важна для + свои карты с картами главного сервера. Хотя эти строчки не + обязательны, так как главный сервер делает попытки передать все + изменения в своих картах NIS на свои вторичные серверы, но из-за + того, что информация для входа в систему настолько жизненно важна для систем, зависящих от сервера, что выполнение регулярных обновлений - является совсем не плохой идеей. Это еще более важно в загруженных + является совсем не плохой идеей. Это ещё более важно в загруженных сетях, в которых обновления карт могут не всегда завершаться успешно.</para> @@ -1955,8 +3960,8 @@ Don't forget to update map ypservers on ellington. несколько вторичных), то <command>ypbind</command> будет использовать адрес первого ответившего. С этого момента клиентская система будет направлять все свои запросы NIS на этот сервер. Время от времени - <command>ypbind</command> будет обмениваться пакетами - <quote>ping</quote> с сервером для проверки его работоспособности. + <command>ypbind</command> будет <quote>пинать</quote> сервер для + проверки его работоспособности. Если на один из тестовых пакетов не удастся получить ответа за разумное время, то <command>ypbind</command> пометит этот домен как домен, с которым связка разорвана, и снова начнет процесс посылки @@ -1965,71 +3970,81 @@ Don't forget to update map ypservers on ellington. <sect4> <title>Настройка клиента NIS</title> + <indexterm> + <primary>NIS</primary> + <secondary>настройка клиента</secondary> + </indexterm> <para>Настройка машины с FreeBSD в качестве клиента NIS достаточно проста.</para> - <itemizedlist> - <listitem> + <procedure> + <step> <para>Отредактируйте файл <filename>/etc/rc.conf</filename>, добавив туда следующие строки для того, чтобы задать имя домена NIS и запустить <command>ypbind</command> во время запуска сетевых служб:</para> - <programlisting> -nisdomainname="test-domain" -nis_client_enable="YES" - </programlisting> - </listitem> + <programlisting>nisdomainname="test-domain" +nis_client_enable="YES"</programlisting> + </step> - <listitem> - <para>Для получения всех возможных учетных записей от сервера NIS - добавьте при помощи <command>vipw</command> в ваш файл - <filename>/etc/master.passwd</filename> такую строчку:</para> + <step> + <para>Для импортирования всех возможных учётных записей от сервера + NIS, удалите все записи пользоватлей из вашего файла + <filename>/etc/master.passwd</filename> и воспользуйтесь + командой <command>vipw</command> для добавления следующей строки + в конец файла:</para> - <programlisting> -+::::::::: - </programlisting> + <programlisting>+:::::::::</programlisting> <note> <para>Эта строчка даст всем пользователям с корректной учетной записью в картах учетных баз пользователей доступ к этой системе. Есть множество способов настроить ваш клиент NIS, изменив эту строку. Посмотрите ниже текст, касающийся <link - linkend="netgroups">сетевых групп</link>, чтобы получить более - подробную информацию. Дополнительная информация для изучения - находится в книге издательства O'Reilly под названием - <literal>Managing NFS and NIS</literal>.</para> + linkend="network-netgroups">сетевых групп</link>, чтобы + получить более подробную информацию. Дополнительная информация + для изучения находится в книге издательства O'Reilly под + названием <literal>Managing NFS and NIS</literal>.</para> </note> - </listitem> - <listitem> - <para>Для импортирования всех возможных записей о группах с - сервера NIS, добавьте в ваш файл - <filename>/etc/group</filename> такую строчку:</para> - - <programlisting> -+:*:: - </programlisting> - </listitem> - </itemizedlist> - - <para>После завершения выполнения этих шагов у вас должно получиться - запустить команду <command>ypcat passwd</command> и увидеть - карту учетных записей сервера NIS.</para> - </sect4> - </sect3> - </sect2> + <note> + <para>Вы должны оставить хотя бы одну локальную запись (то есть + не импортировать ее через NIS) в вашем + <filename>/etc/master.passwd</filename> и эта запись должна + быть также членом группы <groupname>wheel</groupname>. Если + с NIS что-то случится, эта запись может использоваться для + удаленного входа в систему, перехода в режим администратора и + исправления неисправностей.</para> + </note> + </step> + + <step> + <para>Для импортирования всех возможных записей о группах с + сервера NIS, добавьте в ваш файл + <filename>/etc/group</filename> такую строчку:</para> + + <programlisting>+:*::</programlisting> + </step> + </procedure> + + <para>После завершения выполнения этих шагов у вас должно получиться + запустить команду <command>ypcat passwd</command> и увидеть + карту учетных записей сервера NIS.</para> + </sect4> + </sect3> + </sect2> <sect2> <title>Безопасность NIS</title> <para>В общем-то любой пользователь, зная имя вашего домена, может - выполнить запрос RPC к ypserv и получить содержимое ваших карт NIS. - Для предотвращения такого неавторизованного обмена ypserv поддерживает - так называемую систему securenets, которая может использоваться для - ограничения доступа к некоторой группе хостов. При запуске ypserv - будет пытаться загрузить информацию, касающуюся securenets, из файла - <filename>/var/yp/securenets</filename>.</para> + выполнить запрос RPC к &man.ypserv.8; и получить содержимое ваших карт + NIS. Для предотвращения такого неавторизованного обмена &man.ypserv.8; + поддерживает так называемую систему securenets, которая может + использоваться для ограничения доступа к некоторой группе хостов. При + запуске &man.ypserv.8; будет пытаться загрузить информацию, касающуюся + securenets, из файла <filename>/var/yp/securenets</filename>.</para> <note> <para>Имя каталога зависит от параметра, указанного вместе с опцией @@ -2039,8 +4054,7 @@ nis_client_enable="YES" Примерный файл securenets может иметь примерно такой вид:</para> </note> - <programlisting> -# allow connections from local host -- mandatory + <programlisting># 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 @@ -2048,21 +4062,21 @@ nis_client_enable="YES" # 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 - </programlisting> +10.0.0.0 255.255.240.0</programlisting> - <para>Если ypserv получает запрос от адреса, который соответствует одному - из этих правил, он будет отрабатывать запрос обычным образом. Если же - адрес не подпадает ни под одно правило, запрос будет проигнорирован - и в журнал будет записано предупреждающее сообщение. Если файл - <filename>/var/yp/securenets</filename> не существует, ypserv будет - обслуживать соединения от любого хоста.</para> + <para>Если &man.ypserv.8; получает запрос от адреса, который соответствует + одному из этих правил, он будет отрабатывать запрос обычным образом. + Если же адрес не подпадает ни под одно правило, запрос будет + проигнорирован и в журнал будет записано предупреждающее сообщение. Если + файл <filename>/var/yp/securenets</filename> не существует, + <command>ypserv</command> будет обслуживать соединения от любого + хоста.</para> - <para>Программа ypserv также поддерживает пакет программ + <para>Программа <command>ypserv</command> также поддерживает пакет программ <application>tcpwrapper</application> от Wietse Venema. Это позволяет администратору для ограничения доступа вместо <filename>/var/yp/securenets</filename> использовать конфигурационные - файлы tcpwrapper.</para> + файлы <application>tcpwrapper</application>.</para> <note> <para>Хотя оба этих метода управления доступом обеспечивают некоторую @@ -2086,6 +4100,7 @@ nis_client_enable="YES" приведёт к потере работоспособности NIS в большой части вашей сети.</para> + <indexterm><primary>tcpwrapper</primary></indexterm> <para>Использование пакета <application>tcpwrapper</application> увеличит время отклика вашего сервера NIS. Дополнительной задержки может оказаться достаточно для возникновения таймаутов в клиентских @@ -2120,8 +4135,7 @@ nis_client_enable="YES" <emphasis>bill</emphasis> осуществлять вход на машине <hostid>basie</hostid>, то мы сделаем следующее:</para> - <screen> -basie&prompt.root; <userinput>vipw</userinput> + <screen>basie&prompt.root; <userinput>vipw</userinput> <userinput>[add -bill to the end, exit]</userinput> vipw: rebuilding the database... vipw: done @@ -2146,18 +4160,24 @@ nobody:*:65534:65534::0:0:Unprivileged user:/nonexistent:/sbin/nologin +::::::::: -bill -basie&prompt.root; - </screen> +basie&prompt.root;</screen> </sect2> - <sect2 id="netgroups"> - <title>Использование сетевых групп</title> + <sect2 id="network-netgroups"> + <sect2info> + <authorgroup> + <author> + <firstname>Udo</firstname> + <surname>Erdelhoff</surname> + <contrib>Текст предоставил</contrib> + </author> + </authorgroup> + </sect2info> - <para><emphasis>Эта часть раздела о сетевых группах была предоставлена - Удо Эрделхоффом (Udo Erdelhoff) <email>ue@nathan.ruhr.de</email> в - июле 2000 года.</emphasis></para> + <title>Использование сетевых групп</title> + <indexterm><primary>сетевые группы</primary></indexterm> - <para>Способ, описанный в предыдущей главе, работает достаточно хорошо, + <para>Способ, описанный в предыдущем разделе, работает достаточно хорошо, если вам нужны особые правила для очень малой группы пользователей или машин. В более крупных сетях вы <emphasis>забудете</emphasis> о запрете входа определенных пользователей на важные машины или даже @@ -2167,7 +4187,7 @@ basie&prompt.root; <para>Ответом разработчиков NIS на эту проблему являются <emphasis>сетевые группы</emphasis>. Их назначение и смысл можно - сравнить с обычными группами, используемыми в файловых системах Unix. + сравнить с обычными группами, используемыми в файловых системах &unix;. Главное отличие заключается в отсутствии числового идентификатора и возможности задать сетевую группу включением как пользователей, так и других сетевых групп.</para> @@ -2230,14 +4250,14 @@ basie&prompt.root; <row> <!-- Имена взяты из книги "Good Omens" (авторы Neil Gaiman и Terry Pratchett. Большое спасибо за прекрасную книгу. --> - <entry>war, death, famine, polution</entry> + <entry>war, death, famine, pollution</entry> <entry>Ваши самые важные серверы. Только служащим IT позволяется входить на эти машины.</entry> </row> <row> - <!-- gluttony был пропущен, потому что он был слишком толст ;-) --> - <entry>pride, greed, envy, wraith, lust, sloth</entry> + <!-- gluttony был пропущен, потому что он был слишком толст --> + <entry>pride, greed, envy, wrath, lust, sloth</entry> <entry>Менее важные серверы. Все сотрудники департамента IT могут входить на эти машины.</entry> </row> @@ -2259,8 +4279,8 @@ basie&prompt.root; </informaltable> <para>Если вы попытаетесь реализовать эти требования, ограничивая - каждого пользователя по отдельности, то вам придется добавить - на каждой машине в файл с паролями по одной строчке + каждого пользователя по отдельности, то вам придется добавить на каждой + машине в файл <filename>passwd</filename> по одной строчке -<replaceable>user</replaceable> для каждого пользователя, которому запрещено входить на эту систему. Если вы забудете даже одну строчку, у вас могут начаться проблемы. Гораздо проще делать это правильно во @@ -2282,25 +4302,21 @@ basie&prompt.root; модифицировать единственный конфигурационный файл.</para> <para>Первым шагом является инициализация карты NIS по имени netgroup. - Программа ypinit во FreeBSD по умолчанию этой карты не создает, хотя - реализация NIS будет ее поддерживает, как только она будет создана. - Чтобы создать пустую карту, просто наберите</para> + Программа &man.ypinit.8; во FreeBSD по умолчанию этой карты не + создаёт, хотя реализация NIS будет её поддерживает, как только она + будет создана. Чтобы создать пустую карту, просто наберите</para> - <screen> -ellington&prompt.root; <userinput>vi /var/yp/netgroup</userinput> - </screen> + <screen>ellington&prompt.root; <userinput>vi /var/yp/netgroup</userinput></screen> <para>и начните добавлять содержимое. Например, нам нужно по крайней мере четыре сетевых группы: сотрудники IT, практиканты IT, обычные сотрудники и интернатура.</para> - <programlisting> -IT_EMP (,alpha,test-domain) (,beta,test-domain) + <programlisting>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) - </programlisting> +INTERNS (,able,test-domain) (,baker,test-domain)</programlisting> <para><literal>IT_EMP</literal>, <literal>IT_APP</literal> и так далее являются именами сетевых групп. Несколько слов в скобках служат для @@ -2331,6 +4347,7 @@ INTERNS (,able,test-domain) (,baker,test-domain) странице справочника по &man.netgroup.5;.</para> <note> + <indexterm><primary>сетевые группы</primary></indexterm> <para>Не нужно использовать имена сетевых групп длиннее 8 символов, особенно если в вашем домене NIS имеются машины, работающие под управлением других операционных систем. Имена чувствительны к @@ -2340,18 +4357,16 @@ INTERNS (,able,test-domain) (,baker,test-domain) <para>Некоторые клиенты NIS (отличные от FreeBSD) не могут работать с сетевыми группами, включающими большое количество записей. - Например, в некоторых старых версиях SunOS возникают проблемы, если + Например, в некоторых старых версиях &sunos; возникают проблемы, если сетевая группа содержит более 15 <emphasis>записей</emphasis>. Вы можете обойти это ограничение, создав несколько подгрупп с 15 или меньшим количеством пользователей и настоящую сетевую группу, состоящую из подгрупп:</para> - <programlisting> -BIGGRP1 (,joe1,domain) (,joe2,domain) (,joe3,domain) [...] + <programlisting>BIGGRP1 (,joe1,domain) (,joe2,domain) (,joe3,domain) [...] BIGGRP2 (,joe16,domain) (,joe17,domain) [...] -BIGGRP3 (,joe32,domain) (,joe33,domain) -BIGGROUP BIGGRP1 BIGGRP2 BIGGRP3 - </programlisting> +BIGGRP3 (,joe31,domain) (,joe32,domain) +BIGGROUP BIGGRP1 BIGGRP2 BIGGRP3</programlisting> <para>Вы можете повторить этот процесс, если вам нужно иметь более 225 пользователей в одной сетевой группе.</para> @@ -2359,21 +4374,17 @@ BIGGROUP BIGGRP1 BIGGRP2 BIGGRP3 <para>Активация и распространение вашей карты NIS проста:</para> - <screen> -ellington&prompt.root; <userinput>cd /var/yp</userinput> -ellington&prompt.root; <userinput>make</userinput> - </screen> + <screen>ellington&prompt.root; <userinput>cd /var/yp</userinput> +ellington&prompt.root; <userinput>make</userinput></screen> <para>Это приведет к созданию трех карт NIS <filename>netgroup</filename>, <filename>netgroup.byhost</filename> и <filename>netgroup.byuser</filename>. Воспользуйтесь утилитой - &man.ypcat.1; для проверки доступности вашей новой карты NIS:</para> + &man.ypcat.1; для проверки доступности ваших новых карт NIS:</para> - <screen> -ellington&prompt.user; <userinput>ypcat -k netgroup</userinput> + <screen>ellington&prompt.user; <userinput>ypcat -k netgroup</userinput> ellington&prompt.user; <userinput>ypcat -k netgroup.byhost</userinput> -ellington&prompt.user; <userinput>ypcat -k netgroup.byuser</userinput> - </screen> +ellington&prompt.user; <userinput>ypcat -k netgroup.byuser</userinput></screen> <para>Вывод первой команды должен соответствовать содержимому файла <filename>/var/yp/netgroup</filename>. Вторая команда не выведет @@ -2385,15 +4396,11 @@ ellington&prompt.user; <userinput>ypcat -k netgroup.byuser</userinput> <replaceable>war</replaceable>, вам достаточно запустить &man.vipw.8; и заменить строку</para> - <programlisting> -+::::::::: - </programlisting> + <programlisting>+:::::::::</programlisting> <para>на</para> - <programlisting> -+@IT_EMP::::::::: - </programlisting> + <programlisting>+@IT_EMP:::::::::</programlisting> <para>Теперь только данные, касающиеся пользователей, определенных в сетевой группе <replaceable>IT_EMP</replaceable>, импортируются в @@ -2402,18 +4409,20 @@ ellington&prompt.user; <userinput>ypcat -k netgroup.byuser</userinput> <para>К сожалению, это ограичение также касается и функции ~ командного процессора и всех подпрограмм, выполняющих преобразование между - именами пользователей и их численными идентификаторами. Другими - словами, команда cd ~<replaceable>user</replaceable> работать не - будет, команда <command>ls -l</command> будет выдавать числовые - идентификаторы вместо имен пользователей, а <command>find . -user - joe -print</command> работать откажется, выдавая сообщение - <quote>No such user</quote>. Чтобы это исправить, вам нужно будет - выполнить импорт всех записей о пользователях <emphasis>без - разрешения на вход на ваши серверы</emphasis>.</para> + именами пользователей и их числовыми ID. Другими + словами, команда <command>cd ~<replaceable>user</replaceable></command> + работать не будет, команда <command>ls -l</command> будет выдавать + числовые идентификаторы вместо имён пользователей, а + <command>find . -user joe -print</command> работать откажется, выдавая + сообщение <errorname>No such user</errorname>. Чтобы это исправить, + вам нужно будет выполнить импорт всех записей о пользователях + <emphasis>без разрешения на вход на ваши серверы</emphasis>.</para> <para>Это можно сделать, добавив еще одну строку в файл - <filename>/etc/master.passwd</filename>. Эта строка должна содержать - <literal>+:::::::::/sbin/nologin</literal>, что означает + <filename>/etc/master.passwd</filename>. Эта строка должна + содержать:</para> + + <para><literal>+:::::::::/sbin/nologin</literal>, что означает <quote>Произвести импортирование всех записей с заменой командного процессора на <filename>/sbin/nologin</filename> в импортируемых записях</quote>. Вы можете заменить любое поле в строке с паролем, @@ -2436,20 +4445,16 @@ ellington&prompt.user; <userinput>ypcat -k netgroup.byuser</userinput> <filename>/etc/master.passwd</filename> на нечто, подобное следующему:</para> - <programlisting> -+@IT_EMP::::::::: + <programlisting>+@IT_EMP::::::::: +@IT_APP::::::::: -+:::::::::/sbin/nologin - </programlisting> ++:::::::::/sbin/nologin</programlisting> <para>Соответствующие строки для обычных рабочих станций могут иметь такой вид:</para> - <programlisting> -+@IT_EMP::::::::: + <programlisting>+@IT_EMP::::::::: +@USERS::::::::: -+:::::::::/sbin/nologin - </programlisting> ++:::::::::/sbin/nologin</programlisting> <para>И все было прекрасно до того момента, когда через несколько недель изменилась политика: Департамент IT начал нанимать интернатуру. @@ -2474,11 +4479,9 @@ ellington&prompt.user; <userinput>ypcat -k netgroup.byuser</userinput> для вашей карты NIS сетевой группы должны выглядеть таким образом:</para> - <programlisting> -BIGSRV IT_EMP IT_APP + <programlisting>BIGSRV IT_EMP IT_APP SMALLSRV IT_EMP IT_APP ITINTERN -USERBOX IT_EMP ITINTERN USERS - </programlisting> +USERBOX IT_EMP ITINTERN USERS</programlisting> <para>Этот метод задания ограничений на вход работает весьма хорошо, если вы можете выделить группы машин с одинаковыми ограничениями. К @@ -2490,18 +4493,16 @@ USERBOX IT_EMP ITINTERN USERS возможностью, которой можно воспользоваться при изменении политики, описанной выше. При таком развитии событий файл <filename>/etc/master.passwd</filename> на каждой машине содержит две - строки, начинающиеся с ``+''. Первая из них добавляет сетевую группу - с учетными записями, которым разрешено входить на эту машину, а вторая - добавляет все оставшиеся учетные записи с + строки, начинающиеся с <quote>+</quote>. Первая из них добавляет + сетевую группу с учётными записями, которым разрешено входить на эту + машину, а вторая добавляет все оставшиеся учетные записи с <filename>/sbin/nologin</filename> в качестве командного процессора. Хорошей идеей является использование ИМЕНИ МАШИНЫ заглавными буквами для имени сетевой группы. Другими словами, строки должны иметь такой вид:</para> - <programlisting> -+@<replaceable>BOXNAME</replaceable>::::::::: -+:::::::::/sbin/nologin - </programlisting> + <programlisting>+@<replaceable>BOXNAME</replaceable>::::::::: ++:::::::::/sbin/nologin</programlisting> <para>Как только вы завершите эту работу для всех ваших машин, вам не нужно будет снова модифицировать локальные версии @@ -2510,8 +4511,7 @@ USERBOX IT_EMP ITINTERN USERS сетевой группы для этого случая с некоторыми полезными дополнениями.</para> - <programlisting> -# Сначала определяем группы пользователей + <programlisting># Сначала определяем группы пользователей IT_EMP (,alpha,test-domain) (,beta,test-domain) IT_APP (,charlie,test-domain) (,delta,test-domain) DEPT1 (,echo,test-domain) (,foxtrott,test-domain) @@ -2535,7 +4535,7 @@ SECURITY IT_EMP (,echo,test-domain) (,golf,test-domain) WAR BIGSRV FAMINE BIGSRV # Пользователю india необходим доступ к этому серверу -POLUTION BIGSRV (,india,test-domain) +POLLUTION BIGSRV (,india,test-domain) # # Этот очень важен и ему требуются большие ограничения доступа DEATH IT_EMP @@ -2545,8 +4545,7 @@ ONE SECURITY # # Ограничить машину единственным пользователем TWO (,hotel,test-domain) -# [...далее следуют другие группы] - </programlisting> +# [...далее следуют другие группы]</programlisting> <para>Если вы используете какие-либо базы данных для управления учетными записями ваших пользователей, вы должны смочь создать первую @@ -2576,13 +4575,11 @@ TWO (,hotel,test-domain) NIS</emphasis>. Если вы забудете сделать это, то новый пользователь не сможет нигде войти, кроме как на главном сервере NIS. Например, если в лаборатории нам нужно добавить нового - пользователя “jsmith”, мы делаем вот что:</para> + пользователя <quote>jsmith</quote>, мы делаем вот что:</para> - <screen> -&prompt.root; <userinput>pw useradd jsmith</userinput> + <screen>&prompt.root; <userinput>pw useradd jsmith</userinput> &prompt.root; <userinput>cd /var/yp</userinput> -&prompt.root; <userinput>make test-domain</userinput> - </screen> +&prompt.root; <userinput>make test-domain</userinput></screen> <para>Вместо <command>pw useradd jsmith</command> вы можете также запустить команду <command>adduser jsmith</command>.</para> @@ -2592,7 +4589,7 @@ TWO (,hotel,test-domain) <para><emphasis>Не помещайте административные учетные записи в карты NIS</emphasis>. Вам не нужно распространять административных пользователей и их пароли на машины, которые не должны иметь доступ - к таким учетным записям.</para> + к таким учётным записям.</para> </listitem> <listitem> @@ -2602,9 +4599,9 @@ TWO (,hotel,test-domain) входа в лабораторию с легкостью получат доступ.</para> <para>Это основное уязвимое место в любой централизованно - администрируемой системе, и это очень важный момент. Если вы не + администрируемой системе. Если вы не защищаете ваши серверы NIS, вы будете иметь дело с толпой - разозленных пользователей!</para> + разозлённых пользователей!</para> </listitem> </itemizedlist> </sect2> @@ -2628,79 +4625,121 @@ TWO (,hotel,test-domain) такие серверы практически не используются.</para> </sect2> - <sect2> - <title>Серверы NIS, которые также являются клиентами NIS</title> - - <para>Особое внимание следует уделить использованию ypserv в домене со - многими серверами, когда серверные машины являются также клиентами NIS. - Неплохо бы заставить серверы осуществить привязку к самим себе, - запретив рассылку запросов на привязку и возможно, перекрестную - привязку друг к другу. Если один сервер выйдет из строя, а другие - будут зависеть от него, то в результате могут возникнуть странные - ситуации. Постепенно все клиенты попадут в таймаут и попытаются - привязаться к другим серверам, но полученная задержка может быть - значительной, а странности останутся, так как серверы снова могут - привязаться друг к другу.</para> - - <para>Вы можете заставить хост выполнить привязку к конкретному серверу, - запустив команду <command>ypbind</command> с флагом - <option>-S</option>.</para> - </sect2> + <sect2 id="network-nis-server-is-client"> + <title>Серверы NIS, которые также являются клиентами NIS</title> + + <para>Особое внимание следует уделить использованию ypserv в домене со + многими серверами, когда серверные машины являются также клиентами NIS. + Неплохо бы заставить серверы осуществить привязку к самим себе, + запретив рассылку запросов на привязку и возможно, перекрестную + привязку друг к другу. Если один сервер выйдет из строя, а другие + будут зависеть от него, то в результате могут возникнуть странные + ситуации. Постепенно все клиенты попадут в таймаут и попытаются + привязаться к другим серверам, но полученная задержка может быть + значительной, а странности останутся, так как серверы снова могут + привязаться друг к другу.</para> + + <para>Вы можете заставить хост выполнить привязку к конкретному серверу, + запустив команду <command>ypbind</command> с флагом + <option>-S</option>. Если вы не хотите делать это вручную каждый + раз при перезагрузке + вашего сервера NIS, то можете добавить в файл + <filename>/etc/rc.conf</filename> такие строки:</para> + + <programlisting>nis_client_enable="YES" # run client stuff as well +nis_client_flags="-S <replaceable>NIS domain</replaceable>,<replaceable>server</replaceable>"</programlisting> + + <para>Дополнительную информацию можно найти на странице справки по + &man.ypbind.8;.</para> + </sect2> - <sect2> - <title>Использование libscrypt или libdescrypt</title> - - <para>Одним из общих вопросов, которые возникают в начале работы с NIS, - является вопрос совместимости криптографической библиотеки crypt. Если - ваш сервер NIS использует криптографические библиотеки DES, он сможет - поддерживать клиентов, которые тоже используют DES. Чтобы определить, - что используют ваши сервер и клиенты, взгляните на символические ссылки - в каталоге <filename>/usr/lib</filename>. Если машина настроена на - использование библиотек DES, это будет выглядеть примерно так:</para> - - <screen> -&prompt.user; <userinput>ls -l /usr/lib/*crypt*</userinput> -lrwxrwxrwx 1 root wheel 13 Jul 15 08:55 /usr/lib/libcrypt.a@ -> libdescrypt.a -lrwxrwxrwx 1 root wheel 14 Jul 15 08:55 /usr/lib/libcrypt.so@ -> libdescrypt.so -lrwxrwxrwx 1 root wheel 16 Jul 15 08:55 /usr/lib/libcrypt.so.2@ -> libdescrypt.so.2 -lrwxrwxrwx 1 root wheel 15 Jul 15 08:55 /usr/lib/libcrypt_p.a@ -> libdescrypt_p.a --r--r--r-- 1 root wheel 13018 Nov 8 14:27 /usr/lib/libdescrypt.a -lrwxr-xr-x 1 root wheel 16 Nov 8 14:27 /usr/lib/libdescrypt.so@ -> libdescrypt.so.2 --r--r--r-- 1 root wheel 12965 Nov 8 14:27 /usr/lib/libdescrypt.so.2 --r--r--r-- 1 root wheel 14750 Nov 8 14:27 /usr/lib/libdescrypt_p.a - </screen> - - <para>Если машина настроена на использование стандартных для FreeBSD - криптографических библиотек MD5, то они будут иметь примерно такой - вид:</para> + <sect2> + <title>Форматы паролей</title> + + <indexterm> + <primary>NIS</primary> + <secondary>форматы паролей</secondary> + </indexterm> + + <para>Одним из общих вопросов, которые возникают в начале работы с NIS, + является вопрос совместимости форматов паролей. Если ваш сервер NIS + использует пароли, зашифрованные алгоритмом DES, то он будет + поддерживать только тех клиентов, что также используют DES. К + примеру, если в вашей сети имеются клиенты NIS, использующие &solaris;, + то вам, скорее всего, необходимо использовать пароли с шифрованием по + алгоритму DES.</para> - <screen> -&prompt.user; <userinput>ls -l /usr/lib/*crypt*</userinput> -lrwxrwxrwx 1 root wheel 13 Jul 15 08:55 /usr/lib/libcrypt.a@ -> libscrypt.a -lrwxrwxrwx 1 root wheel 14 Jul 15 08:55 /usr/lib/libcrypt.so@ -> libscrypt.so -lrwxrwxrwx 1 root wheel 16 Jul 15 08:55 /usr/lib/libcrypt.so.2@ -> libscrypt.so.2 -lrwxrwxrwx 1 root wheel 15 Jul 15 08:55 /usr/lib/libcrypt_p.a@ -> libscrypt_p.a --r--r--r-- 1 root wheel 6194 Nov 8 14:27 /usr/lib/libscrypt.a -lrwxr-xr-x 1 root wheel 14 Nov 8 14:27 /usr/lib/libscrypt.so@ -> libscrypt.so.2 --r--r--r-- 1 root wheel 7579 Nov 8 14:27 /usr/lib/libscrypt.so.2 --r--r--r-- 1 root wheel 6684 Nov 8 14:27 /usr/lib/libscrypt_p.a - </screen> - - <para>Если у вас возникли проблемы с аутентификацией клиента NIS, начать - её решать определённо стоит отсюда. Если вы хотите + <para>Чтобы понять, какой формат используют ваши серверы и клиенты, + загляните в файл <filename>/etc/login.conf</filename>. Если хост + настроен на использование паролей, зашифрованных по алгоритму DES, + то класс <literal>default</literal> будет содержать запись вроде + следующей:</para> + + <programlisting>default:\ + :passwd_format=des:\ + :copyright=/etc/COPYRIGHT:\ + [Последующие строки опущены]</programlisting> + + <para>Другими возможными значениями для <literal>passwd_format</literal> + являются <literal>blf</literal> и <literal>md5</literal> (для паролей, + шифруемых по стандартам Blowfish и MD5 соответственно).</para> + + <para>Если вы внесли изменения в файл + <filename>/etc/login.conf</filename>, то вам также нужно перестроить + базу данных параметров входа в систему, что достигается запуском + следующей команды пользователем <username>root</username>:</para> + + <screen>&prompt.root; <userinput>cap_mkdb /etc/login.conf</userinput></screen> + + <note> + <para>Формат паролей, которые уже находятся в файле + <filename>/etc/master.passwd</filename>, не будет изменён до тех пор, + пока пользователь не сменит свой пароль <emphasis>после</emphasis> + перестроения базы данных параметров входа в систему.</para> + </note> + + <para>После этого, чтобы удостовериться в том, что пароли зашифрованы + в том формате, который выбран вами, нужно проверить, что строка + <literal>crypt_default</literal> в <filename>/etc/auth.conf</filename> + указывает предпочтение выбранного вами формата паролей. Для этого + поместите выбранный формат первым в списке. Например, при + использовании DES-шифрования паролей строка будет выглядеть так:</para> + + <programlisting>crypt_default = des blf md5</programlisting> + + <para>Выполнив вышеперечисленные шаги на каждом из серверов и клиентов + NIS, работающих на FreeBSD, вы можете обеспечить их согласованность + относительно используемого в вашей сети формата паролей. Если у вас + возникли проблемы с аутентификацией клиента NIS, начать + её решать определённо стоит отсюда. Запомните: если вы хотите использовать сервер NIS в гетерогенной сети, вам, наверное, нужно будет использовать DES на всех системах в силу того, что это минимальный общий стандарт.</para> </sect2> </sect1> -<sect1 id="dhcp"> - <title>DHCP</title> + <sect1 id="network-dhcp"> + <sect1info> + <authorgroup> + <author> + <firstname>Greg</firstname> + <surname>Sutter</surname> + <contrib>Текст написал</contrib> + </author> + </authorgroup> + </sect1info> - <para><emphasis>Текст написал &a.gsutter;, март 2000.</emphasis></para> + <title>DHCP</title> <sect2> <title>Что такое DHCP?</title> + <indexterm> + <primary>Dynamic Host Configuration Protocol</primary> + <see>DHCP</see> + </indexterm> + <indexterm> + <primary>Internet Software Consortium (ISC)</primary> + </indexterm> <para>DHCP, или Dynamic Host Configuration Protocol (Протокол Динамической Конфигурации Хостов), описывает порядок, по которому @@ -2714,25 +4753,30 @@ lrwxr-xr-x 1 root wheel 14 Nov 8 14:27 /usr/lib/libscrypt.so@ -> libscryp <sect2> <title>Что описывается в этом разделе</title> - <para>В этом разделе Руководства делается попытка описать только те части - системы DHCP, которые интегрированы с FreeBSD; таким образом, серверная - часть не описывается. Справочные страницы по DHCP, кроме ссылок, - дающихся ниже, будут вам весьма полезны.</para> + <para>В этом разделе описываются компоненты системы ISC DHCP как со стороны + клиента, так и со стороны сервера. Программа, работающая на клиентской + стороне, <command>dhclient</command>, интегрирована в поставку FreeBSD, + а серверная часть доступна в виде порта + <filename role="package">net/isc-dhcp3</filename>. Кроме ссылок ниже, + много полезной информации находится на страницах справочной системы, + описывающих &man.dhclient.8;, &man.dhcp-options.5; и + &man.dhclient.conf.5;.</para> </sect2> <sect2> <title>Как это работает</title> - <para>Когда на клиентской машине выполняется программа dhclient, - являющаяся клиентом DHCP, она начинает широковещательную рассылку - запросов на получение настроечной информации. По умолчанию эти запросы - делаются на 68 порт UDP. Сервер отвечает на UDP 67, выдавая клиенту - адрес IP и другую необходимую информацию, такую, как сетевую маску, - маршрутизатор и серверы DNS. Вся эта информация дается в форме - "аренды" DHCP и верна только определенное время (что настраивается - администратором сервера DHCP). При таком подходе устаревшие адреса IP - тех клиентов, которые больше не подключены к сети, могут быть - автоматически использоваться повторно.</para> + <indexterm><primary>UDP</primary></indexterm> + <para>Когда на клиентской машине выполняется программа + <command>dhclient</command>, являющаяся клиентом DHCP, она начинает + широковещательную рассылку запросов на получение настроечной информации. + По умолчанию эти запросы делаются на 68 порт UDP. Сервер отвечает на UDP + 67, выдавая клиенту адрес IP и другую необходимую информацию, такую, как + сетевую маску, маршрутизатор и серверы DNS. Вся эта информация даётся в + форме <quote>аренды</quote> DHCP и верна только определенное время (что + настраивается администратором сервера DHCP). При таком подходе + устаревшие адреса IP тех клиентов, которые больше не подключены к сети, + могут автоматически использоваться повторно.</para> <para>Клиенты DHCP могут получить от сервера очень много информации. Подробный список находится в странице Справочника @@ -2749,17 +4793,25 @@ lrwxr-xr-x 1 root wheel 14 Nov 8 14:27 /usr/lib/libscrypt.so@ -> libscryp DHCP. Утилита <command>dhclient</command> включена во все версии FreeBSD, начиная с 3.2.</para> + <indexterm> + <primary><application>sysinstall</application></primary> + </indexterm> <para>DHCP поддерживается утилитой <application>sysinstall</application>. При настройке сетевого интерфейса из программы sysinstall первый - вопрос, который вам задается, это "Do you want to try dhcp - configuration of this interface?" ("Хотите ли вы попробовать настроить - этот интерфейс через dhcp?"). Утвердительный ответ приведёт к запуску - программы dhclient, и при удачном его выполнении к автоматическому - заданию информации для настройки интерфейса.</para> + вопрос, который вам задается, это <quote>Do you want to try DHCP + configuration of this interface?</quote> (<quote>Хотите ли вы попробовать + настроить этот интерфейс через DHCP?</quote>). Утвердительный ответ + приведёт к запуску программы <command>dhclient</command>, и при удачном + его выполнении к автоматическому заданию информации для настройки + интерфейса.</para> <para>Есть две вещи, которые вы должны сделать для того, чтобы ваша система использовала DHCP при загрузке:</para> + <indexterm> + <primary>DHCP</primary> + <secondary>требования</secondary> + </indexterm> <itemizedlist> <listitem> <para>Убедитесь, что устройство <devicename>bpf</devicename> @@ -2779,11 +4831,12 @@ lrwxr-xr-x 1 root wheel 14 Nov 8 14:27 /usr/lib/libscrypt.so@ -> libscryp устройство <devicename>bpf</devicename> является также тем самым устройством, которое позволяет работать программам-снифферам пакетов (хотя для этого они должны быть запущены пользователем - root). Наличие устройства <devicename>bpf</devicename> - <emphasis>необходимо</emphasis> для использования DHCP, но если - вы чересчур беспокоитесь о безопасности, то вам нельзя добавлять - устройство <devicename>bpf</devicename> в ядро для того, чтобы - в будущем использовать DHCP.</para> + <username>root</username>). Наличие устройства + <devicename>bpf</devicename> <emphasis>необходимо</emphasis> для + использования DHCP, но если вы чересчур беспокоитесь о + безопасности, то вам нельзя добавлять устройство + <devicename>bpf</devicename> в ядро только для того, чтобы + в неопределённом будущем использовать DHCP.</para> </note> </listitem> @@ -2791,15 +4844,14 @@ lrwxr-xr-x 1 root wheel 14 Nov 8 14:27 /usr/lib/libscrypt.so@ -> libscryp <para>Отредактируйте ваш файл <filename>/etc/rc.conf</filename>, включив в него следующее:</para> - <programlisting> -ifconfig_fxp0="DHCP" - </programlisting> + <programlisting>ifconfig_fxp0="DHCP"</programlisting> </listitem> </itemizedlist> <note> - <para>Обязательно замените <literal>fxp0</literal> именем интерфейса, - который вы хотите настроить динамически.</para> + <para>Обязательно замените <literal>fxp0</literal> на имя интерфейса, + который вы хотите настраивать динамически, как это описано в <xref + linkend="config-network-setup">.</para> </note> <para>Если <command>dhclient</command> в вашей системе находится в другом @@ -2807,20 +4859,26 @@ ifconfig_fxp0="DHCP" <command>dhclient</command>, то также укажите следующее (изменив так, как вам нужно):</para> - <programlisting> -dhcp_program="/sbin/dhclient" -dhcp_flags="" - </programlisting> - - <para>Сервер DHCP, <command>dhcpd</command>, включен как часть порта - <literal>isc-dhcp2</literal> в коллекции портов. Этот порт содержит - полный дистрибутив ISC DHCP, состоящий из клиента, сервера, агент - для перенаправления запросов и документация.</para> + <programlisting>dhcp_program="/sbin/dhclient" +dhcp_flags=""</programlisting> + + <indexterm> + <primary>DHCP</primary> + <secondary>сервер</secondary> + </indexterm> + <para>Сервер DHCP, <command>dhcpd</command>, включён как часть порта + <filename role="package">net/isc-dhcp3</filename> в коллекцию портов. + Этот порт содержит полный дистрибутив ISC DHCP, состоящий из клиента, + сервера, агента для перенаправления запросов и документации.</para> </sect2> <sect2> <title>Файлы</title> + <indexterm> + <primary>DHCP</primary> + <secondary>конфигурационные файлы</secondary> + </indexterm> <itemizedlist> <listitem> <para><filename>/etc/dhclient.conf</filename></para> @@ -2828,8 +4886,8 @@ dhcp_flags="" <para><command>dhclient</command> требует наличия конфигурационного файла, <filename>/etc/dhclient.conf</filename>. Как правило, файл содержит только комментарии, а настройки по умолчанию достаточно - хороши. Этот настроечный файл описан в странице Справочника - &man.dhclient.conf.5;.</para> + хороши. Этот настроечный файл описан на страницах справочной + системы по &man.dhclient.conf.5;.</para> </listitem> <listitem> @@ -2861,16 +4919,2842 @@ dhcp_flags="" </itemizedlist> </sect2> - <sect2> - <title>Дополнительная литература</title> + <sect2> + <title>Дополнительная литература</title> + + <para>Полное описание протокола DHCP дается в <ulink + url="http://www.freesoft.org/CIE/RFC/2131/">RFC 2131</ulink>. Кроме + того, дополнительная информация есть на сервере <ulink + url="http://www.dhcp.org/">dhcp.org</ulink>.</para> + </sect2> + + <sect2 id="network-dhcp-server"> + <title>Установка и настройка сервера DHCP</title> + + <sect3> + <title>Чему посвящён этот раздел</title> + + <para>Этот раздел даёт информацию о том, как настроить систему + FreeBSD для работы в качестве сервера DHCP на основе реализации + пакета DHCP от ISC (Internet Software Consortium).</para> + + <para>Серверная часть пакета не поставляется как часть FreeBSD, так + что вам потребуется установить порт + <filename role="package">net/isc-dhcp3</filename> для получения + этого сервиса. Обратитесь к <xref linkend="ports"> для получения + более полной информации об использовании коллекции портов.</para> + </sect3> + + <sect3> + <title>Установка сервера DHCP</title> + + <indexterm> + <primary>DHCP</primary> + <secondary>установка</secondary> + </indexterm> + + <para>Для того, чтобы настроить систему FreeBSD на работу в качестве + сервера DHCP, вам необходимо обеспечить присутствие устройства + &man.bpf.4;, вкомпилированного в ядро. Для этого + добавьте строку <literal>pseudo-device bpf</literal> в файл + конфигурации вашего ядра. Для получения более полной информации о + построении ядер, обратитесь к <xref linkend="kernelconfig">.</para> + + <para>Устройство <devicename>bpf</devicename> уже входит в состав + ядра <filename>GENERIC</filename>, поставляемого с FreeBSD, так что + вам не нужно создавать собственное ядро для обеспечения работы + DHCP.</para> + + <note> + <para>Те, кто обращает особое внимание на вопросы безопасности, + должны заметить, что <devicename>bpf</devicename> является тем + устройством, что позволяет нормально работать снифферам пакетов + (хотя таким программам требуются привилегированный доступ). + Наличие устройства <devicename>bpf</devicename> + <emphasis>обязательно</emphasis> для использования DHCP, но если + вы очень обеспокоены безопасностью, наверное, вам не нужно + включать <devicename>bpf</devicename> в ваше ядро только потому, + что в отдалённом будущем вы собираетесь использовать DHCP.</para> + </note> + + <para>Следующим действием, которое вам нужно выполнить, является + редактирование примерного <filename>dhcpd.conf</filename>, который + устанавливается в составе порта <filename + role="package">net/isc-dhcp3</filename>. По умолчанию это файл + <filename>/usr/local/etc/dhcpd.conf.sample</filename>, и вы должны + скопировать его в <filename>/usr/local/etc/dhcpd.conf</filename> + перед тем, как его редактировать.</para> + </sect3> + + <sect3> + <title>Настройка сервера DHCP</title> + + <indexterm> + <primary>DHCP</primary> + <secondary>dhcpd.conf</secondary> + </indexterm> + + <para><filename>dhcpd.conf</filename> состоит из деклараций + относительно подсетей и хостов, и проще всего описывается на + примере:</para> + + <programlisting>option domain-name "example.com";<co id="domain-name"> +option domain-name-servers 192.168.4.100;<co id="domain-name-servers"> +option subnet-mask 255.255.255.0;<co id="subnet-mask"> + +default-lease-time 3600;<co id="default-lease-time"> +max-lease-time 86400;<co id="max-lease-time"> +ddns-update-style none;<co id="ddns-update-style"> + +subnet 192.168.4.0 netmask 255.255.255.0 { + range 192.168.4.129 192.168.4.254;<co id="range"> + option routers 192.168.4.1;<co id="routers"> +} + +host mailhost { + hardware ethernet 02:03:04:05:06:07;<co id="hardware"> + fixed-address mailhost.example.com;<co id="fixed-address"> +}</programlisting> + + <calloutlist> + <callout arearefs="domain-name"> + <para>Этот параметр задаёт домен, который будет выдаваться + клиентам в качестве домена, используемого по умолчанию при + поиске. Обратитесь к страницам справочной системы по + &man.resolv.conf.5; для получения дополнительной информации о + том, что это значит.</para> + </callout> + + <callout arearefs="domain-name-servers"> + <para>Этот параметр задаёт список разделённых запятыми серверов + DNS, которые должен использовать клиент.</para> + </callout> + + <callout arearefs="subnet-mask"> + <para>Маска сети, которая будет выдаваться клиентам.</para> + </callout> + + <callout arearefs="default-lease-time"> + <para>Клиент может запросить определённое время, которое будет + действовать выданная информация. В противном случае сервер + выдаст настройки с этим сроком (в секундах).</para> + </callout> + + <callout arearefs="max-lease-time"> + <para>Это максимальное время, на которое сервер будет выдавать + конфигурацию. Если клиент запросит больший срок, он будет + подтверждён, но будет действовать только + <literal>max-lease-time</literal> секунд.</para> + </callout> + + <callout arearefs="ddns-update-style"> + <para>Этот параметр задаёт, будет ли сервер DHCP пытаться + обновить DNS при выдаче или освобождении конфигурационной + информации. В реализации ISC этот параметр является + <emphasis>обязательным</emphasis>.</para> + </callout> + + <callout arearefs="range"> + <para>Это определение того, какие IP-адреса должны использоваться + в качестве резерва для выдачи клиентам. IP-адреса между и + включая границы, будут выдаваться клиентам.</para> + </callout> + + <callout arearefs="routers"> + <para>Объявление маршрутизатора, используемого по умолчанию, + который будет выдаваться клиентам.</para> + </callout> + + <callout arearefs="hardware"> + <para>Аппаратный MAC-адрес хоста (чтобы сервер DHCP мог + распознать хост, когда тот делает запрос).</para> + </callout> + + <callout arearefs="fixed-address"> + <para>Определение того, что хосту всегда будет выдаваться один и + тот же IP-адрес. Заметьте, что указание здесь имени хоста + корректно, так как сервер DHCP будет разрешать имя хоста + самостоятельно до того, как выдать конфигурационную + информацию.</para> + </callout> + </calloutlist> + + <para>Как только вы закончите составлять свой + <filename>dhcpd.conf</filename>, вы можете продолжить работу + запуском сервера при помощи следующей команды:</para> + + <screen>&prompt.root; <userinput>/usr/local/etc/rc.d/isc-dhcpd.sh start</userinput></screen> + + <para>Если в будущем вам понадобится сделать изменения в настройке + вашего сервера, то важно заметить, что посылка сигнала + <literal>SIGHUP</literal> приложению + <application>dhcpd</application> <emphasis>не приведёт</emphasis> к + перезагрузке настроек, как это бывает для большинства даемонов. + Вам нужно послать сигнал <literal>SIGTERM</literal> для остановки + процесса, а затем перезапустить его при помощи вышеприведённой + команды.</para> + </sect3> + + <sect3> + <title>Файлы</title> + + <indexterm> + <primary>DHCP</primary> + <secondary>конфигурационный файлы</secondary> + </indexterm> + + <itemizedlist> + <listitem> + <para><filename>/usr/local/sbin/dhcpd</filename></para> + + <para><application>dhcpd</application> скомпонован статически и + расположен в каталоге <filename>/usr/local/sbin</filename>. + Страницы справочной системы &man.dhcpd.8;, + устанавливаемые портом, содержат более полную информацию о + <application>dhcpd</application>.</para> + </listitem> + + <listitem> + <para><filename>/usr/local/etc/dhcpd.conf</filename></para> + + <para><application>dhcpd</application> требует наличия + конфигурационного файла, + <filename>/usr/local/etc/dhcpd.conf</filename>, до того, как + он будет запущен и начнёт предоставлять сервис клиентам. + Необходимо, чтобы этот файл содержал все данные, которая + будет выдаваться обслуживаемым клиентам, а также информацию о + работе сервера. Этот конфигурационный файл описывается на + страницах справочной системы &man.dhcpd.conf.5;, которые + устанавливаются портом.</para> + </listitem> + + <listitem> + <para><filename>/var/db/dhcpd.leases</filename></para> + + <para>Сервер DHCP ведёт базу данных выданной информации в этом + файле, который записывается в виде протокола. Страницы + справочной системы &man.dhcpd.leases.5;, устанавливаемые портом, + дают гораздо более подробное описание.</para> + </listitem> + + <listitem> + <para><filename>/usr/local/sbin/dhcrelay</filename></para> + + <para><application>dhcrelay</application> используется в сложных + ситуациях, когда сервер DHCP пересылает запросы от клиента + другому серверу DHCP в отдельной сети. На страницах + справочной системы &man.dhcrelay.8;, которые устанавливаются + портом, даётся более полное описание.</para> + </listitem> + </itemizedlist> + </sect3> + </sect2> + </sect1> + + <sect1 id="network-dns"> + <sect1info> + <authorgroup> + <author> + <firstname>Chern</firstname> + <surname>Lee</surname> + <contrib>Текст предоставил</contrib> + </author> + </authorgroup> + </sect1info> + + <title>DNS</title> + + <sect2> + <title>Обзор</title> + + <indexterm><primary>BIND</primary></indexterm> + <para>По умолчанию во FreeBSD используется одна из версий программы BIND + (Berkeley Internet Name Domain), являющейся самой распространенной + реализацией протокола DNS. DNS - это протокол, при помощи которого + имена преобразуются в IP-адреса и наоборот. Например, в ответ на + запрос о <hostid>www.FreeBSD.org</hostid> будет получен IP-адрес + веб-сервера Проекта FreeBSD, а запрос о + <hostid>ftp.FreeBSD.org</hostid> возвратит IP-адрес соответствующей + машины с FTP-сервером. Точно также происходит и обратный процесс. + Запрос, содержащий IP-адрес машины, возвратит имя хоста. Для + выполнения запросов к DNS вовсе не обязательно иметь в системе + работающий сервер имён.</para> + + <indexterm><primary>DNS</primary></indexterm> + <para>В сети Интернет DNS управляется через достаточно сложную систему + авторизированных корневых серверов имён, и других менее крупных + серверов имён, которые содержат и кэшируют информацию о конкретных + доменах.</para> + + <para>В этом документа рассматривается BIND 8.x, так как это стабильная + версия, используемая во FreeBSD. BIND 9.x может быть установлен как + порт <filename role="package">net/bind9</filename>.</para> + + <para>Протокол DNS стандартизован в RFC1034 и RFC1035.</para> + + <para>На данный момент пакет BIND поддерживается <ulink + url="http://www.isc.org/">Internet Software Consortium + (www.isc.org)</ulink>.</para> + </sect2> + + <sect2> + <title>Используемая терминология</title> + + <para>Для понимания этого документа нужно понимать значения некоторых + терминов, связанных с работой DNS.</para> + + <informaltable frame="none"> + <tgroup cols="2"> + <thead> + <row> + <entry>Термин</entry> + <entry>Определение</entry> + </row> + </thead> + + <tbody> + <row> + <entry>Прямой запрос к DNS (forward DNS)</entry> + + <entry>Преобразование имён хостов в адреса IP</entry> + </row> + + <row> + <entry>Ориджин (origin)</entry> + + <entry>Обозначает домен, покрываемый конкретным файлом + зоны</entry> + </row> + + <row> + <entry><application>named</application>, bind, сервер + имён</entry> + + <entry>Общеупотребительные названия для обозначения пакета BIND, + обеспечивающего работу сервера имён во FreeBSD.</entry> + </row> + + <indexterm><primary>ресолвер</primary></indexterm> + + <row> + <entry>Ресолвер</entry> + + <entry>Системный процесс, посредством которого машина обращается + к серверу имён для получения информации о зоне</entry> + </row> + + <indexterm><primary>обратный DNS</primary></indexterm> + + <row> + <entry>Обратный DNS (reverse DNS)</entry> + + <entry>Операция, обратная прямому запросу к DNS; преобразование + адресов IP в имена хостов</entry> + </row> + + <indexterm><primary>корневая зона</primary></indexterm> + + <row> + <entry>Корневая зона</entry> + + <entry>Начало иерархии зон Интернет. Все зоны находятся под + корневой зоной, подобно тому, как все файлы располагаются ниже + корневого каталога.</entry> + </row> + + <row> + <entry>Зона</entry> - <para>Полное описание протокола DHCP дается в <ulink - url="http://www.freesoft.org/CIE/RFC/2131/">RFC 2131</ulink>. Кроме - того, дополнительная информация есть на сервере <ulink - url="http://www.dhcp.org/">dhcp.org</ulink>.</para> + <entry>Отдельный домен, поддомен или часть DNS, управляемая + одним сервером.</entry> + </row> + </tbody> + </tgroup> + </informaltable> + + <indexterm> + <primary>зоны</primary> + <secondary>примеры</secondary> + </indexterm> + + <para>Примеры зон:</para> + + <itemizedlist> + <listitem> + <para><hostid>.</hostid> является корневой зоной</para> + </listitem> + + <listitem> + <para><hostid>org.</hostid> является зоной ниже корневой зоны</para> + </listitem> + + <listitem> + <para><hostid>example.org</hostid> является зоной под зоной + <hostid>org.</hostid></para> + </listitem> + + <listitem> + <para><hostid>foo.example.org.</hostid> является поддоменом, + зоной под зоной <hostid>example.org.</hostid></para> + </listitem> + + <listitem> + <para><hostid>1.2.3.in-addr.arpa</hostid> является зоной, в которую + включены все IP-адреса, формирующие пространство адресов + 3.2.1.*.</para> + </listitem> + </itemizedlist> + + <para>Как можно видеть, уточняющая часть имени хоста появляется слева. + Например, <hostid>example.org.</hostid> более точен, чем + <hostid>org.</hostid>, также, как <hostid>org.</hostid> более + точен, чем корневая зона. Расположение каждой части имени хоста сильно + похоже на файловую систему: каталог <filename>/dev</filename> + расположен в корневой файловой системе, и так далее.</para> + </sect2> + + <sect2> + <title>Причины, по которым вам может понадобиться сервер имён</title> + + <para>Сервера имён обычно используются в двух видах: авторитетный сервер + имён и кэширующий сервер имён.</para> + + <para>Авторитетный сервер имён нужен, когда:</para> + + <itemizedlist> + <listitem> + <para>нужно предоставлять информацию о DNS остальному миру, отвечая + на запросы авторизированно.</para> + </listitem> + + <listitem> + <para>зарегистрирован домен, такой, как + <hostid>example.org</hostid> и в этом домене требуется + поставить имена машин в соответствие с их адресами IP.</para> + </listitem> + + <listitem> + <para>блоку адресов IP требуется обратные записи DNS (IP в имена + хостов).</para> + </listitem> + + <listitem> + <para>резервный (slave) сервер имён должен отвечать на запросы о + домене, когда основной не работает или не доступен.</para> + </listitem> + </itemizedlist> + + <para>Кэширующий сервер имён нужен, когда:</para> + + <itemizedlist> + <listitem> + <para>локальный сервер DNS может кэшировать информацию и отвечать на + запросы быстрее, чем это происходит при прямом опросе внешнего + сервера имён.</para> + </listitem> + + <listitem> + <para>требуется уменьшение общего сетевого трафика (DNS + составляет около 5% всего трафика Интернет, или чуть + больше).</para> + </listitem> + </itemizedlist> + + <para>Например, когда кто-нибудь запрашивает информацию о + <hostid>www.FreeBSD.org</hostid>, то обычно ресолвер обращается к + серверу имён вашего провайдера, посылает запрос и ожидает ответа. С + локальным кэширующим сервером DNS запрос во внешний мир будет делаться + всего один раз. Каждый дополнительный запрос не будет посылаться за + пределы локальной сети, потому что информация уже имеется в + кэше.</para> + </sect2> + + <sect2> + <title>Как это работает</title> + + <para>Во FreeBSD даемон BIND, по очевидным причинам, называется + <application>named</application>.</para> + + <informaltable frame="none"> + <tgroup cols="2"> + <thead> + <row> + <entry>Файл</entry> + <entry>Описание</entry> + </row> + </thead> + + <tbody> + <row> + <entry><application>named</application></entry> + <entry>даемон BIND</entry> + </row> + + <row> + <entry><command>ndc</command></entry> + <entry>программа управления даемоном сервера имён</entry> + </row> + + <row> + <entry><filename>/etc/namedb</filename></entry> + <entry>каталог, в котором располагается вся информация о зонах + BIND</entry> + </row> + + <row> + <entry><filename>/etc/namedb/named.conf</filename></entry> + <entry>конфигурационный файл для даемона</entry> + </row> + </tbody> + </tgroup> + </informaltable> + + <para>Файлы зон обычно располагаются в каталоге + <filename>/etc/namedb</filename> и содержат информацию о зоне DNS, + за которую отвечает сервер имён.</para> + </sect2> + + <sect2> + <title>Запуск BIND</title> + + <indexterm> + <primary>BIND</primary> + <secondary>запуск</secondary> + </indexterm> + <para>Так как сервер имён BIND устанавливается по умолчанию, его + настройка сравнительно проста.</para> + + <para>Чтобы даемон named запускался во время загрузки, сделайте следующие + изменения в файле <filename>/etc/rc.conf</filename></para> + + <programlisting>named_enable="YES"</programlisting> + + <para>Для запуска даемона вручную (после его настройки)</para> + + <screen>&prompt.root; <userinput>ndc start</userinput></screen> + </sect2> + + <sect2> + <title>Конфигурационные файлы</title> + + <indexterm> + <primary>BIND</primary> + <secondary>конфигурационные файлы</secondary> + </indexterm> + + <sect3> + <title>Использование <command>make-localhost</command></title> + + <para>Обязательно выполните следующие команды:</para> + + <screen>&prompt.root; <userinput>cd /etc/namedb +&prompt.root; sh make-localhost</userinput></screen> + + <para>для того, чтобы правильно создать файл + <filename>/etc/namedb/localhost.rev</filename> локальной обратной + зоны для loopback-интерфейса.</para> + </sect3> + + <sect3> + <title><filename>/etc/namedb/named.conf</filename></title> + + <programlisting>// $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; + }; +*/</programlisting> + + <para>Как и говорится в комментариях, если вы хотите получить эффект от + использования кэша провайдера, то можно включить раздел + <literal>forwarders</literal>. В обычном случае сервер имён будет + рекурсивно опрашивать определённые серверы имён Интернет до тех пор, + пока не получит ответ на свой запрос. При включении этого раздела + он будет автоматически опрашивать сервер имён вашего провайдера (или + тот, который здесь указан), используя преимущества его кэша. + наличия нужной информации. Если соответствующий сервер имён провайдера + работает быстро и имеет хороший канал связи, то в результате такой + настройки вы можете получить хороший результат. + + <warning> + <para><hostid role="ipaddr">127.0.0.1</hostid> здесь + работать <emphasis>не будет</emphasis>. Измените + его на IP-адрес сервера имён провайдера.</para> + </warning> + + <programlisting>/* + * 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</programlisting> + + <para>Дополнительная информация о запуске BIND в ограниченном окружении + находится в <link linkend="network-named-sandbox">соответствующем + разделе</link>.</para> + + <programlisting>/* +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; + }; +}; +*/</programlisting> + + <para>Это примеры описаний прямой и обратной зон из файла + <filename>named.conf</filename> для вторичных серверов.</para> + + <para>Для каждого новой зоны, которую будет обслуживать сервер имён, + в файл <filename>named.conf</filename> должна быть добавлена + запись</para> + + <para>К примеру, самая простая запись для домена <hostid + role="domainname">example.org</hostid> может выглядеть вот так:</para> + + <programlisting>zone "example.org" { + type master; + file "example.org"; +};</programlisting> + + <para>Зона является первичной, что отражается в поле + <option>type</option>, и информация о зоне хранится в файле + <filename>/etc/namedb/example.org</filename>, что указывается в + поле <option>file</option>.</para> + + <programlisting>zone "example.org" { + type slave; + file "example.org"; +};</programlisting> + + <para>В случае вторичной зоны информация о ней передается с основного + сервера имён для заданной зоны и сохраняется в указанном файле. Если + и когда основной сервер имён выходит и строя или недосягаем, то + скачанная информация о зоне будет находиться на вторичных серверах и + они смогут обслуживать эту зону.</para> + </sect3> + + <sect3> + <title>Файлы зон</title> + + <para>Пример файла зоны <hostid>example.org</hostid> для основного + сервера (располагающийся в файле + <filename>/etc/namedb/example.org</filename>) имеет такой + вид:</para> + + <programlisting>$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.</programlisting> + + <para>Заметьте, что все имена хостов, оканчивающиеся на <quote>.</quote>, + задают полное имя, тогда как все имена без символа <quote>.</quote> на + конце считаются заданными относительно ориджина. Например, + <literal>www</literal> преобразуется в <literal>www + origin</literal>. + В нашем воображаемом файле ориджином является + <hostid>example.org.</hostid>, так что + <literal>www</literal> преобразуется в + <hostid>www.example.org.</hostid></para> + + <para>Файл зоны имеет следующий формат:</para> + + <programlisting>recordname IN recordtype value</programlisting> + + <indexterm> + <primary>DNS</primary> + <secondary>записи</secondary> + </indexterm> + <para>Наиболее часто используемые записи DNS:</para> + + <variablelist> + <varlistentry> + <term>SOA</term> + + <listitem> + <para>начало зоны ответственности</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>NS</term> + + <listitem> + <para>авторитативный сервер имен</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>A</term> + + <listitem> + <para>адрес хоста</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>CNAME</term> + + <listitem> + <para>каноническое имя для алиаса</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>MX</term> + + <listitem> + <para>обмен почтой</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>PTR</term> + + <listitem> + <para>указатель на доменное имя (используется в обратных + зонах DNS)</para> + </listitem> + </varlistentry> + </variablelist> + + <programlisting>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</programlisting> + + <variablelist> + <varlistentry> + <term><hostid>example.org.</hostid></term> + + <listitem> + <para>имя домена, а также ориджин для этого файла зоны.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><hostid>ns1.example.org.</hostid></term> + + <listitem> + <para>основной/авторитативный сервер имён для этой зоны</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><literal>admin.example.org.</literal></term> + + <listitem> + <para>человек, отвечающий за эту зону, адрес электронной почты с + подменённым символом @. (<email>admin@example.org</email> + становится <literal>admin.example.org</literal>)</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><literal>5</literal></term> + + <listitem> + <para>последовательный номер файла. При каждом изменении файла + зоны это число должно увеличиваться. В настоящее время для + нумерации многие администраторы предпочитают формат + <literal>ггггммддвв</literal>. 2001041002 будет означать, что + файл последний раз изменялся 10.04.2001, а последнее число 02 + означает, что это была вторая модификация файла за день. + Последовательный номер важен, так как он служит для того, чтобы + вторичные серверы узнавали об обновлении зоны.</para> + </listitem> + </varlistentry> + </variablelist> + + <programlisting>@ IN NS ns1.example.org.</programlisting> + + <para>Это <varname>NS</varname>-запись. Такие записи должны иметься для + всех серверов имён, которые будут отвечать за зону. Символ + <literal>@</literal>, используемый здесь, преобразуется в + <hostid role="domainname">example.org.</hostid> Этот + символ <literal>@</literal> соответствует ориджину.</para> + + <programlisting>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</programlisting> + + <para>Записи типа A служат для обозначения имён машин. Как это видно + выше, имя <hostid>ns1.example.org</hostid> будет преобразовано в + <hostid role="ipaddr">3.2.1.2</hostid>. И снова здесь используется + символ ориджина <literal>@</literal>, обозначая, что + <hostid>example.org</hostid> будет преобразовано в <hostid + role="ipaddr">3.2.1.30</hostid>.</para> + + <programlisting>www IN CNAME @</programlisting> + + <para>Записи с каноническими именами обычно используются для присвоения + машинам псевдонимов. В этом примере <hostid>www</hostid> является + псевдонимом для машины, соответствующей ориджину, то есть + <hostid>example.org</hostid> (<hostid role="ipaddr">3.2.1.30</hostid>). + Записи <varname>CNAME</varname> могут использоваться для присвоения + псевдонимов именам хостов или для использования одного имени + несколькими машинами по очереди.</para> + + <programlisting>@ IN MX 10 mail.example.org.</programlisting> + + <para><varname>MX</varname>-запись указывает, какие почтовые серверы + отвечают за обработку входящей электронной почты для зоны. <hostid + role="fqdn">mail.example.org</hostid> является именем почтового + сервера, а 10 обозначает приоритет этого почтового сервера.</para> + + <para>Можно иметь несколько почтовых серверов с приоритетами 3, 2 и 1. + Почтовый сервер, пытающийся доставить почту для <hostid + role="domainname">example.org</hostid>, + сначала попробует связаться с машиной, имеющий MX-запись с самым + большим приоритетом, затем с приоритетом поменьше и так далее, до тех + пор, пока почта не будет отправлена.</para> + + <para>Для файлов зон in-addr.arpa (обратные записи DNS) используется тот + же самый формат, отличающийся только использованием записей + <varname>PTR</varname> вместо <varname>A</varname> или + <varname>CNAME</varname>.</para> + + <programlisting>$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.</programlisting> + + <para>В этом файле дается полное соответствие имён хостов IP-адресам в + нашем описанном ранее вымышленном домене.</para> + </sect3> </sect2> -</sect1> + <sect2> + <title>Кэширующий сервер имён</title> + <indexterm> + <primary>BIND</primary> + <secondary>кэширующий сервер имён</secondary> + </indexterm> + + <para>Кэширующий сервер имён - это сервер имён, не отвечающий ни + за какую зону. Он просто выполняет запросы от своего имени и сохраняет + результаты для последующего использования. Для настройки такого + сервера достаточно исключить все описания зон из стандартной + конфигурации сервера имён.</para> + </sect2> + + <sect2 id="network-named-sandbox"> + <title>Запуск <application>named</application> в песочнице</title> + + <indexterm> + <primary>BIND</primary> + <secondary>работа в песочнице</secondary> + </indexterm> + + <indexterm> + <primary><command>chroot</command></primary> + </indexterm> + + <para>Для дополнительной безопасности вам может потребоваться запускать + &man.named.8; с правами непривилегированного пользователя и настроить + его на выполнение &man.chroot.8; в каталог-песочницу. Это позволит + сделать недоступным для даемона <application>named</application> все, + что расположено вне песочницы. Если <application>named</application> + будет взломан, то это поможет уменьшить возможный ущерб. По умолчанию + во FreeBSD имеются пользователь и группа с именами + <groupname>bind</groupname>, которые предназначены именно для такого + использования.</para> + + <note> + <para>Многие рекомендуют вместо настройки + <application>named</application> на использование + <command>chroot</command>, запускать <application>named</application> + внутри &man.jail.8;. В этом разделе такой подход не + рассматривается.</para> + </note> + + <para>Так как <application>named</application> не сможет обратиться ни к + чему вне песочницы (например, совместно используемым библиотекам, + сокетам протоколов и так далее), то нужно выполнить несколько шагов, + чтобы <application>named</application> смог работать нормально. В + следующем списке предполагается, что каталогом песочницы является + <filename>/etc/namedb</filename> и что вы не делали никаких изменений + в содержимом этого каталога. Выполните следующие шаги, работая как + пользователь <username>root</username>.</para> + + <itemizedlist> + <listitem> + <para>Создайте все каталоги, которые ожидает увидеть + <application>named</application>:</para> + + <screen>&prompt.root; <userinput>cd /etc/namedb</userinput> +&prompt.root; <userinput>mkdir -p bin dev etc var/tmp var/run master slave</userinput> +&prompt.root; <userinput>chown bind:bind slave var/*</userinput><co id="chown-slave"></screen> + + <calloutlist> + <callout arearefs="chown-slave"> + <para>Программе <application>named</application> нужен доступ с + правом записи в эти каталоги, так что это все, что мы ей + предоставим.</para> + </callout> + </calloutlist> + </listitem> + + <listitem> + <para>Измените и создайте базовые файлы зоны и настроек:</para> + + <screen>&prompt.root; <userinput>cp /etc/localtime etc</userinput><co id="localtime"> +&prompt.root; <userinput>mv named.conf etc && ln -sf etc/named.conf</userinput> +&prompt.root; <userinput>mv named.root master</userinput> +<!-- Следующее мне не нравится --> +&prompt.root; <userinput>sh make-localhost && mv localhost.rev localhost-v6.rev master</userinput> +&prompt.root; <userinput>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</userinput></screen> + + <calloutlist> + <callout arearefs="localtime"> + <para>Это позволит программе <application>named</application> + протоколировать правильное время в &man.syslogd.8;</para> + </callout> + </calloutlist> + </listitem> + + <listitem> + <para>Если вы используете &os; версии ранее 4.9-RELEASE, то постройте + статически скомпонованную копию + <application>named-xfer</application> и скопируйте её в + песочницу:</para> + + <screen>&prompt.root; <userinput>cd /usr/src/lib/libisc</userinput> +&prompt.root; <userinput>make cleandir && make cleandir && make depend && make all</userinput> +&prompt.root; <userinput>cd /usr/src/lib/libbind</userinput> +&prompt.root; <userinput>make cleandir && make cleandir && make depend && make all</userinput> +&prompt.root; <userinput>cd /usr/src/libexec/named-xfer</userinput> +&prompt.root; <userinput>make cleandir && make cleandir && make depend && make NOSHARED=yes all</userinput> +&prompt.root; <userinput>cp named-xfer /etc/namedb/bin && chmod 555 /etc/namedb/bin/named-xfer</userinput><co id="clean-cruft"></screen> + + <para>После установки статически скомпонованного + <command>named-xfer</command>, во избежание появления старых копий + библиотек и программ в дереве исходного кода, требуется некоторая + зачистка:</para> + + <screen>&prompt.root; <userinput>cd /usr/src/lib/libisc</userinput> +&prompt.root; <userinput>make cleandir</userinput> +&prompt.root; <userinput>cd /usr/src/lib/libbind</userinput> +&prompt.root; <userinput>make cleandir</userinput> +&prompt.root; <userinput>cd /usr/src/libexec/named-xfer</userinput> +&prompt.root; <userinput>make cleandir</userinput></screen> + + <calloutlist> + <callout arearefs="clean-cruft"> + <para>Иногда при выполнении этого шага возникают ошибки. Если + это случилось, выполните такую команду:</para> + + <screen>&prompt.root; <userinput>cd /usr/src && make cleandir && make cleandir</userinput></screen> + + <para>и удалите ваше дерево <filename>/usr/obj</filename>:</para> + + <screen>&prompt.root; <userinput>rm -fr /usr/obj && mkdir /usr/obj</userinput></screen> + + <para>При этом из вашего дерева исходных текстов будет удалён + весь <quote>мусор</quote>, и повторение вышеописанных шагов + должно выполниться успешно.</para> + </callout> + </calloutlist> + + <para>Если вы используете &os; 4.9-RELEASE или более позднюю версию, + то копия <command>named-xfer</command> в каталоге + <filename>/usr/libexec</filename> по умолчанию является статически + скомпонованной, и вы можете просто скопировать её в песочницу при + помощи команды &man.cp.1;.</para> + </listitem> + + <listitem> + <para>Создайте файл устройства <devicename>dev/null</devicename>, + который <application>named</application> может видеть и писать в + него:</para> + + <screen>&prompt.root; <userinput>cd /etc/namedb/dev && mknod null c 2 2</userinput> +&prompt.root; <userinput>chmod 666 null</userinput></screen> + </listitem> + + <listitem> + <para>Создайте символическую ссылку + <filename> /var/run/ndc</filename> на + <filename>/etc/namedb/var/run/ndc</filename>:</para> + + <screen>&prompt.root; <userinput>ln -sf /etc/namedb/var/run/ndc /var/run/ndc</userinput></screen> + + <note> + <para>Это просто для того, чтобы не задавать опцию + <option>-c</option> при каждом запуске &man.ndc.8;. Так как + содержимое каталога /var/run удаляется при загрузке, и если это + показалось вам полезным, то вы можете добавить эту команду + в cron-таблицу для root с использованием параметра + <option>@reboot</option>. Обратитесь к справочной странице по + &man.crontab.5; для получения более полной информации + относительно этого.</para> + </note> + </listitem> + + <listitem> + <para>Настройте &man.syslogd.8; на создание дополнительного + протоколирующего сокета <devicename>log</devicename>, в который + может писать <application>named</application>. Для этого добавьте + <literal>-l /etc/namedb/dev/log</literal> к переменной + <varname>syslogd_flags</varname> из файла + <filename>/etc/rc.conf</filename>.</para> + </listitem> + + <listitem> + <para>Задайте запуск <application>named</application> и выполнение + <command>chroot</command> в песочницу, добавив следующее в + <filename>/etc/rc.conf</filename>:</para> + + <programlisting>named_enable="YES" +named_flags="-u bind -g bind -t /etc/namedb /etc/named.conf"</programlisting> + + <note> + <para>Заметьте, что конфигурационный файл + <replaceable>/etc/named.conf</replaceable> именуется по полному + имени <emphasis>относительно песочницы</emphasis>, то есть в + вышеприведённой строке указывается файл, который на самом деле + является файлом + <filename>/etc/namedb/etc/named.conf</filename>.</para> + </note> + </listitem> + </itemizedlist> + + <para>Следующим шагом является редактирование файла + <filename>/etc/namedb/etc/named.conf</filename> так, чтобы + <application>named</application> знал, какую зону загружать и где найти + их на диске. Далее следует прокомментированный пример (все, что + специально не прокомментировано, ничем не отличается от настройки + сервера DNS, работающего не в песочнице):</para> + + <programlisting>options { + directory "/";<co id="directory"> + named-xfer "/bin/named-xfer";<co id="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";<co id="master"> + 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";<co id="slave"> +};</programlisting> + + <calloutlist> + <callout arearefs="directory"> + <para>В директиве <literal>directory</literal> указан каталог + <filename>/</filename>, так как все файлы, которые нужны для + <application>named</application>, находятся внутри этого каталога + (вспомните, что это равнозначно <quote>обычному</quote> + пользовательскому <filename>/etc/namedb</filename>.</para> + </callout> + + <callout arearefs="named-xfer"> + <para>Задает полный путь к двоичному выполнимому файлу + <command>named-xfer</command> (внутри границ видимости + <application>named</application>). Это необходимо, так как + <application>named</application> компилируется с тем, чтобы + брать <command>named-xfer</command> по умолчанию из + <filename>/usr/libexec</filename>.</para> + </callout> + + <callout arearefs="master"> + <para>Задает имя файла (относительно директивы + <literal>directory</literal> выше), в котором + <application>named</application> может найти файл зоны для этой + зоны.</para> + </callout> + + <callout arearefs="slave"> + <para>Задает имя файла (относительно директивы + <literal>directory</literal> выше), в котором + <application>named</application> должен записывать копию файла + зоны для этой зоны после успешной передачи ее с основного сервера. + Вот почему нам нужно изменить владельца каталога + <filename>slave</filename> на <groupname>bind</groupname> на этапах + настроек выше.</para> + </callout> + </calloutlist> + + <para>После выполнения шагов выше либо перезагрузите ваш сервер, либо + перезапустите &man.syslogd.8; и запустите &man.named.8;, не забыв + использовать новые опции, заданные в <varname>syslogd_flags</varname> и + <varname>named_flags</varname>. Теперь + <application>named</application> должен заработать в песочнице!</para> + </sect2> + + <sect2> + <title>Безопасность</title> + + <para>Хотя BIND является самой распространенной реализацией DNS, всегда + стоит вопрос об обеспечении безопасности. Время от времени + обнаруживаются возможные и реальные бреши в безопасности.</para> + + <para>Весьма полезно подписаться на списки рассылки <ulink + url="http://www.cert.org/">CERT</ulink> и <ulink + url="../handbook/eresources.html#ERESOURCES-MAIL"> + freebsd-security-notifications</ulink> для того, чтобы быть в курсе + текущих проблем с обеспечением безопасности Internet и FreeBSD.</para> + + <tip> + <para>Если возникают проблемы, то наличие последних исходных текстов и + свежеоткомпилированного named не помешает.</para> + </tip> + </sect2> + + <sect2> + <title>Дополнительная литература</title> + + <para>Справочная информация по BIND/named: &man.ndc.8; &man.named.8; и + &man.named.conf.5;</para> + + <itemizedlist> + <listitem> + <para><ulink url="http://www.isc.org/products/BIND/"> + Официальная страница ISC BIND</ulink></para> + </listitem> + + <listitem> + <para><ulink + url="http://www.nominum.com/getOpenSourceResource.php?id=6"> + FAQ по BIND</ulink></para> + </listitem> + + <listitem> + <para><ulink url="http://www.oreilly.com/catalog/dns4/"> + Книга издательства O'Reilly DNS and BIND 4th + Edition</ulink></para> + </listitem> + + <listitem> + <para><ulink + url="ftp://ftp.isi.edu/in-notes/rfc1034.txt">RFC1034 - Domain + Names - Concepts and Facilities</ulink></para> + </listitem> + + <listitem> + <para><ulink + url="ftp://ftp.isi.edu/in-notes/rfc1035.txt">RFC1035 - Domain + Names - Implementation and Specification</ulink></para> + </listitem> + </itemizedlist> + </sect2> + </sect1> + + <sect1 id="network-ntp"> + <sect1info> + <authorgroup> + <author> + <firstname>Tom</firstname> + <surname>Hukins</surname> + <contrib>Текст предоставил</contrib> + </author> + </authorgroup> + </sect1info> + + <title>NTP</title> + + <indexterm><primary>NTP</primary></indexterm> + + <sect2> + <title>Обзор</title> + + <para>С течением времени часы компьютера имеют тенденцию отставать. Со + временем они становятся все более неточными. NTP (Network Time + Protocol - Сетевой Протокол Времени) является одним из способов + вести точное время.</para> + + <para>Многие сервисы Интернет опираются или сильно зависят от точности + часов компьютеров. К примеру, веб-сервер может получать запрос на + посылку файла, который был недавно модифицирован. Такие службы, как + &man.cron.8;, запускают команды в определенное время. Если часы идут + неточно, то эти команды могут запуститься не тогда, когда это + ожидается.</para> + + <indexterm> + <primary>NTP</primary> + <secondary>ntpd</secondary> + </indexterm> + <para>FreeBSD поставляется с сервером NTP &man.ntpd.8;, который можно + использовать для опроса других серверов NTP для установки часов на + вашей машине или предоставления услуг точного времени.</para> + </sect2> + + <sect2> + <title>Выбор подходящих серверов NTP</title> + + <indexterm> + <primary>NTP</primary> + <secondary>выбор серверов</secondary> + </indexterm> + + <para>Для синхронизации ваших часов вам нужно найти для использования + один или большее количество серверов NTP. Ваш сетевой администратор + или провайдер могут иметь сервер NTP для этой цели—обратитесь к + ним, так ли это в вашем случае. Существует <ulink + url="http://www.eecis.udel.edu/~mills/ntp/servers.html">список + общедоступных серверов NTP</ulink>, которым можно воспользоваться для + поиска ближайшего к вам сервера NTP. Не забудьте выяснить политику + выбранного вами сервера и спросить разрешения, если это + требуется.</para> + + <para>Выбор нескольких несвязанных серверов NTP является хорошей идеей в + том случае, если один из используемых вами серверов станет недоступным + или его часы неточны. &man.ntpd.8; использует ответы, которые он + получает от других серверов с умом—он делает предпочтение + надежным серверам.</para> + </sect2> + + <sect2> + <title>Настройка вашей машины</title> + + <indexterm> + <primary>NTP</primary> + <secondary>настройка</secondary> + </indexterm> + + <sect3> + <title>Базовая конфигурация</title> + + <indexterm><primary>ntpdate</primary></indexterm> + + <para>Если вам нужно только синхронизировать ваши часы при загрузке + машины, вы можете воспользоваться утилитой &man.ntpdate.8;. Это + может подойти для некоторых настольных машин, которые часто + перезагружаются и только требуют изредка синхронизироваться, но + на большинстве машин должен работать &man.ntpd.8;.</para> + + <para>Использование &man.ntpdate.8; при загрузке также хорошо для + машин, на которых запущен даемон &man.ntpd.8;. Программа + &man.ntpd.8; изменяет время постепенно, тогда как &man.ntpdate.8; + устанавливает время вне + зависисмости от того, насколько велика разница между текущим временем + машины и точным временем.</para> + + <para>Для включения &man.ntpdate.8; во время загрузки, добавьте строчку + <literal>ntpdate_enable="YES"</literal> в файл + <filename>/etc/rc.conf</filename>. Вам также потребуется указать + все серверы, с которыми вы хотите синхронизироваться, и все + параметры, которые передаются в &man.ntpdate.8;, в + <varname>ntpdate_flags</varname>.</para> + </sect3> + + <sect3> + <indexterm> + <primary>NTP</primary> + + <secondary>ntp.conf</secondary> + </indexterm> + + <title>Общие настройки</title> + + <para>NTP настраивается в файле <filename>/etc/ntp.conf</filename>, + формат которого описан в &man.ntp.conf.5;. Вот простой + пример:</para> + + <programlisting>server ntplocal.example.com prefer +server timeserver.example.org +server ntp2a.example.net + +driftfile /var/db/ntp.drift</programlisting> + + <para>Параметр <literal>server</literal> задает, какие серверы будут + использоваться, по одному в каждой строке. Если сервер задан с + аргументом <literal>prefer</literal>, как <hostid + role="fqdn">ntplocal.example.com</hostid>, то этому серверу отдается + предпочтение перед остальными. Ответ от предпочтительного сервера + будет отброшен, если он значительно отличается от ответов других + серверов, в противном случае он будет использоваться безотносительно + к другим ответам. Аргумент <literal>prefer</literal> обычно + используется для серверов NTP, о которых известно, что они очень + точны, такими, на которых используется специальное оборудование + точного времени.</para> + + <para>Параметр <literal>driftfile</literal> задает файл, который + используется для хранения смещения частоты системных часов. + Программа &man.ntpd.8; использует его для автоматической компенсации + естественного смещения часов, позволяя ему поддерживать достаточно + правильную настройку, даже если он на некоторый период отключается от + внешнего источника информации о времени.</para> + + <para>Параметр <literal>driftfile</literal> задает, какой файл + используется для сохранения информации о предыдущих ответах от + серверов NTP, которые вы используете. Этот файл содержит внутреннюю + информацию для NTP. Он не должен изменяться никакими другими + процессами.</para> + </sect3> + + <sect3> + <title>Управление доступом к вашему серверу</title> + + <para>По умолчанию ваш сервер NTP будет доступен всем хостам в + Интернет. Параметр <literal>restrict</literal> в файле + <filename>/etc/ntp.conf</filename> позволяет вам контролировать, + какие машины могут обращаться к вашему серверу.</para> + + <para>Если вы хотите запретить всем машинам обращаться к вашему серверу + NTP, добавьте следующую строку в + файл <filename>/etc/ntp.conf</filename>:</para> + + <programlisting>restrict default ignore</programlisting> + + <para>Если вы хотите разрешить синхронизировать свои часы с вашим + сервером только машинам в вашей сети, но запретить им настраивать + сервер или быть равноправными участниками синхронизации времени, то + вместо указанной добавьте строчку</para> + + <programlisting>restrict 192.168.1.0 mask 255.255.255.0 notrust nomodify notrap</programlisting> + + <para>где <hostid role="ipaddr">192.168.1.0</hostid> является адресом + IP вашей сети, а <hostid role="netmask">255.255.255.0</hostid> её + сетевой маской.</para> + + <para><filename>/etc/ntp.conf</filename> может содержать несколько + директив <literal>restrict</literal>. Для получения подробной + информации обратитесь к подразделу <literal>Access Control + Support</literal> (Поддержка Управления Доступом) в + &man.ntp.conf.5;.</para> + </sect3> + </sect2> + + <sect2> + <title>Запуск сервера NTP</title> + + <para>Для того, чтобы сервер NTP запускался при загрузке, добавьте строку + <literal>xntpd_enable="YES"</literal> в файл + <filename>/etc/rc.conf</filename>. Если вы хотите передать + дополнительные опции в &man.ntpd.8;, то отредактируйте параметр + <varname>xntpd_flags</varname> в файле + <filename>/etc/rc.conf</filename>.</para> + + <para>Для запуска сервера без перезагрузки вашей машины, выполните + команду <command>ntpd</command>, не забыв задать дополнительные + параметры из переменной <varname>xntpd_flags</varname> в файле + <filename>/etc/rc.conf</filename>. К примеру:</para> + + <screen>&prompt.root; <userinput>ntpd -p /var/run/ntpd.pid</userinput></screen> + + <note> + <para>Во &os; 5.X различные параметры из + <filename>/etc/rc.conf</filename> были переименованы. В частности, + в списке параметров вам необходимо заменить каждую строчку + <literal>xntpd</literal> на <literal>ntpd</literal>.</para> + </note> + </sect2> + + <sect2> + <title>Использование ntpd с временным подключением к + Интернет</title> + + <para>Для нормальной работы программе &man.ntpd.8; не требуется + постоянное подключение к Интернет. Однако если ваше временное + подключение к Интернет настроено для дозвонки по требованию, хорошо бы + запретить трафику NTP вызывать дозвонку или поддерживать соединение + постоянно. Если вы используете пользовательский PPP, то можете + воспользоваться директивами <literal>filter</literal> в файле + <filename>/etc/ppp/ppp.conf</filename>. К примеру:</para> + + <programlisting> 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</programlisting> + + <para>Более подробную информацию можно найти в разделе <literal>PACKET + FILTERING</literal> (ФИЛЬТРАЦИЯ ПАКЕТОВ) в &man.ppp.8;, а примеры в + <filename>/usr/share/examples/ppp/</filename>.</para> + + <note> + <para>Некоторые провайдеры Интернет блокируют трафик по портам с + маленькими номерами, что приводит к неработоспособности NTP, так как + ответы никогда не достигают вашей машины.</para> + </note> + </sect2> + + <sect2> + <title>Дополнительная литература</title> + + <para>Документация по серверу NTP может быть найдена в каталоге + <filename>/usr/share/doc/ntp/</filename> в формате HTML.</para> + </sect2> + </sect1> + + <sect1 id="network-natd"> + <sect1info> + <authorgroup> + <author> + <firstname>Chern</firstname> + + <surname>Lee</surname> + + <contrib>Текст предоставил</contrib> + </author> + </authorgroup> + </sect1info> + + <title>Даемон преобразования сетевых адресов (natd)</title> + + <sect2 id="network-natoverview"> + <title>Обзор</title> + <indexterm> + <primary><application>natd</application></primary> + </indexterm> + + <para>Даемон преобразования сетевых адресов (Network Address + Translation) во FreeBSD, широко известный как &man.natd.8;, является + даемоном, который принимает входящие IP-пакеты, изменяет адрес + отправителя на адрес локальной машины и повторно отправляет эти пакеты + в потоке исхдящих пакетов. &man.natd.8; делает это, меняя IP-адрес + отправителя и порт таким образом, что когда данные принимаются + обратно, он может определить расположение источника начальных данных + и переслать их машине, которая запрашивала данные изначально.</para> + + <indexterm> + <primary>совместное использование доступа в Интернет</primary> + </indexterm> + <indexterm> + <primary>сокрытие IP</primary> + </indexterm> + <para>Чаще всего NAT используется для организации так называемого + Совместного Использования Интернет.</para> + </sect2> + + <sect2 id="network-natsetup"> + <title>Настройка</title> + + <para>Из-за исчерпания пространства адресов в IPv4 и увеличения + количества пользователей высокоскоростных каналов связи, таких, как + кабельное подключение или DSL, необходимость в решении по Совместному + Использованию Интернет растёт. Возможность подключить несколько + компьютеров через одинственное соединение и IP-адрес делает + &man.natd.8; подходящим решением.</para> + + <para>Чаще всего у пользователя имеется машина, подключенная к кабельному + каналу или каналу DSL с одним IP-адресом и есть желание использовать + этот единственный подключенный компьютер для организации доступа в + Интернет другим компьютерам в локальной сети.</para> + + <para>Для этого машина FreeBSD, находящаяся в Интернет, должна выступать + в роли шлюза. Эта шлюзовая машина должна иметь два сетевых + адаптера—один для подключения к маршрутизатору Интернет, а + другой для подключения к ЛВС. Все машины в локальной сети + подключаются через сетевой концентратор или коммутатор.</para> + + <mediaobject> + <imageobject> + <imagedata fileref="advanced-networking/natd"> + </imageobject> + + <textobject> + <literallayout class="monospaced"> _______ __________ ________ + | | | | | | + | Hub |-----| Client B |-----| Router |----- Internet + |_______| |__________| |________| + | + ____|_____ +| | +| Client A | +|__________|</literallayout> + </textobject> + + <textobject> + <phrase>Структура сети</phrase> + </textobject> + </mediaobject> + + <para>Подобная конфигурация часто используется для совместного + использования доступа в Интернет. Одна из подключенных к локальной + сети машин подключается к Интернет. Остальные машины работают с + Интернет посредством этой <quote>шлюзовой</quote> машины.</para> + </sect2> + + <sect2 id="network-natdkernconfiguration"> + <indexterm> + <primary>ядро</primary> + <secondary>настройка</secondary> + </indexterm> + <title>Настройка</title> + + <para>В файле конфигурации ядра должны присутствовать следующие + параметры:</para> + + <programlisting>options IPFIREWALL +options IPDIVERT</programlisting> + + <para>Дополнительно, если это нужно, можно добавить следующее:</para> + + <programlisting>options IPFIREWALL_DEFAULT_TO_ACCEPT +options IPFIREWALL_VERBOSE</programlisting> + + <para>В файле <filename>/etc/rc.conf</filename> должны быть такие + строки:</para> + + <programlisting>gateway_enable="YES" +firewall_enable="YES" +firewall_type="OPEN" +natd_enable="YES" +natd_interface="<replaceable>fxp0</replaceable>" +natd_flags=""</programlisting> + + <informaltable frame="none"> + <tgroup cols="2"> + <tbody> + <row> + <entry>gateway_enable="YES"</entry> + <entry>Указывает машине выступать в качестве шлюза. Выполнение + команды <command>sysctl net.inet.ip.forwarding=1</command> + приведёт к тому же самому результату.</entry> + </row> + + <row> + <entry>firewall_enable="YES"</entry> + <entry>При загрузке включает использование правил межсетевого + экрана из файла <filename>/etc/rc.firewall</filename>.</entry> + </row> + + <row> + <entry>firewall_type="OPEN"</entry> + <entry>Здесь задается предопределенный набор правил межсетевого + экрана, который разрешает все. Посмотрите файл + <filename>/etc/rc.firewall</filename> для нахождения + дополнительных типов.</entry> + </row> + + <row> + <entry>natd_interface="fxp0"</entry> + <entry>Указывает, через какой интерфейс передавать пакеты + (интерфейс, подключенный к Интернет).</entry> + </row> + + <row> + <entry>natd_flags=""</entry> + <entry>Любые дополнительный параметры, передаваемые при запуске + даемону &man.natd.8;.</entry> + </row> + </tbody> + </tgroup> + </informaltable> + + <para>При использовании вышеуказанных параметров в файле + <filename>/etc/rc.conf</filename> при загрузке будет запущена команда + <command>natd -interface fxp0</command>. Эту команду можно запустить и + вручную.</para> + + <para>Каждой машине и интерфейсу в ЛВС должен быть назначен IP-адрес из + адресного пространства частных сетей, как это определено в <ulink + url="ftp://ftp.isi.edu/in-notes/rfc1918.txt">RFC 1918</ulink>, а в + качестве маршрутизатора по умолчанию должен быть задан IP-адрес машины + с <application>natd</application> из внутренней сети.</para> + + <para>Например, клиенты <hostid>A</hostid> и <hostid>B</hostid> в ЛВС + имеют IP-адреса <hostid role="ipaddr">192.168.0.2</hostid> и <hostid + role="ipaddr">192.168.0.3</hostid>, а интерфейс машины с natd в + локальной сети имеет IP-адрес <hostid + role="ipaddr">192.168.0.1</hostid>. Маршрутизатором по умолчанию для + клиентов <hostid>A</hostid> и <hostid>B</hostid> должна быть назначена + машина с <application>natd</application>, то есть <hostid + role="ipaddr">192.168.0.1</hostid>. Внешний, или Интернет-интерфейс + машины с <application>natd</application> не требует особых + настроек для работы &man.natd.8;.</para> + </sect2> + + <sect2 id="network-natdport-redirection"> + <title>Перенаправление портов</title> + + <para>Минусом использования &man.natd.8; является то, что машины в + локальной сети + недоступны из Интернет. Клиенты в ЛВС могут выполнять исходящие + соединения во внешний мир, но не могут обслуживать входящие. Это + является проблемой при запуске служб Интернет на клиентских машинах в + локальной сети. Простым решением является перенаправление некоторых + портов Интернет машины с <application>natd</application> на клиента + локальной сети.</para> + + <para>Пусть, к примеру, сервер IRC запущен на клиенте <hostid>A</hostid>, + а веб-сервер работает на клиенте <hostid>B</hostid>. Чтобы это + работало, соединения, принимаемые на портах 6667 (IRC) и 80 (веб), + должны перенаправляться на соответствующие машины.</para> + + <para>Программе &man.natd.8; должна быть передана команда + <option>-redirect_port</option> с соответствующими параметрами. + Синтаксис следующий:</para> + + <programlisting> -redirect_port proto targetIP:targetPORT[-targetPORT] + [aliasIP:]aliasPORT[-aliasPORT] + [remoteIP[:remotePORT[-remotePORT]]]</programlisting> + + <para>В примере выше аргументы должен быть такими:</para> + + <programlisting> -redirect_port tcp 192.168.0.2:6667 6667 + -redirect_port tcp 192.168.0.3:80 80</programlisting> + + <para>При этом будут перенаправлены соответствующие порты + <emphasis>tcp</emphasis> на клиентские машины в локальной сети.</para> + + <para>Аргумент <option>-redirect_port</option> может использоваться для + указания диапазонов портов, а не конкретного порта. Например, + <replaceable>tcp 192.168.0.2:2000-3000 2000-3000</replaceable> будет + перенаправлять все соединения, принимаемые на портах от 2000 до 3000, + на порты от 2000 до 3000 клиента <hostid>A</hostid>.</para> + + <para>Эим параметры могут использоваться при непосредственном запуске + &man.natd.8; или их можно поместить в параметр + <literal>natd_flags=""</literal> из файла + <filename>/etc/rc.conf</filename>.</para> + + <para>Для получение информации о других параметрах настройки обратитесь + к справочной странице по &man.natd.8;</para> + </sect2> + + <sect2 id="network-natdaddress-redirection"> + <title>Перенаправление адреса</title> + <indexterm><primary>перенаправление адреса</primary></indexterm> + + <para>Перенаправление адреса полезно, если имеется несколько адресов IP, + и они должны быть на одной машине. В этой ситуации &man.natd.8; может + назначить каждому клиенту ЛВС свой собственный внешний IP-адрес. Затем + &man.natd.8; преобразует исходящие от клиентов локальной сети пакеты, + заменяя IP-адреса на соответствующие внешние, и перенаправляет весь + трафик, входящий на некоторый IP-адрес, обратно конкретному клиенту + локальной сети. Это также называют статическим NAT. К примеру, пусть + IP-адреса <hostid role="ipaddr">128.1.1.1</hostid>, <hostid + role="ipaddr">128.1.1.2</hostid> и <hostid + role="ipaddr">128.1.1.3</hostid> принадлежат шлюзовой машине + <application>natd</application>. <hostid + role="ipaddr">128.1.1.1</hostid> может использоваться в качестве + внешнего IP-адреса шлюзовой машины <application>natd</application>, + тогда как <hostid role="ipaddr">128.1.1.2</hostid> и <hostid + role="ipaddr">128.1.1.3</hostid> будут перенаправляться обратно + к клиентам ЛВС <hostid>A</hostid> и <hostid>B</hostid>.</para> + + <para>Синтаксис для <option>-redirect_address</option> таков:</para> + + <programlisting>-redirect_address localIP publicIP</programlisting> + + <informaltable frame="none"> + <tgroup cols="2"> + <tbody> + <row> + <entry>localIP</entry> + <entry>Внутренний IP-адрес клиента локальной сети.</entry> + </row> + + <row> + <entry>publicIP</entry> + <entry>Внешний IP, соответствующий клиенту локальной сети.</entry> + </row> + </tbody> + </tgroup> + </informaltable> + + <para>В примере этот аргумент будет выглядеть так:</para> + + <programlisting>-redirect_address 192.168.0.2 128.1.1.2 +-redirect_address 192.168.0.3 128.1.1.3</programlisting> + + <para>Как и для <option>-redirect_port</option>, эти аргументы также + помещаются в строку <literal>natd_flags=""</literal> файла + <filename>/etc/rc.conf</filename>. При + перенаправлении адресов нет нужды в перенаправлении портов, потому что + перенаправляются все данные, принимаемые для конкретного + IP-адреса.</para> + + <para>Внешние IP-адреса машины с <application>natd</application> должны + быть активизированы и являться алиасами для внешнего интерфейса. + Обратитесь к &man.rc.conf.5;, чтобы это сделать.</para> + </sect2> + </sect1> + + <sect1 id="network-inetd"> + <sect1info> + <authorgroup> + <author> + <firstname>Chern</firstname> + <surname>Lee</surname> + <contrib>Текст предоставил</contrib> + </author> + </authorgroup> + </sect1info> + + <title><quote>Супер-сервер</quote> <application>inetd</application></title> + + <sect2 id="network-inetd-overview"> + <title>Обзор</title> + + <para>&man.inetd.8; называют также <quote>супер-сервером + Интернет</quote>, потому что он управляет соединениями к нескольким + даемонам. Программы, которые предоставляют сетевые услуги, называют + даемонами. <application>inetd</application> выступает в качестве + управляющего сервера для других даемонов. Когда + <application>inetd</application> принимает соединение, он определяет, + для какого даемона предназначено соединение, вызывает соответствующий + даемон и предоставляет ему сокет. Запуск одного экземпляра + <application>inetd</application> уменьшает общую нагрузку на систему по + сравнению с запуском каждого даемона индивидуально в выделенном + режиме.</para> + + <para>В первую очередь <application>inetd</application> используется для + вызова других даемонов, но несколько простых протоколов, таких, как + <application>chargen</application>, <application>auth</application> и + <application>daytime</application>, обслуживаются + непосредственно.</para> + + <para>Этот раздел посвящен основам настройки + <application>inetd</application> посредством его параметров командной + строки и его конфигурационного файла, + <filename>/etc/inetd.conf</filename>.</para> + </sect2> + + <sect2 id="network-inetd-settings"> + <title>Настройки</title> + + <para><application>inetd</application> инициализируется посредством + системы <filename>/etc/rc.conf</filename>. Параметр + <literal>inetd_enable</literal> по умолчанию установлен в + <quote>NO</quote>, однако часто включается утилитой + <application>sysinstall</application> при выборе профиля среднего + уровня безопасности. Указание + <programlisting>inetd_enable="YES"</programlisting> или + <programlisting>inetd_enable="NO"</programlisting> в файле + <filename>/etc/rc.conf</filename> может задать или запретить запуск + <application>inetd</application> во время загрузки.</para> + + <para>Кроме того, через <literal>inetd_flags</literal> даемону + <application>inetd</application> могут быть переданы различные + параметры командной строки.</para> + </sect2> + + <sect2 id="network-inetd-cmdline"> + <title>Параметры командной строки</title> + + <para>Формат вызова <application>inetd</application>:</para> + + <para><option> inetd [-d] [-l] [-w] [-W] [-c maximum] [-C rate] [-a address | hostname] + [-p filename] [-R rate] [configuration file]</option></para> + + <variablelist> + <varlistentry> + <term>-d</term> + + <listitem> + <para>Включение отладочной информации.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>-l</term> + + <listitem> + <para>Включение регистрации успешных соединений.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>-w</term> + + <listitem> + <para>Включение механизма TCP Wrapping для внешних служб (по + умолчанию включено).</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>-W</term> + + <listitem> + <para>Включение механизма TCP Wrapping для внутренних служб, + которые встроены в <application>inetd</application> (по + умолчанию включено).</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>-c maximum</term> + + <listitem> + <para>Определение максимального числа одновременных запусков каждой + службы; по умолчание не ограничено. Может быть переопределено + индивидуально для каждой службы при помощи параметра + <option>max-child</option>.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>-C rate</term> + + <listitem> + <para>Определение по умолчанию максимального количества раз, + которое служба может быть вызвана с одного IP-адреса в минуту; по + умолчанию не ограничено. Может быть переопределено для каждой + службы параметром + <option>max-connections-per-ip-per-minute</option>.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>-R rate</term> + + <listitem> + <para>Определяет максимальное количество раз, которое служба может + быть вызвана в минуту; по умолчанию 256. Частота, равная 0, + не ограничивает число вызовов.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>-a</term> + + <listitem> + <para>Задает один IP-адрес, к которому делается привязка. + Альтернативно может быть указано имя хоста, и в этом случае + используется соответсвующий этому имени хоста адрес IPv4 или + IPv6. Обычно имя хоста задается, когда + <application>inetd</application> запускается в окружении + &man.jail.8;, и в этом случае имя хоста соответствует этому + &man.jail.8;-окружению.</para> + + <para>Если используется формат с именем хоста и требуется привязка + как для IPv4, так и для IPv6, то для каждой привязки требуется + запись с соответствующим типом протокола для каждой службы в + файле <filename>/etc/inetd.conf</filename>. К примеру, службе + на основе TCP потребуется две записи, в одной для протокола + используется <quote>tcp4</quote>, а в другой + используется <quote>tcp6</quote>.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>-p</term> + + <listitem> + <para>Задает альтернативный файл для хранения ID процесса.</para> + </listitem> + </varlistentry> + </variablelist> + + <para>Эти параметры могут быть переданы в + <application>inetd</application> при помощи + <literal>inetd_flags</literal> в файле + <filename>/etc/rc.conf</filename>. По умолчанию значение + <literal>inetd_flags</literal> установлено в <quote>-wW</quote>, + что включает механизм TCP wrapping для внутренних и внешних служб + <application>inetd</application>. Новичкам эти параметры изменять и + даже задавать их в файле <filename>/etc/rc.conf</filename> не + нужно.</para> + + <note> + <para>Внешняя служба является даемоном вне + <application>inetd</application>, который запускается при получении + соединения к нему. С другой стороны, внутренней службой является + услуга, которую <application>inetd</application> предоставляет + сам.</para> + </note> + </sect2> + + <sect2 id="network-inetd-conf"> + <title><filename>inetd.conf</filename></title> + + <para>Настройка <application>inetd</application> управляется через файл + <filename>/etc/inetd.conf</filename>.</para> + + <para>Если в файле <filename>/etc/inetd.conf</filename> делались + изменения, то <application>inetd</application> можно заставить считать + его конфигурационный файл повторно, послав сигнал HangUP процессу + <application>inetd</application>, как показано здесь:</para> + + <example id="network-inetd-hangup"> + <title>Посылка сигнала HangUP процессу + <application>inetd</application></title> + + <screen>&prompt.root; <userinput>kill -HUP `cat /var/run/inetd.pid`</userinput></screen> + </example> + + <para>В каждой строке конфигурационного файла описывается отдельный + даемон. Комментариям в файле предшествует знак <quote>#</quote>. Файл + <filename>/etc/inetd.conf</filename> имеет такой формат:</para> + + <programlisting>service-name +socket-type +protocol +{wait|nowait}[/max-child[/max-connections-per-ip-per-minute]] +user[:group][/login-class] +server-program +server-program-arguments</programlisting> + + <para>Пример записи для даемона <application>ftpd</application>, + использующего IPv4:</para> + + <programlisting>ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l</programlisting> + + <variablelist> + <varlistentry> + <term>service-name</term> + + <listitem> + <para>Это имя сервиса, предоставляемого конкретным даемоном. Оно + должно соответствовать сервису, указанному в файле + <filename>/etc/services</filename>. Здесь определяется, какой + порт должен обслуживать <application>inetd</application>. При + создании нового сервиса он должен помещаться сначала в файл + <filename>/etc/services</filename>.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>socket-type</term> + + <listitem> + <para><literal>stream</literal>, <literal>dgram</literal>, + <literal>raw</literal> либо <literal>seqpacket</literal>. + <literal>stream</literal> должен использоваться для + ориентированных на соединение даемонов TCP, когда как + <literal>dgram</literal> используется для даемонов, использующих + транспортный протокол UDP.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>protocol</term> + + <listitem> + <para>Одно из следующих:</para> + + <informaltable> + <tgroup cols="2"> + <thead> + <row> + <entry>Протокол</entry> + <entry>Описание</entry> + </row> + </thead> + <tbody> + <row> + <entry>tcp, tcp4</entry> + <entry>TCP IPv4</entry> + </row> + + <row> + <entry>udp, udp4</entry> + <entry>UDP IPv4</entry> + </row> + + <row> + <entry>tcp6</entry> + <entry>TCP IPv6</entry> + </row> + + <row> + <entry>udp6</entry> + <entry>UDP IPv6</entry> + </row> + + <row> + <entry>tcp46</entry> + <entry>TCP как для IPv4, так и для v6</entry> + </row> + + <row> + <entry>udp46</entry> + <entry>UDP как для IPv4, так и для v6</entry> + </row> + </tbody> + </tgroup> + </informaltable> + </listitem> + </varlistentry> + + <varlistentry> + <term>{wait|nowait}[/max-child[/max-connections-per-ip-per-minute]]</term> + + <listitem> + <para><option>wait|nowait</option> определяет, может ли даемон, + вызванный из <application>inetd</application>, работать с + собственным сокетом, или нет. Сокеты типа <option>dgram</option> + должны использовать параметр wait, когда как даемоны с потоковыми + сокетами, которые обычно многопоточны, должны использовать + <option>nowait</option>. <option>wait</option> обычно передает + много сокетов одному даемону, когда как <option>nowait</option> + порождает даемон для каждого нового сокета.</para> + + <para>Максимальное число порожденных даемонов, которых может + создать <application>inetd</application>, может быть задано + параметром <option>max-child</option>. Если нужно ограничение в + десять экземпляров некоторого даемона, то после параметра + <option>nowait</option> нужно задать + <literal>/10</literal>.</para> + + <para>Кроме <option>max-child</option>, может быть задействован + другой параметр, ограничивающий максимальное число соединений от + одного источника. + <option>max-connections-per-ip-per-minute</option> служит именно + для этого. Здесь значение, равное десяти, будет ограничивать + любой заданный IP-адрес на выполнение десяти попыток подключения + к некоторому сервису в минуту. Это полезно для предотвращения + намеренного или ненамеренного расходования ресурсов и атак типа + Denial of Service (DoS) на машину.</para> + + <para>В этом поле <option>wait</option> или <option>nowait</option> + обязательны. <option>max-child</option> и + <option>max-connections-per-ip-per-minute</option> + опциональны.</para> + + <para>Многопоточный даемон типа stream без ограничений + <option>max-child</option> или + <option>max-connections-per-ip-per-minute</option> будет + определен просто вот так: <literal>nowait</literal></para> + + <para>Тот же самый даемон с ограничением в максимум десять даемонов + будет определен так: <literal>nowait/10</literal></para> + + <para>Наконец, та же конфигурация с ограничением в двадцать + соединений на IP-адрес в минуту и общим ограничением в максимум + десять порожденных даемонов выглядит так: + <literal>nowait/10/20</literal></para> + + <para>Эти параметры, используемые все со значениями по умолчанию + даемоном <application>fingerd</application>, имеют такой + вид:</para> + + <programlisting>finger stream tcp nowait/3/10 nobody /usr/libexec/fingerd fingerd -s</programlisting> + </listitem> + </varlistentry> + + <varlistentry> + <term>user</term> + + <listitem> + <para>Поле user является именем пользователем, под которым должен + работать сответствующий даемон. Чаще всего даемоны работают + как пользователь <username>root</username>. Для обеспечения + безопасности некоторые серверы запыскаются как пользователь + <username>daemon</username> или как пользователь с минимальными + правами <username>nobody</username>.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>server-program</term> + + <listitem> + <para>Полный маршрут к даемону, который будет выполняться при + установлении соединения. Если даемон является сервисом, + предоставляемым самим <application>inetd</application>, то нужно + задать ключевое слово <option>internal</option>.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>server-program-arguments</term> + + <listitem> + <para>Этот параметр работает вместе с параметром + <option>server-program</option>, задавая параметры, начиная с + argv[0], передаваемые даемону при запуске. Если в командной + строке задано <application>mydaemon -d</application>, то + <literal>mydaemon -d</literal> будет являться значением для + <option>server program arguments</option>. И снова, если даемон + является внутренней службой, то здесь нужно использовать + <option>internal</option>.</para> + </listitem> + </varlistentry> + </variablelist> + </sect2> + + <sect2 id="network-inetd-security"> + <title>Безопасность</title> + + <para>В зависимости от схемы безопасности, выбранной при установке, + многие из даемонов <application>inetd</application> могут оказаться по + умолчанию включенными. Если нет особой нужды в некотором даемоне, то + выключите его! Поместите знак <quote>#</quote> перед ненужным даемоном + и <link linkend="network-inetd-hangup">пошлите сигнал для inetd</link>. + Некоторые даемоны, такие, как <application>fingerd</application>, + вообще нежелательны, потому что они дают атакующему слишком много + информации.</para> + + <para>Некоторые даемоны не заботятся о безопасности и имеют большие + таймауты для соединений или вообще их не имеют. Это позволяет + атакующему неспешно устанавливать соединения к конкретному даемону, + истощая имеющиеся ресурсы. Может оказаться полезным задать для + некоторых даемонов ограничения <option>ip-per-minute</option> и + <option>max-child</option>.</para> + + <para>По умолчанию механизм TCP wrapping включен. Обратитесь к + справочной странице по &man.hosts.access.5; для получения более + подробной информации о задании ограничений TCP для различных даемонов, + запускаемых посредством <application>inetd</application>.</para> + </sect2> + + <sect2 id="network-inetd-misc"> + <title>Разное</title> + + <para><application>daytime</application>, + <application>time</application>, + <application>echo</application>, + <application>discard</application>, + <application>chargen</application> и + <application>auth</application> все являются услугами, предоставляемыми + самим <application>inetd</application>.</para> + + <para>Сервис <application>auth</application> предоставляет + идентификационные сетевые услуги (ident, identd) и поддается + настройке.</para> + + <para>Обратитесь к справочной странице по &man.inetd.8; для получения + более подробной информации.</para> + </sect2> + </sect1> + + <sect1 id="network-plip"> + <title>IP по параллельному порту (PLIP)</title> + + <indexterm><primary>PLIP</primary></indexterm> + <indexterm><primary>IP по параллельному порту</primary></indexterm> + + <para>PLIP позволяет нам работать с TCP/IP по параллельному порту. Это + полезно для машин без сетевых алаптеров или для установки на лаптопы. + В этом разделе мы обсудим:</para> + + <itemizedlist> + <listitem> + <para>создание кабеля для параллельного порта (laplink).</para> + </listitem> + + <listitem> + <para>Соединение двух компьютеров посредством PLIP.</para> + </listitem> + </itemizedlist> + + <sect2 id="network-create-parallel-cable"> + <title>Создание параллельного кабеля</title> + + <para>Вы можете приобрести кабель для параллельного порта в большинстве + магазинов, торгующих комплектующими. Если вы его на нйдёте, или же + просто хотите знать, как он делается, то следующая таблица поможет вам + сделать такой кабель из обычного принтерного кабеля для параллельного + порта.</para> + + <table> + <title>Распайка кабеля для параллельного порта для сетевой + работы</title> + + <tgroup cols="5"> + <thead> + <row> + <entry>A-name</entry> + + <entry>A-End</entry> + + <entry>B-End</entry> + + <entry>Описание</entry> + + <entry>Post/Bit</entry> + </row> + </thead> + + <tbody> + <row> + <entry><literallayout>DATA0 +-ERROR</literallayout></entry> + + <entry><literallayout>2 +15</literallayout></entry> + + <entry><literallayout>15 +2</literallayout></entry> + + <entry>Data</entry> + + <entry><literallayout>0/0x01 +1/0x08</literallayout></entry> + </row> + + <row> + <entry><literallayout>DATA1 ++SLCT</literallayout></entry> + + <entry><literallayout>3 +13</literallayout></entry> + + <entry><literallayout>13 +3</literallayout></entry> + + <entry>Data</entry> + + <entry><literallayout>0/0x02 +1/0x10</literallayout></entry> + </row> + + <row> + <entry><literallayout>DATA2 ++PE</literallayout></entry> + + <entry><literallayout>4 +12</literallayout></entry> + + <entry><literallayout>12 +4</literallayout></entry> + + <entry>Data</entry> + + <entry><literallayout>0/0x04 +1/0x20</literallayout></entry> + </row> + + <row> + <entry><literallayout>DATA3 +-ACK</literallayout></entry> + + <entry><literallayout>5 +10</literallayout></entry> + + <entry><literallayout>10 +5</literallayout></entry> + + <entry>Strobe</entry> + + <entry><literallayout>0/0x08 +1/0x40</literallayout></entry> + </row> + + <row> + <entry><literallayout>DATA4 +BUSY</literallayout></entry> + + <entry><literallayout>6 +11</literallayout></entry> + + <entry><literallayout>11 +6</literallayout></entry> + + <entry>Data</entry> + + <entry><literallayout>0/0x10 +1/0x80</literallayout></entry> + </row> + + <row> + <entry>GND</entry> + + <entry>18-25</entry> + + <entry>18-25</entry> + + <entry>GND</entry> + + <entry>-</entry> + </row> + </tbody> + </tgroup> + </table> + </sect2> + + <sect2 id="network-plip-setup"> + <title>Настройка PLIP</title> + + <para>Прежде всего вы должны найти laplink-кабель. Затем + удостоверьтесь, что на обоих компьютерах в ядро включена поддержка + драйвера &man.lpt.4;:</para> + + <screen>&prompt.root; <userinput>grep lp /var/run/dmesg.boot</userinput> +lpt0: <Printer> on ppbus0 +lpt0: Interrupt-driven port</screen> + + <para>Управление параллельным портом должно выполняться по прерываниям. + Во &os; 4.X в файле конфигурации ядра должна присутствовать + строка, подобная следующей:</para> + + <programlisting>device ppc0 at isa? irq 7</programlisting> + + <para>Во &os; 5.X файл <filename>/boot/device.hints</filename> + должен содержать следующие строки:</para> + + <programlisting>hint.ppc.0.at="isa" +hint.ppc.0.irq="7"</programlisting> + + <para>Затем проверьте, что файл конфигурации ядра имеет строку + <literal>device plip</literal>, или загружен ли модуль ядра + <filename>plip.ko</filename>. В обоих случаях интерфейс работы с + сетью по параллельному порту должен присутствовать на момент прямого + использования команды &man.ifconfig.8;. Во &os; 4.X это должно + быть примерно так:</para> + + <screen>&prompt.root; <userinput>ifconfig lp0</userinput> +lp0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500</screen> + + <para>а для &os; 5.X:</para> + + <screen>&prompt.root; <userinput>ifconfig plip0</userinput> +plip0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500</screen> + + <note> + <para>Имя устройства, используемого для параллельного интерфейса, + во &os; 4.X + (<devicename>lp<replaceable>X</replaceable></devicename>) и + &os; 5.X + (<devicename>plip<replaceable>X</replaceable></devicename>).</para> + </note> + + <para>Подключите кабель laplink к параллельным интерфейсам на обоих + компьютерах.</para> + + <para>Настройте параметры сетевого интерфейса с обеих сторон, работая как + пользователь <username>root</username>. К примеру, если вы хотите + соединить хост <hostid>host1</hostid>, на котором работает + &os; 4.X, с хостом <hostid>host2</hostid> под управлением + &os; 5.X:</para> + + <programlisting> host1 <-----> host2 +IP Address 10.0.0.1 10.0.0.2</programlisting> + + <para>Настройте интерфейс на машине <hostid>host1</hostid>, + выполнив:</para> + + <screen>&prompt.root; <userinput>ifconfig plip0 10.0.0.1 10.0.0.2</userinput></screen> + + <para>Настройте интерфейс на машине <hostid>host2</hostid>, + выполнив:</para> + + <screen>&prompt.root; <userinput>ifconfig lp0 10.0.0.2 10.0.0.1</userinput></screen> + + <para>Теперь вы должны получить работающее соединение. Пожалуйста, + прочтите страницы руководства по &man.lp.4; и &man.lpt.4; для выяснения + деталей.</para> + + <para>Вы должны также добавить оба хоста в + <filename>/etc/hosts</filename>:</para> + + <programlisting>127.0.0.1 localhost.my.domain localhost +10.0.0.1 host1.my.domain host1 +10.0.0.2 host2.my.domain</programlisting> + + <para>Чтобы проверить работу соединения, перейдите к каждому хосту и + выполните тестирование соединения с другой машиной посредством команды + ping. К примеру, на машине <hostid>host1</hostid>:</para> + + <screen>&prompt.root; <userinput>ifconfig lp0</userinput> +lp0: flags=8851<UP,POINTOPOINT,RUNNING,SIMPLEX,MULTICAST> mtu 1500 + inet 10.0.0.1 --> 10.0.0.2 netmask 0xff000000 +&prompt.root; <userinput>netstat -r</userinput> +Routing tables + +Internet: +Destination Gateway Flags Refs Use Netif Expire +host2 host1 UH 0 0 lp0 +&prompt.root; <userinput>ping -c 4 host2</userinput> +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</screen> + + </sect2> + </sect1> + + <sect1 id="network-ipv6"> + <sect1info> + <authorgroup> + <author> + <firstname>Aaron</firstname> + <surname>Kaplan</surname> + <contrib>Первоначальный текст написал</contrib> + </author> + </authorgroup> + + <authorgroup> + <author> + <firstname>Tom</firstname> + <surname>Rhodes</surname> + <contrib>Реструктуризацию и добавления внёс</contrib> + </author> + </authorgroup> + </sect1info> + + <title>IPv6</title> + + <para>IPv6 (также называемый IPng <quote>IP next generation</quote> - + следующее поколение IP) является новой версией широко известного + протокола IP (называемого также <acronym>IPv4</acronym>). Как и другие + современные системы *BSD, FreeBSD включает эталонную реализацию IPv6 от + <acronym>KAME</acronym>. Так что система FreeBSD поставляется со всем, + что вам нужно для экспериментирования с IPv6. Этот раздел посвящёен + настройке и запуску в работу IPv6.</para> + + <para>В начале 1990-х люди стали беспокоиться о быстро иссякающем адресном + пространстве IPv4. Принимая во внимание темпы роста Интернет, имелись + основные проблемы:</para> + + <itemizedlist> + <listitem> + <para>Нехватка адресов. Сегодня это не такая большая проблема, так как + стали применяться адресные пространства для частных сетей + (<hostid role="ipaddr">10.0.0.0/8</hostid>, <hostid + role="ipaddr">192.168.0.0/24</hostid> и так далее) и технология + преобразования сетевых адресов (<acronym>NAT</acronym> - Network + Address Translation).</para> + </listitem> + + <listitem> + <para>Таблицы маршрутов становятся чересчур большими. Это всё ещё + является проблемой сегодня.</para> + </listitem> + </itemizedlist> + + <para>IPv6 решает эти и многие другие вопросы:</para> + + <itemizedlist> + <listitem> + <para>128-битное адресное пространство. Другими словами, теоретически + доступны 340,282,366,920,938,463,463,374,607,431,768,211,456 адреса. + Это означает плотность примерно в 6.67 * 10^27 адресов IPv6 на + квадратный метр нашей планеты.</para> + </listitem> + + <listitem> + <para>Маршрутизаторы будут хранить в своих талицах только + агрегированные адреса сетей, что уменьшает средний размер таблицы + маршрутизации до 8192 записей.</para> + </listitem> + </itemizedlist> + + <para>Имеется также множество других полезных особенностей IPv6, таких, + как:</para> + + <itemizedlist> + <listitem> + <para>Автоматическая настройка адреса (RFC2462)</para> + </listitem> + + <listitem> + <para>Групповые адреса (<quote>один к нескольким из + многих</quote>)</para> + </listitem> + + <listitem> + <para>Обязательные адреса множественной рассылки</para> + </listitem> + + <listitem> + <para>IPsec (IP security - безопасный IP)</para> + </listitem> + + <listitem> + <para>Упрощённая структура заголовка</para> + </listitem> + + <listitem> + <para>Мобильный <acronym>IP</acronym></para> + </listitem> + + <listitem> + <para>Механизмы преобразования IPv4-в-IPv6</para> + </listitem> + </itemizedlist> + + <para>Для получения дополнительной информации посмотрите:</para> + + <itemizedlist> + <listitem> + <para>Обзор IPv6 на сайте <ulink + url="http://www.sun.com">Sun.com</ulink></para> + </listitem> + + <listitem> + <para><ulink url="http://www.ipv6.org">IPv6.org</ulink></para> + </listitem> + + <listitem> + <para><ulink url="http://www.kame.net">KAME.net</ulink></para> + </listitem> + + <listitem> + <para><ulink url="http://www.6bone.net">6bone.net</ulink></para> + </listitem> + </itemizedlist> + + <sect2> + <title>Основы адресации IPv6</title> + + <para>Существуют различные типы адресов IPv6: одноадресные (Unicast), + групповые (Anycast) и многоадресные (Multicast).</para> + + <para>Адреса типа Unicast хорошо всем известны. Пакет, посланный на + такой адрес, достигает в точности интерфейса, который этому адресу + соответствует.</para> + + <para>Адреса типа Anycast синтаксически неотличимы от адресов Unicast, + но они адресуют группу интерфейсов. Пакет, направленный такому адресу, + попадёт в ближайший (согласно метрике маршрутизатора) интерфейс. + Адреса Anycast могут использоваться только маршрутизаторами.</para> + + <para>Адреса типа Multicast идентифицируют группу интерфейсов. Пакет, + посланный на такой адрес, достигнет всех интерфейсов, привязанных к + группе многоадресного вещания.</para> + + <note> + <para>Широковещательные адреса IPv4 (обычно <hostid + role="ipaddr">xxx.xxx.xxx.255</hostid>) выражаются адресами + многоадресного вещания IPv6.</para> + </note> + + <para>Зарезервированные адреса IPv6:</para> + +<screen>ipv6-address prefixlength(Bits) description Notes + + :: 128 Bits unspecified cf. 0.0.0.0 in IPv4 address + ::1 128 Bits loopback address cf. 127.0.0.1 in IPv4 + ::00:xx:xx:xx:xx 96 Bits embedded IPv4 The lower 32 bits are the + address IPv4 address. Also called + <quote>IPv4 compatible IPv6 + address</quote> + ::ff:xx:xx:xx:xx 96 Bits IPv4 mapped The lower 32 bits are the + IPv6 address IPv4 address. For hosts + which do not support IPv6 + fe80:: - feb:: 10 Bits link-local cf. loopback address in + IPv4 + fec0:: - fef:: 10 Bits site-local + ff:: 8 Bits multicast + 001 (base 2) 3 Bits global unicast All global unicast + addresses are assigned from + this pool. The first 3 Bits + are <quote>001</quote>.</screen> + + </sect2> + + <sect2> + <title>Чтение адресов IPv6</title> + + <para>Каноническая форма представляется в виде <hostid + role="ip6addr">x:x:x:x:x:x:x:x</hostid>, где каждый символ + <quote>x</quote> является 16-битовым шестнадцатиричным числом. К + примеру, <hostid + role="ip6addr">FEBC:A574:382B:23C1:AA49:4592:4EFE:9982</hostid></para> + + <para>Часто в адресе присутствуют длинные строчки, заполненные нулями, + поэтому каждая такая последовательность может быть сокращена до + <quote>::</quote>. К примеру, <hostid role="ip6addr">fe80::1</hostid> + соответствует канонической форме <hostid + role="ip6addr">fe80:0000:0000:0000:0000:0000:0000:0001</hostid></para> + + <para>В третьей форме последние 32 бита записываются в широко известном + (десятичном) стиле IPv4 с точками <quote>.</quote> в качестве + разделителей. Например, <hostid + role="ip6addr">f2002::10.0.0.1</hostid> соответствует + (шестнадцатиричному) каноническому представлению <hostid + role="ip6addr">2002:0000:0000:0000:0000:0000:0a00:0001</hostid>, + которое, в свою очередь, равнозначно записи <hostid + role="ip6addr">2002::a00:1</hostid></para> + + <para>Теперь читатель должен понять следующую запись:</para> + + <screen>&prompt.root; <userinput>ifconfig</userinput></screen> + + <programlisting>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</programlisting> + + <para><hostid role="ip6addr">fe80::200:21ff:fe03:8e1%rl0</hostid> + является автоматически отконфигурированным локальным адресом. В + процессе автоматической конфигурации в него включается MAC-адрес + Ethernet.</para> + + <para>Для получения дополнительной информации о структуре адресов IPv6 + обратитесь к RFC3513.</para> + </sect2> + + <sect2> + <title>Настройка подключения</title> + + <para>На данный момент существуют четыре способа подключиться к другим + хостам и сетям IPv6:</para> + + <itemizedlist> + <listitem> + <para>Подключиться к эскпериментальному 6bone</para> + </listitem> + + <listitem> + <para>Получить сеть IPv6 от вышестоящего провайдера. Для получения + рекомендаций обратитесь к вашему провайдеру Интернет.</para> + </listitem> + + <listitem> + <para>Туннелировать посредством 6-в-4</para> + </listitem> + + <listitem> + <para>Использовать порт freenet6, если вы используете коммутируемое + соединение.</para> + </listitem> + </itemizedlist> + + <para>Здесь мы будем рассматривать подключение к 6bone, так как на + данный момент это является самым популярным способом.</para> + + <para>Сначала взгляните на сайт 6bone и найдите ближайшую к вам точку + подключения к 6bone. Напишите ответственному и при некоторой удаче вам + дадут инструкции по настройке соединения. Обычно это касается + настройки туннеля GRE (gif).</para> + + <para>Вот типичный пример настройки туннеля &man.gif.4;:</para> + + <screen>&prompt.root; <userinput>ifconfig gif0 create</userinput> +&prompt.root; <userinput>ifconfig gif0</userinput> +gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280 +&prompt.root; <userinput>ifconfig gif0 tunnel <replaceable>MY_IPv4_ADDR</replaceable> <replaceable>HIS_IPv4_ADDR</replaceable></userinput> +&prompt.root; <userinput>ifconfig gif0 inet6 alias <replaceable>MY_ASSIGNED_IPv6_TUNNEL_ENDPOINT_ADDR</replaceable></userinput></screen> + + <para>Замените слова, написанные заглавными буквами, информацией, которую + вам дал вышестоящий узел 6bone.</para> + + <para>При этом установится туннель. Проверьте работу туннеля утилитой + &man.ping6.8; с адресом <hostid role="ip6addr">ff02::1%gif0</hostid>. + Вы должны получить два положительных ответа.</para> + + <note> + <para>Если вы заинтригованы адресом <hostid + role="ip6addr">ff02:1%gif0</hostid>, скажем, что это адрес + многоадресного вещания. <literal>%gif0</literal> указывает на + использование такого адреса с сетевым интерфейсом + <devicename>gif0</devicename>. Так как мы выполняем + <command>ping</command> над адресом многоадресного вещания, то другая + сторона туннеля также должна ответить).</para> + </note> + + <para>Теперь настройка маршрута к вашей вышестоящей точке подключения + 6bone должна быть весьма проста:</para> + + <screen>&prompt.root; <userinput>route add -inet6 default -interface gif0</userinput> +&prompt.root; <userinput>ping6 -n <replaceable>MY_UPLINK</replaceable></userinput></screen> + + <screen>&prompt.root; <userinput>traceroute6 www.jp.FreeBSD.org</userinput> +(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</screen> + + <para>Эта выдача будет отличаться от машины к машине. Теперь вы должны + суметь достигнуть сайта IPv6 <ulink + url="http://www.kame.net">www.kame.net</ulink> и увидеть танцующую + черепаху — в случае, если ваш браузер поддерживает IPv6, как, + например, <filename role="package">www/mozilla</filename>.</para> + </sect2> + + <sect2> + <title>DNS в мире IPv6</title> + + <para>Для IPv6 имеются два новых типа записей DNS:</para> + + <itemizedlist> + <listitem> + <para>Записи AAAA,</para> + </listitem> + + <listitem> + <para>Записи A6</para> + </listitem> + </itemizedlist> + + <para>Использование записей AAAA достаточно просто. Назначение вашему + имени хоста нового адреса IPv6 достигается просто добавлением:</para> + + <programlisting>MYHOSTNAME AAAA MYIPv6ADDR</programlisting> + + <para>к вашему первичному файлу DNS зоны. В случае, если вы не + обслуживаете собственные зоны <acronym>DNS</acronym>, обратитесь к + вашему провайдеру <acronym>DNS</acronym>. Имеющиеся версии + <application>bind</application> (версий 8.3 и 9) поддерживают записи + AAAA.</para> + </sect2> + </sect1> </chapter> <!-- @@ -2883,3 +7767,4 @@ dhcp_flags="" sgml-parent-document: ("../book.sgml" "part" "chapter") End: --> +<!-- LocalWords: config mnt www --> |