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

Исходное сообщение
"Раздел полезных советов: Port mapping и открытие портов наружу во FreeBSD 7.1 (ipfw + kernel nat)"

Отправлено auto_tips , 10-Фев-09 10:21 
Для начала надо пересобрать ядро со следующими опциями

   options         IPFIREWALL              #firewall
   options         IPFIREWALL_VERBOSE      #enable logging to syslogd(8)
   options         IPFIREWALL_DEFAULT_TO_ACCEPT    #allow everything by default
   options         IPDIVERT
   options         IPFIREWALL_FORWARD
   options         DUMMYNET
   options         IPFIREWALL_NAT          #ipfw kernel nat support
   options         LIBALIAS

в /etc/make.conf:

   CFLAGS+= -DIPFIREWALL_NAT

Далее пересобираем ядро:

   cd /usr/src/
   make buildkernel KERNCONF=Yourkernel && make installkernel KERNCONF=Yourkernel

   shutdown -r now

Далее кусок файла конфигурации с примером.
192.168.1.132 - ip адрес сетевой карты смотрящей наружу
останое внутренние адреса

   #!/bin/sh
   # здесь просто удаляю старые правила
   ipfw -f flush
   ipfw nat 122 delete && ipfw nat 123 delete

   # разрещаю все через loopback
   ipfw add allow all from any to any via lo0

   # делаю нат на ip смотрящем наружу, same_ports - для попытки сохранить номера портов при нате
   ipfw nat 123 config ip 192.168.1.132 log same_ports \

   # пробрасываю все что приходит на порт 9999 на тот же порт внутренней машины
   # как вариант можно указать -redirect_port tcp 192.168.4.86:9999 192.168.1.132:9999
    redirect_port tcp 192.168.4.86:9999 9999

   # этот кусок нужен что бы у машины был не полный нат а только порт который я разрешил,
   # потому что вообще в интернет буду пускать через проксю.
   ipfw add 100 nat 123 tcp from 192.168.4.86 9999 to any
   ipfw add 100 nat 123 tcp from any to 192.168.4.86 9999

   # здесь я разрешаю клиенту с ip 192.168.4.86 коннектится к любым серверам по 25 порту,
   # но только по нему.
   ipfw add 100 nat 123 tcp from 192.168.4.86 to any 25

   # это что бы был нат, иначе ничего не будет работать, правило для выпуска клиентов наружу
   ipfw add 100 nat 123 ip from any to 192.168.1.132


Основанно на http://www.opennet.me/tips/info/1618.shtml

URL:
Обсуждается: http://www.opennet.me/tips/info/1938.shtml


Содержание

Сообщения в этом обсуждении
"Port mapping и открытие портов наружу во FreeBSD 7.1 (ipfw + kernel nat)"
Отправлено Умник , 10-Фев-09 10:21 
PF проще!

"Port mapping и открытие портов наружу во FreeBSD 7.1 (ipfw + kernel nat)"
Отправлено stasav , 10-Фев-09 10:35 
И быстрее ;)

"Port mapping и открытие портов наружу во FreeBSD 7.1 (ipfw +..."
Отправлено mc_ , 10-Фев-09 10:39 
Как производили замеры, насколько быстрее.
Нигде не встречал упоминаний что nat на pf более быстрый чем в ipfw

"Port mapping и открытие портов наружу во FreeBSD 7.1 (ipfw + kernel nat)"
Отправлено RapteR , 10-Фев-09 10:38 
http://www.opennet.me/openforum/vsluhforumID3/2106.html#14 еще проще.

"Port mapping и открытие портов наружу во FreeBSD 7.1 (ipfw +"
Отправлено cvsup , 10-Фев-09 10:39 
непонятно, для кого предназначена эта статья с уже легендарными ошибками, кочующими от автора к автору; и чем это лучше оригинала в man ipfw(8)

"Port mapping и открытие портов наружу во FreeBSD 7.1 (ipfw + kernel nat)"
Отправлено stasav , 10-Фев-09 10:57 
2 mc_ Делал замеры в своё время.

Насчет упоминаний - Посмотри как работает нат в ifpw и нат в pf, вопросы отпадут.


"Port mapping и открытие портов наружу во FreeBSD 7.1 (ipfw + kernel nat)"
Отправлено grayich , 10-Фев-09 11:12 
   CFLAGS+= -DIPFIREWALL_NAT
это нужно было только в глубокой бетте

"Port mapping и открытие портов наружу во FreeBSD 7.1 (ipfw + kernel nat)"
Отправлено reZon , 10-Фев-09 11:49 
И какие ошибки ну кроме CFLAGS+= -DIPFIREWALL_NAT?

Как раз так все работает и сделанно по ману ipfw.


"Port mapping и открытие портов наружу во FreeBSD 7.1 (ipfw +..."
Отправлено grayich , 10-Фев-09 12:17 
>ipfw nat 123 config ip 192.168.1.132 log same_ports \
>
># пробрасываю все что приходит на порт 9999 на тот же порт внутренней машины
># как вариант можно указать -redirect_port tcp 192.168.4.86:9999 192.168.1.132:9999
>redirect_port tcp 192.168.4.86:9999 9999

помоему это дело не обработается верно, если есть возможность лучше присать в 1 строчку без переносов с помощью " \"  и уж темболее не вставляя комментариев после переноса

и еще из примера можно исключить удаление nat 122 так как он не используется.

з.ы.
можно ли удалить все наты одной командой?


"Port mapping и открытие портов наружу во FreeBSD 7.1 (ipfw +..."
Отправлено reZon , 10-Фев-09 12:29 
Да и согласен с комментом после переноса конечно я лопухнулся =(

А вообще написал все это по той причине что по этому делу много вопросов но нет практически никаких ответов...
Поэтому курил часть мана ipfw по нат... очень долго... И решил что может это хоть кому-то облегчит жизнь... то это гуд.


"Port mapping и открытие портов наружу во FreeBSD 7.1 (ipfw + kernel nat)"
Отправлено reZon , 10-Фев-09 12:24 
Удалить все наты одной командой нельзя, по крайней мере у меня не получилось.

Отрабатывает все верно, с переносами легче просматривать если пробросок много.

Комменты это я конечно погорячился, писал только для заметки их.


"Port mapping и открытие портов наружу во FreeBSD 7.1 (ipfw + kernel nat)"
Отправлено stasav , 10-Фев-09 13:18 
ipfw nat flush

"Port mapping и открытие портов наружу во FreeBSD 7.1 (ipfw +..."
Отправлено grayich , 10-Фев-09 13:26 
сами то пробовали? =)


"Port mapping и открытие портов наружу во FreeBSD 7.1 (ipfw +..."
Отправлено reZon , 10-Фев-09 13:39 
>ipfw nat flush

Неа, не работает.


"Port mapping и открытие портов наружу во FreeBSD 7.1 (ipfw +..."
Отправлено grayich , 10-Фев-09 13:56 
>>ipfw nat flush
>
>Неа, не работает.

вообщето работает и очень хорошо работает, особенно для тех кто удаленно сидит... сносит все правила, тоже что и ipfw flush


"Port mapping и открытие портов наружу во FreeBSD 7.1 (ipfw +..."
Отправлено reZon , 10-Фев-09 14:01 
Ню =) Я же имел ввиду что для ната не работает =)
Все правила ната на месте =)

"Port mapping и открытие портов наружу во FreeBSD 7.1 (ipfw + kernel nat)"
Отправлено stasav , 10-Фев-09 16:32 
ipfw default_to_accept и никаких проблем.

"Port mapping и открытие портов наружу во FreeBSD 7.1 (ipfw +..."
Отправлено reZon , 10-Фев-09 16:34 
>ipfw default_to_accept и никаких проблем.

А теперь поясни пожалуйста свою мысль...


"Port mapping и открытие портов наружу во FreeBSD 7.1 (ipfw + kernel nat)"
Отправлено stasav , 11-Фев-09 05:52 
ipfw default_to_accept, опция ядра. Смотри man или в examples, как это работает.

"Port mapping и открытие портов наружу во FreeBSD 7.1 (ipfw + kernel nat)"
Отправлено stasav , 11-Фев-09 05:54 
#options        IPFIREWALL_DEFAULT_TO_ACCEPT
К предъидущему сообщению =)

"Port mapping и открытие портов наружу во FreeBSD 7.1 (ipfw +..."
Отправлено reZon , 11-Фев-09 11:03 
Я просил пояснить каких таких проблем не будет?

Мне не нужно все разрешать всё, последнее правило у меня всегда deny from any to any.

Отрытый файрвол не лишает необходимости прописывать то что я написал в заметке.


"Port mapping и открытие портов наружу во FreeBSD 7.1 (ipfw + kernel nat)"
Отправлено BoOgatti , 11-Фев-09 09:58 
Зачем для кернель ната опция ipdivert? Зачем флаг в мэйк.конфе?

По поводу удаления всех правил ната: такой команды я не нашёл (ipfw nat del all и прочие похожие комбинации не канают =/ )

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


"Port mapping и открытие портов наружу во FreeBSD 7.1 (ipfw + kernel nat)"
Отправлено Гзкр , 11-Фев-09 14:03 
ядро можно не пересобирать
kldload ipfw
kldload ipfw_nat
kldload ipdivert

"Port mapping и открытие портов наружу во FreeBSD 7.1 (ipfw +..."
Отправлено reZon , 11-Фев-09 15:05 
>ядро можно не пересобирать
>kldload ipfw
>kldload ipfw_nat
>kldload ipdivert

Замечательно! Конечно можно ничего не пересобирать, только вот надежнее все же вкомпилить в ядро и быстрее...
Кроме того пересборка ядра замечательная возможность избавится от всего лишнего....


"Port mapping и открытие портов наружу во FreeBSD 7.1 (ipfw +..."
Отправлено Добрый Дохтур , 11-Фев-09 15:42 
>только вот надежнее все же вкомпилить в ядро и быстрее...

1)и как это связано с надежностью?
2)не быстрее.


"Port mapping и открытие портов наружу во FreeBSD 7.1 (ipfw +"
Отправлено anon , 11-Фев-09 14:41 
свои 20 копеек внесу
make kernel KERNCONF=Yourkernel
так было бы проще :)

"Port mapping и открытие портов наружу во FreeBSD 7.1 (ipfw + kernel nat)"
Отправлено Стас , 11-Фев-09 17:35 
легче  rinetd  использовать

"Port mapping и открытие портов наружу во FreeBSD 7.1 (ipfw +..."
Отправлено vec135 , 12-Фев-09 05:45 
>легче  rinetd  использовать

+1


"Port mapping и открытие портов наружу во FreeBSD 7.1 (ipfw +..."
Отправлено grayich , 12-Фев-09 12:12 
>легче  rinetd  использовать

какой смысл усложнять систему, если НАТ всеравно используется..  Другое дело если НАТ нет.


"Port mapping и открытие портов наружу во FreeBSD 7.1 (ipfw + kernel nat)"
Отправлено doorsfan , 12-Фев-09 12:28 
а как организовать доступ внутренних клиентов к внешний_ИП:проброшенный_порт, например, проброшен 80й порт на хостерную машину, пользователь набирает http://firm.domain и открывает сайт фирмы. Я кроме решения в виде фейковой зоны для локальных пользователей ничего не придумал

"Port mapping и открытие портов наружу во FreeBSD 7.1 (ipfw +..."
Отправлено Alexander Yakimenko , 13-Фев-09 23:42 
ipfw fwd - и будет тебе счастье. Можно прозрачный прокси и редиректор (squid+squidGuard).

"Port mapping и открытие портов наружу во FreeBSD 7.1 (ipfw + kernel nat)"
Отправлено stasav , 14-Фев-09 11:53 
Ребята уже и забыли что статья про портмаппинг а не nat для чайникофф =)