The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Перенос libalias в kernel mode во FreeBSD

06.09.2005 16:34

Paolo Pisati в списке рассылки freebsd-hackers сообщил о завершении работ по улучшению libalias во FreeBSD. Paolo работал над libalias в рамках программы Google "Summer of Code", основные направления его работы:

  • перенос libalias в kernel mode;
  • интеграция с ipfw;
  • изменение организации библиотеки для более простого расширения.

    1. Главная ссылка к новости (http://lists.freebsd.org/piper...)
    2. Improve FreeBSD libalias: README
    3. Project wiki
    4. libalias patch
    5. libalias on perfoce
    Автор новости: butcher
    Лицензия: CC BY 3.0
    Источник: lists.freebsd.org
    Короткая ссылка: https://opennet.ru/6038-FreeBSD
    Ключевые слова: FreeBSD, nat, ipfw, libalias
    При перепечатке указание ссылки на opennet.ru обязательно


    Обсуждение (45) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Taras_ (?), 16:59, 06/09/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Отличная новость!
     
     
  • 2.3, Buster (?), 18:41, 06/09/2005 [^] [^^] [^^^] [ответить]  
  • +/
    а чем оно примечательно?
    Просветите плиз.
     

  • 1.2, c00ker (??), 18:37, 06/09/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    здорово!!!!!!
     
  • 1.4, c00ker (??), 19:08, 06/09/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    тем что нат'ить будет в ядре а не в юзермоде -- соответсвенно, производительность гораздо выше. И natd не нужен
     
  • 1.5, fa (??), 19:23, 06/09/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А в 6.0 релизе это будет?
     
     
  • 2.15, Sem (ok), 10:37, 07/09/2005 [^] [^^] [^^^] [ответить]  
  • +/
    В 6.0 есть ng_nat ;-)
     

  • 1.6, t0ly (?), 19:25, 06/09/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    наконется во фре можно будет натить без переключения контекстов
     
     
  • 2.7, Andrew (??), 19:49, 06/09/2005 [^] [^^] [^^^] [ответить]  
  • +/
    Очень давно можно было. IPFilter рулит!
     
     
  • 3.8, odip (?), 19:51, 06/09/2005 [^] [^^] [^^^] [ответить]  
  • +/
    pf опять же
     
     
  • 4.9, Guest (??), 20:15, 06/09/2005 [^] [^^] [^^^] [ответить]  
  • +/
    pf не умеет менять порядок трансляция-фильтрация в зависимости от направления прохождения пакета. Только из-за этого его в топку, несмотря а все вкусности.
     
     
  • 5.13, BB (??), 09:59, 07/09/2005 [^] [^^] [^^^] [ответить]  
  • +/
    Это кто-ж тебе такое сказал ???
    Примеры на бочку !
     
     
  • 6.23, Guest (??), 16:29, 07/09/2005 [^] [^^] [^^^] [ответить]  
  • +/
    Какие тебе примеры, man читай. Мне нужно, чтобы для входящих пакетов сначала была трансляция, потом фильтрация, для исходящих наоборот. Причины, надеюсь, понятны?

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

     
     
  • 7.25, VoK (?), 18:19, 07/09/2005 [^] [^^] [^^^] [ответить]  
  • +/
    причина непонятна....
    ....а вообще-то
    man(5)pf.conf
    на предмет set require-order
     
     
  • 8.26, Guest (??), 19:25, 07/09/2005 [^] [^^] [^^^] [ответить]  
  • +/
    Именно поэтому и читайте ман Порядок жестко задан, независимо от направления пр... текст свёрнут, показать
     
     
  • 9.33, VoK (?), 13:16, 08/09/2005 [^] [^^] [^^^] [ответить]  
  • +/
    Ок вижу читать надо группой и вслух для особо глухих слепых немых итак - ... большой текст свёрнут, показать
     
  • 7.29, BB (??), 10:39, 08/09/2005 [^] [^^] [^^^] [ответить]  
  • +/
    >Какие тебе примеры, man читай. Мне нужно, чтобы для входящих пакетов сначала
    >была трансляция, потом фильтрация, для исходящих наоборот. Причины, надеюсь, понятны?
    Man-ы все читать умеют, а вот <...> не всегда.
    " - хотел покрасить корову в синий металлик нитрокраской, но корова от этого сдохла, значит нитрокраску ф топку"
    Вопрос в том зачем красить корову, а не какую краску выбрать.
    По этому и просил пример, какую _рабочую_ задачу реализовать не получается и откуда такая задача возникает, в противном случае см. пример про корову.


     
  • 7.31, DEC (ok), 11:29, 08/09/2005 [^] [^^] [^^^] [ответить]  
  • +/
    >Какие тебе примеры, man читай. Мне нужно, чтобы для входящих пакетов сначала
    >была трансляция, потом фильтрация, для исходящих наоборот. Причины, надеюсь, понятны?
    >
    >Жду примеров от вас.
    Не вижу никаких сложностей, читайте ман и включайте фантазию.

     

  • 1.10, SunTech (?), 00:28, 07/09/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    NATD нормально отрабатывал пинги из внутренней локалки до одного и того же внешнего хоста, ipnat и pfnat мне не удалось заставить -- пингует только один из внутренних хостов, точнее ipnat и pfnat не раздают icmp от одной машины на несколько хостов.

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

     
     
  • 2.11, аноним (?), 06:42, 07/09/2005 [^] [^^] [^^^] [ответить]  
  • +/
    Ничего не понял. Кто на ком стоял... вернее кто кого пингал? У меня с PF всё замечательно пингуется - и внешнее и внутреннее.
     
     
  • 3.14, SunTech (?), 10:35, 07/09/2005 [^] [^^] [^^^] [ответить]  
  • +/
    Две машины за машиной с pfnat пингуют одновременно одну внешний хост. Пинги раздаются pfnat'ом только на одну из этих машин, по крайней мере у меня на ipnat и pfnat так. Кто подскажет в чем загвоздка буду крайне благодарен.
     
     
  • 4.16, BB (??), 11:41, 07/09/2005 [^] [^^] [^^^] [ответить]  
  • +/
    Странно как-то, у меня все нормально: OpenBSD & PF
     
     
  • 5.19, toor99 (ok), 13:35, 07/09/2005 [^] [^^] [^^^] [ответить]  
  • +/
    Две машины из 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".)

     
     
  • 6.22, Andrew (??), 15:19, 07/09/2005 [^] [^^] [^^^] [ответить]  
  • +/
    В ICMP пакете поля "порт" нет. Вообще нет. За ненадобностью.
     
     
  • 7.24, toor99 (ok), 17:02, 07/09/2005 [^] [^^] [^^^] [ответить]  
  • +/
    Спасибо, я как бы в курсе. Тем не менее, NAT overload, он же NPAT, он же "маскарадинг" оперирует понятием порта для мультиплексирования пакетов. Собственно, иначе оно и быть не может.
     
     
  • 8.27, SunTech (?), 23:48, 07/09/2005 [^] [^^] [^^^] [ответить]  
  • +/
    Т е вы хотите сказать, что в ipnat и pfnat кривая реализация Может это просто ... текст свёрнут, показать
     
     
  • 9.45, Алексей (??), 15:54, 12/09/2005 [^] [^^] [^^^] [ответить]  
  • +/
    Скорее всего речь идет о вот этом pf c Revision 1 502 Mon Aug 22 11 54 25 20... текст свёрнут, показать
     
  • 7.30, ganduras (?), 11:23, 08/09/2005 [^] [^^] [^^^] [ответить]  
  • +/
    >В ICMP пакете поля "порт" нет. Вообще нет. За ненадобностью.

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

     
  • 2.12, Александр (??), 09:35, 07/09/2005 [^] [^^] [^^^] [ответить]  
  • +/
    На многочисленных серверах стоит связка ipfilter(+ipnat) и отлично справляется с фильтрацией и с трансляцией адресов.
    Особо примечательно, что на очень слабых (386/486) машинах можно буквально за 10 минут поставить полноценный межсетевой экран и трансляцию адресов. Причём никакой пересборки ядра или чего-либо ещё не требуется (чтобы добавить DIVERT в ядро, для natd, например)! И работает очень быстро...
     
     
  • 3.17, fa (??), 12:17, 07/09/2005 [^] [^^] [^^^] [ответить]  
  • +/
    >Особо примечательно, что на очень слабых (386/486) машинах можно буквально за 10
    >минут поставить полноценный межсетевой экран и трансляцию адресов. Причём никакой пересборки
    >ядра или чего-либо ещё не требуется (чтобы добавить DIVERT в ядро,
    >для natd, например)! И работает очень быстро...

    На OpenBSD ?


     
  • 2.35, McLone (?), 00:40, 09/09/2005 [^] [^^] [^^^] [ответить]  
  • +/
    > pfnat не раздают icmp от одной машины на несколько хостов.

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

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


     
     
  • 3.36, McLone (?), 01:11, 09/09/2005 [^] [^^] [^^^] [ответить]  
  • +/
    Таки в 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@

     

  • 1.18, Илья Шипицин (?), 12:42, 07/09/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    divert можно добавить без пересборки ядра. и dummynet тоже.

    ls /boot/kernel

     
  • 1.20, Аноним (20), 14:24, 07/09/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Вообще-то libalias был портирован в ядро еще весной, до Google SoC. Тогда же и ng_nat появился.
     
     
  • 2.21, butcher (ok), 14:31, 07/09/2005 [^] [^^] [^^^] [ответить]  
  • +/
    >Вообще-то libalias был портирован в ядро еще весной, до Google SoC. Тогда
    >же и ng_nat появился.

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

     

  • 1.28, Forth (??), 09:32, 08/09/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Этож какой надо бешенный траффик иметь, чтобы напрягал userland nat? Да его хватает всегда и загрузка процессора невелика. Вот что действительно хотелось бы увидеть в libalias - это возможность прозрачного проброса портов, потому как redirect_port этого не делает и смысл его вообще для меня теряется.


     
     
  • 2.34, Spoiler (?), 18:30, 08/09/2005 [^] [^^] [^^^] [ответить]  
  • +/
    >увидеть в libalias - это возможность прозрачного проброса портов, потому как redirect_port этого не делает и смысл его вообще для меня теряется.

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

     
     
  • 3.37, Moralez (ok), 10:32, 09/09/2005 [^] [^^] [^^^] [ответить]  
  • +/
    Кстати, да. Только вчера отметил, что в одной ветке две вопиюще вызывающие чушы и никто ни слова не сказал. opennet становится lor-ом... :(
     
  • 3.40, Forth (??), 10:23, 12/09/2005 [^] [^^] [^^^] [ответить]  
  • +/
    >>увидеть в libalias - это возможность прозрачного проброса портов, потому как redirect_port этого не делает и смысл его вообще для меня теряется.
    >
    >А что он, по-твоему, делает? Блин, читайте man'ы, развелось Guest'ов...
    А вникнуть в суть проблемы? Яж не с потолка это взял. redirect_port пробрасывает соединения, инициируя новые на алиасеном интерфейсе. То бишь не видно на машине на которую проброс - откуда пришло соединение, все идет от машины с natd. Вот это мне и не нравится, хотелось бы знать откель пакеты пришли на ту же почту. А так "безликие" коннекты. Можете убедиться сами путем чтения man 3 libalias и непосредственно исходных текстов.
     
     
  • 4.41, butcher (ok), 10:43, 12/09/2005 [^] [^^] [^^^] [ответить]  
  • +/
    >А вникнуть в суть проблемы? Яж не с потолка это взял. redirect_port
    >пробрасывает соединения, инициируя новые на алиасеном интерфейсе. То бишь не видно
    >на машине на которую проброс - откуда пришло соединение, все идет
    >от машины с natd. Вот это мне и не нравится, хотелось

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

     
     
  • 5.42, Forth (??), 11:36, 12/09/2005 [^] [^^] [^^^] [ответить]  
  • +/
    Да нет же. Просто то же самое что делает ipnat ( map в ipnat.conf). То есть алиасинг без инициации соединений. Вообщем смотрите внимательнее о чем речь, может быть то же что делают маршрутизаторы цисковские некоторые(или многие?), вот у меня стоит неподконтрольная мне циска, так с неё до почтовика пробрасывают порт 25, причем все соединения снаружи видны как интернетные, хотя машина имеет серый адрес, понимаете, нет? Вот чего хотелось бы видеть в libalias.

     
     
  • 6.43, butcher (ok), 12:02, 12/09/2005 [^] [^^] [^^^] [ответить]  
  • +/
    >как интернетные, хотя машина имеет серый адрес, понимаете, нет? Вот чего
    >хотелось бы видеть в libalias.

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

     
     
  • 7.44, Forth (??), 12:27, 12/09/2005 [^] [^^] [^^^] [ответить]  
  • +/
    А у меня на 5.4 да и на 4.11 почему-то проброс "безликий". Пропихиваю порт с одной машины на другую и на той для которой пропихнул - видно соединение от машины с natd, а не с реального адреса с которого коннект.
     

  • 1.32, Аноним (20), 12:31, 08/09/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Кто-то может подсказать как ipnat и ICMP подружить? Как настроить так чтобы изнутри был возможен пинг на один и тот-же Внешний IP сразу для нескольких внутренних IP.
     
  • 1.39, Mike (??), 09:42, 12/09/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Народ, прочитав все приведённые выше посты, я невольно поймал себя на мысли - а кто нить вообще испльзует ipfw? или ipfilter / pf настолько круты / или ipfw настолько плох?
     
  • 1.46, зачем (?), 10:22, 22/11/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    я попытался на днях сделать перенос 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.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру