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

Исходное сообщение
"OpenNews: Перенос libalias в kernel mode во FreeBSD"

Отправлено opennews , 06-Сен-05 16:59 
Paolo Pisati в списке рассылки freebsd-hackers сообщил (http://lists.freebsd.org/pipermail/freebsd-hackers/2005-Sept...) о завершении работ по улучшению libalias во FreeBSD.
Paolo работал над libalias в рамках программы Google "Summer of Code", основные направления его работы:
-  перенос libalias в kernel mode;
-  интеграция с ipfw;
-  изменение организации библиотеки для более простого расширения.


URL: http://lists.freebsd.org/pipermail/freebsd-hackers/2005-Sept...
Новость: http://www.opennet.me/opennews/art.shtml?num=6038


Содержание

Сообщения в этом обсуждении
"Перенос libalias в kernel mode во FreeBSD"
Отправлено Taras_ , 06-Сен-05 16:59 
Отличная новость!

"Перенос libalias в kernel mode во FreeBSD"
Отправлено Buster , 06-Сен-05 18:41 
а чем оно примечательно?
Просветите плиз.

"Перенос libalias в kernel mode во FreeBSD"
Отправлено c00ker , 06-Сен-05 18:37 
здорово!!!!!!

"Перенос libalias в kernel mode во FreeBSD"
Отправлено c00ker , 06-Сен-05 19:08 
тем что нат'ить будет в ядре а не в юзермоде -- соответсвенно, производительность гораздо выше. И natd не нужен

"Перенос libalias в kernel mode во FreeBSD"
Отправлено fa , 06-Сен-05 19:23 
А в 6.0 релизе это будет?

"Перенос libalias в kernel mode во FreeBSD"
Отправлено Sem , 07-Сен-05 10:37 
В 6.0 есть ng_nat ;-)

"Перенос libalias в kernel mode во FreeBSD"
Отправлено t0ly , 06-Сен-05 19:25 
наконется во фре можно будет натить без переключения контекстов

"Перенос libalias в kernel mode во FreeBSD"
Отправлено Andrew , 06-Сен-05 19:49 
Очень давно можно было. IPFilter рулит!

"Перенос libalias в kernel mode во FreeBSD"
Отправлено odip , 06-Сен-05 19:51 
pf опять же

"Перенос libalias в kernel mode во FreeBSD"
Отправлено Guest , 06-Сен-05 20:15 
pf не умеет менять порядок трансляция-фильтрация в зависимости от направления прохождения пакета. Только из-за этого его в топку, несмотря а все вкусности.

"Перенос libalias в kernel mode во FreeBSD"
Отправлено BB , 07-Сен-05 09:59 
Это кто-ж тебе такое сказал ???
Примеры на бочку !

"Перенос libalias в kernel mode во FreeBSD"
Отправлено Guest , 07-Сен-05 16:29 
Какие тебе примеры, man читай. Мне нужно, чтобы для входящих пакетов сначала была трансляция, потом фильтрация, для исходящих наоборот. Причины, надеюсь, понятны?

Жду примеров от вас.


"Перенос libalias в kernel mode во FreeBSD"
Отправлено VoK , 07-Сен-05 18:19 
причина непонятна....
....а вообще-то
man(5)pf.conf
на предмет set require-order

"Перенос libalias в kernel mode во FreeBSD"
Отправлено Guest , 07-Сен-05 19:25 
Именно поэтому и читайте ман. Порядок жестко задан, независимо от направления прохождения пакетов. Если не понятна причина - разговаривать не о чем.

"Перенос libalias в kernel mode во FreeBSD"
Отправлено VoK , 08-Сен-05 13:16 
Ок! вижу читать надо группой и вслух (для особо глухих/слепых/немых)...
итак
>man 5 pf.conf

->
STATEMENT ORDER
     There are seven types of statements in pf.conf:

     Macros
           User-defined variables may be defined and used later, simplifying
           the configuration file.  Macros must be defined before they are
           referenced in pf.conf.

     Tables
           Tables provide a mechanism for increasing the performance and flex-
           ibility of rules with large numbers of source or destination ad-
           dresses.

     Options
           Options tune the behaviour of the packet filtering engine.

     Traffic Normalization (e.g. scrub)
           Traffic normalization protects internal machines against inconsis-
           tencies in Internet protocols and implementations.

     Queueing
           Queueing provides rule-based bandwidth control.

     Translation (Various forms of NAT)
           Translation rules specify how addresses are to be mapped or redi-
           rected to other addresses.

     Packet Filtering
           Stateful and stateless packet filtering provides rule-based block-
           ing or passing of packets.

     With the exception of macros and tables, the types of statements should
     be grouped and appear in pf.conf in the order shown above, as this match-
     es the operation of the underlying packet filtering engine.  By default
     pfctl(8) enforces this order (see set require-order below).
->
видим, что нас отсылают смотреть ниже set require-order, если нас вдруг не устраивает нормальный ход вещей....
->
      set require-order
           By default pfctl(8) enforces an ordering of the statement types in
           the ruleset to: options, normalization, queueing, translation,
           filtering.  Setting this option to no disables this enforcement.
           There may be non-trivial and non-obvious implications to an out of
           order ruleset.  Consider carefully before disabling the order en-
           forcement.
->
обращаем внимание на вполне разумное предостережение "...non-trivial and non-obvious...",
и если после этого мы еще всетаки очень хотим этого, то как говорится в каком-то посте ниже "...включаем фантазию...", попутно полезно перечитать ман на предмет quick anchor skip on in|out etc., и вперед за фантазией....


"Перенос libalias в kernel mode во FreeBSD"
Отправлено BB , 08-Сен-05 10:39 
>Какие тебе примеры, man читай. Мне нужно, чтобы для входящих пакетов сначала
>была трансляция, потом фильтрация, для исходящих наоборот. Причины, надеюсь, понятны?
Man-ы все читать умеют, а вот <...> не всегда.
" - хотел покрасить корову в синий металлик нитрокраской, но корова от этого сдохла, значит нитрокраску ф топку"
Вопрос в том зачем красить корову, а не какую краску выбрать.
По этому и просил пример, какую _рабочую_ задачу реализовать не получается и откуда такая задача возникает, в противном случае см. пример про корову.



"Перенос libalias в kernel mode во FreeBSD"
Отправлено DEC , 08-Сен-05 11:29 
>Какие тебе примеры, man читай. Мне нужно, чтобы для входящих пакетов сначала
>была трансляция, потом фильтрация, для исходящих наоборот. Причины, надеюсь, понятны?
>
>Жду примеров от вас.
Не вижу никаких сложностей, читайте ман и включайте фантазию.


"Перенос libalias в kernel mode во FreeBSD"
Отправлено SunTech , 07-Сен-05 00:28 
NATD нормально отрабатывал пинги из внутренней локалки до одного и того же внешнего хоста, ipnat и pfnat мне не удалось заставить -- пингует только один из внутренних хостов, точнее ipnat и pfnat не раздают icmp от одной машины на несколько хостов.

Если кто решил проблему -- поделитесь.


"Перенос libalias в kernel mode во FreeBSD"
Отправлено аноним , 07-Сен-05 06:42 
Ничего не понял. Кто на ком стоял... вернее кто кого пингал? У меня с PF всё замечательно пингуется - и внешнее и внутреннее.

"Перенос libalias в kernel mode во FreeBSD"
Отправлено SunTech , 07-Сен-05 10:35 
Две машины за машиной с pfnat пингуют одновременно одну внешний хост. Пинги раздаются pfnat'ом только на одну из этих машин, по крайней мере у меня на ipnat и pfnat так. Кто подскажет в чем загвоздка буду крайне благодарен.

"Перенос libalias в kernel mode во FreeBSD"
Отправлено BB , 07-Сен-05 11:41 
Странно как-то, у меня все нормально: OpenBSD & PF

"Перенос libalias в kernel mode во FreeBSD"
Отправлено toor99 , 07-Сен-05 13:35 
Две машины из 192.168.0.0 отправляют ICMP echo request на 1.2.3.4 через NAT.
Происходит примерно следующее:

gw#sh ip nat tra | incl 1.2.3.4
icmp 84.145.41.116:512 192.168.0.65:512   1.2.3.4:512   1.2.3.4:512
icmp 84.145.41.116:538 192.168.0.3:512    1.2.3.4:512   1.2.3.4:538

Понимаете, да?

Так вот, если NATящий хост имеет кривую реализацию NAT, он не догадается изменить номер порта. (Для ICMP это поле смысла не несет, поэтому там стоит по умолчанию "512".)


"Перенос libalias в kernel mode во FreeBSD"
Отправлено Andrew , 07-Сен-05 15:19 
В ICMP пакете поля "порт" нет. Вообще нет. За ненадобностью.

"Перенос libalias в kernel mode во FreeBSD"
Отправлено toor99 , 07-Сен-05 17:02 
Спасибо, я как бы в курсе. Тем не менее, NAT overload, он же NPAT, он же "маскарадинг" оперирует понятием порта для мультиплексирования пакетов. Собственно, иначе оно и быть не может.

"Перенос libalias в kernel mode во FreeBSD"
Отправлено SunTech , 07-Сен-05 23:48 
Т.е. вы хотите сказать, что в ipnat и pfnat кривая реализация? Может это просто фича и надо где-то ее включить?

"Перенос libalias в kernel mode во FreeBSD"
Отправлено Алексей , 12-Сен-05 15:54 
>Т.е. вы хотите сказать, что в ipnat и pfnat кривая реализация? Может
>это просто фича и надо где-то ее включить?
Скорее всего речь идет о вот этом.
   pf.c Revision 1.502 Mon Aug 22 11:54:25 2005 UTC by dhartmei
   | when nat'ing icmp 'connections', replace icmp id with proxy values
   | (similar to proxy ports for tcp/udp). not all clients use
   | per-invokation random ids, this allows multiple concurrent
   | connections from such clients.
   | thanks for testing to Rod Whitworth, "looks ok" markus@

"Перенос libalias в kernel mode во FreeBSD"
Отправлено ganduras , 08-Сен-05 11:23 
>В ICMP пакете поля "порт" нет. Вообще нет. За ненадобностью.

зато есть понятие очереди, что по сути - тот же самый порт, только
один на двоих. В смысле при передаче UDP или TCP пакета порт
присутствует как у отправителя, так и у получателя. А у ICMP есть
понятие идентификатора очереди (Identifier) и номер пакета в этой
очереди (Sequence Number). См. формат кадра для ICMP пакетов с типом
echo message и echo replay message в rfc792.


"Перенос libalias в kernel mode во FreeBSD"
Отправлено Александр , 07-Сен-05 09:35 
На многочисленных серверах стоит связка ipfilter(+ipnat) и отлично справляется с фильтрацией и с трансляцией адресов.
Особо примечательно, что на очень слабых (386/486) машинах можно буквально за 10 минут поставить полноценный межсетевой экран и трансляцию адресов. Причём никакой пересборки ядра или чего-либо ещё не требуется (чтобы добавить DIVERT в ядро, для natd, например)! И работает очень быстро...

"Перенос libalias в kernel mode во FreeBSD"
Отправлено fa , 07-Сен-05 12:17 
>Особо примечательно, что на очень слабых (386/486) машинах можно буквально за 10
>минут поставить полноценный межсетевой экран и трансляцию адресов. Причём никакой пересборки
>ядра или чего-либо ещё не требуется (чтобы добавить DIVERT в ядро,
>для natd, например)! И работает очень быстро...

На OpenBSD ?



"pf nat + icmp"
Отправлено McLone , 09-Сен-05 00:40 
> pfnat не раздают icmp от одной машины на несколько хостов.

в PF слова "keep state" на правиле, которое пропускает ICMP, стереть не пробовали?

Здесь все работает, и на Free- и на Open-.



"pf nat + icmp"
Отправлено McLone , 09-Сен-05 01:11 
Таки в RELENG_5 не пашет до сих пор (я не заметил - у меня другие версии этих файлов _ИЛИ_ random ID enforcement). Вот сторо заMFCят следующие версии, и будет Вам счастье:

From: Max Laier <max at love2party dotnet>
To: freebsd-pf at freebsd dotorg
Date: Sep 6, 2005 5:47 PM
Subject: Bugfixes from OpenBSD

I am going to import the following bugfixes from OpenBSD shortly:
...
pf.c Revision 1.502 Mon Aug 22 11:54:25 2005 UTC by dhartmei
| when nat'ing icmp 'connections', replace icmp id with proxy values
| (similar to proxy ports for tcp/udp). not all clients use per-invokation
| random ids, this allows multiple concurrent connections from such clients.
| thanks for testing to Rod Whitworth, "looks ok" markus@


"Перенос libalias в kernel mode во FreeBSD"
Отправлено Илья Шипицин , 07-Сен-05 12:42 
divert можно добавить без пересборки ядра. и dummynet тоже.

ls /boot/kernel


"Перенос libalias в kernel mode во FreeBSD"
Отправлено Аноним , 07-Сен-05 14:24 
Вообще-то libalias был портирован в ядро еще весной, до Google SoC. Тогда же и ng_nat появился.

"Перенос libalias в kernel mode во FreeBSD"
Отправлено butcher , 07-Сен-05 14:31 
>Вообще-то libalias был портирован в ядро еще весной, до Google SoC. Тогда
>же и ng_nat появился.

Если бы вы сходили по приведённым ссылкам, то прочитали бы там это.
libalias был перенесён в ядро только в 6-ке.


"OpenNews: Перенос libalias в kernel mode во FreeBSD"
Отправлено Forth , 08-Сен-05 09:32 
Этож какой надо бешенный траффик иметь, чтобы напрягал userland nat? Да его хватает всегда и загрузка процессора невелика. Вот что действительно хотелось бы увидеть в libalias - это возможность прозрачного проброса портов, потому как redirect_port этого не делает и смысл его вообще для меня теряется.



"OpenNews: Перенос libalias в kernel mode во FreeBSD"
Отправлено Spoiler , 08-Сен-05 18:30 
>увидеть в libalias - это возможность прозрачного проброса портов, потому как redirect_port этого не делает и смысл его вообще для меня теряется.

А что он, по-твоему, делает? Блин, читайте man'ы, развелось Guest'ов...


"OpenNews: Перенос libalias в kernel mode во FreeBSD"
Отправлено Moralez , 09-Сен-05 10:32 
Кстати, да. Только вчера отметил, что в одной ветке две вопиюще вызывающие чушы и никто ни слова не сказал. opennet становится lor-ом... :(

"OpenNews: Перенос libalias в kernel mode во FreeBSD"
Отправлено Forth , 12-Сен-05 10:23 
>>увидеть в libalias - это возможность прозрачного проброса портов, потому как redirect_port этого не делает и смысл его вообще для меня теряется.
>
>А что он, по-твоему, делает? Блин, читайте man'ы, развелось Guest'ов...
А вникнуть в суть проблемы? Яж не с потолка это взял. redirect_port пробрасывает соединения, инициируя новые на алиасеном интерфейсе. То бишь не видно на машине на которую проброс - откуда пришло соединение, все идет от машины с natd. Вот это мне и не нравится, хотелось бы знать откель пакеты пришли на ту же почту. А так "безликие" коннекты. Можете убедиться сами путем чтения man 3 libalias и непосредственно исходных текстов.

"OpenNews: Перенос libalias в kernel mode во FreeBSD"
Отправлено butcher , 12-Сен-05 10:43 
>А вникнуть в суть проблемы? Яж не с потолка это взял. redirect_port
>пробрасывает соединения, инициируя новые на алиасеном интерфейсе. То бишь не видно
>на машине на которую проброс - откуда пришло соединение, все идет
>от машины с natd. Вот это мне и не нравится, хотелось

Интересно.. Т.е. Вы хотите чтобы хост с реальным IP адресом мог свободно общаться с вашим сервером, находящимся в левой сети, причём со своим же реальным адресом? Перелистайте на досуге книжку по протоколу IP, по маршрутизации и т.д.. Вам, батенька, не НАТ надо юзать в таком случае..


"OpenNews: Перенос libalias в kernel mode во FreeBSD"
Отправлено Forth , 12-Сен-05 11:36 
Да нет же. Просто то же самое что делает ipnat ( map в ipnat.conf). То есть алиасинг без инициации соединений. Вообщем смотрите внимательнее о чем речь, может быть то же что делают маршрутизаторы цисковские некоторые(или многие?), вот у меня стоит неподконтрольная мне циска, так с неё до почтовика пробрасывают порт 25, причем все соединения снаружи видны как интернетные, хотя машина имеет серый адрес, понимаете, нет? Вот чего хотелось бы видеть в libalias.


"OpenNews: Перенос libalias в kernel mode во FreeBSD"
Отправлено butcher , 12-Сен-05 12:02 
>как интернетные, хотя машина имеет серый адрес, понимаете, нет? Вот чего
>хотелось бы видеть в libalias.

Что-то всёравно не понимаю в чём проблема.
Сейчас попробовал открыть 21 порт через redirect_port, FTP сервер внутри локалки видит реальный адрес клиента.


"OpenNews: Перенос libalias в kernel mode во FreeBSD"
Отправлено Forth , 12-Сен-05 12:27 
А у меня на 5.4 да и на 4.11 почему-то проброс "безликий". Пропихиваю порт с одной машины на другую и на той для которой пропихнул - видно соединение от машины с natd, а не с реального адреса с которого коннект.

"Перенос libalias в kernel mode во FreeBSD"
Отправлено Аноним , 08-Сен-05 12:31 
Кто-то может подсказать как ipnat и ICMP подружить? Как настроить так чтобы изнутри был возможен пинг на один и тот-же Внешний IP сразу для нескольких внутренних IP.

"OpenNews: Перенос libalias в kernel mode во FreeBSD"
Отправлено Mike , 12-Сен-05 09:42 
Народ, прочитав все приведённые выше посты, я невольно поймал себя на мысли - а кто нить вообще испльзует ipfw? или ipfilter / pf настолько круты / или ipfw настолько плох?

"Перенос libalias в kernel mode во FreeBSD"
Отправлено зачем , 22-Ноя-05 10:22 
я попытался на днях сделать перенос libalias в kernel mode. FreeBSD 5.4 .Скачал архив , распаковал, сделал все по инструкции.
После добавления правила типа
ipfw add 100 nat 555 ip from any to any
выдается ошибка ipfw: getsockopt(IP_FW_ADD): Invalid argument. Стал проверять, что я сделал не так, короче ниасилил. Написал Paolo Pisati, после его вопросов типа did you compile a new kernel after fix-base.sh? пересобрал еще раз ядро, результат такой же. Тогда попробовал сделать тоже самое на другой машине с FreeBSD 5.4 , результат тот же. Тогда Paolo попросил доступ на одну из моих тачек, чтобы показать что типа руки у меня кривые. Не вопрос - организовал. Через несколько часов он собрал ядро на которой все заработало, а попутно изменив инструкции по установке:
the correct procedure to compilet/install/use it is:

1) dowload libalias.tgz && run fix-base.sh
2) recompile kernel (without ipfw) && reboot
3) compile and install libalias
4) kldload ipfw (if you have ipfw already loaded it's the
   plain FreeBSD kld now, so reboot again)

Все бы хорошо, только когда ipfw собирается через libalias и идет как ipfw.ko , там отсутствуют поддержка pipe log divert. divert может уже и не нужен становится, а вот остальное не плохо бы иметь.
Короче послал все и юзаю natd.