>>Слово "интерфейс" здесь отсутствует.
> Вы полагаете, мне стоило перечислить _все_ критерии, которые могут быть использованы в
> этой самой логике, не ограничиваясь одним примером? Боюсь, это была бы
> работа на полчаса как минимум.Все, не все, но вы бы лучше уточнили сами сразу. :) А то догадки бывают и ошибочными.
>>Что касается новой версии вашего предложения - в OpenBSD можно указать таблицу маршрутизации для конкретного сокета (опция SO_RTABLE для setsockopt(2)). Но это уже требует изменения кода программы - равно как, впрочем, и в случае любой другой "логики".
> Пингвины используют более универсальную логику: у них есть возможность тегировать пакеты
> для конкретного сокета (опция SO_MARK), и на основании этих тегов обрабатывать
> пакеты в дальнейшем (сюда входит маршрутизация, шейпинг, фильтрация, нат, модификация
> заголовков и т.д.)
Тегирование в PF делается внутри него самого (см. опции правил фильтрации "tag" и "tagged"), в остальном тот же самый принцип вполне работоспособен. ИМХО, тегировать в самом фаерволе несколько секурнее, хотя это и убирает какую-то долю гибкости.
Зато отсутствие доменов маршрутизации в Linux заметно усложняет работу, а некоторые вещи становятся чрезвычайно трудными или даже невозможными, когда в разных доменах маршрутизации используются одинаковые локальные и/или удалённые адреса. Так что OpenBSD суммарно оказывается более гибкой.
> Кстати, инновационный пингвиний systemd позволяет использовать тегированные сокеты без
> модификации кода приложения (один из немногих проектов, использующих самые вкусные возможности
> POSIX IPC).
А можно, пожалуйста, поподробнее?
>>Если я вас понял неправильно, пожалуйста, поясните, о чём вы вообще говорите, какой конкретно момент вам кажется спорным.
> Мне кажется, механизм прямой привязки rtable к сокету несколько дубов. Возможно, достаточно
> было бы обеспечить поддержку тегирования трафика на сокетах, чтобы потом средствами
> pf выполнять дальнейшую обработку?
Ну почему дубов, он скорее более очевиден для логики программы: указывая домен роутинга, программа гарантированно получает то, чего хочет. А указывая некий абстрактный тег, программа начинает зависеть от того, что там в фаерволе наконфигурировано, то есть образуется вынужденная дополнительная связь между конфигурируемыми вручную компонентами. Не смертельно, конечно, но всё же.