Страница 1 из 1

ipfw NAT + fwd

Добавлено: 2013-11-10 9:14:54
orsoft
Доброго времени суток.

есть машина Freebsd 9.2 - роутер

есть интерфейс в интернет (со шлюзом по умолчанию) 1.1.1.1.
интерфейс в серую сеть 192.168.1.2.
в серой сети есть другой роутер2 (192.168.1.1) в третью серую сеть (10.0.0.0/24).

на роутер написан статический маршрут в сеть 10.0.0.0 через 192.168.1.1

с роутера сервера в сети 10.0.0.0 пингуются и телнетятся без проблем

задача: сделать трансляцию обращений к белому адресу роутера на сервер в серой сети (10.0.0.5)

на centos с iptables это решалось одной строкой

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

-A PREROUTING -d 1.1.1.1/32 -p tcp --dport 443 -j DNAT --to-destination 10.0.0.5:8443
на ipfw написал

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

${FwCMD} nat 1 config log if {net_white} reset same_ports deny_in redirect_port tcp 10.0.0.5:8443 1.1.1.1:443
${FwCMD} add 00101 nat 1 log ip from any to 1.1.1.1 443 via {net_gray}
не работает (ipfw show показывает что что на правило 101 есть обработанные пакеты)

пробовал ещё написать

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

${FwCMD} add 00100 fwd 10.0.0.5,8443 log tcp from any to any 8443 via {net_gray}
не срабатывает тогда nat (смотрел ipfw show)

подскажите что я не так написал в nat? :st:

Re: ipfw NAT + fwd

Добавлено: 2013-11-10 12:54:54
lazhu
orsoft писал(а):

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

${FwCMD} add 00101 nat 1 log ip from any to 1.1.1.1 443 via {net_gray}
Непонятно, что вы хотите натить вот этим правилом

Re: ipfw NAT + fwd

Добавлено: 2013-11-10 16:01:36
werder31
я недавно парился по поводу ната))
1) Lazhu правильно сказал
2) Нужно разрешающее правило

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

$cmd add allow ip from any to 1.1.1.1 443 in via $WAN_IP
$cmd add allow ip from any to 10.0.0.5 8443 in via $WAN_IP

Re: ipfw NAT + fwd

Добавлено: 2013-11-12 11:56:19
orsoft
werder31 писал(а): 2) Нужно разрешающее правило

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

$cmd add allow ip from any to 1.1.1.1 443 in via $WAN_IP
$cmd add allow ip from any to 10.0.0.5 8443 in via $WAN_IP
при добавлении такого правила оно срабатывает и пакет уходит в уровень приложений (как написано в доках) он не будет транслироваться никуда ...
либо я что-то не догоняю

по логам

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

ipfw show
пакеты появляются на первом из разрешающих парвил и больше нигде

Re: ipfw NAT + fwd

Добавлено: 2013-11-12 12:30:27
werder31
Что бы пакет не уходил сразу по правилу, а проходил полностью фаервол -

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

net.inet.ip.fw.one_pass=1
И поставте нат выше разрешающих правил

Re: ipfw NAT + fwd

Добавлено: 2013-11-12 12:38:52
mak_v_
Самый простой правильный способ:
1) Закоментить всю фильтрацию, настроить нат
2) Постепенно включать фильтрацию + логирование.

Re: ipfw NAT + fwd

Добавлено: 2013-11-12 15:54:42
orsoft
Ура! победил!

долго курил статью
http://www.lissyara.su/articles/freebsd ... /ipfw_nat/

и вот решение для одинарного преобразования (т.е. только адреса назначения, если сервер во внутренней сети имеет шлюз по умолчанию равным данному роутеру)

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

ServGray="10.0.0.5"
ServPort="8443"
GrayIF=""

InetIF=""
WhiteAddr="1.1.1.1"
WhitePort="443"

# D NAT
${FwCMD} nat 1 config if ${InetIF} reset same_ports deny_in redirect_port tcp ${ServGray}:${ServPort} ${WhiteAddr}:${WhitePort}

# Input packet from user
${FwCMD} add 01000 nat 1 log ip from any to ${WhiteAddr} ${WhitePort} in via ${InetIF}
# Out packet to server
${FwCMD} add 01001 allow log tcp from any to ${ServGray} ${ServPort} out via ${GrayIF}

# Input packet from server
${FwCMD} add 01002 allow log tcp from ${ServGray} ${ServPort} to any in via ${GrayIF}
# Out packet to user
${FwCMD} add 01003 nat 1 log ip from ${ServGray} ${ServPort} to any out via ${InetIF}
и вот решение для двойного преобразования (т.е. адреса назначения и адреса отправителя, если сервер во внутренней сети имеет шлюз по умолчанию отличный от данного роутера)

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

ServGray="10.0.0.5"
ServPort="8443"
GrayIF=""

InetIF=""
WhiteAddr="1.1.1.1"
WhitePort="443"

# D NAT
${FwCMD} nat 1 config if ${InetIF} reset same_ports deny_in redirect_port tcp ${ServGray}:${ServPort} ${WhiteAddr}:${WhitePort}

# S NAT
${FwCMD} nat 2 config if ${GrayIF} same_ports reset deny_in

# Input packet from user
${FwCMD} add 01000 nat 1 log ip from any to ${WhiteAddr} ${WhitePort} in via ${InetIF}
# Out packet to server
${FwCMD} add 01001 nat 2 ip from any to ${ServGray} ${ServPort} out via ${GrayIF}

# Input packet from server
${FwCMD} add 01002 nat 2 ip from ${ServGray} ${ServPort} to any in via ${GrayIF}
# Out packet to user
${FwCMD} add 01003 nat 1 log ip from ${ServGray} ${ServPort} to any out via ${InetIF}
Для обеих примеров опции в /etc/rc.conf

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

gateway_enable="YES"

static_routes="second_gray"
route_second_gray="-net 10.0.0.0/24 192.168.1.100"

firewall_enable="YES"
firewall_nat_enable="YES"
firewall_type="/etc/rc.firewall"
И не забываем /etc/sysctl.conf

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

net.inet.ip.fw.one_pass=1
Всем спасибо.

PS: если у модераторов будет желание можно разместить этот пост гденить для новичков ибо таких как я думаю море

Re: ipfw NAT + fwd

Добавлено: 2013-11-12 19:13:53
lazhu
OMG
зачем такие сложности? :unknown:
зачем нат на внутреннем интерфейсе? :unknown:

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

nat config if ${ext_if} deny_in redirect_port <tcp/udp> <host>:<port> <port>
nat ip from any to any via ${ext_if}
для параноиков:

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

nat ip from any to me in recv ${ext_if}
nat ip from ${lan} to any out xmit ${ext_if}

Re: ipfw NAT + fwd

Добавлено: 2013-11-12 19:22:37
orsoft
Спасибо за комментарий.

Но на мой скромный взгляд, он несколько запоздал.

я в самом первом посте спрашивал КАК это сделать. На что получил ответ
lazhu писал(а):
orsoft писал(а):

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

${FwCMD} add 00101 nat 1 log ip from any to 1.1.1.1 443 via {net_gray}
Непонятно, что вы хотите натить вот этим правилом
после этого перечитал кучу инфы и СДЕЛАЛ. И теперь милостливо получил замечание
lazhu писал(а):OMG
зачем такие сложности? :unknown:
зачем нат на внутреннем интерфейсе? :unknown:

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

nat config if ${ext_if} deny_in redirect_port <tcp/udp> <host>:<port> <port>
nat ip from any to any via ${ext_if}
для параноиков:

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

nat ip from any to me in recv ${ext_if}
nat ip from ${lan} to any out xmit ${ext_if}
а нельзя было это сразу написать?!!!! я пребываю в а@уе :cry:

Re: ipfw NAT + fwd

Добавлено: 2013-11-12 21:18:46
snorlov
Вы думаете форум все читают каждые 5-ть минут?