URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 47816
[ Назад ]

Исходное сообщение
"freebsd, nat и redirect_port"

Отправлено Feel , 01-Сен-04 16:05 
типичная задача - но не работает зараза...
облазил инет - масса вариантов; в манах, как обычно, есть все; да туго с примерами
суть дела:
имеем шлюз на FreeBSD 4.4 с NAT и IPFW
одна сетевуха ed0 смотрит в инет 62.114.165.35
вторая сетевуха ed1 с адресом 192.168.0.100 смотрит в локалку 192.168.0.1/24
вся локалка под виндой ходит в инет через эту машину, все работает...


Имеем
(ядро пересобрано
options IPDIVERT
options IPFIREWALL
options IPFIREWALL_FORWARD):
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
rc.conf

gateway_enable="YES"
firewall_enable="YES"
natd_enable="YES"
natd_interface="ed0"
natd_flags="-f /etc/natd.conf"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
natd.sh

/sbin/natd -f /etc/natd.conf -n ed0 -l
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
natd.conf

same_ports yes
use_sockets yes
log yes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
rc.firewall

ipfw add 100 deny udp from any to any 137,138,139
ipfw add 300 divert natd all from any to any
#-----count section
ipfw add 400 count all from any to 192.168.0.2 in
ipfw add 500 count all from 192.168.0.2 to any in
ipfw add 600 count all from any to 192.168.0.3 in
ipfw add 700 count all from 192.168.0.3 to any in
#-----allow dns
ipfw add 800 allow udp from any 53 to any
ipfw add 900 allow udp from any to any 53
#-----allow http for 192.168.0.2
ipfw add 1000 allow tcp from any 80,443 to 192.168.0.2
ipfw add 1100 allow tcp from 192.168.0.2 to any 80,443
#-----allow pop3, smtp, pass for 192.168.0.3
ipfw add 1200 allow tcp from any 110,25,143 to 192.168.0.3
ipfw add 1300 allow tcp from 192.168.0.3 to any 110,25,143
#-----allow connect
ipfw add 2000 allow tcp from 62.114.165.35 to any
хххххххх 65535 deny ip from any to any (добавляется по умолчанию)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

повторюсь - все работает :)

поставили в локалке сервак 192.168.0.11 FreeBSD 4.10 + Apache,
к которому по локалке доступ замечательный

Задача - дать доступ к этому серваку из инета,
при этом: не нарушая доступ к нему из локалки
          не нарушая доступ из локалки в инет
          не поднимая дополнительных сервисов на шлюзе (обойдясь nat и ipfw)

кажется все просто: RTFM - добавляем в
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
natd.conf

redirect_port tcp 192.168.0.11:80 80
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
rc.firewall

ipfw add 1400 allow tcp from any to 192.168.0.11 80
ipfw add 1500 allow tcp from 192.168.0.11 80 to any
ipfw add 1600 allow tcp from any to 62.114.165.35 80
ipfw add 1700 allow tcp from 62.114.165.35 80 to any
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

...ан не фурычит... пакеты будто пропадают...
выручайте братцы (чуть не плача - неделю е`бьюсь) -
что и главное куда нужно вставить (в rc.firewall ?) чтоб заработало.. ?


Содержание

Сообщения в этом обсуждении
"freebsd, nat и redirect_port"
Отправлено Lucky , 01-Сен-04 16:09 
>типичная задача - но не работает зараза...
>облазил инет - масса вариантов; в манах, как обычно, есть все; да
>туго с примерами
>суть дела:
>имеем шлюз на FreeBSD 4.4 с NAT и IPFW
>одна сетевуха ed0 смотрит в инет 62.114.165.35
>вторая сетевуха ed1 с адресом 192.168.0.100 смотрит в локалку 192.168.0.1/24
>вся локалка под виндой ходит в инет через эту машину, все работает...
>
>
>
>Имеем
>(ядро пересобрано
>options IPDIVERT
>options IPFIREWALL
>options IPFIREWALL_FORWARD):
>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>rc.conf
>
>gateway_enable="YES"
>firewall_enable="YES"
>natd_enable="YES"
>natd_interface="ed0"
>natd_flags="-f /etc/natd.conf"
>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>natd.sh
>
>/sbin/natd -f /etc/natd.conf -n ed0 -l
>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>natd.conf
>
>same_ports yes
>use_sockets yes
>log yes
>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>rc.firewall
>
>ipfw add 100 deny udp from any to any 137,138,139
>ipfw add 300 divert natd all from any to any
>#-----count section
>ipfw add 400 count all from any to 192.168.0.2 in
>ipfw add 500 count all from 192.168.0.2 to any in
>ipfw add 600 count all from any to 192.168.0.3 in
>ipfw add 700 count all from 192.168.0.3 to any in
>#-----allow dns
>ipfw add 800 allow udp from any 53 to any
>ipfw add 900 allow udp from any to any 53
>#-----allow http for 192.168.0.2
>ipfw add 1000 allow tcp from any 80,443 to 192.168.0.2
>ipfw add 1100 allow tcp from 192.168.0.2 to any 80,443
>#-----allow pop3, smtp, pass for 192.168.0.3
>ipfw add 1200 allow tcp from any 110,25,143 to 192.168.0.3
>ipfw add 1300 allow tcp from 192.168.0.3 to any 110,25,143
>#-----allow connect
>ipfw add 2000 allow tcp from 62.114.165.35 to any
>хххххххх 65535 deny ip from any to any (добавляется по умолчанию)
>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
>повторюсь - все работает :)
>
>поставили в локалке сервак 192.168.0.11 FreeBSD 4.10 + Apache,
>к которому по локалке доступ замечательный
>
>Задача - дать доступ к этому серваку из инета,
>при этом: не нарушая доступ к нему из локалки
>          не нарушая
>доступ из локалки в инет
>          не поднимая
>дополнительных сервисов на шлюзе (обойдясь nat и ipfw)
>
>кажется все просто: RTFM - добавляем в
>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>natd.conf
>
>redirect_port tcp 192.168.0.11:80 80
>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>rc.firewall
>
>ipfw add 1400 allow tcp from any to 192.168.0.11 80
>ipfw add 1500 allow tcp from 192.168.0.11 80 to any
>ipfw add 1600 allow tcp from any to 62.114.165.35 80
>ipfw add 1700 allow tcp from 62.114.165.35 80 to any
>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
>...ан не фурычит... пакеты будто пропадают...
>выручайте братцы (чуть не плача - неделю е`бьюсь) -
>что и главное куда нужно вставить (в rc.firewall ?) чтоб заработало.. ?
>


А зачем редирект то для нат? просто на файерволе порт открой и всех делов то.


"freebsd, nat и redirect_port"
Отправлено Feel , 01-Сен-04 16:28 
>А зачем редирект то для нат? просто на файерволе порт открой и делов то

а как же мине перебросить запрос из инета на сервак внутри локалки?
как нат узнает - кому в локалке отдать пришедший извне пакет на 80 порт?

чет я отупел за неделю или пора увольнятся нафиг?


"freebsd, nat и redirect_port"
Отправлено open , 01-Сен-04 17:10 
попробуй на время фаревол открыть для всего
и сразу станет понятно где собака порылась :)

>>А зачем редирект то для нат? просто на файерволе порт открой и делов то
>
>а как же мине перебросить запрос из инета на сервак внутри локалки?
>
>как нат узнает - кому в локалке отдать пришедший извне пакет на
>80 порт?
>
>чет я отупел за неделю или пора увольнятся нафиг?



"freebsd, nat и redirect_port"
Отправлено Feel , 01-Сен-04 17:34 
>попробуй на время фаревол открыть для всего
>и сразу станет понятно где собака порылась :)

дык время идет - я тоже не сижу:
пробовал поднимать второй нат на другом порту:
/sbin/natd -a 62.114.165.35 -p 8669 -redirect_port tcp 192.168.0.11:80 80
добавлял в rc.firewall перед 300 общим дивертом
ipfw add 200 divert 8669 tc from 192.168.0.101 to any via ed0
ipfw add 60000 allow all from any to any

безрезультатно...
что интересно - эта тема поднята на многих форумах и не по разу;
но НИГДЕ не доведена до конкретного рабочего примера...
толи люди всетаки сделали и успокоились - или забили нафик и проплатиле провайдеру 2 айпишник...


"freebsd, nat и redirect_port"
Отправлено dravor , 01-Сен-04 18:33 
>что интересно - эта тема поднята на многих форумах и не по
>разу;
>но НИГДЕ не доведена до конкретного рабочего примера...
>толи люди всетаки сделали и успокоились - или забили нафик и проплатиле
>провайдеру 2 айпишник...
Я отношусь к их числу :)
Грабли в том, что дайверт на нат должен стоять как можно выше, до любых других разрешающих правил. Иначе приходящий пакет сразу не доходит до ната и видимо не создает "записи соответсвия" (не знаю как правильно сказать).

Попробуй запустить нат с консоли в режиме логирования без "демонизации".
Увидишь на каком шаге пакеты у тебя пропадают.


"можно попробовать ipnat - у меня работает"
Отправлено Anastas , 01-Сен-04 17:36 
именно так, как тебе надо

>
>Задача - дать доступ к этому серваку из инета,
>при этом: не нарушая доступ к нему из локалки
>          не нарушая
>доступ из локалки в инет
>          не поднимая
>дополнительных сервисов на шлюзе (обойдясь nat и ipfw)
>

смотреть хоть здесь
https://www.opennet.ru/base/net/ipnat_freebsd.txt.html


"можно попробовать ipnat - у меня работает"
Отправлено Feel , 01-Сен-04 17:43 
>можно попробовать ipnat - у меня работает
>именно так, как тебе надо

этот вариант оставил на крайняк - ведь разбираться заново...
и потом - в нате есть эта опция - значит работать должно и так, без других портов, просто грабли где-то мешают пройти...


"можно попробовать ipnat - у меня работает"
Отправлено A Clockwork Orange , 01-Сен-04 17:56 
Был же совет, открой весь фаерволл сразу после divert дай редирект как писал, и посмотри что будет...

">Был же совет, открой весь фаерволл сразу после divert"
Отправлено Feel , 01-Сен-04 18:05 
дык... эт первое - что сделал... нифига не пускает
проверяю снаружи с другого ip - syn_sent и молчание ягнят...

вот сдесь надыбил:
http://portal.sysadmins.ru/board/viewtopic.php?t=43338
но ничерта не понятно как сделать - нет примера, а в теории и так приблизительно ясна... :)


">Был же совет, открой весь фаерволл сразу после divert"
Отправлено A Clockwork Orange , 01-Сен-04 18:24 
ipfw add 300 divert natd all from any to any
ipfw add 400 allow from any to any

natd -u -s -redirect_port tcp 192.168.0.11:80 80 -n интерфейс


">Был же совет, открой весь фаерволл сразу после divert"
Отправлено Lucky , 02-Сен-04 07:22 
>ipfw add 300 divert natd all from any to any
>ipfw add 400 allow from any to any
>
>natd -u -s -redirect_port tcp 192.168.0.11:80 80 -n интерфейс


Брось сюда ipfw show


">Был же совет, открой весь фаерволл сразу после divert"
Отправлено alk , 02-Сен-04 09:42 
строчка формата ipfw add 300 divert natd all from any to any
работает коряво

надо
my_net= "192.168.0.0/24"
${ipfw} add divert 8668(твой порт) ip from ${my_net} to any out xmit ed0
${ipfw} add divert 8668 ip from any to 62.114.165.35 in via ed0
${ipfw} add allow all from any to any (потом изменишь)

запускаем natd
natd -a 62.114.165.35 -p 8668 -redirect_port tcp 192.168.0.11:80 80

Заходим с инета
telnet 62.114.165.35 80
Все рабочее без вариантов
надеюсь DNS на твой реальный ip прописан


">Был же совет, открой весь фаерволл сразу после divert"
Отправлено alk , 02-Сен-04 09:53 
>строчка формата ipfw add 300 divert natd all from any to any
>
>работает коряво
>
>надо
>my_net= "192.168.0.0/24"
>${ipfw} add divert 8668(твой порт) ip from ${my_net} to any out xmit
>ed0
>${ipfw} add divert 8668 ip from any to 62.114.165.35 in via ed0
>
>${ipfw} add allow all from any to any (потом изменишь)
>
>запускаем natd
>natd -a 62.114.165.35 -p 8668 -redirect_port tcp 192.168.0.11:80 80
>
в догонку
route default на apache прописан?
пакеты до него доходят?
tcpdump на apache посмотри
>Заходим с инета
>telnet 62.114.165.35 80
>Все рабочее без вариантов
>надеюсь DNS на твой реальный ip прописан



"freebsd, nat и redirect_port"
Отправлено pashca , 02-Сен-04 10:06 
>natd.conf
>
>redirect_port tcp 192.168.0.11:80 80
>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>rc.firewall
>
>ipfw add 1400 allow tcp from any to 192.168.0.11 80
>ipfw add 1500 allow tcp from 192.168.0.11 80 to any
>ipfw add 1600 allow tcp from any to 62.114.165.35 80
>ipfw add 1700 allow tcp from 62.114.165.35 80 to any
>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ipfw add 1400 allow tcp from any to me 80


"заработало..."
Отправлено Feel , 02-Сен-04 13:38 
наконец то...
спасибо всем, принявшим посильное участие :)
работает так:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
natd.sh
# было
/sbin/natd -f /etc/natd.conf -n ed0 -l
# надо
/sbin/natd -f /etc/natd.conf -n ed0 -l -p 8668 -a 62.114.165.35 -redirect_port tcp 192.168.0.11:80 80
# почему-то из natd.conf не все цепляет, а из командной - пожалуйста...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
natd.conf

same_ports yes
use_sockets yes
log yes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
rc.firewall

ipfw add 100 deny udp from any to any 137,138,139
# вот строка нукудышняя - убираем нафик:
# ipfw add 300 divert natd all from any to any
# вот что пишем вместо нее:
ipfw add 300 divert natd all from 192.168.0.1/24 to not 192.168.0.1/24 out via ed0
ipfw add 301 divert natd all from any to 62.114.165.35 in via ed0
# никаких строк, типа 302 добавлять не надо !!!
# ipfw add 302 divert natd tcp from any to 62.114.165.35 80 out
#-----count section
ipfw add 400 count all from any to 192.168.0.2 in
ipfw add 500 count all from 192.168.0.2 to any in
# правило типа 501 ноже никчему - счетчики нулевые, пакет уже просунут внутрь
# ipfw add 501 count all from any to 192.168.0.11 in
#-----allow dns
ipfw add 800 allow udp from any 53 to any
ipfw add 900 allow udp from any to any 53
#-----allow http for 192.168.0.2
ipfw add 1000 allow tcp from any 80,443 to 192.168.0.2
ipfw add 1100 allow tcp from 192.168.0.2 to any 80,443
# строки типа 1200 - никчему тоже...
ipfw add 1200 allow tcp from 192.168.0.11 to any
#-----allow connect
ipfw add 2000 allow tcp from 62.114.165.35 to any # обязательно должно быть
# или так: перечислить разрешенные порты
# ipfw add 2000 allow tcp from 62.114.165.35 to any 53,80,443
ipfw add 3000 log deny all from any to any # не помешает :)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

т.е. вся вообщем заковыка была в natd.sh
почему.. неясно :)

и еще...
найдено в интернете - все четко и ясно (не то что маны :)
1. Пакеты проходят правила в прямом порядке, т.е. по номерам, от меньшего к большему
2. При простейшем случае роутинга - две сетевухи, пакет проходит файрвол 3 раза - на входе одной сетевухи (recv in), на ее выходе (recv out), на выходе другой сетевухи (xmit out)
3. Divert, равно как Forward, равно как и Tee может запулить пакет (почти) куда угодно - и согласно ограничениям


"заработало..."
Отправлено DENNN , 02-Сен-04 13:50 

>найдено в интернете - все четко и ясно (не то что маны
Вообще-то это есть все в манах и handbook, просто нужно читать внимательно

"есть все в манах"
Отправлено Feel , 02-Сен-04 14:06 
согласен на 100 прц, но зато как четко, лаконично, доступно и по русски Ж)