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

не могу понять в чем проблема natd...

Добавлено: 2007-03-23 18:14:52
andy3000
вощем эпопея с редиректом портов продолжается, кучу манов перечитал, весь форум, делал как написано, сам принцип работы natd понимаю что к чему, ничего сложного....
Ну не хочет редирект портов делать и все тут. В чем затык не пойму.
OS FREEBSD 6.2
natd висит на внешнем интерфейсе rl0

rc.cofig:

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

gateway_enable="YES"
keymap="ru.koi8-r.shift"
natd_enable="YES"
natd_flags="-f /etc/natd.conf"
sshd_enable="YES"
firewall_enable="YES"
firewall_script="/script/rc.firewall"
inetd_enable="YES"
natd.conf

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

unregistered_only      yes 
use_sockets             yes 
deny_incoming           no 
same_ports              yes 
interface               rl0

redirect_port tcp 192.168.0.10:25 25

rc.firewall:

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

${fwcmd} add divert natd all from any to any via rl0
${fwcmd} add allow all from any to any 
natd стартует нормально. При попытке с удаленной машины зайти через telnet на 25 порт идет отлуп...

вообщем мозг ужо сломал :twisted:, все настройки снятся по ночам, проброс не выходит и все тут :cry:

Добавлено: 2007-03-23 21:12:21
Dmitriy.A
Забей на нат установи ballance :) и прокидывай порты по человечески.

Добавлено: 2007-03-23 22:01:04
Гость
Забей на нат установи ballance и прокидывай порты по человечески.
а что он умеет, дел в том что мне необходимо заменить комп с Иса 2004 на freebsd причем все опубликованные сервера с исы над перебросить на freebsd это ( виндовый VPN сервак расположенный внутри сети, почтарь...) главное вопрос с ВПН , сея прога кроме редиректа портов протокол 47 редиректит на внутреннюю машину?

ща покажу

Добавлено: 2007-03-23 22:21:07
abanamat
вот мой типовой клиентский фиревол. Внутре локалки обычно AD на win2003,
на нем exchange и vpn сервер. В данном случае 25 порт прокидывается программой rinetd. Вот ее конфиг:

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

11.11.11.11 25 192.168.1.100 25
ну и собсна, фиревол:

cat firewall.conf

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

fwcmd="/sbin/ipfw -q"
ngcmd="/usr/sbin/ngctl"
ifin="xl1"
ipin="192.168.1.240"
ifout="xl0"
ipout="11.11.11.11"
w2kip="192.168.1.100"
cat firewall.sh

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

#!/usr/local/bin/bash

workdir=`dirname $0`; mainconf="$workdir/firewall.conf"
if [ ! -s "$mainconf" ]; then
    echo "Ошибка: не могу найти конфигурационный файл!" && exit 1
fi
. ${mainconf}

#-------------------------------------------------- functions ------------------------------------
function load_ngnat {
#----------------------------# main nat #--------------------------------------#
${ngcmd} mkpeer ipfw: nat 60 out
${ngcmd} name ipfw:60 nat
${ngcmd} connect ipfw: nat: 61 in
${ngcmd} msg nat: setaliasaddr ${ipout}
#------------------------------------------------------------------------------#
}

function load_natd {
/sbin/natd -n ${ifout} \
-redirect_port tcp ${w2kip}:1723 ${ipout}:1723 \
-redirect_proto gre ${w2kip} ${ipout}   
}

function load_tables {
for tubnum in 0 1 2 3; do ${fwcmd} table ${tubnum} flush; done
#---------------------------- RFC1918 nets ------------------------------------#
${fwcmd} table 0 add 10.0.0.0/8
${fwcmd} table 0 add 172.16.0.0/12
${fwcmd} table 0 add 192.168.0.0/16
${fwcmd} table 0 add 169.254.0.0/16
#----------------------------- customers --------------------------------------#
${fwcmd} table 1 add 192.168.1.0/24
#---------------------------- smtp ready --------------------------------------#
${fwcmd} table 2 add 192.168.1.100              # mail srv
${fwcmd} table 2 add 192.168.1.17               # buhgalter
#------------------------------------------------------------------------------#
${fwcmd} table 3 add 192.168.1.49
#------------------------------------------------------------------------------#
}

function load_shaper {
${fwcmd} -f pipe flush; ${fwcmd} -f queue flush
#---------------------------# set dummynet #-------------------------------------------------------
${fwcmd} pipe 1 config bw 768Kbit/s queue 10KBytes                                                      # tx pipe
${fwcmd} queue 1 config pipe 1 weight 50 queue 100KBytes gred 0.002/20/50/0.1 mask src-ip 0xffffffff    # tx queue
${fwcmd} pipe 2 config bw 768Kbit/s queue 10KBytes                                                      # rx pipe
${fwcmd} queue 2 config pipe 2 weight 50 queue 100KBytes gred 0.002/20/50/0.1 mask dst-ip 0xffffffff    # rx queue
${fwcmd} pipe 3 config bw 64Kbit/s queue 10KBytes                                                       # tx pipe
${fwcmd} queue 3 config pipe 3 weight 50 queue 180KBytes gred 0.002/20/90/0.1 mask src-ip 0xffffffff    # tx queue
${fwcmd} pipe 4 config bw 64Kbit/s queue 10KBytes                                                       # rx pipe
${fwcmd} queue 4 config pipe 4 weight 50 queue 180KBytes gred 0.002/20/90/0.1 mask dst-ip 0xffffffff    # rx queue
#---------------------------------------------------------------------------------------------------------

}
function load_firewall {
${fwcmd} flush; load_shaper; load_tables
#-------------------------------------------------- d e n y ---------------------------------------------
${fwcmd} add 1 reject icmp from any to any icmptypes 5,9,13,14,15,16,17                 # deny bad icmp
${fwcmd} add 2 deny udp from any to any 137,138 in                                      # deny bad udp
${fwcmd} add 3 reset tcp from any to me 139,445 in                                      # deny bad tcp
${fwcmd} add 4 deny ip from any to 255.255.255.255                                      # deny broadcast
${fwcmd} add 5 reject ip from table\(0\) to any in via ${ifout}                         # reject RFC1918 nets
#-------------------------------------------------- m u s t ---------------------------------------------
${fwcmd} add 10 allow ip from any to any via lo0                                        # allow loopback
${fwcmd} add 12 allow ip from me to any                                                 # allow ip from me
${fwcmd} add 13 allow tcp from any to me 4446 in                                        # allow ssh from any
#------------------------------------------------- inet to me ------------------------------------------
${fwcmd} add 20 allow tcp from any to ${ipout} 25 setup limit src-addr 8                # allow smtp
#----------------------------------------------- locnet to me -----------------------------------------
${fwcmd} add 30 allow ip4 from table\(1\) to me in via ${ifin}                          # local net to me
#------------------------------------------------- n a t d -----------------------------------------------
${fwcmd} add 31 divert 8668 tcp from not me to ${ipout} 1723 in via ${ifout}            # tcp 1723 to me
${fwcmd} add 32 allow tcp from not me to ${w2kip} 1723 diverted                         # tcp 1723 to w2k
${fwcmd} add 33 divert 8668 tcp from ${w2kip} 1723 to not me in via ${ifin}             # tcp 1723 from w2k
${fwcmd} add 34 divert 8668 gre from not me to ${ipout} in via ${ifout}                 # gre to me
${fwcmd} add 35 allow gre from not me to ${w2kip}                                       # gre to w2k
${fwcmd} add 36 divert 8668 gre from ${w2kip} to not me in via ${ifin}                  # gre from w2k
#---------------------------------------------- before shaper ----------------------------------------
${fwcmd} add 43 netgraph 60 tcp from table\(1\) to any 5190 in via ${ifin}              # local net to icq
${fwcmd} add 44 allow tcp from any 5190 to table\(1\) out                               # icq to local net come back
${fwcmd} add 45 netgraph 60 tcp from table\(2\) to not me 25 in via ${ifin}             # local mailserver to any
${fwcmd} add 46 allow tcp from not me 25 to table\(2\) out                              # from any to local mailserver
#---------------------------------------------- shape services ---------------------------------------
${fwcmd} add 50 reset tcp from table\(3\) to not me 25 in via ${ifin}                   # reset smtp to inet
${fwcmd} add 51 queue 3 tcp from table\(1\) to not me 25 in via ${ifin}                 # shape smtp to inet
${fwcmd} add 52 queue 4 tcp from not me 25 to table\(1\) out                            # shape smtp to local net
#---------------------------------------------- shape localnet ---------------------------------------
${fwcmd} add 55 queue 1 ip4 from table\(1\) to not me in via ${ifin}                    # shape to inet
${fwcmd} add 56 queue 2 ip4 from not me to table\(1\) out                               # shape from inet
#----------------------------------------------- nat localnet ------------------------------------------
${fwcmd} add 60 netgraph 60 ip4 from table\(1\) to not me out                           # nat localnet to inet
${fwcmd} add 61 netgraph 61 ip4 from any to ${ipout} in via ${ifout}                    # nat inet to mainip
#---------------------------------------------------------------------------------------------------------
}

#--------------------------------------------------- w o r k --------------------------------------------
case "$*" in
all)
load_ngnat && load_firewall && load_natd
;;
fir)
load_firewall
;;
tbl)
load_tables
;;
ntd)
load_natd
;;
*)
cat << EOF

Использование: $0 (tbl|ntd|fir|all)

    tbl -- Перезагрузка таблиц
    ntd -- Запуск natd
    fir -- Перезагрузка фаервола
    all -- Использовать только при старте системы!

EOF
;;
esac

exit 0
Опции ядра такие:

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

options         DEVICE_POLLING
options         DUMMYNET
options         HZ=1000
options         IPDIVERT
options         IPFIREWALL
options         IPFIREWALL_FORWARD
options         LIBALIAS
options         NETGRAPH
options         NETGRAPH_IPFW
options         NETGRAPH_NAT
options         NETGRAPH_NETFLOW
options         NETGRAPH_ETHER
options         NETGRAPH_SPLIT
options         NETGRAPH_KSOCKET
options         PANIC_REBOOT_WAIT_TIME=16
Вотъ..
P.S. как-то все расползлось... или это у меня во фре в опере?

Добавлено: 2007-03-23 23:04:27
andy3000
по поводу rinetd я в курсе, прога настраивается проще некуда, сам пробывал 25 порт перекидывается без проблем.

Вопрос в natd, почему пакеты приходящие на внешний интерфейс не идут дальше в локальную сеть, по логике вещей все настроено верно пробывал даже с командной строки запускать NATD c необходимыми параметрами, все без проблем стартует, но опять же не помагает пакеты далее внешнего интерфейса не уходят. Причем в IPFW даю всего два самых простейших правила для проверки работоспособности редиректа:

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

${fwcmd} add divert natd all from any to any via rl0 
${fwcmd} add allow all from any to any 
причем при логировании первого правила в логе регистрируется следующее

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

Mar 23 13:13:02 inet kernel: ipfw: 100 Divert 8668 TCP 81.208.14.250:54426 83.52.96.182:25 in via rl0 
и все, тоесть как я понимаю на внешний интерфейс с удаленной машины на нужный порт все приходит , а вот потом тишина...

Добавлено: 2007-03-23 23:07:44
abanamat
natd -d?

Добавлено: 2007-03-23 23:33:17
Alex Keda

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

#!/usr/local/bin/bash 
не учите людей плохому, и переучивайтесь сами.
скрипты пишутся ТОЛЬКО на шелле.
иначе будут грабли в сопровождении, и проблемы при передаче.
======
когда огребёте в наследство жутко ответственный сервак с кучей скриптов на какомнить редком шелле - поймёте :)

Добавлено: 2007-03-23 23:38:40
abanamat
lissyara писал(а):

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

#!/usr/local/bin/bash 
не учите людей плохому, и переучивайтесь сами.
скрипты пишутся ТОЛЬКО на шелле.
иначе будут грабли в сопровождении, и проблемы при передаче.
======
когда огребёте в наследство жутко ответственный сервак с кучей скриптов на какомнить редком шелле - поймёте :)
? не согласен. какая разница на чем писать. хоть на перле.
мне нравиццо на баше. Ну вот нравится и все тут. Кроме того, я в нем сижу. И мне нравится, когда крон отрабатывает скрипт так же, как он отрабатывается когда я его ручками запускаю.

Грабли в сопровождении - это что такое?
Проблемы при передаче? Передаче чего? И кому? Сервака другому админу?
Серавно другой админ все сломает и сделает по-своему.
когда огребёте в наследство жутко ответственный сервак с кучей скриптов на какомнить редком шелле - поймёте
[классический секс] и не раз. Последний раз был перл. Сплошняком. Все сломал и переделал на баше.

ПыСы: попахивает религией.

Добавлено: 2007-03-24 10:00:57
Гость
natd -d?
этот параметр прописал в конфиге natd.conf не помогает, такое впечатление, что что-то лочит дальнейшее прохождение пакетов... :(

Добавлено: 2007-03-24 10:09:11
Alex Keda
всё ломать и переделывать - дикость.
надо делать так, чтобы не приходилось ломать.
Ибо делать только под себя - эгоизм. Дома, можно делать на чём хошь а вот на работе - нет.
============
случай из жизни знакомого - крупная контора, на серверах есть список установленного софта.
Скрипты пишутся только на шелле. Такова внутренняя политика. Ничего иного - нету. Есть на линуксах баш, но внутренним распорядком его запрещено использовать, лишь как симлинк на шелл.
===============
из моей жизни - было приятно, когда все мои скрипты завелись на линухе.
===============
сам думай. И - это не религия...

Добавлено: 2007-03-24 13:02:50
Гость
Редирект портов через natd - достаточно беспроблемная вещь. Просто надо помнить что пакету придется вернуться обратно :)
Хост, на который производится редирект, должен иметь доступ в интернет, причем через этот же сервер и этот же интерфейс (это если простым языком).
Проще всего посмотреть tcpdump-ом на внутреннем интерфейсе.
А вот так, кстати, я пробрасываю pptp vpn:

redirect_port tcp 192.168.200.1:pptp pptp
redirect_proto gre 192.168.200.1

Добавлено: 2007-03-24 19:31:40
alex3
ух ты, а я и не знал, что можно гре пробрасывать... в манах токо тисипи и удипи.

Добавлено: 2007-03-26 10:47:38
dikens3
andy3000 писал(а):по поводу rinetd я в курсе, прога настраивается проще некуда, сам пробывал 25 порт перекидывается без проблем.

Вопрос в natd, почему пакеты приходящие на внешний интерфейс не идут дальше в локальную сеть, по логике вещей все настроено верно пробывал даже с командной строки запускать NATD c необходимыми параметрами, все без проблем стартует, но опять же не помагает пакеты далее внешнего интерфейса не уходят. Причем в IPFW даю всего два самых простейших правила для проверки работоспособности редиректа:

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

${fwcmd} add divert natd all from any to any via rl0 
${fwcmd} add allow all from any to any 
причем при логировании первого правила в логе регистрируется следующее

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

Mar 23 13:13:02 inet kernel: ipfw: 100 Divert 8668 TCP 81.208.14.250:54426 83.52.96.182:25 in via rl0 
и все, тоесть как я понимаю на внешний интерфейс с удаленной машины на нужный порт все приходит , а вот потом тишина...
Я так понял с правилами всё allow.
1. Тогда Default'овый шлюз прописан на компе с почтовым сервером?
2. tcdump -n -i внутренний интерфейс host 81.208.14.250
И посмотреть, принимаются/отправляются пакеты через Внутр. интерфейс?
3. Что в логах почтовика? Может он сам всех отсылает за хлебом?

Добавлено: 2007-03-27 12:34:44
andy3000
пасиб всем огромное, вопрос решился :)

Добавлено: 2007-03-27 13:57:55
dikens3
andy3000 писал(а):пасиб всем огромное, вопрос решился :)
Чем вылечил? Рассказывай.

Добавлено: 2007-03-27 20:16:27
andy3000
обычная невнимательность, присем при том, что имею два канала интернет просто забыл в настройках TCP/IP сервера, на который пробрасывал порт поменять шлюз, как только прописал новый все зашуршало, еще раз спасибо за дельные советы: dikens3 и Гость :P