nuclight: (Default)
nuclight ([personal profile] nuclight) wrote2012-04-26 03:11 am
Entry tags:

IpfwNg

В честь 26 годовщины 26 апреля уволился с текущей работы и таки наконец начал проект http://wiki.freebsd.org/IpfwNg — хотя на работе FreeBSD и была основной системой, реальную возможность пилить ядро я так и не получил (хотя тот же NAT64 нам бы понадобился не через полгода, так через год). В ближайшие недели посижу дома и надеюсь сделать хотя бы скелет, который можно будет потом уже в свободное время потихоньку пилить — работы по проекту предстоит очень много.

Желающие обсудить по делу — велкам в каменты (хотя я туда еще не все наброски оформил).

[identity profile] http://users.livejournal.com/_slw/ 2012-04-27 12:23 am (UTC)(link)
я полгода назад для частной задачи имел секас с iproute2.
могу сказать, что человечного там при выборе таблицы маршрутизации довольно мало.

но это такая задача, которая на данный момент везде решается криво и есть ли для нее хорошее решение -- не ясно

[identity profile] nuclight.livejournal.com 2012-05-10 02:41 am (UTC)(link)
Вопрос надо ставить так: что полезного мы можем оттуда взять - сейчас у нас это сделано хуже. По крайней мере, синтаксис там не птичий.

[identity profile] http://users.livejournal.com/_slw/ 2012-05-10 07:27 am (UTC)(link)
семантика -- недокументированная.
синтаксисис -- мало ушел от птичьего.
а, не, вру -- натурально птичий, это же iproute. я в нем permit any any не осилил по ману, пришлось в гугл за примером лезть.

iproute2

[identity profile] nuclight.livejournal.com 2012-05-10 09:42 pm (UTC)(link)
Отлично, что ты предлагаешь?

[identity profile] http://users.livejournal.com/_slw/ 2012-05-10 09:55 pm (UTC)(link)
pbr решает обычно (в ipfw, cisco не берем -- там больше) три задачи:

1. балансировка каналов (в том числе QoS роутинг)
2. прозрачный прокси
3. отправка "ответов" в интерфейс, откуда был запрос.

п.2 чаще (в других местах) решается средствами nat. тут я думаю надо поступить так же -- в файрволе, natом.
п.1 участия файрвола не требует (по большей части), тут самое то -- отдельный модуль который хуками вцепляется в процесс роутинга и делает свое черное дело.
и остается п.3 -- во-первых не всегда надо отправлять откуда пришел (ну может у нас нормальный провайдинг и bgp) -- значит в файрволе надо сказать, что для этого flow надо экспортить информацию в этот модуль, во-вторых если мы куда отправили ftp cmd, то туда надо и ftp data отправить -- надо уметь разбирать протоколы и отслеживать flow, либо уметь спрашивать файрвол -- кому принадлежит этот пакет? для транзитных тут особой идеологической проблемы нет, а вот для сформированных на хосте пакетов -- видимо надо уметь сохранять результат разбора протокола на данном этапе дабы не делать работу два раза.

[identity profile] nuclight.livejournal.com 2012-05-18 01:47 am (UTC)(link)
> pbr решает обычно (в ipfw, cisco не берем -- там больше) три задачи:

А чего заранее ограничиваться? И не cisco, а вообще. В идеале хочется, чтобы все задачи можно было решать.

> 2. прозрачный прокси
> п.2 чаще (в других местах) решается средствами nat. тут я думаю надо поступить так же -- в файрволе, natом.

Ээ, падажжы. Это ж fwd 127.0.0.1,3128 который? Там nat не нужен и даже близко не стоит. Даже в иптаблесах он емнип делается в таблице nat, но не самим натом.

Описанное в п.1 похоже на iproute2 и синтаксис для выбора таблицы, который - сюрприз - синтаксисом похож на ipfw. Что касается п.3, они это опять же по-моему через CONNMARK делают, т.е. модуль выбора маршрута берет инфу из файрвола берет. Чем у них хуже / что нам надо учесть/сделать лучше?

[identity profile] http://users.livejournal.com/_slw/ 2012-05-18 02:31 pm (UTC)(link)
А чего заранее ограничиваться? И не cisco, а вообще. В идеале хочется, чтобы все задачи можно было решать.

нахуй? в cisco policy-map используется и для фильтрации bgp маршрутов и не помню для чего еще. зачем тебе это?
там это совершенно перегруженная и недокументированная комманда/модуль.

Ээ, падажжы. Это ж fwd 127.0.0.1,3128 который? Там nat не нужен и даже близко не стоит. Даже в иптаблесах он емнип делается в таблице nat, но не самим натом.

я про мнесто в синтаксисе. что это надо отделять от просто pbr. что это на самом деле не pbr.


[identity profile] nuclight.livejournal.com 2012-05-31 10:03 pm (UTC)(link)
А надо ли? И зачем? Вот есть у нас два основных legacy-рулесета как сейчас (точнее один, просто вызывается из pfil на in и out), есть еще другие рулесеты, и есть модуль PBR где-то в ip_forward(). В каком месте стека должен быть этот редирект на локальный порт самого файрвола? Почему бы не оставить его в основном legacy-рулесете?

[identity profile] http://users.livejournal.com/_slw/ 2012-06-01 06:34 am (UTC)(link)
делать надо так, как будет логичнее выглядеть в конфиге.
никаких причин это [приземлять на локальный сокет] делать обязательно через PBR нет.
по сути это никакой не PBR и выглядеть это в PBR будет так же не на месте, как и PBR в файрволе.

к нату это ближе, хотя и не нат.
можно это назвать другим термином (типа local termination) и использовать для этого другую директиву.
более того, если мы хотим так редиректить что-то более сложное, чем tcp, то нам надо разбирать протокол и отслеживать все потоки

[identity profile] ra-ga.livejournal.com 2012-05-25 10:10 pm (UTC)(link)
>п.2 чаще (в других местах) решается средствами nat. тут я думаю надо поступить так же -- в файрволе, natом.

ну это от безысходности скорее. есть же такая вундервафля (http://wiki.squid-cache.org/Features/Tproxy4)

afaik, чем-то подобным баловался в питере провайдер webplus.

[identity profile] http://users.livejournal.com/_slw/ 2012-05-26 05:55 am (UTC)(link)
это ты теплое с мягким перепутал

[identity profile] ra-ga.livejournal.com 2012-05-25 09:21 pm (UTC)(link)
>я полгода назад для частной задачи имел секас с iproute2.
>могу сказать, что человечного там при выборе таблицы маршрутизации довольно мало.

а в чём проблема?


root@laptus:~# ip rule help
Usage: ip rule [ list | add | del | flush ] SELECTOR ACTION
SELECTOR := [ not ] [ from PREFIX ] [ to PREFIX ] [ tos TOS ] [ fwmark FWMARK[/MASK] ]
[ iif STRING ] [ oif STRING ] [ pref NUMBER ]
ACTION := [ table TABLE_ID ]
[ prohibit | reject | unreachable ]
[ realms [SRCREALM/]DSTREALM ]
[ goto NUMBER ]
TABLE_ID := [ local | main | default | NUMBER ]

вполне human readable.

>но это такая задача, которая на данный момент везде решается криво и есть ли для нее хорошее решение -- не ясно

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

[identity profile] http://users.livejournal.com/_slw/ 2012-05-26 06:00 am (UTC)(link)
там проблемы на уровне смысла были.
например, нигде не было описанно что стадия PREROUTING (кажется) влияет на возможность bind сокета к локальному адресу и на arp кажется тоже. это осенью было -- вспоминать лень.