Обсуждение в предыдущих постах показало, что далеко не все понимают назначение флага passthrough в брандмауэре.
Начнем с того, что вспомним принцип работы брандмауэра: пакет движется по цепочке пока не будет совпадения с критериями правила.
Затем к пакету применяется действие. Если действие является терминирующим, то пакет прекращает движение по цепочке и переходит в следующую. Если действие не терминирующее, то продолжает.
В таблицах nat или filter большинство действий является терминирующими, за редкими исключениями, например, добавить адрес в список.
А вот с таблицей mangle все по другому. Там у нас появляется выбор. Обычно все действия по маркировке пакетов и соединений начинаются в цепочке prerouting данной таблицы.
Хорошо, вот кинули мы марку на соединение, а дальше что? А дальше все зависит от последующей логики. Если потом эту марку мы будем использовать где-нибудь в nat или filter, то пакет можно смело терминировать. Делать в этой цепочке ему больше нечего.
А если нам нужно затем промаркировать пакеты на основании марки соединения, скажем, сделать им
mark-routing, то терминировать пакет никак нельзя. С таблицей маршрутизации надо определиться здесь и сейчас, до принятия решения о маршрутизации.И здесь нам на помощь приходит как раз passthrough, установка этой опции делает правило
не терминирующим. И пакет продолжает движение по цепочке дальше. Таким образом, если у нас есть два правила, в первом из которых мы маркируем соединения, а во втором пакеты. То в первом мы ставим флаг passthrough, а во втором уже нет.
