Обратный NAT (выбор инструмента)

Простые/общие вопросы по UNIX системам. Спросите здесь, если вы новичок

Модераторы: vadim64, terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
Hoper
рядовой
Сообщения: 34
Зарегистрирован: 2008-04-29 17:11:23

Обратный NAT (выбор инструмента)

Непрочитанное сообщение Hoper » 2012-08-08 11:06:53

Есть задача: "пробросить порт из Internet на сервер внутрь DMZ"
В принцепи все тривиально, решений множество:
1. IPNAT:

Код: Выделить всё

rdr bge0 1.2.3.4/32 port 2202 -> 192.168.5.10 port 22 tcp
2. kernel NAT (IPFW)

Код: Выделить всё

${fwcmd} nat 123 config if bge0 same_ports redirect_port tcp 192.168.5.10:22 2202
НО: необходим не просто редирект, а чтобы на внутренней машинке был виден внутренний IP шлюза а не реальный IP из нэта.
Intenet <---> 1.2.3.4-[FW]-192.168.5.1 <--------> 192.168.5.10-[SERVER]
Есть вариант rinetd, но не нравиться в силу своей ограниченности (вроде нет поброса UDP), поведения под нагрузкой, и отзывы о нем... :no: .

Подскажите чем можно реализовать данную задачу??

P.S. Ядро собрано с опциями:

Код: Выделить всё

options         IPFIREWALL
options         IPFIREWALL_VERBOSE
options         IPFIREWALL_VERBOSE_LIMIT=100
options         IPFIREWALL_FORWARD
options         IPFIREWALL_NAT
options         LIBALIAS
options         ROUTETABLES=2
options         IPDIVERT
options         DUMMYNET
options         NETGRAPH
options         IPFILTER
options         IPFILTER_LOG
money is good servant but a bad master

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Hoper
рядовой
Сообщения: 34
Зарегистрирован: 2008-04-29 17:11:23

Re: Обратный NAT (выбор инструмента)

Непрочитанное сообщение Hoper » 2012-08-14 15:23:47

Вот не первый раз уже - сам спросил - сам ответил.
/etc/rc.conf

Код: Выделить всё

firewall_enable="YES"
firewall_type="/etc/firewall"
/etc/sysctl.conf

Код: Выделить всё

net.inet.ip.fw.one_pass=1
ipfw.conf

Код: Выделить всё

#!/bin/sh
FwCMD="/sbin/ipfw" # 
LanOut="bge0"             #
IpOut="1.2.3.4"    	 # 
NetMaskOut="28"
LanIn="sk0"		 # 
IpIn="192.168.5.1"	#
NetMaskIn="26"   	 # 
${FwCMD} -f flush
${FwCMD} 100 add check-state
${FwCMD} 200 add allow ip from any to any via lo0
${FwCMD} 300 add deny ip from any to 127.0.0.0/8
${FwCMD} 310 add deny ip from 127.0.0.0/8 to any
# STOP privat NET
${FwCMD} 350 add deny ip from any to 10.0.0.0/8 in via ${LanOut}
${FwCMD} 355 add deny ip from any to 172.16.0.0/12 in via ${LanOut}
${FwCMD} 360 add deny ip from any to 192.168.0.0/16 in via ${LanOut}
${FwCMD} 370 add deny ip from any to 0.0.0.0/8 in via ${LanOut}
${FwCMD} 380 add deny ip from any to 169.254.0.0/16 in via ${LanOut}
# STOP fregment ICMP
${FwCMD} 390 add deny icmp from any to any frag
# STOP brodcast OUT
${FwCMD} 400 add deny log icmp from any to 255.255.255.255 in via ${LanOut}
${FwCMD} 410 add deny log icmp from any to 255.255.255.255 out via ${LanOut}
# SSH in
${FwCMD} 620 add allow ip from any to ${IpIn} 2002 via ${LanIn}
${FwCMD} 630 add allow ip from ${IpIn} 2002 to any via ${LanIn}
# NAT 2
${FwCMD} nat 2 config log if ${LanIn}  same_ports reset deny_in
${FwCMD} 820 add nat 2 log ip from any to any via ${LanIn}
# NAT 1
${FwCMD} nat 1 config log if ${LanOut}  reset same_ports deny_in \
 redirect_port tcp 192.168.5.10:22 2202 \
 redirect_port tcp 192.168.5.10:80 80 
${FwCMD} 900 add nat 1 log ip from any to any via ${LanOut}

${FwCMD} 65500 add deny all from any to any
Выдрано из - http://www.lissyara.su/articles/freebsd ... /ipfw_nat/ Вариант 3
Применительно к моему случаю.
Трафик приходящий из интернета на 1.2.3.4:80(2202) пройдет через цепочку правил ipfw прохода IN до правила с номером 900 где попадет в первый экземпляр ната и будет демаскирован на основании статического правила (внешний_IP <-> 1.2.3.4 будет заменено на внешний_IP <-> 192.168.5.10). После этого трафик попадет в проход OUT фаервола и дойдет до правила 820 где попадет во второй экземпляр ната. Трафик будет маскирован (внешний_IP <-> 192.168.5.10 будет заменено на 192.168.5.1 <-> 192.168.5.10). После этого трафик выйдет из ната и будет передан на 192.168.5.10:80 (2202)
Заходим на 1.2.3.4
ssh 1.2.3.4 -p 2202
видим #w

Код: Выделить всё

 3:10PM  up  1:11, 1 user, load averages: 0.00, 0.00, 0.00
USER       TTY      FROM                      LOGIN@  IDLE WHAT
sss        pts/0    192.168.5.1               2:02PM     - w
Воткактотак.
может кому поможет.
money is good servant but a bad master