Руководство FreeBSD
Пред. | Глава 27. Сложные вопросы работы в сети | След.

# 27.8. Даемон преобразования сетевых адресов (natd)

Текст предоставил Chern Lee.

## 27.8.1. Обзор

Даемон преобразования сетевых адресов (Network Address Translation) во FreeBSD, широко известный как natd(8), является даемоном, который принимает входящие IP-пакеты, изменяет адрес отправителя на адрес локальной машины и повторно отправляет эти пакеты в потоке исходящих пакетов. natd(8) делает это, меняя IP-адрес отправителя и порт таким образом, что когда данные принимаются обратно, он может определить расположение источника начальных данных и переслать их машине, которая запрашивала данные изначально.

Чаще всего NAT используется для организации так называемого Совместного Использования Интернет.

## 27.8.2. Настройка

Из-за исчерпания пространства адресов в IPv4 и увеличения количества пользователей высокоскоростных каналов связи, таких, как кабельное подключение или DSL, необходимость в решении по Совместному Использованию Интернет растёт. Возможность подключить несколько компьютеров через единственное соединение и IP-адрес делает natd(8) подходящим решением.

Чаще всего у пользователя имеется машина, подключенная к кабельному каналу или каналу DSL с одним IP-адресом и есть желание использовать этот единственный подключенный компьютер для организации доступа в Интернет другим компьютерам в локальной сети.

Для этого машина FreeBSD, находящаяся в Интернет, должна выступать в роли шлюза. Эта шлюзовая машина должна иметь два сетевых адаптера--один для подключения к маршрутизатору Интернет, а другой для подключения к ЛВС. Все машины в локальной сети подключаются через сетевой концентратор или коммутатор.

> Замечание: Существует много способов подсоединить локальную сеть к Internet через шлюз FreeBSD. Этот пример показывает шлюз c двумя сетевыми картами.

Подобная конфигурация часто используется для совместного использования доступа в Интернет. Одна из подключенных к локальной сети машин подключается к Интернет. Остальные машины работают с Интернет посредством этой ''шлюзовой'' машины.

## 27.8.3. Настройка

В файле конфигурации ядра должны присутствовать следующие параметры:

    options IPFIREWALL
    options IPDIVERT

Дополнительно, если это нужно, можно добавить следующее:

    options IPFIREWALL_DEFAULT_TO_ACCEPT
    options IPFIREWALL_VERBOSE

В файле `/etc/rc.conf` должны быть такие строки:

    gateway_enable="YES"
    firewall_enable="YES"
    firewall_type="OPEN"
    natd_enable="YES"
    natd_interface="fxp0"
    natd_flags=""

  Указывает машине выступать в качестве шлюза. Выполнение команды `sysctl net.inet.ip.forwarding=1` приведёт к тому же самому результату.
  При загрузке включает использование правил брандмауэра из файла `/etc/rc.firewall`.
  Здесь задается предопределенный набор правил брандмауэра, который разрешает все. Посмотрите файл `/etc/rc.firewall` для нахождения дополнительных типов.
  Указывает, через какой интерфейс передавать пакеты (интерфейс, подключенный к Интернет).
  Любые дополнительный параметры, передаваемые при запуске даемону natd(8).

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

> Замечание: Если для передачи natd(8) набирается слишком много параметров, возможно также использовать конфигурационный файл. В этом случае имя настроечного файла должно быть задано добавлением следующей строки в `/etc/rc.conf`:

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

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

>     redirect_port tcp 192.168.0.2:6667 6667
>     redirect_port tcp 192.168.0.3:80 80

> Для получения более полной информации о конфигурационном файле прочтите страницу справки по natd(8) относительно параметра `-f`.

Каждой машине и интерфейсу в ЛВС должен быть назначен IP-адрес из адресного пространства частных сетей, как это определено в RFC 1918, а в качестве маршрутизатора по умолчанию должен быть задан IP-адрес машины с natd из внутренней сети.

Например, клиенты `A` и `B` в ЛВС имеют IP-адреса `192.168.0.2` и `192.168.0.3`, а интерфейс машины с natd в локальной сети имеет IP-адрес `192.168.0.1`. Маршрутизатором по умолчанию для клиентов `A` и `B` должна быть назначена машина с natd, то есть `192.168.0.1`. Внешний, или Интернет-интерфейс машины с natd не требует особых настроек для работы natd(8).

## 27.8.4. Перенаправление портов

Минусом использования natd(8) является то, что машины в локальной сети недоступны из Интернет. Клиенты в ЛВС могут выполнять исходящие соединения во внешний мир, но не могут обслуживать входящие. Это является проблемой при запуске служб Интернет на клиентских машинах в локальной сети. Простым решением является перенаправление некоторых портов Интернет машины с natd на клиента локальной сети.

Пусть, к примеру, сервер IRC запущен на клиенте `A`, а Web-сервер работает на клиенте `B`. Чтобы это работало, соединения, принимаемые на портах 6667 (IRC) и 80 (Web), должны перенаправляться на соответствующие машины.

Программе natd(8) должна быть передана команда `-redirect_port` с соответствующими параметрами. Синтаксис следующий:

         -redirect_port proto targetIP:targetPORT[-targetPORT]
                     [aliasIP:]aliasPORT[-aliasPORT]
                     [remoteIP[:remotePORT[-remotePORT]]]

В примере выше аргументы должен быть такими:

        -redirect_port tcp 192.168.0.2:6667 6667
        -redirect_port tcp 192.168.0.3:80 80

При этом будут перенаправлены соответствующие порты tcp на клиентские машины в локальной сети.

Аргумент `-redirect_port` может использоваться для указания диапазонов портов, а не конкретного порта. Например, `tcp 192.168.0.2:2000-3000 2000-3000` будет перенаправлять все соединения, принимаемые на портах от 2000 до 3000, на порты от 2000 до 3000 клиента `A`.

Эти параметры можно указать при непосредственном запуске natd(8), поместить их в параметр `natd_flags=""` файла `/etc/rc.conf`, либо передать через конфигурационный файл.

Для получение информации о других параметрах настройки обратитесь к справочной странице по natd(8)

## 27.8.5. Перенаправление адреса

Перенаправление адреса полезно, если имеется несколько адресов IP, и они должны быть на одной машине. В этой ситуации natd(8) может назначить каждому клиенту ЛВС свой собственный внешний IP-адрес. Затем natd(8) преобразует исходящие от клиентов локальной сети пакеты, заменяя IP-адреса на соответствующие внешние, и перенаправляет весь трафик, входящий на некоторый IP-адрес, обратно конкретному клиенту локальной сети. Это также называют статическим NAT. К примеру, пусть IP-адреса `128.1.1.1`, `128.1.1.2` и `128.1.1.3` принадлежат шлюзовой машине natd. `128.1.1.1` может использоваться в качестве внешнего IP-адреса шлюзовой машины natd, тогда как `128.1.1.2` и `128.1.1.3` будут перенаправляться обратно к клиентам ЛВС `A` и `B`.

Синтаксис для `-redirect_address` таков:

    -redirect_address localIP publicIP

localIP | Внутренний IP-адрес клиента локальной сети.
publicIP | Внешний IP, соответствующий клиенту локальной сети.

В примере этот аргумент будет выглядеть так:

    -redirect_address 192.168.0.2 128.1.1.2
    -redirect_address 192.168.0.3 128.1.1.3

Как и для `-redirect_port`, эти аргументы также помещаются в строку `natd_flags=""` файла `/etc/rc.conf` или передаются через конфигурационный файл. При перенаправлении адресов нет нужды в перенаправлении портов, потому что перенаправляются все данные, принимаемые для конкретного IP-адреса.

Внешние IP-адреса машины с natd должны быть активизированы и являться синонимами для внешнего интерфейса. Обратитесь к rc.conf(5), чтобы это сделать.

Пред. | Начало | След.
ISDN | Уровень выше | IP по параллельному порту (PLIP)

Этот, и другие документы, могут быть скачаны с ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите <doc@FreeBSD.org>.
По вопросам, связанным с русским переводом документации, пишите в рассылку <frdp@FreeBSD.org.ua>.
Информация по подписке на эту рассылку находится на сайте проекта перевода.