История изменений
Исправление 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]
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]
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