<!--
     The FreeBSD Russian Documentation Project

     $FreeBSD$
     $FreeBSDru: frdp/doc/ru_RU.KOI8-R/books/handbook/advanced-networking/chapter.sgml,v 1.114 2005/05/11 11:37:20 andy Exp $

     Original revision: 1.365
-->

<chapter id="advanced-networking">
  <chapterinfo>
    <authorgroup>
      <author>
	<firstname>Андрей</firstname>
	<surname>Захватов</surname>
	<contrib>Перевод на русский язык: </contrib>
      </author>
    </authorgroup>
  </chapterinfo>
  <title>Сложные вопросы работы в сети</title>

  <sect1 id="advanced-networking-synopsis">
    <title>Краткий обзор</title>

    <para>Эта глава охватывает множество различных сетевых тематик
      повышенной сложности.</para>

    <para>После чтения этой главы вы будете знать:</para>

    <itemizedlist>
      <listitem>
        <para>Основные понятия о маршрутизации и маршрутах.</para>
      </listitem>

      <listitem>
	<para>Как настроить IEEE 802.11 и &bluetooth;.</para>
      </listitem>

      <listitem>
        <para>Как заставить FreeBSD работать в качестве сетевого
          моста.</para>
      </listitem>

      <listitem>
        <para>Как настроить загрузку по сети для бездисковой машины.</para>
      </listitem>

      <listitem>
        <para>Как настроить трансляцию сетевых адресов.</para>
      </listitem>

      <listitem>
        <para>Как соединить два компьютера посредством PLIP.</para>
      </listitem>

      <listitem>
        <para>Как настроить IPv6 на машине FreeBSD.</para>
      </listitem>

      <listitem>
	<para>Как настроить ATM в &os;&nbsp;5.X.</para>
      </listitem>
    </itemizedlist>

    <para>Перед чтением этой главы вы должны:</para>

    <itemizedlist>
      <listitem>
        <para>Понимать основы работы скриптов
          <filename>/etc/rc</filename>.</para>
      </listitem>

      <listitem>
        <para>Свободно владеть основными сетевыми терминами.</para>
      </listitem>

      <listitem>
        <para>Знать как настраивать и устанавливать новое ядро FreeBSD
          (<xref linkend="kernelconfig">).</para>
      </listitem>

      <listitem>
      <para>Знать как устанавливать дополнительное программное
	обеспечение сторонних разработчиков
	(<xref linkend="ports">).</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
example.com	 link#1 	    UC		0	 0
host1		 0:e0:a8:37:8:1e    UHLW	3     4601	 lo0
host2		 0:e0:a8:37:8:1e    UHLW	0	 5	 lo0 =>
host2.example.com link#1 	    UC		0	 0
224		 link#1 	    UC		0	 0</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>=&gt;</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" pgwide="1">
        <tgroup cols="2">
	  <colspec colwidth="1*">
	  <colspec colwidth="4*">
          <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 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]  &lt;--ether--&gt;  [Local1]  &lt;--PPP--&gt; [ISP-Serv]  &lt;--ether--&gt;  [T1-GW]
          </literallayout>
        </textobject>
      </mediaobject>

      <para>Хосты <hostid>Local1</hostid> и <hostid>Local2</hostid> находятся в
        нашей сети.  <hostid>Local1</hostid> подключён к ISP через
        коммутируемое соединение по протоколу PPP.  Этот компьютер с сервером
        PPP подключён посредством локальной сети к другому шлюзовому компьютеру
        через внешний интерфейс самого ISP к Интернет.</para>

      <para>Маршруты по умолчанию для каждой из ваших машин будут
        следующими:</para>

      <informaltable frame="none" pgwide="1">
        <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>Почему (или каким образом) в качестве
        шлюза по умолчанию для машины <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" pgwide="1">
        <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>

      <para>Вы можете легко задать используемый по умолчанию маршрутизатор
        посредством файла <filename>/etc/rc.conf</filename>.  В нашем примере
        на машине <hostid>Local2</hostid> мы добавили такую строку в файл
        <filename>/etc/rc.conf</filename>:</para>

      <programlisting>defaultrouter="10.20.30.1"</programlisting>

      <para>Это также возможно сделать и непосредственно из командной строки
        при помощи команды &man.route.8;:</para>

      <screen>&prompt.root; <userinput>route add default 10.20.30.1</userinput></screen>

      <para>Для получения дополнительной информации об управлении таблицами
        маршрутизации обратитесь к справочной странице по команде
        &man.route.8;.</para>
    </sect2>

    <sect2>
      <title>Хосты с двойным подключением</title>

      <indexterm><primary>хосты с двойным подключением</primary></indexterm>
      <para>Есть еще один тип подключения, который мы должны рассмотреть, и это
        случай, когда хост находится в двух различных сетях.  Технически,
        любая машина, работающая как сетевой шлюз (в примере выше
        использовалось PPP-соединение), считается хостом с двойным
        подключением.  Однако этот термин реально используется для описания
        машины, находящейся в двух локальных сетях.</para>

      <para>В одном случае у машины имеется два адаптера Ethernet, каждый
        имеющий адрес в разделенных подсетях.  Как альтернативу можно
        рассмотреть вариант с одним Ethernet-адаптером и использованием
        алиасов в команде &man.ifconfig.8;.  В первом случае используются два
        физически разделённые сети Ethernet, в последнем имеется один
        физический сегмент сети, но две логически разделённые подсети.</para>

      <para>В любом случае таблицы маршрутизации настраиваются так, что для
        каждой подсети эта машина определена как шлюз (входной маршрут) в
        другую подсеть.  Такая конфигурация, при которой машина выступает в
        роли маршрутизатора между двумя подсетями, часто используется, если
        нужно реализовать систему безопасности на основе фильтрации пакетов или
        функций брандмауэра в одном или обоих направлениях.</para>

      <para>Если вы хотите, чтобы эта машина действительно перемещала пакеты
        между двумя интерфейсами, то вам нужно указать FreeBSD на включение
        этой функции.  Обратитесь к следующей главе, чтобы узнать, как это
        сделать.</para>
    </sect2>

    <sect2 id="network-dedicated-router">
      <title>Построение маршрутизатора</title>

      <indexterm><primary>маршрутизатор</primary></indexterm>

      <para>Сетевой маршрутизатор является обычной системой, которая
        пересылает пакеты с одного интерфейса на другой.  Стандарты Интернет и
        хорошая инженерная практика не позволяют Проекту FreeBSD включать эту
        функцию по умолчанию во FreeBSD.  Вы можете включить эту возможность,
        изменив значение следующей переменной в <literal>YES</literal> в файле
	&man.rc.conf.5;:</para>

      <programlisting>gateway_enable=YES          # Set to YES if this host will be a gateway</programlisting>

      <para>Этот параметр изменит значение &man.sysctl.8;-переменной
	<varname>net.inet.ip.forwarding</varname> в
	<literal>1</literal>.  Если вам временно нужно выключить маршрутизацию,
        вы можете на время сбросить это значение в <literal>0</literal>.</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>

      <indexterm><primary>BGP</primary></indexterm>

      <indexterm><primary>RIP</primary></indexterm>

      <indexterm><primary>OSPF</primary></indexterm>
    </sect2>

    <sect2>
      <sect2info>
	<authorgroup>
	  <author>
	    <firstname>Al</firstname>
	    <surname>Hoang</surname>
	    <contrib>Предоставил </contrib>
	  </author>
	</authorgroup>
      </sect2info>
      <!-- Feb 2004 -->
      <title>Настройка статических маршрутов</title>

      <sect3>
	<title>Ручная настройка</title>

	<para>Предположим, что у нас есть следующая сеть:</para>

	<mediaobject>
	  <imageobject>
	    <imagedata fileref="advanced-networking/static-routes">
	  </imageobject>

	  <textobject>
	<literallayout class="monospaced">
    INTERNET
      | (10.0.0.1/24) Default Router to Internet
      |
      |Interface xl0
      |10.0.0.10/24
   +------+
   |      | RouterA
   |      | (FreeBSD gateway)
   +------+
      | Interface xl1
      | 192.168.1.1/24
      |
  +--------------------------------+
   Internal Net 1      | 192.168.1.2/24
                       |
                   +------+
                   |      | RouterB
                   |      |
                   +------+
                       | 192.168.2.1/24
                       |
                     Internal Net 2
	</literallayout>
	  </textobject>
	</mediaobject>

	<para>В этом сценарии, <hostid>RouterA</hostid> это наш
	  компьютер с &os;, который выступает в качестве
	  маршрутизатора в сеть Интернет.  Его маршрут по умолчанию
	  настроен на <hostid
	  role="ipaddr">10.0.0.1</hostid>, что позволяет ему
	  соединяться с внешним миром.  Мы будем предполагать, что
	  <hostid>RouterB</hostid> уже правильно настроен и
	  знает все необходимые маршруты (на этом рисунке все
	  просто; добавьте на <hostid>RouterB</hostid> маршрут
	  по умолчанию, используя <hostid
	  role="ipaddr">192.168.1.1</hostid> в качестве шлюза).</para>

	<para>Если мы посмотрим на таблицу маршрутизации
	  <hostid>RouterA</hostid>, то увидим примерно следующее:</para>

	<screen>&prompt.user; <userinput>netstat -nr</userinput>
Routing tables

Internet:
Destination        Gateway            Flags    Refs      Use  Netif  Expire
default            10.0.0.1           UGS         0    49378    xl0
127.0.0.1          127.0.0.1          UH          0        6    lo0
10.0.0/24          link#1             UC          0        0    xl0
192.168.1/24       link#2             UC          0        0    xl1</screen>

	<para>С текущей таблицей маршрутизации <hostid>RouterA</hostid>
	  не сможет достичь внутренней сети 2 (Internal Net 2).
	  Один из способов обхода этой проблемы &mdash; добавление
	  маршрута вручную.  Следующая команда добавляет
	  внутреннюю сеть 2 к таблице маршрутизации
	  <hostid>RouterA</hostid> с <hostid
	  role="ipaddr">192.168.1.2</hostid> в качестве следующего
	  узла:</para>

	<screen>&prompt.root; <userinput>route add -net 192.168.2.0/24 192.168.1.2</userinput></screen>

	<para>Теперь <hostid>RouterA</hostid> сможет достичь любого хоста
	  в сети
	  <hostid role="ipaddr">192.168.2.0/24</hostid>.</para>
      </sect3>

      <sect3>
	<title>Постоянная конфигурация</title>

	<para>Предыдущий пример прекрасно подходит для настройки статического
	  маршрута в работающей системе.  Однако, проблема заключается в
	  том, что маршрутная информация не сохранится после перезагрузки
	  &os;.  Способ сохранения добавленного маршрута заключается в
	  добавлении его в файл <filename>/etc/rc.conf</filename>:</para>

	<programlisting># Добавление статического маршрута в Internal Net 2
static_routes="internalnet2"
route_internalnet2="-net 192.168.2.0/24 192.168.1.2"</programlisting>

	<para>В переменной <literal>static_routes</literal> находятся
	  строки, разделенные пробелами.  Каждая строка означает имя
	  маршрута.  В примере выше в <literal>static_routes</literal>
	  есть только одна строка, это
	  <replaceable>internalnet2</replaceable>.  Затем мы добавили
	  переменную
	  <literal>route_<replaceable>internalnet2</replaceable></literal>,
	  куда помещены все параметры, которые необходимо передать
	  команде &man.route.8;.  В примере выше была использована
	  команда:</para>

	  <screen>&prompt.root; <userinput>route add -net 192.168.2.0/24 192.168.1.2</userinput></screen>

	  <para>поэтому нам потребуется
	    <literal>"-net 192.168.2.0/24 192.168.1.2"</literal>.</para>

	<para>Как было сказано выше, мы можем добавить в
	  <literal>static_routes</literal> более чем одну строку.
	  Это позволит создать несколько статических маршрутов.
	  В следующем примере показано добавление маршрутов для сетей <hostid
	  role="ipaddr">192.168.0.0/24</hostid> и <hostid
	  role="ipaddr">192.168.1.0/24</hostid> (этот маршрутизатор не
	  показан на рисунке выше:</para>

        <programlisting>static_routes="net1 net2"
route_net1="-net 192.168.0.0/24 192.168.0.1"
route_net2="-net 192.168.1.0/24 192.168.1.1"</programlisting>
      </sect3>
    </sect2>

    <sect2>
      <title>Распространение маршрутов</title>

      <indexterm><primary>распространение маршрутов</primary></indexterm>
      <para>Мы уже говорили о том, как мы задаем наши маршруты во внешний мир,
        но не упоминали о том, как внешний мир находит нас.</para>

      <para>Мы уже знаем, что таблицы маршрутизации могут быть настроены так,
        что весь трафик для некоторого диапазона адресов (в нашем примере это
        подсеть класса C) может быть направлен заданному хосту в той сети,
        которая будет перенаправлять входящие пакеты дальше.</para>

      <para>При получении адресного пространства, выделенного Вашей сети,
        Ваш провайдер настроит свои таблицы маршрутизации так, что весь трафик
        для Вашей подсети будет пересылаться по PPP-соединению к Вашей сети.
        Но как серверы по всей стране узнают, что Ваш трафик нужно посылать
        Вашему ISP?</para>

      <para>Существует система (подобная распределению информации DNS), которая
        отслеживает все назначенные пространства адресов и определяет точку
        подключения к магистрали Интернет.  <quote>Магистралью</quote> называют
        главные каналы, по которым идет трафик Интернет внутри страны и по
        всему миру.  Каждая магистральная машина имеет копию основного набора
        таблиц, согласно которой трафик для конкретной сети направляется по
        конкретному магистральному каналу, и затем, передаваясь по цепочке
        провайдеров, он достигает вашей сети.</para>

      <para>Задачей вашего провайдера является объявить на магистрали о том,
        что он отвечает за подключение (и поэтому на него указывает маршрут)
        вашей сети.  Этот процесс называется распространением маршрута.</para>
    </sect2>

    <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>

    <sect2>
      <title>Маршрутизация многоадресного трафика</title>

      <indexterm>
 	<primary>маршрутизация многоадресного трафика</primary>
      </indexterm>

      <indexterm>
        <primary>параметры ядра</primary>

        <secondary>MROUTING</secondary>
      </indexterm>

      <para>FreeBSD изначально поддерживает как приложения, работающие с
        многоадресным трафиком, так и его маршрутизацию.  Такие приложения не
        требуют особой настройки FreeBSD; обычно они работают сразу.
        Для маршрутизации многоадресного трафика требуется, чтобы поддержка
        этого была включена в ядро:</para>

      <programlisting>options MROUTING</programlisting>

      <para>Кроме того, даемон многоадресной маршрутизации, &man.mrouted.8;,
        должен быть настроен посредством файла
        <filename>/etc/mrouted.conf</filename> на использование туннелей и
        <acronym>DVMRP</acronym>.  Дополнительную информацию о настройки
	многоадресного трафика
        можно найти на страницах справочной системы, посвящённых даемону
        &man.mrouted.8;.</para>
    </sect2>
  </sect1>

  <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>Существуют два варианта конфигурации устройств беспроводного
        доступа 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>

      <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&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; 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.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>В версиях &os;, предшествующих 5.2, вместо указанных нужно
            использовать следующие параметры:</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>Теперь необходимо настроить адаптер беспроводной сети.
          Следующая команда заставит адаптер работать в режиме точки
            доступа:</para>

	  <screen>
&prompt.root; <userinput>ifconfig wi0 ssid <replaceable>my_net</replaceable> channel 11 media DS/11Mbps mediaopt hostap up stationname "<replaceable>FreeBSD AP</replaceable>"</userinput>
	  </screen>

          <para>Строчка &man.ifconfig.8; активизирует интерфейс
            <devicename>wi0</devicename>, конфигурирует его SSID как
            <replaceable>my_net</replaceable>, а имя станции как
	    <replaceable>FreeBSD AP</replaceable>.
            <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&lt;ASSOC,AUTH&gt;, caps=1&lt;ESS&gt;, rates=f&lt;1M,2M,5.5M,11M&gt;, 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>Перед тем, как подключиться к беспроводной сети, вам нужно
            будет узнать о ней несколько вещей.  В этом примере мы подключаемся
            к сети, которая называется <replaceable>my_net</replaceable>,
	    и шифрование в ней отключено.</para>

          <note><para>В этом примере мы не используем шифрование, но
            это небезопасно.  В следующем разделе вы узнаете, как её включить,
            почему это так важно, и почему некоторые технологии шифрования всё
            же не могут полностью обеспечить вашу информационную
            безопасность.</para></note>

          <para>Удостоверьтесь, что ваш адаптер распознаётся во FreeBSD:</para>

          <screen>&prompt.root; <userinput>ifconfig -a</userinput>
wi0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; 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 <replaceable>192.168.0.20</replaceable> netmask <replaceable>255.255.255.0</replaceable> ssid <replaceable>my_net</replaceable></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>Если статус не будет соответствовать
	    <literal>associated</literal>, это
            может значить, что вы оказались вне зоны досягаемости точки
            доступа, включили шифрование или, возможно, имеются проблемы с
            конфигурацией.</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 <replaceable>my_net</replaceable> wepmode on wepkey <replaceable>0x1234567890</replaceable> media DS/11Mbps mediaopt hostap</userinput></screen>

          <para>Вы можете включить WEP на клиенте следующей командой:</para>

	  <screen>&prompt.root; <userinput>ifconfig wi0 inet <replaceable>192.168.0.20</replaceable> netmask <replaceable>255.255.255.0</replaceable> ssid <replaceable>my_net</replaceable> wepmode on wepkey <replaceable>0x1234567890</replaceable></userinput></screen>

          <para>Отметьте, что вы должны заменить
	    <replaceable>0x1234567890</replaceable> на более уникальный ключ.</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>Утилиты <command>wicontrol</command>,
            <command>ancontrol</command> и
            <command>raycontrol</command></title>

          <para>Это инструменты, которые могут быть использованы для
	    управления поведением
            адаптера беспроводной связи в сети.  В примере выше мы выбирали
            &man.wicontrol.8;, так как нашим адаптером беспроводной сети был
            интерфейс <devicename>wi0</devicename>.  Если у вас установлено
            устройство беспроводного доступа от Cisco, этим интерфейсом будет
            <devicename>an0</devicename>, и тогда вы будете
            использовать &man.ancontrol.8;.</para>
        </sect4>

        <sect4>
          <title>Команда <command>ifconfig</command></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>Клиенты 802.11b</title>

          <para>Практически все адаптеры беспроводной связи 802.11b на данный
            момент во FreeBSD поддерживаются.  Большинство адаптеров,
            построенных на основе Prism, Spectrum24, Hermes, Aironet и Raylink,
            будут работать в качестве адаптера беспроводной сети в режиме
            IBSS (ad-hoc, одноранговая сеть и BSS).</para>
        </sect4>

    <sect4>
    <title>Клиенты 802.11a и 802.11g</title>

    <para>Драйвер устройства &man.ath.4; поддерживает 802.11a и 802.11g.
      Если ваша карта основана на чипсете Atheros, вы можете использовать
      этот драйвер.</para>

    <para>К сожалению, все еще много производителей, не предоставляющих
      схематику своих драйверов сообществу open source, поскольку
      эта информация считается торговым секретом.  Следовательно,
      у разработчиков FreeBSD и других операционных систем остается
      два варианта: разработать драйверы долгим и сложным методом
      обратного инжиниринга, или использовать существующие драйверы
      для платформ &microsoft.windows;.  Большинство разработчиков
      FreeBSD выбрали второй способ.</para>

    <para>Благодаря усилиям Билла Пола (wpaul), начиная
      с FreeBSD&nbsp;5.3-RELEASE существует <quote>прозрачная</quote>
      поддержка Network Driver Interface Specification (NDIS).
      FreeBSD NDISulator (известный также как Project Evil)
      преобразует бинарный драйвер &windows; так, что он работает
      так же как и в &windows;.  Эта возможность всё ещё относительно
      нова, но в большинстве тестов она работает адекватно.</para>

    <indexterm><primary>NDIS</primary></indexterm>

    <indexterm><primary>загрузчик NDIS</primary></indexterm>

    <indexterm><primary>драйверы &windows</primary></indexterm>

    <indexterm><primary>Microsoft Windows</primary></indexterm>

    <indexterm>
      <primary>Microsoft Windows</primary>

      <secondary>драйверы устройств</secondary>
    </indexterm>

    <indexterm><primary>KLD (загружаемый объект ядра)</primary></indexterm>

    <!-- We should probably omit the expanded name, and add a <see> entry
         for it.  Whatever is done must also be done to the same indexterm in
         linuxemu/chapter.sgml -->

    <para>Для использования NDISulator потребуются три вещи:</para>

    <orderedlist>
     <listitem>
      <para>Исходные тексты ядра</para>
     </listitem>
     <listitem>
      <para>Бинарный драйвер &windowsxp; 
        (расширение <filename>.SYS</filename>)</para>
     </listitem>
     <listitem>
      <para>Файл конфигурации бинарного драйвера &windowsxp; 
        (расширение <filename>.INF</filename>)</para>
     </listitem>
    </orderedlist>
 
    <para>Вам может потребоваться компиляция драйвера оболочки мини порта
      &man.ndis.4;.  Под <username>root</username>:</para> 

    <screen>&prompt.root; <userinput>cd /usr/src/sys/modules/ndis</userinput>
&prompt.root; <userinput>make && make install</userinput></screen>

    <para>Определите местоположение файлов для вашей карты.  Обычно
      их можно найти на входящем в комплект CD или на Web-сайте
      поставщика.  В нашем примере используются файлы
      <filename>W32DRIVER.SYS</filename> и
      <filename>W32DRIVER.INF</filename>.</para>

    <para>Следующий шаг это компиляция бинарного драйвера в
      загружаемый модуль ядра.  Чтобы сделать это, сначала зайдите в
      каталог модуля <filename>if_ndis</filename> и с правами
      <username>root</username> скопируйте туда драйверы
      &windows;:</para>

   <screen>&prompt.root; <userinput>cd /usr/src/sys/modules/if_ndis</userinput>
&prompt.root; <userinput>cp <replaceable>/path/to/driver/W32DRIVER.SYS</replaceable> ./</userinput>
&prompt.root; <userinput>cp <replaceable>/path/to/driver/W32DRIVER.INF</replaceable> ./</userinput></screen>

    <para>Теперь используйте утилиту <command>ndiscvt</command> для
      создания заголовка определения драйвера
      <filename>ndis_driver_data.h</filename> перед сборкой
      модуля:</para>

    <screen>&prompt.root; <userinput>ndiscvt -i <replaceable>W32DRIVER.INF</replaceable> -s <replaceable>W32DRIVER.SYS</replaceable> -o ndis_driver_data.h</userinput></screen>

    <para>Параметры <option>-i</option> и <option>-s</option> задают
      соответственно файл настройки и бинарный файл.  Мы используем
      параметр <option>-o ndis_driver_data.h</option>, поскольку
      <filename>Makefile</filename> при создании модуля будет
      обращаться именно к этому файлу.</para>

    <note>
      <para>Некоторым драйверам &windows; для работы требуются
	дополнительные файлы.  Вы можете включить их параметром
	<command>ndiscvt</command> <option>-f</option>.  Обратитесь
	к странице справочной системы &man.ndiscvt.8; за
	дополнительной информацией.</para>
    </note>

    <para>Наконец, соберите и установите модуль драйвера:</para>

    <screen>&prompt.root; <userinput>make && make install</userinput></screen>

    <para>Для использования драйвера необходимо загрузить соответствующие
      модули:</para>

    <screen>&prompt.root; <userinput>kldload ndis</userinput>
&prompt.root; <userinput>kldload if_ndis</userinput></screen>

    <para>Первая команда загружает оболочку драйвера мини-порта NDIS,
      вторая загружает собственно сетевой интерфейс.  Проверьте
      &man.dmesg.8; на предмет ошибок загрузки.  Если все прошло
      хорошо, вывод должен быть примерно таким:</para>

    <screen>ndis0: &lt;Wireless-G PCI Adapter&gt; mem 0xf4100000-0xf4101fff irq 3 at device 8.0 on pci1
ndis0: NDIS API version: 5.0
ndis0: Ethernet address: 0a:b1:2c:d3:4e:f5
ndis0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps
ndis0: 11g rates: 6Mbps 9Mbps 12Mbps 18Mbps 36Mbps 48Mbps 54Mbps</screen>
  
    <para>Начиная с этого момента вы можете использовать устройство
      <devicename>ndis0</devicename> как любое другое беспроводное
      устройство (например, <devicename>wi0</devicename>);
      в этой ситуации применима информация, приведенная в начале этой
      главы.</para>
    </sect4>

      </sect3>
    </sect2>
  </sect1>

  <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>

    <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
&lt;3-Slot&gt; &lt;5-Slot&gt; &lt;Encryption&gt; &lt;Slot offset&gt;
&lt;Timing accuracy&gt; &lt;Switch&gt; &lt;Hold mode&gt; &lt;Sniff mode&gt;
&lt;Park mode&gt; &lt;RSSI&gt; &lt;Channel quality&gt; &lt;SCO link&gt;
&lt;HV2 packets&gt; &lt;HV3 packets&gt; &lt;u-law log&gt; &lt;A-law log&gt; &lt;CVSD&gt;
&lt;Paging scheme&gt; &lt;Power control&gt; &lt;Transparent SCO data&gt;
Max. ACL packet size: 192 bytes
Number of ACL packets: 8
Max. SCO packet size: 64 bytes
Number of SCO packets: 8</screen>
    </sect2>

    <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>

    <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 могут не возвращать все данные, посылаемые им,
        так что <literal>0 bytes</literal> в следующем примере - это
        нормально.</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>

    <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>

    <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>

    <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>Bluetooth SDP сервер &man.sdpd.8; и клиент с интерфейсом
	командной строки &man.sdpcontrol.8; включены в стандартную поставку
	&os;.  В следующем примере показано, как выполнять
        запрос на SDP-обзор.</para>

      <screen>&prompt.user; <userinput>sdpcontrol -a 00:01:03:fc:6e:ec browse</userinput>
Record Handle: 00000000
Service Class ID List:
        Service Discovery Server (0x1000)
Protocol Descriptor List:
        L2CAP (0x0100)
                Protocol specific parameter #1: u/int/uuid16 1
                Protocol specific parameter #2: u/int/uuid16 1

Record Handle: 0x00000001
Service Class ID List:
        Browse Group Descriptor (0x1001)

Record Handle: 0x00000002
Service Class ID List:
        LAN Access Using PPP (0x1102)
Protocol Descriptor List:
        L2CAP (0x0100)
        RFCOMM (0x0003)
                Protocol specific parameter #1: u/int8/bool 1
Bluetooth Profile Descriptor List:
        LAN Access Using PPP (0x1102) ver. 1.0
</screen>

      <para>... и так далее.  Заметьте, что каждый сервис имеет перечень
        атрибутов (например, канал RFCOMM).  В зависимости от сервиса вам может
        потребоваться где-то сохранить эти атрибуты.  Некоторые реализации
        Bluetooth не поддерживают просмотр сервисов и могут возвращать пустой
        список.  В этом случае возможен поиск конкретной услуги.  В примере
        ниже показано, как выполнить поиск службы OBEX Object Push
        (OPUSH):</para>

      <screen>&prompt.user; <userinput>sdpcontrol -a 00:01:03:fc:6e:ec search OPUSH</userinput></screen>

      <para>Во &os; предоставление сервисов клиентам Bluetooth осуществляется
        сервером &man.sdpd.8;:</para>

      <screen>&prompt.root; <userinput>sdpd</userinput></screen>

      <para>Приложение на локальном сервере, желающее предоставить сервис
	Bluetooth удаленным клиентам, регистрирует сервис через локального
	даемона SDP.  Пример такого приложения &mdash; &man.rfcomm.pppd.8;.
	После запуска оно регистрирует Bluetooth LAN сервис через локального
	даемона SDP.</para>

      <para>Список сервисов, зарегистрированных через локальный SDP сервер,
	может быть получен путем выдачи запроса на просмотр SDP через
	локальный контрольный канал:</para>

      <screen>&prompt.root; <userinput>sdpcontrol -l browse</userinput></screen>
    </sect2>

    <sect2>
      <title>Доступ к сети по коммутируемой линии связи (DUN) и по протоколу
        PPP (LAN)</title>

      <para>Модуль работы с коммутируемым доступом к сети (DUN - Dial-Up
        Networking) в большинстве случаев используется с модемами и сотовыми
        телефонами.  Этот модуль покрывает следующие случаи:</para>

      <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-канала на удалённом
        устройстве используйте утилиту &man.sdpcontrol.8;.</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),
        необходимо запустить сервер &man.sdpd.8;.  В файле
        <filename>/etc/ppp/ppp.conf</filename> должна быть создана новая запись
        для клиентов LAN.  Примеры можно найти в справке по
        &man.rfcomm.pppd.8;.   Наконец, запустите RFCOMM PPP сервер на
	существующем номере канала RFCOMM.  Сервер RFCOMM PPP автоматически
	зарегистрирует Bluetooth LAN сервис через локальный 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 Object Push (OPUSH) Profile</title>

      <para>OBEX является широко используемым протоколом для простой передачи
        файлов между мобильными устройствами.  В основном он используется в
        коммуникациях через инфракрасный порт для передачи файлов между
        ноутбуками или КПК, а также для пересылки визитных
        карточек или календарных планов между сотовыми телефонами и
        другими устройствами с персональными информационными
        менеджерами.</para>

      <para>Сервер и клиент OBEX реализованы в виде пакета стороннего
        разработчика <application>obexapp</application>, который доступен
	в виде порта <filename role="package">comms/obexapp</filename>.</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&gt; get telecom/devinfo.txt devinfo-t39.txt
Success, response: OK, Success (0x20)
obex&gt; put new.vcf
Success, response: OK, Success (0x20)
obex&gt; di
Success, response: OK, Success (0x20)</screen>

      <para>Для того, чтобы предоставить сервис OBEX Push, должен быть запущен
	сервер &man.sdpd.8;.  Должен быть создан
        корневой каталог, в котором будут сохраняться все поступающие объекты.
        По умолчанию корневым каталогом является
	<filename>/var/spool/obex</filename>.  Наконец, запустите OBEX
	сервер на существующем номере канала RFCOMM.  OBEX сервер
	автоматически зарегистрирует сервис OBEX Object Push через локального
	даемона SDP.  В примере ниже показано, как запустить
        OBEX-сервер.</para>

      <screen>&prompt.root; <userinput>obexapp -s -C 10</userinput></screen>
    </sect2>

    <sect2>
      <title>Профиль последовательного порта (SPP)</title>

      <para>Профиль последовательного порта (SPP - Serial Port Profile) позволяет
        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</application> который доступен в виде порта
	  <filename role="package">comms/hcidump</filename>.  Утилита
          <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>NAT</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&nbsp;4.0 поддерживают
	  функции моста.  Прочтите страницу Справочника по &man.bridge.4; для
	  выяснения подробностей о поддерживаемых адаптерах.</para>

        <para>Перед тем, как продолжить, сначала установите и протестируйте
	  два сетевых адаптера.</para>
      </sect3>

      <sect3>
        <title>Изменения в конфигурации ядра</title>

        <indexterm>
          <primary>параметры ядра</primary>

          <secondary>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.enable=1</programlisting>

      <para>в файл <filename>/etc/sysctl.conf</filename> для включения функций
        моста во время работы системы, и строку:</para>

      <programlisting>net.link.ether.bridge.config=<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;, предшествующих &os;&nbsp;5.2-RELEASE, нужно
        использовать следующие строки:</para>

      <programlisting>net.link.ether.bridge=1
net.link.ether.bridge_cfg=<replaceable>if1</replaceable>,<replaceable>if2</replaceable>
net.link.ether.bridge_ipfw=1</programlisting>
    </sect2>

    <sect2>
      <title>Дополнительные замечания</title>

      <para>Если вы хотите осуществлять удалённый доступ на мост через
        &man.ssh.1; из сети, то корректно назначить одному из сетевых
        адаптеров IP-адрес.  Общепринято, что назначение адреса обоим сетевым
        адаптерам является не самой хорошей идеей.</para>

      <para>Если в вашей сети присутствует несколько мостов, не должно быть
        более одного маршрута между любыми двумя рабочими станциями.  С
        технической точки зрения это означает отсутствие поддержки протокола
        spanning tree.</para>

      <para>Сетевой мост может увеличить задержки в замерах командой
        &man.ping.8;, особенно для трафика между двумя разными
        сегментами.</para>
    </sect2>
  </sect1>

  <sect1 id="network-diskless">
    <sect1info>
      <authorgroup>
        <author>
          <firstname>Jean-Fran&ccedil;ois</firstname>
          <surname>Dock&egrave;s</surname>
          <contrib>Текст обновил </contrib>
        </author>
      </authorgroup>
      <authorgroup>
	<author>
	  <firstname>Alex</firstname>
	  <surname>Dupre</surname>
	  <contrib>Реорганизовал и улучшил </contrib>
	</author>
      </authorgroup>
    </sect1info>

    <title>Работа с бездисковыми станциями</title>

    <indexterm><primary>работа без диска</primary></indexterm>

    <para>Машина с FreeBSD может загружаться по сети и работать без наличия
      локального диска, используя файловые системы, монтируемые с сервера <acronym>NFS</acronym>.
      Кроме стандартных конфигурационных файлов, не нужны никакие модификации
      в системе.  Такую систему легко настроить, потому что все необходимые
      элементы уже готовы:</para>

    <itemizedlist>
      <listitem>
        <para>Имеется по крайней мере два возможных способа загрузки ядра по
          сети:</para>

        <itemizedlist>
          <listitem>
            <para><acronym>PXE</acronym>: Система &intel; Preboot eXecution
              Environment является формой загрузочного ПЗУ, встроенного в
              некоторые сетевые адаптеры или материнские платы.  Обратитесь к
              справочной странице по &man.pxeboot.8; для получения более полной
              информации.</para>
          </listitem>


          <listitem>
            <para>Порт <application>Etherboot</application> (<filename
              role="package">net/etherboot</filename>) генерирует код,
              который может применяться в ПЗУ для загрузки ядра по сети.  Код
              может быть либо прошит в загрузочный PROM на сетевом адаптере,
              либо загружен с локальной дискеты (или винчестера), или с
              работающей системы &ms-dos;.  Поддерживаются многие сетевые
              адаптеры.</para>
          </listitem>
        </itemizedlist>
      </listitem>

      <listitem>
        <para>Примерный скрипт
          (<filename>/usr/share/examples/diskless/clone_root</filename>)
          облегчает создание и поддержку корневой файловой системы рабочей
          станции на сервере.  Скрипт, скорее всего, потребует некоторых
          настроек, но он позволит вам быстро начать работу.</para>
      </listitem>

      <listitem>
        <para>Стандартные файлы начального запуска системы, располагающиеся в
          <filename>/etc</filename>, распознают и поддерживают загрузку системы
          в бездисковом варианте.</para>
      </listitem>

      <listitem>
        <para>Подкачка, если она нужна, может выполняться через файл <acronym>NFS</acronym> либо
          на локальный диск.</para>
      </listitem>
    </itemizedlist>

    <para>Существует много способов настройки бездисковой рабочей станции.  При
      этом задействованы многие компоненты, и большинство из них могут быть
      настроены для удовлетворения ваших вкусов.  Далее будет описаны варианты
      полной настройки системы, при этом упор будет делаться на простоту и
      совместимость с стандартной системой скриптов начальной загрузки FreeBSD.
      Описываемая система имеет такие характеристики:</para>

    <itemizedlist>
      <listitem>
        <para>Бездисковые рабочие станции совместно используют
          файловую систему <filename>/</filename> в режиме только
          чтения, а также используют <filename>/usr</filename> совместно тоже
          в режиме только чтения.</para>

        <para>Корневая файловая система является копией
          стандартной корневой системы FreeBSD (обычно сервера), с некоторыми
          настроечными файлами, измененными кем-то специально для бездисковых
          операций или, возможно, для рабочей станции, которой она
          предназначена.</para>

        <para>Части корневой файловой системы, которые
          должны быть доступны для записи, перекрываются файловыми системами
          &man.mfs.8; (&os;&nbsp;4.X) или &man.md.4; (&os;&nbsp;5.X).
	  Любые изменения будут потеряны при перезагрузках
          системы.</para>
      </listitem>

      <listitem>
        <para>Ядро передается и загружается посредством
          <application>Etherboot</application> или <acronym>PXE</acronym>,
	  и в некоторых ситуациях может быть использован любой из
	  этих методов.</para>
      </listitem>
    </itemizedlist>

    <caution>
      <para>Как описано, эта система не защищена.  Она должна располагаться в
        защищенной части сети, а другие хосты не должны на нее
        полагаться.</para>
    </caution>

    <para>Вся информация этого раздела была протестирована с
      релизами &os; 4.9-RELEASE и 5.2.1-RELEASE.  Текст структурирован
      преимущественно для использования с 4.X.  Отличия
      для 5.X упоминаются особо.</para>

    <sect2>
      <title>Общая информация</title>

      <para>Настройка бездисковых рабочих станций относительно проста,
	но в то же время легко сделать ошибку.  Иногда сложно
	диагностировать эти ошибки по нескольким причинам.
	Например:</para>

      <itemizedlist>
	<listitem>
	  <para>Параметры компиляции могут по-разному проявлять
	    себя во время работы.</para>
	</listitem>

	<listitem>
	  <para>Сообщения об ошибках бывают загадочны или вовсе
	    отсутствуют.</para>
	</listitem>
      </itemizedlist>

      <para>В данной ситуации некоторые знания, касающиеся используемых
	внутренних механизмов, очень полезны при разрешении проблем,
	которые могут возникнуть.</para>

      <para>Для выполнения успешной загрузки необходимо произвести
	несколько операций:</para>
        
      <itemizedlist>
	<listitem>
	  <para>Компьютеру необходимо получить начальные параметры, такие
	    как собственный IP адрес, имя исполняемого файла, корневой
	    каталог.  Для этого используются протоколы <acronym>DHCP</acronym>
	    или BOOTP.   <acronym>DHCP</acronym> это совместимое расширение
	    BOOTP, используются те же номера портов и основной формат
	    пакетов.</para>

	  <para>Возможна настройка системы для использования только BOOTP.
	    Серверная программа &man.bootpd.8; включена в основную систему
	    &os;.</para>

	  <para>Тем не менее, у <acronym>DHCP</acronym> есть множество
	    преимуществ над BOOTP (лучше файлы настройки, возможность
	    использования <acronym>PXE</acronym>, плюс многие другие
	    преимущества, не относящиеся непосредственно к бездисковым
	    операциям), и мы в основном будем описывать настройку
	    <acronym>DHCP</acronym>, с эквивалентными примерами
	    для &man.bootpd.8;, когда это возможно.  Пример
	    конфигурации будет использовать пакет
	    <application>ISC DHCP</application> (релиз
	    3.0.1.r12 был установлен на тестовом сервере).</para>
	</listitem>

	<listitem>
	  <para>Компьютеру требуется загрузить в локальную память одну
	    или несколько программ.  Используются <acronym>TFTP</acronym>
	    или <acronym>NFS</acronym>.  Выбор между
	    <acronym>TFTP</acronym> или <acronym>NFS</acronym>
	    производится во время компилирования в нескольких местах.
	    Часто встречающаяся ошибка это указание имен файлов для
	    другого протокола: <acronym>TFTP</acronym> обычно
	    загружает все файлы с одного каталога сервера, и принимает
	    имена файлов относительно этого каталога.  <acronym>NFS</acronym>
	    нужны абсолютные пути к файлам.</para>
	</listitem>

	<listitem>
	  <para>Необходимо инициализировать и выполнить возможные
	    промежуточные программы загрузки и ядро.  В этой области
	    существует несколько важных вариаций:</para>

	  <itemizedlist>
	    <listitem>
	      <para><acronym>PXE</acronym> загрузит &man.pxeboot.8;,
		являющийся модифицированной версией загрузчика
		третьей стадии &os;.  &man.loader.8; получит большинство
		параметров, необходимых для старта системы, и оставит
		их в окружении ядра до контроля передачи.  В этом
		случае возможно использование ядра
		<filename>GENERIC</filename>.</para>
	    </listitem>

	    <listitem>
	      <para><application>Etherboot</application>, непосредственно
		загрузит ядро, с меньшей подготовкой.  Вам потребуется
		собрать ядро со специальными параметрами.</para>
	    </listitem>
	  </itemizedlist>

	  <para><acronym>PXE</acronym> и <application>Etherboot</application>
	    работают одинаково хорошо с системами 4.X.  Поскольку ядро
	    5.X обычно позволяет &man.loader.8; выполнить больше
	    предварительной работы, метод <acronym>PXE</acronym> на системах
	    5.X предпочтителен.</para>

	  <para>Если ваш <acronym>BIOS</acronym> и сетевые карты поддерживают
	    <acronym>PXE</acronym>, используйте его.  Однако, все же возможен
	    запуск системы 5.X с <application>Etherboot</application>.</para>
	</listitem>

	<listitem>
	  <para>Наконец, компьютеру требуется доступ к файловым системам.
	    <acronym>NFS</acronym> используется во всех случаях.</para>
	</listitem>
      </itemizedlist>

      <para>Обратитесь также к странице справочника &man.diskless.8;.</para>
    </sect2>

    <sect2>
      <title>Инструкции по настройке</title>

      <sect3>
          <title>Конфигурация с использованием ISC DHCP</title>

          <indexterm>
            <primary>DHCP</primary>
            <secondary>бездисковые конфигурации</secondary>
          </indexterm>

          <para>Сервер <application>ISC DHCP</application> может обрабатывать
            как запросы BOOTP, так и запросы <acronym>DHCP</acronym>.</para>

          <para>Начиная с релиза 4.9, <application>ISC DHCP 3.0</application>
            не включается в поставку системы.  Сначала вам нужно будет
            установить порт <filename
            role="package">net/isc-dhcp3-server</filename>
            или соответствующий пакет.</para>

          <para>После установки <application>ISC DHCP</application> ему для
            работы требуется конфигурационный файл (обычно называемый
            <filename>/usr/local/etc/dhcpd.conf</filename>).  Вот
            прокомментированный пример, где хост <hostid>margaux</hostid>
	    использует <application>Etherboot</application>, а хост
	    <hostid>corbieres</hostid> использует
	    <acronym>PXE</acronym>:</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 "/data/misc/kernel.diskless"; <co id="co-dhcp-filename">
    option root-path "192.168.4.4:/data/misc/diskless"; <co id="co-dhcp-root-path">
  }
  host corbieres {
    hardware ethernet 00:02:b3:27:62:df;
    fixed-address corbieres.example.com;
    next-server 192.168.4.4;
    filename "pxeboot";
    option root-path "192.168.4.4:/data/misc/diskless";
  }
}
          </programlisting>

          <calloutlist>
            <callout arearefs="co-dhcp-host-name">
              <para>Этот параметр указывает <application>dhcpd</application> посылать
                значения деклараций <literal>host</literal> как имя хоста для
                бездисковой машины.  Альтернативным способом было бы добавление
                <literal>option host-name
                <replaceable>margaux</replaceable></literal> внутри объявлений
		<literal>host</literal>.</para>
            </callout>

            <callout arearefs="co-dhcp-next-server">
              <para>Директива <literal>next-server</literal> определяет сервер
                <acronym>TFTP</acronym> или <acronym>NFS</acronym>,
		используемый для получения загрузчика или файла ядра
		(по умолчанию используется тот же самый хост, на котором
                расположен сервер <acronym>DHCP</acronym>).</para>
            </callout>

            <callout arearefs="co-dhcp-filename">
              <para>Директива <literal>filename</literal> определяет файл,
		который <application>Etherboot</application> или
		<acronym>PXE</acronym> будут загружать для следующего шага
		выполнения.  Он должен быть указан в соответствии с
		используемым методом передачи.
		<application>Etherboot</application> может быть скомпилирован
		для использования <acronym>NFS</acronym> или
		<acronym>TFTP</acronym>.  &os; порт по умолчанию использует
		<acronym>NFS</acronym>.  <acronym>PXE</acronym> использует
		<acronym>TFTP</acronym>, поэтому здесь применяются
		относительные пути файлов (это может зависеть от настроек
		<acronym>TFTP</acronym> сервера, но обычно довольно типично).
		Кроме того, <acronym>PXE</acronym> загружает
		<filename>pxeboot</filename>, а не ядро.  Существуют другие
		интересные возможности, такие как загрузка
		<filename>pxeboot</filename> из каталога
		<filename role="directory">/boot</filename> &os; CD-ROM
		(поскольку &man.pxeboot.8; может загружать
		<filename>GENERIC</filename> ядро, это делает возможной
		загрузку с удаленного CD-ROM).</para>
            </callout>

            <callout arearefs="co-dhcp-root-path">
              <para>Параметр <literal>root-path</literal> определяет путь к
                корневой файловой системе, в обычной нотации
		<acronym>NFS</acronym>.  При использовании
		<acronym>PXE</acronym>, можно оставить IP хоста отключенным,
		если параметр ядра BOOTP не используется.  Затем
		<acronym>NFS</acronym> сервер может использоваться так же,
		как и <acronym>TFTP</acronym>.</para>
            </callout>
          </calloutlist>
        </sect3>

        <sect3>
          <title>Настройка с использованием BOOTP</title>

          <indexterm>
            <primary>BOOTP</primary>
            <secondary>бездисковые конфигурации</secondary>
          </indexterm>

          <para>Далее описана эквивалентная конфигурация с использованием
            <application>bootpd</application> (для одного клиента).
	    Она будет располагаться в
            <filename>/etc/bootptab</filename>.</para>

	  <para>Пожалуйста, отметьте, что <application>Etherboot</application>
            должен быть откомпилирован с нестандартной опцией
            <literal>NO_DHCP_SUPPORT</literal> для того, чтобы можно было
            использовать BOOTP, и что для работы <acronym>PXE</acronym>
            <emphasis>необходим</emphasis> <acronym>DHCP</acronym>.
	    Единственным очевидным
            преимуществом <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>
      </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>.</para> 

	<para>Вы можете изменить настройку
	  <application>Etherboot</application> (например, для использования
	  <acronym>TFTP</acronym> вместо <acronym>NFS</acronym>) путем
	  редактирования файла <filename>Config</filename>
	  в каталоге исходных текстов
	  <application>Etherboot</application>.</para>

	<para>В нашей ситуации мы будем использовать загрузочную дискету.  Для
          других методов (PROM или программа &ms-dos;) пожалуйста, обратитесь к
          документации по <application>Etherboot</application>.</para>

	<para>Для создания загрузочной дискеты, вставьте дискету в дисковод на
          машине, где установлен <application>Etherboot</application>, затем
          перейдите в каталог <filename>src</filename> в дереве
	  <application>Etherboot</application> и наберите:</para> 

	<screen>
&prompt.root; <userinput>gmake bin32/<replaceable>devicetype</replaceable>.fd0</userinput>
	</screen>

	<para><replaceable>devicetype</replaceable> зависит от типа адаптера
          Ethernet на бездисковой рабочей станции.  Обратитесь к файлу
	  <filename>NIC</filename> в том же самом каталоге для определения
          правильного значения для
          <replaceable>devicetype</replaceable>.</para>
      </sect3>

      <sect3>
	<title>Загрузка с <acronym>PXE</acronym></title>

	<para>По умолчанию, &man.pxeboot.8; загружает ядро через
	  <acronym>NFS</acronym>.  Он может быть скомпилирован для
	  использования вместо него <acronym>TFTP</acronym> путем
	  указания параметра <literal>LOADER_TFTP_SUPPORT</literal> в
	  <filename>/etc/make.conf</filename>.  Смотрите комментарии в
	  <filename>/etc/defaults/make.conf</filename> (или
	  <filename>/usr/share/examples/etc/make.conf</filename> систем
	  5.X) с инструкциями.</para>

	<para>Есть два не документированных параметра
	  <filename>make.conf</filename>, которые могут быть полезны для
	  настройки бездискового компьютера с последовательной консолью:
	  <literal>BOOT_PXELDR_PROBE_KEYBOARD</literal>, и
	  <literal>BOOT_PXELDR_ALWAYS_SERIAL</literal> (последняя существует
	  только в &os;&nbsp;5.X).</para>

	<para>Для использования <acronym>PXE</acronym> при загрузке компьютера
	  вам обычно потребуется выбрать параметр <literal>Boot from
	  network</literal> (загрузка по сети) в настройках
	  <acronym>BIOS</acronym>, или нажать функциональную клавишу во
	  время загрузки PC.</para>
      </sect3>

      <sect3>
	<title>Настройка серверов <acronym>TFTP</acronym> и <acronym>NFS</acronym></title> 

        <indexterm>
          <primary>TFTP</primary>
          <secondary>бездисковые конфигурации</secondary>
        </indexterm>

        <indexterm>
          <primary>NFS</primary>
          <secondary>бездисковые конфигурации</secondary>
        </indexterm>

	<para>Если вы используете <acronym>PXE</acronym> или
	  <application>Etherboot</application>, настроенные для
	  использования <acronym>TFTP</acronym>, вам нужно включить
	  <application>tftpd</application> на файловом сервере:</para>

        <procedure>
          <step>
            <para>Создайте каталог, файлы которого будет обслуживать
              <application>tftpd</application>, например,
              <filename>/tftpboot</filename>.</para>
          </step>

          <step>
            <para>Добавьте в ваш <filename>/etc/inetd.conf</filename> такую
              строчку:</para>

	    <programlisting>tftp	dgram	udp	wait	root	/usr/libexec/tftpd	tftpd -l -s /tftpboot</programlisting>

	    <note>
              <para>Бывает, что некоторым версиям <acronym>PXE</acronym>
		требуется <acronym>TCP</acronym>-вариант
                <acronym>TFTP</acronym>.  В таком случае добавьте вторую
		строчку, заменяющую
		<literal>dgram udp</literal> на <literal>stream
                tcp</literal>.</para> 
	    </note>
          </step>

	  <step>
	    <para>Укажите <application>inetd</application> на повторное чтение своего
              конфигурационного файла:</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>Во всех случаях, вам также нужно включить
	  <acronym>NFS</acronym> и экспортировать
          соответствующую файловую систему на сервере
	  <acronym>NFS</acronym>.</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
	      corbieres</replaceable>
              именами бездисковых рабочих станций):</para>

	    <programlisting><replaceable>/data/misc</replaceable> -alldirs -ro <replaceable>margaux corbieres</replaceable></programlisting>
          </step>

	  <step>
	    <para>Укажите <application>mountd</application> на повторное чтение
              настроечного файла.  На самом деле если вам потребовалось на
              первом шаге включить <acronym>NFS</acronym> в <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>При использовании <application>Etherboot</application>, вам
	  потребуется создать конфигурационный файл ядра для бездискового
	  клиента со
          следующими параметрами (вдобавок к обычным):</para>

	<programlisting>
options     BOOTP          # Use BOOTP to obtain IP address/hostname
options     BOOTP_NFSROOT  # NFS mount root filesystem using BOOTP info
	</programlisting>

	<para>Вам может потребоваться использовать
          <literal>BOOTP_NFSV3</literal>, <literal>BOOT_COMPAT</literal>
	  и <literal>BOOTP_WIRED_TO</literal>
          (посмотрите <filename>LINT</filename> в 4.X или
	  <filename>NOTES</filename> в 5.X).</para>

	<para>Эти имена параметров сложились исторически, и могут немного
	  ввести в заблуждение, поскольку включают необязательное
	  использование <acronym>DHCP</acronym> и BOOTP в ядре (возможно
	  включение обязательного использования BOOTP
	  или <acronym>DHCP</acronym> use).</para>

	<para>Постройте ядро (обратитесь к <xref linkend="kernelconfig">) и
	  скопируйте его в каталог, указанный в
	  <filename>dhcpd.conf</filename>.</para>

	<note><para>При использовании <acronym>PXE</acronym>, сборка ядра
	  с вышеприведенными параметрами не является совершенно необходимой
	  (хотя желательна).  Включение этих параметров приведет к
	  выполнению большинства <acronym>DHCP</acronym> запросов во время
	  загрузки ядра, с небольшим риском несоответствия новых значений
	  и значений, полученных &man.pxeboot.8; в некоторых особых
	  случаях.  Преимущество использования в том, что в качестве
	  побочного эффекта будет установлено имя хоста.  Иначе вам
	  потребуется установить имя хоста другим методом, например
	  в клиент-специфичном файле <filename>rc.conf</filename>.</para>
	</note>

	<note><para>Для включения возможности загрузки с
	    <application>Etherboot</application>, в ядро 5.X необходимо
	    включить устройство hints.  Вам потребуется установить
	    в файле конфигурации следующий параметр (см. файл
	    комментариев <filename>NOTES</filename>):</para>

	  <programlisting>hints		"GENERIC.hints"</programlisting>
	</note>
      </sect3>

      <sect3>
        <title>Подготовка корневой файловой системы</title>

        <indexterm>
          <primary>корневая файловая система</primary>
          <secondary>бездисковые конфигурации</secondary>
        </indexterm>

	<para>Вам нужно создать корневую файловую систему для бездисковых
          рабочих станций, в местоположении, заданном как
	  <literal>root-path</literal> в
          <filename>dhcpd.conf</filename>.  В следующем разделе
	  описаны два способа, чтобы сделать это.</para>

	<sect4>
	  <title>Использование скрипта <filename>clone_root</filename></title>

	<para>Это самый простой способ создания корневой файловой системы,
	  но на данный момент он не поддерживается в &os;&nbsp;4.X.  Этот
	  shell скрипт находится в
	  <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 role="directory">/etc</filename>, этим несколько запутывая
          дело.  Используйте их только для справки, за исключением того случая,
          когда вы выберете метод, ими описываемый, и тогда вам нужны
          исправленные скрипты <filename>rc</filename>.</para>
	</sect4>

	<sect4>
	  <title>Использование стандартной процедуры
	    <command>make world</command></title>

	  <para>Этот метод может быть применен к &os;&nbsp;4.X или 5.X и
	    установит новую систему (не только корневую) в
	    <envar>DESTDIR</envar>.  Все, что вам потребуется сделать,
	    это просто выполнить следующий скрипт:</para>

	  <programlisting>#!/bin/sh
export DESTDIR=/data/misc/diskless
mkdir -p ${DESTDIR}
cd /usr/src; make world && make kernel
cd /usr/src/etc; make distribution</programlisting>

	  <para>Как только это будет сделано, вам может потребоваться
	    настроить <filename>/etc/rc.conf</filename> и
	    <filename>/etc/fstab</filename>, помещенные в
	    <envar>DESTDIR</envar>, в соответствии с вашими
	    потребностями.</para>
	</sect4>
      </sect3>

      <sect3>
	<title>Настройка области подкачки</title>

	<para>Если это нужно, то файл подкачки, расположенный на сервере, можно
          использовать посредством <acronym>NFS</acronym>.  Один из методов,
	  используемых для этого, не поддерживается в релизах 5.X.</para>

	<sect4>
	  <title>Подкачка по <acronym>NFS</acronym> в &os;&nbsp;4.X</title>

	  <para>Местоположение и размер файла подкачки могут быть указаны
	    &os;-специфичными параметрами BOOTP/<acronym>DHCP</acronym>
	    128 и 129.  Примеры файлов настройки для
	    <application>ISC DHCP 3.0</application> или
	    <application>bootpd</application> приведены ниже:</para>

	<procedure>
	  <step>
            <para>Добавьте следующие строки в
              <filename>dhcpd.conf</filename>:</para>

	    <programlisting>
# Global section
option swap-path code 128 = string;
option swap-size code 129 = integer 32;

host margaux {
  ... # Standard lines, see above
  option swap-path <replaceable>"192.168.4.4:/netswapvolume/netswap"</replaceable>;
  option swap-size <replaceable>64000</replaceable>;
}
	    </programlisting>

	    <para><literal>swap-path</literal> это путь к каталогу, где
	      находятся файлы подкачки.  Название каждого файла имеет вид
	      <filename>swap.<replaceable>client-ip</replaceable></filename>.</para>

	    <para>Старые версии <application>dhcpd</application> использовали
	      синтаксис
	      <literal>option option-128 "...</literal>, который больше не
              поддерживается.</para>

	    <para>Во <filename>/etc/bootptab</filename> будет использоваться
              такой синтаксис:</para>

	    <programlisting>T128="192.168.4.4:/netswapvolume/netswap":T129=0000fa00</programlisting>

            <note>
              <para>В файле <filename>/etc/bootptab</filename> размер файла
                подкачки должен быть записан в шестнадцатеричном формате.</para>
            </note>
	  </step>

	  <step>
	    <para>На файловом сервере <acronym>NFS</acronym> создайте файл (или файлы)
              подкачки:</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>На файловом сервере <acronym>NFS</acronym>, в <filename>/etc/exports</filename>
              добавьте такую строку:</para>

	    <programlisting>
<replaceable>/netswapvolume</replaceable>  -maproot=0:10 -alldirs <replaceable>margaux corbieres</replaceable>
	    </programlisting>

	    <para>Затем укажите <application>mountd</application> на повторное
              чтение файла <filename>exports</filename>, как описано
	      ранее.</para>
	  </step>
	</procedure>
	</sect4>

	<sect4>
	  <title>Подкачка по <acronym>NFS</acronym> в &os;&nbsp;4.X</title>

	  <para>Положение и размер файла подкачки могут быть указаны в
	    &os;-специфичных параметрах BOOTP/<acronym>DHCP</acronym>
	    с номерами 128 и 129.  Ниже приведены примеры файлов
	    настройки для <application>ISC DHCP 3.0</application> или
	    <application>bootpd</application>:</para>

	<procedure>
	  <step><para>Добавьте следующие строки к
	  <filename>dhcpd.conf</filename>:</para>
	    <programlisting>
# Global section
option swap-path code 128 = string;
option swap-size code 129 = integer 32;

host margaux {
  ... # Standard lines, see above
  option swap-path <replaceable>"192.168.4.4:/netswapvolume/netswap"</replaceable>;
  option swap-size <replaceable>64000</replaceable>;
}
	    </programlisting>

	    <para><literal>swap-path</literal> это путь к каталогу, где
	      расположены файлы подкачки.  Файлы называются
	      <filename>swap.<replaceable>client-ip</replaceable></filename>.</para>

	    <para>Старые версии <application>dhcpd</application> используют
	      синтаксис <literal>option option-128 "...</literal>, которые
	      более не поддерживаются.</para>
	    <para><filename>/etc/bootptab</filename> вместо этого использует
	      следующий синтаксис:</para>

	    <programlisting>T128="192.168.4.4:/netswapvolume/netswap":T129=0000fa00</programlisting>

	    <note><para>В <filename>/etc/bootptab</filename>, размер
	      подкачки должен вычисляться в шестнадцатеричном
	      формате.</para></note>
	  </step>

	  <step>
	    <para>Создайте на <acronym>NFS</acronym> сервере с файлами подкачки
	      файлы:</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>На файловом сервере <acronym>NFS</acronym> с файлами
	    подкачки добавьте следующую строку к
	    <filename>/etc/exports</filename>:</para>
	    <programlisting>
<replaceable>/netswapvolume</replaceable>  -maproot=0:10 -alldirs <replaceable>margaux corbieres</replaceable>
	    </programlisting>
	    <para>Затем заставьте <application>mountd</application> перечитать
		конфигурационные файлы как было показано выше.</para>
	  </step>
	</procedure>
	</sect4>
      </sect3>

      <sect3>
	<title>Различные проблемы</title>
	
	<sect4>
	  <title>Работа с <filename>/usr</filename>, доступной только для
            чтения</title>

          <indexterm>
            <primary>бездисковые конфигурации</primary>
            <secondary>/usr только для чтения</secondary>
          </indexterm>

          <para>Если бездисковая рабочая станция настроена на запуск X, вам
            нужно подправить настроечный файл для
	    <application>XDM</application>, который по умолчанию
            помещает протокол ошибок в <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>
    </listitem>
  </itemizedlist>

  <para>Стоимость является важным фактором при выборе вашего решения.
    Далее перечислены все возможности от самого дешевого до самого дорогого
    варианта.</para>

    <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&nbsp;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>

    <indexterm><primary>модем</primary></indexterm>

    <para>Большинство TA используют стандартный набор AT-команд Hayes-модемов,
      и могут использоваться в качестве простой замены для модемов.</para>

    <para>TA будут работать точно так же, как и модемы, за исключением
      скорости соединения и пропускной способности, которые будут гораздо
      выше, чем у вашего старого модема.  Вам потребуется настроить <link
      linkend="ppp">PPP</link> точно также, как и в случае использования
      модема.  Проверьте, что вы задали скорость работы последовательного
      порта максимально высокой.</para>

    <indexterm><primary>PPP</primary></indexterm>
    <para>Главным преимуществом использования TA для подключения к провайдеру
      Интернет является возможность использования динамического PPP.  Так
      как пространство адресов IP истощается все больше, большинство
      провайдеров не хочет больше выдавать вам статический IP-адрес.
      Большинство же маршрутизаторов не может использовать динамическое
      выделение IP-адресов.</para>

    <para>TA полностью полагаются на даемон PPP, который используете из-за
      его возможностей и стабильности соединения.  Это позволяет вам при
      использовании FreeBSD легко заменить модем на ISDN, если у вас уже
      настроено соединение PPP.  Однако, в тоже время любые проблемы, которые
      возникают с программой PPP, отражаются и здесь.</para>

    <para>Если вы хотите максимальной надёжности, используйте <link
      linkend="ppp">PPP</link> на уровне параметра ядра, а не <link
      linkend="userppp">пользовательский PPP</link>.</para>

    <para>Известно, что следующие TA работают с FreeBSD:</para>

    <itemizedlist>
      <listitem>
	<para>Motorola BitSurfer и Bitsurfer Pro</para>
      </listitem>

      <listitem>
	<para>Adtran</para>
      </listitem>
    </itemizedlist>

    <para>Большинство остальных TA, скорее всего, тоже будут работать,
      производители TA прилагают все усилия для обеспечения поддержки
      практически всего набора стандартных AT-команд модема.</para>

    <para>Как и в случае модемов проблемой использования внешнего TA является
      потребность в хорошем последовательном адаптере на вашем
      компьютере.</para>

    <para>Вы должны прочесть учебник <ulink
      url="&url.articles.serial-uart;/index.html">Последовательные устройства
      во FreeBSD</ulink> для того, чтобы в деталях понять работу
      последовательных устройств и осознать различие между асинхронными и
      синхронными последовательными портами.</para>

    <para>TA, работающий со стандартным последовательным (асинхронным) портом
      PC, ограничивает вас скоростью 115.2&nbsp;Кбит/с, хотя реально у вас
      соединение на скорости 128&nbsp;Кбит/с.  Чтобы использовать
      128&nbsp;Кбит/с, которые обеспечивает ISDN, полностью, вы должны
      подключить TA к синхронному последовательному адаптеру.</para>

    <para>Не обманывайте себя, думая, что покупка встроенного TA поможет
      избежать проблемы синхронности/асинхронности.  Встроенные TA просто
      уже имеют внутри стандартный последовательный порт PC.  Все, что при
      этом достигается - это экономия дополнительных последовательного
      кабеля и электрической розетки.</para>

    <para>Синхронный адаптер с TA по крайней мере так же быстр, как и
      отдельный маршрутизатор, а если он работает под управлением машины
      класса 386 с FreeBSD, то это гораздо более гибкое решение.</para>

    <para>Выбор между использованием синхронного адаптера/TA или отдельного
      маршрутизатора в большей степени является религиозным вопросом.  По этому
      поводу в списках рассылки была некоторая дискуссия.  Рекомендуем поискать
      в <ulink url="&url.base;/search/index.html">архивах</ulink> обсуждение
      полностью.</para>
  </sect2>

  <sect2>
    <title>Отдельные мосты/маршрутизаторы ISDN</title>

    <indexterm>
      <primary>ISDN</primary>
      <secondary>отдельно стоящие мосты/маршрутизаторы</secondary>
    </indexterm>

    <para>Мосты или маршрутизаторы ISDN не так уж специфичны для FreeBSD
      или для любой другой операционной системы.  Для более подробного
      описания технологий маршрутизации и работы мостов, пожалуйста,
      обратитесь к справочникам по сетевым технологиям.</para>

    <para>В контексте этого раздела термины маршрутизатор и сетевой мост будут
      использоваться как взаимозаменяемые.</para>

    <para>Вместе с падением цен на простые мосты/маршрутизаторы ISDN, они
      становятся все более популярными.  Маршрутизатор ISDN представляет
      собой маленькую коробочку, которая подключается непосредственно в
      вашу сеть Ethernet, и поддерживает связь с другим мостом/маршрутизатором.
      Всё программное обеспечение для работы по PPP и другим протоколам
      встроено в маршрутизатор.</para>

    <para>Маршрутизатор обладает гораздо большей пропускной способностью, чем
      стандартный TA, так как он использует полное синхронное соединение
      ISDN.</para>

    <para>Основной проблемой с маршрутизаторами и мостами ISDN является то,
      что их совместная работа с оборудованием других производителей может
      оказаться под вопросом.  Если вы собираетесь подключаться к провайдеру,
      то вы должны обсудить с ним то, что вам нужно.</para>

    <para>Если вы планируете объединить два сегмента локальной сети, например,
      домашнюю сеть с сетью офиса, это самое простое решение с минимальными
      издержками на обслуживание.  Так как вы покупаете оборудование для
      обоих сторон соединения, то можете быть уверены, что связь будет
      работать нормально.</para>

    <para>Например, для соединения домашнего компьютера или сети
      подразделения к сети центрального офиса, может использоваться такая
      настройка:</para>

    <example>
      <title>Офис подразделения или домашняя сеть</title>

      <indexterm><primary>10 base 2</primary></indexterm>
      <para>Сеть построена в топологии общей шины на основе 10 base 2 Ethernet
        (<quote>thinnet</quote> - <quote>тонкий Ethernet</quote>).  Подключите
        маршрутизатор к сетевому кабелю с помощью трансивера AUI/10BT, если
        это нужно.</para>

      <mediaobject>
        <imageobject>
          <imagedata fileref="advanced-networking/isdn-bus">
        </imageobject>

        <textobject>
          <literallayout class="monospaced">---Рабочая станция Sun
|
---Машина с FreeBSD
|
---Windows 95
|
Отдельный маршрутизатор
   |
Канал ISDN BRI</literallayout>
        </textobject>

        <textobject>
          <phrase>10 Base 2 Ethernet</phrase>
        </textobject>
      </mediaobject>

      <para>Если ваш домашний или удаленный офис представляет собой один
	компьютер, то для непосредственного подключения к маршрутизатору вы
	вы можете использовать витую пару с перекрестным соединениям.</para>
    </example>

    <example>
      <title>Центральный офис или другая локальная сеть</title>

      <indexterm><primary>10 base T</primary></indexterm>
      <para>Сеть построена в топологии звезды на основе 10 Base T Ethernet
        (<quote>витая пара</quote>).</para>

      <mediaobject>
        <imageobject>
          <imagedata fileref="advanced-networking/isdn-twisted-pair">
        </imageobject>

        <textobject>
          <literallayout class="monospaced">    -------Сервер Novell
    | H |
    |	---Sun
    |	|
    | U ---FreeBSD
    |	|
    |	---Windows 95
    | B |
    |___---Отдельно стоящий маршрутизатор
		|
	 Канал ISDN BRI</literallayout>
        </textobject>

        <textobject>
          <phrase>Схема сети с ISDN</phrase>
        </textobject>
      </mediaobject>
    </example>

    <para>Одним большим преимуществом большинства маршрутизаторов/мостов
      является то, что они позволяют иметь 2 <emphasis>отдельных
      независимых</emphasis> соединения PPP к 2 различным сайтам
      <emphasis>одновременно</emphasis>.  Это не поддерживается в большинстве
      TA, кроме специальных (обычно дорогих) моделей, имеющих по два
      последовательных порта.  Не путайте это с балансировкой нагрузки,
      MPP и так далее.</para>

    <para>Это может оказаться весьма полезной особенностью, например, если
      у вас имеется постоянное ISDN-соединение в вашем офисе, и вы хотите
      им воспользоваться, но не хотите задействовать дополнительный канал
      ISDN на работе.  Маршрутизатор, расположенный в офисе, может
      использовать выделенное соединение по каналу B (64&nbsp;Кбит/с) для
      Интернет,
      и одновременно другой канал B для отдельного соединения для передачи
      данных.  Второй канал B может использоваться для входящих, исходящих
      и динамически распределяемых соединений (MPP и так далее) совместно с
      первым каналом B для повышения пропускной способности.</para>

    <indexterm><primary>IPX/SPX</primary></indexterm>
    <para>Мост Ethernet также позволяет вам передавать больше, чем просто
      трафик IP.  Вы сможете передавать IPX/SPX и любые другие протоколы,
      которые вы используете.</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>NAT</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, находящаяся в Интернет, должна выступать
        в роли шлюза.  Эта шлюзовая машина должна иметь два сетевых
        адаптера&mdash;один для подключения к маршрутизатору Интернет, а
        другой для подключения к ЛВС.  Все машины в локальной сети
        подключаются через сетевой концентратор или коммутатор.</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" <co id="co-natd-gateway-enable">
firewall_enable="YES" <co id="co-natd-firewall-enable">
firewall_type="OPEN" <co id="co-natd-firewall-type">
natd_enable="YES"
natd_interface="<replaceable>fxp0</replaceable>" <co id="co-natd-natd-interface">
natd_flags="" <co id="co-natd-natd-flags"></programlisting>

      <calloutlist>
	<callout arearefs="co-natd-gateway-enable">
	  <para>Указывает машине выступать в качестве шлюза.  Выполнение
	    команды <command>sysctl net.inet.ip.forwarding=1</command>
	    приведёт к тому же самому результату.</para>
        </callout>

        <callout arearefs="co-natd-firewall-enable">
	  <para>При загрузке включает использование правил брандмауэра
	    из файла <filename>/etc/rc.firewall</filename>.</para>
        </callout>

        <callout arearefs="co-natd-firewall-type">
	  <para>Здесь задается предопределенный набор правил брандмауэра,
	    который разрешает все.  Посмотрите файл
	    <filename>/etc/rc.firewall</filename> для нахождения
	    дополнительных типов.</para>
        </callout>

        <callout arearefs="co-natd-natd-interface">
	  <para>Указывает, через какой интерфейс передавать пакеты
	    (интерфейс, подключенный к Интернет).</para>
        </callout>

        <callout arearefs="co-natd-natd-flags">
	  <para>Любые дополнительный параметры, передаваемые при запуске
	    даемону &man.natd.8;.</para>
        </callout>
      </calloutlist>

      <para>При использовании вышеуказанных параметров в файле
        <filename>/etc/rc.conf</filename> при загрузке будет запущена команда
        <command>natd -interface fxp0</command>.  Эту команду можно запустить и
        вручную.</para>

      <note>
        <para>Если для передачи &man.natd.8; набирается слишком много
          параметров, возможно также использовать конфигурационный файл.  В
          этом случае имя настроечного файла должно быть задано добавлением
          следующей строки в <filename>/etc/rc.conf</filename>:</para>

        <programlisting>natd_flags="-f /etc/natd.conf"</programlisting>

        <para>Файл <filename>/etc/natd.conf</filename> будет содержать перечень
          конфигурационных параметров, по одному в строке.  К примеру, для
          примера из следующего раздела будет использоваться такой файл:</para>

        <programlisting>redirect_port tcp 192.168.0.2:6667 6667
redirect_port tcp 192.168.0.3:80 80</programlisting>

        <para>Для получения более полной информации о конфигурационном файле
          прочтите страницу справки по &man.natd.8; относительно параметра
          <option>-f</option>.</para>
      </note>

      <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>,
        а Web-сервер работает на клиенте <hostid>B</hostid>.  Чтобы это
        работало, соединения, принимаемые на портах 6667 (IRC) и 80 (Web),
        должны перенаправляться на соответствующие машины.</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" pgwide="1">
        <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-plip">
    <title>IP по параллельному порту (PLIP)</title>

    <indexterm>
      <primary>PLIP</primary>
    </indexterm>

    <indexterm>
      <primary>IP по параллельному порту</primary>

      <see>PLIP</see>
    </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 frame="none">
	<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: &lt;Printer&gt; on ppbus0
lpt0: Interrupt-driven port</screen>

      <para>Управление параллельным портом должно выполняться по прерываниям.
        Во &os;&nbsp;4.X в файле конфигурации ядра должна присутствовать
        строка, подобная следующей:</para>

      <programlisting>device ppc0 at isa? irq 7</programlisting>

      <para>Во &os;&nbsp;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;&nbsp;4.X это должно
        быть примерно так:</para>

      <screen>&prompt.root; <userinput>ifconfig lp0</userinput>
lp0: flags=8810&lt;POINTOPOINT,SIMPLEX,MULTICAST&gt; mtu 1500</screen>

      <para>а для &os;&nbsp;5.X:</para>

      <screen>&prompt.root; <userinput>ifconfig plip0</userinput>
plip0: flags=8810&lt;POINTOPOINT,SIMPLEX,MULTICAST&gt; mtu 1500</screen>

      <note>
        <para>Имя устройства, используемого для параллельного интерфейса,
          во &os;&nbsp;4.X
          (<devicename>lp<replaceable>X</replaceable></devicename>) и
          &os;&nbsp;5.X
          (<devicename>plip<replaceable>X</replaceable></devicename>).</para>
      </note>

      <para>Подключите кабель laplink к параллельным интерфейсам на обоих
        компьютерах.</para>

      <para>Настройте параметры сетевого интерфейса с обеих сторон, работая как
        пользователь <username>root</username>.  К примеру, если вы хотите
        соединить хост <hostid>host1</hostid>, на котором работает
        &os;&nbsp;4.X, с хостом <hostid>host2</hostid> под управлением
        &os;&nbsp;5.X:</para>

      <programlisting>                 host1 &lt;-----&gt; 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&lt;UP,POINTOPOINT,RUNNING,SIMPLEX,MULTICAST&gt; mtu 1500
        inet 10.0.0.1 --&gt; 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>
      <authorgroup>
	<author>
	  <firstname>Brad</firstname>
	  <surname>Davis</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 от
      KAME.  Так что система 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>Автоматическая настройка адреса (<ulink
	  url="http://www.ietf.org/rfc/rfc2462.txt">RFC2462</ulink>)</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>Механизмы преобразования IPv6-в-IPv4</para>
      </listitem>
    </itemizedlist>

    <para>Для получения дополнительной информации посмотрите:</para>

    <itemizedlist>
      <listitem>
	<para>Обзор IPv6 на сайте <ulink
	  url="http://playground.sun.com/pub/ipng/html/ipng-main.html">playground.sun.com</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>

      <table frame="none">
	<title>Зарезервированные адреса IPv6</title>

	<tgroup cols="4">
	  <thead>
	    <row>
	      <entry>IPv6 адрес</entry>
	      <entry>Длина префикса (биты)</entry>
	      <entry>Описание</entry>
	      <entry>Заметки</entry>
	    </row>
	  </thead>

	  <tbody>
	    <row>
	      <entry><hostid role="ip6addr">::</hostid></entry>
	      <entry>128 бит</entry>
	      <entry>нет описания</entry>
	      <entry>cf. <hostid role="ipaddr">0.0.0.0</hostid> в
		IPv4</entry>
	    </row>

	    <row>
	      <entry><hostid role="ip6addr">::1</hostid></entry>
	      <entry>128 бит</entry>
	      <entry>loopback адрес</entry>
	      <entry>cf. <hostid role="ipaddr">127.0.0.1</hostid> в
		IPv4</entry>
	    </row>

	    <row>
	      <entry><hostid
		role="ip6addr">::00:xx:xx:xx:xx</hostid></entry>
	      <entry>96 бит</entry>
	      <entry>встроенный IPv4</entry>
	      <entry>Нижние 32 бита это адрес IPv4.  Также
		называется <quote>IPv4 совместимым IPv6
		адресом</quote></entry>
	    </row>

	    <row>
	      <entry><hostid
		role="ip6addr">::ff:xx:xx:xx:xx</hostid></entry>
	      <entry>96 бит</entry>
	      <entry>Адрес IPv6, отображенный на IPv4</entry>
	      <entry>Нижние 32 бита это адрес IPv4.
		Для хостов, не поддерживающих IPv6.</entry>
	    </row>

	    <row>
	      <entry><hostid role="ip6addr">fe80::</hostid> - <hostid
		role="ip6addr">feb::</hostid></entry>
	      <entry>10 бит</entry>
	      <entry>link-local</entry>
	      <entry>cf. loopback адрес в IPv4</entry>
	    </row>

	    <row>
	      <entry><hostid role="ip6addr">fec0::</hostid> - <hostid
		role="ip6addr">fef::</hostid></entry>
	      <entry>10 бит</entry>
	      <entry>site-local</entry>
	      <entry>&nbsp;</entry>
	    </row>

	    <row>
	      <entry><hostid role="ip6addr">ff::</hostid></entry>
	      <entry>8 бит</entry>
	      <entry>широковещательный</entry>
	      <entry>&nbsp;</entry>
	    </row>

	    <row>
	      <entry><hostid role="ip6addr">001</hostid> (основание
		2)</entry>
	      <entry>3 бит</entry>
	      <entry>global unicast</entry>
	      <entry>Все global unicast адреса присваиваются из этого
		пула.  Первые три бита
		<quote>001</quote>.</entry>
	    </row>
	  </tbody>
	</tgroup>
      </table>
    </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>.  Кроме того, до трех ведущих <quote>0</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&lt;UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST&gt; 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 адреса в процессе автоматической
	конфигурации.</para>

      <para>Для получения дополнительной информации о структуре адресов IPv6
        обратитесь к <ulink
	url="http://www.ietf.org/rfc/rfc3513.txt">RFC3513</ulink>.</para>
    </sect2>

    <sect2>
      <title>Настройка подключения</title>

      <para>На данный момент существуют четыре способа подключиться к другим
        хостам и сетям IPv6:</para>

      <itemizedlist>
	<listitem>
	  <para>Подключиться к экспериментальному 6bone</para>
	</listitem>

	<listitem>
	  <para>Получить сеть IPv6 от вышестоящего провайдера.  Для получения
            рекомендаций обратитесь к вашему провайдеру Интернет.</para>
	</listitem>

	<listitem>
	  <para>Туннелировать посредством 6-в-4 (<ulink
	    url="http://www.ietf.org/rfc/rfc3068.txt">RFC3068</ulink>)</para>
	</listitem>

	<listitem>
	  <para>Использовать порт <filename
	    role="package">net/freenet6</filename>, если вы используете
	    коммутируемое соединение.</para>
	</listitem>
      </itemizedlist>

      <para>Здесь мы будем рассматривать подключение к 6bone, так как на
        данный момент это является самым популярным способом.</para>

      <para>Сначала взгляните на сайт <ulink
	url="http://www.6bone.net/">6bone</ulink> и найдите ближайшую к вам точку
        подключения к 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&lt;POINTOPOINT,MULTICAST&gt; 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> и увидеть танцующую
        черепаху &mdash; в случае, если ваш браузер поддерживает IPv6, как,
        например, <filename role="package">www/mozilla</filename> или
	<application>Konqueror</application>,
	который входит в <filename role="package">x11/kdebase3</filename>,
	или <filename role="package">www/epiphany</filename>.</para>
    </sect2>

    <sect2>
      <title>DNS в мире IPv6</title>

      <para>Для IPv6 использовались два типа записей DNS.  IETF
	объявил записи A6 устаревшими.  Стандартом на данный момент
	являются записи AAAA.</para>

      <para>Использование записей AAAA достаточно просто.  Назначение вашему
        имени хоста нового адреса IPv6 достигается просто добавлением:</para>

      <programlisting>MYHOSTNAME           AAAA    MYIPv6ADDR</programlisting>

      <para>к вашему первичному файлу DNS зоны.  В случае, если вы не
        обслуживаете собственные зоны <acronym>DNS</acronym>, обратитесь к
        вашему провайдеру <acronym>DNS</acronym>.  Имеющиеся версии
        <application>bind</application> (версий 8.3 и 9) и
	<filename role="package">dns/djbdns</filename> (с патчем IPv6)
	поддерживают записи AAAA.</para>
    </sect2>

    <sect2>
      <title>Внесение необходимых изменений в
	<filename>/etc/rc.conf</filename></title>

      <sect3>
	<title>Настройки клиентов IPv6</title>

	<para>Эти установки помогут вам настроить компьютер, который
	  будет работать в сети как клиент, а не как маршрутизатор.
	  Для включения настройки интерфейсов через &man.rtsol.8;
	  при загрузке, все, что вам потребуется, это добавить
	  следующую строку:</para>

	<programlisting>ipv6_enable="YES"</programlisting>

	<para>Для статического присвоения IP адреса, такого как <hostid
	  role="ip6addr">2001:471:1f11:251:290:27ff:fee0:2093</hostid>,
	  интерфейсу <devicename>fxp0</devicename>, добавьте:</para>

	<programlisting>ipv6_ifconfig_fxp0="2001:471:1f11:251:290:27ff:fee0:2093"</programlisting>

	<para>Для назначения маршрутизатором по умолчанию
	  <hostid role="ip6addr">2001:471:1f11:251::1</hostid>,
	  добавьте следующую строку к
	  <filename>/etc/rc.conf</filename>:</para>

	<programlisting>ipv6_defaultrouter="2001:471:1f11:251::1"</programlisting>

      </sect3>

      <sect3>
	<title>Настройки маршрутизатора/шлюза IPv6</title>

	<para>Этот раздел поможет вам использовать инструкции, которые выдал
	  провайдер туннеля, например, <ulink
	  url="http://www.6bone.net/">6bone</ulink>, и сделать эти настройки
	  постоянными.  Для восстановления туннеля при загрузке системы
	  используйте в <filename>/etc/rc.conf</filename> нижеприведенные
	  настройки.</para>

	<para>Задайте список туннельных интерфейсов (Generic Tunneling
	  interfaces), которые необходимо настроить, например
	  <devicename>gif0</devicename>:</para>

	<programlisting>gif_interfaces="gif0"</programlisting>

	<para>Для настройки интерфейса с локальным подключением на
	  <replaceable>MY_IPv4_ADDR</replaceable> к удаленной точке
	  <replaceable>REMOTE_IPv4_ADDR</replaceable>:</para>

	<programlisting>gifconfig_gif0="<replaceable>MY_IPv4_ADDR REMOTE_IPv4_ADDR</replaceable>"</programlisting>

	<para>Для включения IPv6 адреса, который был вам присвоен для
	  использования в подключении к туннелю IPv6, добавьте:</para>

	<programlisting>ipv6_ifconfig_gif0="<replaceable>MY_ASSIGNED_IPv6_TUNNEL_ENDPOINT_ADDR</replaceable>"</programlisting>

	<para>Затем все, что вам потребуется сделать, это добавить маршрут
	  по умолчанию для IPv6.  Это другая сторона туннеля IPv6:</para>

	<programlisting>ipv6_defaultrouter="<replaceable>MY_IPv6_REMOTE_TUNNEL_ENDPOINT_ADDR</replaceable>"</programlisting>
      </sect3>

      <sect3>
        <title>Настройка туннелирования IPv6</title>

        <para>Если сервер будет обеспечивать маршрутизацию между вашей сетью и
          остальным миром, то в файле <filename>/etc/rc.conf</filename>
          понадобится следующая строка:</para>

        <programlisting>ipv6_gateway_enable="YES"</programlisting>
      </sect3>
    </sect2>

    <sect2>
      <title>Распространение маршрутов и автоматическая настройка
	хостов</title>

      <para>Этот раздел поможет вам настроить &man.rtadvd.8; для
	распространения маршрута IPv6 по умолчанию.</para>

      <para>Для включения &man.rtadvd.8; вам понадобится добавить в
	<filename>/etc/rc.conf</filename> следующую строку:</para>

      <programlisting>rtadvd_enable="YES"</programlisting>

      <para>Важно указать интерфейс, на котором выполняется запрос
	маршрутизатора IPv6.  Например, для указания &man.rtadvd.8;
	использовать <devicename>fxp0</devicename>:</para>

      <programlisting>rtadvd_interfaces="fxp0"</programlisting>

      <para>Теперь мы должны создать файл настройки,
	<filename>/etc/rtadvd.conf</filename>.  Вот пример:</para>

      <programlisting>fxp0:\
	:addrs#1:addr="2001:471:1f11:246::":prefixlen#64:tc=ether:</programlisting>

      <para>Замените <devicename>fxp0</devicename> на интерфейс, который вы
	будете использовать.</para>

      <para>Затем, замените <hostid
	role="ip6addr">2001:471:1f11:246::</hostid> на префикс вашего
	размещения.</para>

      <para>Если у вас выделенная подсеть <hostid
	role="netmask">/64</hostid>, больше ничего менять не потребуется.
	Иначе, вам потребуется изменить <literal>prefixlen#</literal>
	на корректное значение.</para>
   </sect2>
  </sect1>

  <sect1 id="network-atm">
    <sect1info>
      <authorgroup>
	<author>
	  <firstname>Harti</firstname>
	  <surname>Brandt</surname>
	  <contrib>Предоставил </contrib>
	</author>
      </authorgroup>
    </sect1info>

    <title>Асинхронный режим передачи (ATM) в &os;&nbsp;5.X</title>

    <sect2>
      <title>Классическая настройка IP через ATM (PVC)</title>

      <para>Классический IP через ATM (<acronym>CLIP</acronym>)
	это простейший метод использования асинхронного режима
	передачи (Asynchronous Transfer Mode, ATM) с IP.  Он может
	быть использован с коммутируемыми подключениями
	(switched connections, SVC) и с постоянными подключениями
	(permanent connections, PVC).  В этом разделе будет описано
	как настроить сеть на основе PVC.</para>

      <sect3>
	<title>Полностью объединенные конфигурации</title>

	<para>Первый метод для настройки <acronym>CLIP</acronym> с
	  PVC это подключение каждого компьютера к каждому в сети с
	  выделенным PVC.  Хотя настройка проста, она непрактична
	  для большого количества компьютеров.  В примере предполагается,
	  что в сети есть четыре компьютера, каждый подключенный к
	  <acronym role="Asynchronous Transfer Mode">ATM</acronym>
	  сети с помощью карты <acronym
	  role="Asynchronous Transfer Mode">ATM</acronym> адаптера. 
	  Первый шаг это планирование IP адресов и <acronym
	  role="Asynchronous Transfer Mode">ATM</acronym> подключений между
	  компьютерами.  Мы используем:</para>

	<informaltable frame="none" pgwide="1">
	  <tgroup cols="2">
	    <colspec colwidth="1*">
	    <colspec colwidth="1*">
	    <thead>
	      <row>
		<entry>Хост</entry>
		<entry>IP адрес</entry>
	      </row>
	    </thead>

	    <tbody>
	      <row>
		<entry><hostid>hostA</hostid></entry>
		<entry><hostid role="ipaddr">192.168.173.1</hostid></entry>
	      </row>

	      <row>
		<entry><hostid>hostB</hostid></entry>
		<entry><hostid role="ipaddr">192.168.173.2</hostid></entry>
	      </row>

	      <row>
		<entry><hostid>hostC</hostid></entry>
		<entry><hostid role="ipaddr">192.168.173.3</hostid></entry>
	      </row>

	      <row>
		<entry><hostid>hostD</hostid></entry>
		<entry><hostid role="ipaddr">192.168.173.4</hostid></entry>
	      </row>
	    </tbody>
	  </tgroup>
	</informaltable>

	<para>Для сборки полностью объединенной сети нам потребуется по
	  одному ATM соединению между каждой парой компьютеров:</para>

	<informaltable frame="none" pgwide="1">
	  <tgroup cols="2">
	    <colspec colwidth="1*">
	    <colspec colwidth="1*">
	    <thead>
	      <row>
		<entry>Компьютеры</entry>
		<entry>VPI.VCI соединение</entry>
	      </row>
	    </thead>

	    <tbody>
	      <row>
		<entry><hostid>hostA</hostid> - <hostid>hostB</hostid></entry>
		<entry>0.100</entry>
	      </row>

	      <row>
		<entry><hostid>hostA</hostid> - <hostid>hostC</hostid></entry>
		<entry>0.101</entry>
	      </row>

	      <row>
		<entry><hostid>hostA</hostid> - <hostid>hostD</hostid></entry>
		<entry>0.102</entry>
	      </row>

	      <row>
		<entry><hostid>hostB</hostid> - <hostid>hostC</hostid></entry>
		<entry>0.103</entry>
	      </row>

	      <row>
		<entry><hostid>hostB</hostid> - <hostid>hostD</hostid></entry>
		<entry>0.104</entry>
	      </row>

	      <row>
		<entry><hostid>hostC</hostid> - <hostid>hostD</hostid></entry>
		<entry>0.105</entry>
	      </row>
	    </tbody>
	  </tgroup>
	</informaltable>

	<para>Значения VPI и VCI на каждом конце соединения конечно могут
	  отличаться, но для упрощения мы предполагаем, что они одинаковы.
	  Затем нам потребуется настроить ATM интерфейсы на каждом
	  хосте:</para>

	<screen>hostA&prompt.root; <userinput>ifconfig hatm0 192.168.173.1 up</userinput>
hostB&prompt.root; <userinput>ifconfig hatm0 192.168.173.2 up</userinput>
hostC&prompt.root; <userinput>ifconfig hatm0 192.168.173.3 up</userinput>
hostD&prompt.root; <userinput>ifconfig hatm0 192.168.173.4 up</userinput></screen>

	<para>предполагая, что ATM интерфейс называется
	  <devicename>hatm0</devicename> на всех хостах.  Теперь PVC
	  необходимо настроить на <hostid>hostA</hostid> (мы предполагаем,
	  что ATM коммутаторы уже настроены, вам необходимо свериться
	  с руководством на коммутатор за информацией по
	  настройке).</para>

	<screen>hostA&prompt.root; <userinput>atmconfig natm add 192.168.173.2 hatm0 0 100 llc/snap ubr</userinput>
hostA&prompt.root; <userinput>atmconfig natm add 192.168.173.3 hatm0 0 101 llc/snap ubr</userinput>
hostA&prompt.root; <userinput>atmconfig natm add 192.168.173.4 hatm0 0 102 llc/snap ubr</userinput>

hostB&prompt.root; <userinput>atmconfig natm add 192.168.173.1 hatm0 0 100 llc/snap ubr</userinput>
hostB&prompt.root; <userinput>atmconfig natm add 192.168.173.3 hatm0 0 103 llc/snap ubr</userinput>
hostB&prompt.root; <userinput>atmconfig natm add 192.168.173.4 hatm0 0 104 llc/snap ubr</userinput>

hostC&prompt.root; <userinput>atmconfig natm add 192.168.173.1 hatm0 0 101 llc/snap ubr</userinput>
hostC&prompt.root; <userinput>atmconfig natm add 192.168.173.2 hatm0 0 103 llc/snap ubr</userinput>
hostC&prompt.root; <userinput>atmconfig natm add 192.168.173.4 hatm0 0 105 llc/snap ubr</userinput>

hostD&prompt.root; <userinput>atmconfig natm add 192.168.173.1 hatm0 0 102 llc/snap ubr</userinput>
hostD&prompt.root; <userinput>atmconfig natm add 192.168.173.2 hatm0 0 104 llc/snap ubr</userinput>
hostD&prompt.root; <userinput>atmconfig natm add 192.168.173.3 hatm0 0 105 llc/snap ubr</userinput></screen>

	<para>Конечно, вместо UBR может быть использован другой тип,<!--traffic
	  contracts--> если ATM адаптер поддерживает это.  В этом случае
	  имя типа дополняется параметрами трафика.  Помощь по
	  &man.atmconfig.8; может быть получена командой:</para>

	<screen>&prompt.root; <userinput>atmconfig help natm add</userinput></screen>

	<para>или на странице справочника &man.atmconfig.8;.</para>

	<para>Та же настройка может быть выполнена через
	  <filename>/etc/rc.conf</filename>. Для <hostid>hostA</hostid>
	  это будет выглядеть примерно так:</para>

<programlisting>network_interfaces="lo0 hatm0"
ifconfig_hatm0="inet 192.168.173.1 up"
natm_static_routes="hostB hostC hostD"
route_hostB="192.168.173.2 hatm0 0 100 llc/snap ubr"
route_hostC="192.168.173.3 hatm0 0 101 llc/snap ubr"
route_hostD="192.168.173.4 hatm0 0 102 llc/snap ubr"</programlisting>

	<para>Текущий статус всех маршрутов <acronym>CLIP</acronym>
	  может быть получен командой:</para>

	<screen>hostA&prompt.root; <userinput>atmconfig natm show</userinput></screen>
      </sect3>
    </sect2>
  </sect1>
</chapter>

<!--
     Local Variables:
     mode: sgml
     sgml-declaration: "../chapter.decl"
     sgml-indent-data: t
     sgml-omittag: nil
     sgml-always-quote-attributes: t
     sgml-parent-document: ("../book.sgml" "part" "chapter")
     End:
-->
<!--  LocalWords:  config mnt www -->
