LINUX.ORG.RU

История изменений

Исправление firkax, (текущая версия) :

Точно не помню, но вроде так:

В файрволл добавляешь два правила. Первое - обрабатывает все входящие из инета пакеты, которые ты хочешь натить и делает им divert:

ipfw add XXX divert DP1 tcp from any to EXTERNAL_IP LISTEN_PORT in via EXTERNAL_IFNAME

(если ты хочешь чтобы нат не только пробрасывал порты но и раздавал инет в локалку - тут надо ловить не только 80-й порт в и диапазон исходящих портов разрешённый нату)

XXX - номер правила, EXTERNAL_IP LISTEN_PORT - кого редиректим

DP1 - номер divert-сокета (не важно какой но он не должен пересекаться с другими divert-ами)

Второе правило будет ловить все пакеты из спрятанной локалки:

ipfw add YYY divert DP2 ip from any to any in via PRIVATE_IFNAME

Затем делаешь конфиг /etc/natd1.conf

alias_address EXTERNAL_IP
in_port DP1
out_port DP2
log yes
deny_incoming yes
pid_file /var/run/natd1.pid
redirect_port tcp TARGET_IP:TARGET_PORT EXTERNAL_IP:LISTEN_PORT [ALLOWED_CLIENT_IP]
redirect_port можно несколько

EXTERNAL_IP, DP1, DP2 те же что в файрволле

TARGET_IP:TARGET_PORT - куда редиректить

ALLOWED_CLIENT_IP - опционально список разрешённых айпи клиентов этого порта

в rc.conf gateway_enable=«YES»

Можно (но не обязательно) сделать sysctl net.inet.ip.fw.one_pass=0 - тогда пакет после ната будет не сразу отправляться как одобренный, а попадать назад в ipfw на следующее правило (XXX+1 и YYY+1), где его можно дополнительно фильтровать если надо.

Запуск ната так: /sbin/natd -f /etc/nat1.conf

Остановка с помощью kill -9 на его pid.

Можно обернуть в сервис в /usr/local/etc/rc.d/ если надо, но проще (вместе с настройкой ipfw) засунуть в /etc/rc.local

Исходная версия firkax, :

Точно не помню, но вроде так:

В файрволл добавляешь два правила. Первое - обрабатывает все входящие из инета пакеты, которые ты хочешь натить и делает им divert:

ipfw add XXX divert DP1 tcp from any to EXTERNAL_IP LISTEN_PORT in via EXTERNAL_IFNAME

XXX - номер правила, EXTERNAL_IP LISTEN_PORT - кого редиректим

DP1 - номер divert-сокета (не важно какой но он не должен пересекаться с другими divert-ами)

Второе правило будет ловить все пакеты из спрятанной локалки:

ipfw add YYY divert DP2 ip from any to any in via PRIVATE_IFNAME

Затем делаешь конфиг /etc/natd1.conf

alias_address EXTERNAL_IP
in_port DP1
out_port DP2
log yes
deny_incoming yes
pid_file /var/run/natd1.pid
redirect_port tcp TARGET_IP:TARGET_PORT EXTERNAL_IP:LISTEN_PORT [ALLOWED_CLIENT_IP]
redirect_port можно несколько

EXTERNAL_IP, DP1, DP2 те же что в файрволле

TARGET_IP:TARGET_PORT - куда редиректить

ALLOWED_CLIENT_IP - опционально список разрешённых айпи клиентов этого порта

в rc.conf gateway_enable=«YES»

Можно (но не обязательно) сделать sysctl net.inet.ip.fw.one_pass=0 - тогда пакет после ната будет не сразу отправляться как одобренный, а попадать назад в ipfw на следующее правило (XXX+1 и YYY+1), где его можно дополнительно фильтровать если надо.

Запуск ната так: /sbin/natd -f /etc/nat1.conf

Остановка с помощью kill -9 на его pid.

Можно обернуть в сервис в /usr/local/etc/rc.d/ если надо, но проще (вместе с настройкой ipfw) засунуть в /etc/rc.local