Проброс портов в ядерном IPFW NAT

Октябрь, 24th 2011Рубрика: *NIX 21674
Подписаться на комментарии по RSS

Проброс портов в ядерном IPFW NAT

Обещанное продолжение статьи про настройку IPFW NAT в FreeBSD 8, работающего на уровне ядра системы. Из заголовка не трудно понять, что речь сегодня пойдет о том, как организовать проброс портов. Рассказывать, для чего вообще используется перенаправление портов здесь не стану - раз тема заинтересовала, то и определенные знания есть. Возможно, позже и напишу небольшой обзор для начинающих.

В сети достаточно много подробных инструкций, как настроить NAT во FreeBSD, используя демон natd. А вот про настройку ядерного NAT информацию найти достаточно сложно. Как-то эта тема обходится вниманием, видимо кто настраивал сам не спешит делиться своими наработками. Вообще, последнее время, замечаю мало интересных технических статей... так что буду, по мере сил, продолжать вносить свой маленький вклад в дело продвижения Open Source и FreeBSD в частности.

Для простоты продолжим настраивать открытый firewall - чтобы не загромождать пример правилами блокировки. Первым делом проверим в конфиге rc.conf следующие строки (интерфейс, смотрящий в интернет vr0):

firewall_enable="YES"
firewall_nat_enable="YES"
firewall_nat_interface="vr0"
firewall_type="OPEN"

Синтаксис написания правил ядерного IPFW NAT следующий:

ipfw [-q] nat number config config-options

Если явно не указать номер правила nat, система присваивает правилу номер 123. Рассмотрим живой пример. Нужно организовать проброс портов для IP-телефонии на внутренний VoIP шлюз, имеющий адрес 192.168.100.25. Перенаправить необходимо два TCP порта - 23 и 1720; и два UDP порта - 23000 и 23001. Вот пример изменений файла конфигурации rc.firewall:

case ${firewall_type} in
[Oo][Pp][Ee][Nn])
  ${fwcmd} nat 123 config if vr0 same_ports \
     redirect_port tcp 192.168.100.25:23 23 \
     redirect_port tcp 192.168.100.25:1720 1720 \
     redirect_port udp 192.168.100.25:23000 23000 \
     redirect_port udp 192.168.100.25:23001 23001
  ${fwcmd} add 65000 pass all from any to any
;;

Обратите внимание, каждое правило NAT должно писаться в одну строку. В примере для удобства чтения и написания выполнен перенос строк, что системой также будет воспринято как одна строка. Теперь можно перезапустить ipfw:

[root@router ~]# /etc/rc.d/ipfw restart

В результате у нас заработал проброс указанных портов в NAT. Смотрим конфиг запущенного NAT:

[root@router ~]# ipfw nat show config
ipfw nat 123 config if vr0 same_ports redirect_port udp 192.168.100.25:23001 23001 redirect_port udp 192.168.100.25:23000 23000 redirect_port tcp 192.168.100.25:1720 1720 redirect_port tcp 192.168.100.25:23 23

Если считаете статью полезной,
не ленитесь ставить лайки и делиться с друзьями.

Комментариев: 7

  1. 2011-11-04 в 00:21:24 | Каддафи

    Спасибо за статью. Уже думал не найду как заставить этот NAT работать.

  2. 2011-12-16 в 14:52:23 | tehnikpc]]>avatar]]>

    "firewall_type="OPEN""

    Это ни где не используется. Всегда пишут свои правила.

  3. 2012-05-17 в 17:32:16 | Владислав

    оператор case надо закрыть оператором esac, т.е.

    case ${firewall_type} in

    ...

    esac

  4. 2012-05-17 в 20:51:18 | dre@mer]]>avatar]]>

    Конечно надо, только я указывал что нужно исправить в имеющемся файле /etc/rc.firewall, а вот в нем помимо секции [Oo][Pp][Ee][Nn] есть и другие. Так что esac там присутствует.

  5. 2013-12-02 в 11:40:45 | Аноним

    Подскажите пожалуйста, а как быть в случае, если необходимо пробросить порты не с того же адреса, который присвоен внешнему интерфейсу и которым мы делаем nat для внутренней сети, а другому? Т.е. или выделить для какого-то внутреннего ресурса отдельный внешний ip целиком, или только несколько портов? Предполагается, что этот ip мы имеем из той же подсети что и наш внешний.

  6. 2013-12-03 в 18:17:25 | dre@mer]]>avatar]]>

    Ничего не понял из написанного. Что есть "проброс порта"? Кратко, это значит что кто-то пытается соединиться на ваш внешний интерфейс имеющий определенный адрес и порт, а NAT перенаправляет этот запрос на какой-то другой адрес и/или порт внутреннего ресурса, о котором снаружи ничего не известно.

    В вашем описании я честно говоря запутался. Попробуйте сформулировать точнее.

  7. 2014-04-15 в 12:30:37 | BuZZ

    А по MAC или IP доступ распределить можно и как?

Без регистрации
ваш комментарий будет опубликован после проверки
Регистрация на сайте

На указанный адрес будет отправлено письмо с кодом активации. Вы можете настроить собственный профиль и стать активным участником или автором.