Даемон преобразования сетевых адресов (Network Address Translation) во FreeBSD, широко известный как natd(8), является даемоном, который принимает входящие IP-пакеты, изменяет адрес отправителя на адрес локальной машины и повторно отправляет эти пакеты в потоке исходящих пакетов. natd(8) делает это, меняя IP-адрес отправителя и порт таким образом, что когда данные принимаются обратно, он может определить расположение источника начальных данных и переслать их машине, которая запрашивала данные изначально.
Чаще всего NAT используется для организации так называемого Совместного Использования Интернет.
Из-за исчерпания пространства адресов в IPv4 и увеличения количества пользователей высокоскоростных каналов связи, таких, как кабельное подключение или DSL, необходимость в решении по Совместному Использованию Интернет растёт. Возможность подключить несколько компьютеров через единственное соединение и IP-адрес делает natd(8) подходящим решением.
Чаще всего у пользователя имеется машина, подключенная к кабельному каналу или каналу DSL с одним IP-адресом и есть желание использовать этот единственный подключенный компьютер для организации доступа в Интернет другим компьютерам в локальной сети.
Для этого машина FreeBSD, находящаяся в Интернет, должна выступать в роли шлюза. Эта шлюзовая машина должна иметь два сетевых адаптера-один для подключения к маршрутизатору Интернет, а другой для подключения к ЛВС. Все машины в локальной сети подключаются через сетевой концентратор или коммутатор.
Существует много способов подсоединить локальную сеть к Internet через шлюз FreeBSD. Этот пример показывает шлюз c двумя сетевыми картами.
Подобная конфигурация часто используется для совместного использования доступа в Интернет. Одна из подключенных к локальной сети машин подключается к Интернет. Остальные машины работают с Интернет посредством этой <<шлюзовой>> машины.
В файле конфигурации ядра должны присутствовать следующие параметры:
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=""
Указывает машине выступать в качестве шлюза. Выполнение
команды | |
При загрузке включает использование правил брандмауэра
из файла | |
Здесь задается предопределенный набор правил брандмауэра,
который разрешает все. Посмотрите файл
| |
Указывает, через какой интерфейс передавать пакеты (интерфейс, подключенный к Интернет). | |
Любые дополнительный параметры, передаваемые при запуске даемону 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).
Минусом использования 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)
Перенаправление адреса полезно, если имеется несколько адресов 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), чтобы это сделать.
Этот, и другие документы, могут быть скачаны с http://ftp.FreeBSD.org/pub/FreeBSD/doc/.
По вопросам, связанным с FreeBSD, прочитайте
документацию прежде чем писать в
<questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите в рассылку
<doc@FreeBSD.org>.