FreeBSD tips: NAT по старинке::Журнал СА 2.2005
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Подписка
Архив номеров
Где купить
Наука и технологии
Авторам
Рекламодателям
Контакты
   

  Опросы
  Статьи

Событие  

В банке рассола ждет сисадмина с полей фрактал-кукумбер

Читайте впечатления о слете ДСА 2024, рассказанные волонтером и участником слета

 Читать далее...

Организация бесперебойной работы  

Бесперебойная работа ИТ-инфраструктуры в режиме 24/7 Как обеспечить ее в нынешних условиях?

Год назад ИТ-компания «Крок» провела исследование «Ключевые тренды сервисного рынка 2023». Результаты

 Читать далее...

Книжная полка  

Читайте и познавайте мир технологий!

Издательство «БХВ» продолжает радовать выпуском интересных и полезных, к тому же прекрасно

 Читать далее...

СУБД PostgreSQL  

СУБД Postgres Pro

Сертификация по новым требованиям ФСТЭК и роль администратора без доступа к данным

 Читать далее...

Критическая инфраструктура  

КИИ для оператора связи. Готовы ли компании к повышению уровня кибербезопасности?

Похоже, что провайдеры и операторы связи начали забывать о требованиях законодательства

 Читать далее...

Архитектура ПО  

Архитектурные метрики. Качество архитектуры и способность системы к эволюционированию

Обычно соответствие программного продукта требованиям мы проверяем через скоуп вполне себе понятных

 Читать далее...

Как хорошо вы это знаете  

Что вам известно о разработках компании ARinteg?

Компания ARinteg (ООО «АРинтег») – системный интегратор на российском рынке ИБ –

 Читать далее...

Графические редакторы  

Рисование абстрактных гор в стиле Paper Cut

Векторный графический редактор Inkscape – яркий представитель той прослойки open source, с

 Читать далее...

День сисадмина  

Учите матчасть! Или как стать системным администратором

Лето – время не только отпусков, но и хорошая возможность определиться с профессией

 Читать далее...

День сисадмина  

Живой айтишник – это всегда движение. Остановка смерти подобна

Наши авторы рассказывают о своем опыте и дают советы начинающим системным администраторам.

 Читать далее...

Виртуализация  

Рынок решений для виртуализации

По данным «Обзора российского рынка инфраструктурного ПО и перспектив его развития», сделанного

 Читать далее...

Книжная полка  

Как стать креативным и востребованным

Издательский дом «Питер» предлагает новинки компьютерной литературы, а также книги по бизнесу

 Читать далее...

Книжная полка  

От создания сайтов до разработки и реализации API

В издательстве «БХВ» недавно вышли книги, которые будут интересны системным администраторам, создателям

 Читать далее...

Разбор полетов  

Ошибок опыт трудный

Как часто мы легко повторяем, что не надо бояться совершать ошибки, мол,

 Читать далее...

1001 и 1 книга  
19.03.2018г.
Просмотров: 6143
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

 Читать далее...

12.03.2018г.
Просмотров: 6856
Комментарии: 0
Особенности киберпреступлений в России: инструменты нападения и защита информации

 Читать далее...

12.03.2018г.
Просмотров: 4139
Комментарии: 0
Глубокое обучение с точки зрения практика

 Читать далее...

12.03.2018г.
Просмотров: 2978
Комментарии: 0
Изучаем pandas

 Читать далее...

12.03.2018г.
Просмотров: 3781
Комментарии: 0
Программирование на языке Rust (Цветное издание)

 Читать далее...

19.12.2017г.
Просмотров: 3789
Комментарии: 0
Глубокое обучение

 Читать далее...

19.12.2017г.
Просмотров: 6283
Комментарии: 0
Анализ социальных медиа на Python

 Читать далее...

19.12.2017г.
Просмотров: 3134
Комментарии: 0
Основы блокчейна

 Читать далее...

19.12.2017г.
Просмотров: 3434
Комментарии: 0
Java 9. Полный обзор нововведений

 Читать далее...

16.02.2017г.
Просмотров: 7246
Комментарии: 0
Опоздавших не бывает, или книга о стеке

 Читать далее...

17.05.2016г.
Просмотров: 10616
Комментарии: 0
Теория вычислений для программистов

 Читать далее...

30.03.2015г.
Просмотров: 12336
Комментарии: 0
От математики к обобщенному программированию

 Читать далее...

18.02.2014г.
Просмотров: 13969
Комментарии: 0
Рецензия на книгу «Читаем Тьюринга»

 Читать далее...

13.02.2014г.
Просмотров: 9100
Комментарии: 0
Читайте, размышляйте, действуйте

 Читать далее...

12.02.2014г.
Просмотров: 7053
Комментарии: 0
Рисуем наши мысли

 Читать далее...

10.02.2014г.
Просмотров: 5362
Комментарии: 3
Страна в цифрах

 Читать далее...

18.12.2013г.
Просмотров: 4594
Комментарии: 0
Большие данные меняют нашу жизнь

 Читать далее...

18.12.2013г.
Просмотров: 3402
Комментарии: 0
Компьютерные технологии – корень зла для точки роста

 Читать далее...

04.12.2013г.
Просмотров: 3129
Комментарии: 0
Паутина в облаках

 Читать далее...

03.12.2013г.
Просмотров: 3379
Комментарии: 0
Рецензия на книгу «MongoDB в действии»

 Читать далее...

02.12.2013г.
Просмотров: 3000
Комментарии: 0
Не думай о минутах свысока

 Читать далее...

Друзья сайта  

 FreeBSD tips: NAT по старинке

Архив номеров / 2005 / Выпуск №2 (27) / FreeBSD tips: NAT по старинке

Рубрика: Администрирование /  Продукты и решения

СЕРГЕЙ СУПРУНОВ

FreeBSD tips: NAT по старинке

В наши дни, когда свободных IP-адресов становится все меньше и меньше, трансляция сетевых адресов (Network Address Translation – NAT) становится все более актуальной. Трудно найти провайдера, который, не сопротивляясь, даст вам нужное количество реальных адресов. Наиболее типичная ситуация – когда в «комплекте» с подключением к сети Интернет выделяется один-единственный IP-адрес. В результате внутреннюю сеть приходится строить на одной из приватных подсетей (что это такое, мы рассмотрим немного позже), и эти «левые», как их называют в народе, адреса нужно каким-то образом транслировать в тот единственный реальный, данный провайдером. Cразу стоит указать и на определенное преимущество такого подхода – в большинстве случаев локальная сеть становится невидимой снаружи, то есть любой внешний хост может общаться только с сервером NAT, ничего не подозревая о наличии (не говоря уже о структуре) вашей внутренней сети. В данной статье будет показано, как настроить NAT-сервер на базе FreeBSD. В качестве инструмента будет использоваться демон natd в связке с ipfw. В современных версиях системы такая схема считается не самой лучшей в плане гибкости и нагрузки на систему, и более предпочтительным является вариант на базе IPFilter – ipnat (этот NAT будет рассмотрен в одной из следующих статей). Тем не менее старый добрый natd до сих пор честно служит на просторах Сети, и оставлять его без внимания было бы, по меньшей мере, невежливо.

Сначала – немного теории. Как известно, в сети Интернет каждый хост, взаимодействующий с другими, должен иметь уникальный IP-адрес, по которому он и распознается. Несколько сетей (10.0.0.0/8, 172.16.0.0/12 и 192.168.0.0/16) выделяются в так называемый «нерегистрируемый» диапазон, то есть они могут использоваться для нужд внутренних сетей без какой-либо регистрации. Эти адреса именуют также приватными, или «серыми». Чтобы избежать конфликтов адресов в глобальной сети, пакеты с такими адресами не должны выходить за пределы шлюза, ограничивающего соответствующую внутреннюю сеть. Поэтому такие адреса иногда называют немаршрутизируемыми (хотя внутри локальной сети они замечательно маршрутизируются). Вообще нужно заметить, что деление на реальные и приватные весьма условно. Я, например, учитывая дефицит «настоящих» адресов, выданных на наш узел, широко практикую раздачу клиентам адресов из сети 192.168.x.x, «пряча» их за NAT. Таким образом, с точки зрения клиента эти адреса будут реальными.

Суть NAT заключается в том, что в процессе преобразования адрес отправителя (который может быть любым, в том числе принадлежать немаршрутизируемой подсети) заменяется адресом NAT-сервера (он должен быть «реальным», то есть входить в диапазон адресов, предоставленный вам провайдером). В отличие от прокси-серверов, которые берут на себя обработку запросов в соответствии с тем или иным протоколом, сервер NAT просто заменяет адрес и, как правило, порт отправителя (или получателя). Он не пытается разбираться в сути передаваемых данных, и благодаря этому использование NAT не ограничено списком поддерживаемых протоколов.

Говоря упрощенно, NAT работает так: клиент, имеющий адрес «A», отправляет через порт «a» пакет на некоторый удаленный сервер. Этот пакет заворачивается (пока не будем уточнять, как именно) на сервер NAT, который вместо адреса «A» подставляет свой адрес «B» и отправляет этот пакет уже от своего имени через порт «b». Одновременно с этим в памяти сервера делается запись о выполненной подстановке, чтобы при получении ответного пакета на порт «b» знать, на кого из клиентов его пересылать. Описанная схема работы носит название «маскарадинг» (masquarading).

Помимо маскарадинга существуют также понятия SNAT и DNAT (особенно хорошо известные пользователям Linux). Первый из них (Source NAT) отвечает за преобразования адреса-источника и во многом подобен маскарадингу, с тем исключением, что работает только со статическими адресами источников, и потому менее требователен к ресурсам. DNAT (Destination NAT) осуществляет преобразование адреса назначения, что используется для проброса внешних соединений, приходящих на конкретный порт (например, 80-й) на внутренние хосты, не имеющие реального адреса. Общий случай DNAT – статический NAT, когда все внешние соединения, поступающие на указанный адрес, перенаправляются на внутренний хост.

Более полную информацию по технологии NAT можно найти в Интернете, а сейчас приступим к рассмотрению natd. Эта программа включена в систему FreeBSD, и потому никакая инсталляция не требуется. Перед началом ее использования должно быть выполнено следующее:

  • Ядро должно быть собрано с опциями IPFIREWALL и IPDIVERT – это необходимо для перенаправления пакетов на сервер natd.
  • Должна быть включена маршрутизация между интерфейсами, что можно сделать, добавив в /etc/rc.conf следующую опцию: «gateway_enable=YES».
  • Должен быть разрешен брандмауэр опцией «firewall_ enable=YES» в том же rc.conf.

Теперь можно запускать и сам сервер. Как было сказано выше, пакеты, нуждающиеся в трансляции адреса, должны быть перенаправлены на сервер NAT. При использовании natd это выполняется с помощью правила divert брандмауэра ipfw. Например, чтобы вывести в Интернет внутреннюю сеть 192.168.0.0/24, имея один реальный адрес 190.190.190.190 на интерфейсе ed0, «смотрящем» наружу, нужно сделать следующее:

  • Запустить сервер natd (ключ -interface означает, что в качестве внешнего адреса будет использоваться адрес указанного интерфейса):

# natd –interface ed0

  • Перенаправить на демон natd пакеты, адресованные с внутренних адресов во внешнюю сеть, то есть нуждающиеся в трансляции:

# ipfw add 100 divert natd ip from 192.168.0.0 to any out via ed0

  • Завернуть на NAT входящие пакеты, адресованные непосредственно на внешний интерфейс (поскольку именно сюда будут приходить ответы):

# ipfw add 110 divert natd ip from any to 190.190.190.190 in via ed0

В результате произойдет следующее: демон natd запустится с параметрами по умолчанию, то есть будет ждать пакеты на порту 8668 и в качестве внешнего IP-адреса использовать адрес указанного интерфейса, в данном случае – ed0. Отправленные клиентами пакеты ipfw будет заворачивать на порт 8668 (в /etc/services для него задано имя natd, поэтому можно использовать и его). Сервер NAT отправит эти пакеты по адресу назначения, но уже с адреса 190.190.190.190. Получив пакеты в ответ, NAT перенаправит их клиенту.

Если вы хотите использовать в качестве внешнего адреса какой-то другой, вместо ключа -interface при запуске сервера следует использовать опцию -alias_address с указанием нужного адреса в качестве параметра. Какая-то из этих опций должна быть задана обязательно, но не обе одновременно.

Дополнительно при запуске natd может быть задано достаточно большое количество опций, получить информацию по которым можно на страницах руководства man natd. Здесь рассмотрим только наиболее интересные.

Например, можно задавать отличный от используемого по умолчанию номер divert-порта, с которым будет связан сервер natd. Для этого предназначен ключ -port . Это свойство часто используется, если необходимо запустить несколько демонов natd. К сожалению, этот инструмент может обрабатывать пакеты только в соответствии с одним правилом. Поэтому, если вам нужно использовать свои параметры для различных клиентов, приходится запускать отдельные демоны на разных для каждой группы клиентов портах. Соответственно, в правилах ipfw перенаправление должно выполняться на те же порты, которые связаны с natd. Кроме того, с помощью опций -in_port и -out_port можно задавать отдельные порты для входящих и исходящих пакетов соответственно.

Иногда может быть полезно, чтобы NAT пересылал пакеты с того же порта, с которого их отправлял клиент. Для этого можно использовать опцию -same_ports, однако не забывайте, что при этом NAT не обязуется сохранять номер порта, а будет делать это по возможности. То есть в принципе порт может и поменяться (например, если нужный номер уже используется другим соединением, NAT «забудет» про ключ -same_ports и будет работать как обычно).

Если natd запущен с опцией -interface, то есть привязывается к адресу конкретного интерфейса, то при изменении IP-адреса интерфейса IP-адрес, используемый демоном natd, останется прежним. Чтобы NAT отслеживал и автоматически учитывал изменения IP-адреса интерфейса, используется опция -dynamic.

Опция -unregistered_only указывает, что NAT должен обрабатывать только пакеты, адрес источника которых входит в указанные выше «нерегистрируемые» сети.

Ключи -redirect_port, -redirect_proto и -redirect_address служат для реализации «проброса» внешних соединений на внутренний адрес в зависимости от номера порта, протокола или адреса назначения входящих пакетов соответственно. Например, если во внутренней сети имеется HTTP-сервер 192.168.0.125, к которому нужно предоставить доступ снаружи, это можно сделать с помощью опции «-redirect_port tcp 192.168.0.125:80 80».

Все опции можно вынести в конфигурационный файл, где в каждой строчке указывается одна опция с параметрами либо с пометкой «yes / no» для непараметрических опций. При запуске natd этот файл следует указать с помощью опции -config.

Теперь, чтобы natd запускался автоматически при старте системы, в /etc/rc.conf можно указать следующие строки (показан конкретный пример):

natd_enable = “YES”

natd_interface = “ed0”

natd_flags = “-config /etc/natd.conf”

При этом параметр «natd_interface» при запуске демона natd «превратится» в параметр -nterface, остальные параметры можно задать в строке natd_flags. Обычно здесь указывается только путь к конфигурационному файлу, в который выносятся все остальные настройки.

Ну и как обычно – если режим работы сервера позволяет перезагрузку, то лучше это сделать, чтобы лишний раз убедиться в правильности всех настроек и отсутствии опечаток в конфигурационных файлах.

В заключение отмечу несколько недостатков natd. Прежде всего это все-таки демон, и, следовательно, по производительности он несколько проигрывает тому же ipnat, который более тесно интегрирован с ядром. Реализация сложной политики предоставления доступа в Интернет, дифференцированная по различным группам пользователей, может потребовать запуска нескольких демонов natd, что через rc.conf уже не получится, и потребуется писать свой стартовый сценарий.

Тем не менее в большинстве случаев natd вполне справляется с возложенными на него обязанностями, и если в системе уже работает ipfw, то такая схема может оказаться наиболее простым способом построения NAT-сервера. Дополнительная информация, как обычно, в man natd(8), divert(4), rc.conf(5), ipfw(8).


Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-45
E-mail: sa@samag.ru