Вопрос или проблема
В статье Википедии об iptables упоминается следующее
PREROUTING
: Пакеты войдут в эту цепочку до того, как будет принято решение о маршрутизации.
Iptables может выполнять множество действий с пакетом, например, DROP
(отказать в передаче), JUMP
(перенаправить) его в другую цепочку для дальнейшей обработки, DNAT
(изменить назначение) на другой адрес, отличный от первоначального и т.д.
Таким образом, из всех действий, которые может выполнить iptables
, что включает в себя “решение о маршрутизации”?
Например, охватывает ли “решение о маршрутизации” каждое возможное действие, которое может предпринять iptables? То есть, можно ли заменить фразу “решение о маршрутизации” на фразу “окончательное решение”? Итак:
PREROUTING
: Пакеты войдут в эту цепочку до того, как будет принято окончательное решение.
И эта таблица сама по себе не даст окончательного решения о том, как следует обрабатывать пакеты, а только внесет некоторые изменения в пакет.
И будет ли DROP
считаться решением о маршрутизации?
Или “решение о маршрутизации” применяется только к фактическому действию маршрутизации? Например, перенаправлению пакета в новую сеть?
Чтобы упростить, давайте полностью проигнорируем мосты и останемся исключительно в контексте сетевого уровня.
В этом контексте ‘решение о маршрутизации’, которое вы упоминаете, происходит сразу после прохождения цепочки PREROUTING
таблицы nat
, и просто означает решение о том, привязан ли рассматриваемый пакет к локальному хосту, или его следует перенаправить на другой хост.
Это расходимые пути в iptables, поэтому необходимо принять решение:
- Если пакет привязан к локальному хосту, он покинет сетевой уровень, проходя через несколько цепочек
INPUT
в разных таблицах, прежде чем попасть на уровень приложений. - Если пакет необходимо перенаправить, он останется на сетевом уровне и пройдет через несколько цепочек
FORWARD
.
Причина, по которой это ‘решение’ принимается после прохождения цепочки PREROUTING
таблицы nat
, заключается в том, что именно в этой цепочке изменяется адрес назначения, если вы выполняете преобразование сетевых адресов с этими пакетами.
Цели, которые влияют на ваше прохождение по цепочкам и/или таблицам (т.е. ACCEPT
и DROP
), — это цели, на которые вы можете перейти, определив эти переходы в правилах; это не действия, которые iptables будет выполнять сам по себе.
Также стоит отметить, что цепочки, содержащие любые инструкции ACCEPT
или DROP
, будут проходиться после того, как было принято это ‘решение о маршрутизации’, таким образом, они не имеют прямого влияния на данное решение.
Существуют и другие места, где принимаются ‘решения о маршрутизации’, и в зависимости от контекста пакета (привязан к локальному хосту, покидает локальный хост и т.д.) это решение может состоять в чем-то другом. Это хороший источник для понимания различий; вы можете увидеть, что ‘решение’, о котором вы упомянули, было Шагом 5 Таблицы 6-3.
Ответ или решение
В контексте iptables термин "routing decision" (решение маршрутизации) относится к процессу определения того, куда направить пришедший сетевой пакет после того, как он прошел через цепочку PREROUTING в таблице nat. Это решение является критически важным и происходит до того, как пакет будет окончательно обработан.
Когда пакет попадает в систему, он проходит через цепочку PREROUTING. На этом этапе могут применяться различные правила, например, правила NAT (Network Address Translation), которые могут изменять адрес назначения пакета. После применения правил PREROUTING происходит само решение маршрутизации, которое определяет, следует ли отправить пакет на локальный хост или перенаправить его на другой узел или сеть.
Решение о маршрутизации может быть следующим:
-
Локальный хост: Если пакет предназначен для локального хоста, он будет передан в соответствующие цепочки INPUT (входящие пакеты) и далее в уровень приложения.
-
Перенаправление: Если пакет не предназначен для локального хоста, он будет направлен на обработку через цепочку FORWARD (пересылаемые пакеты), что будет означать его передачу на другой хост или узел в сети.
Важно понимать, что "routing decision" в данном контексте не охватывает любые действия, которые может выполнить iptables, такие как DROP или ACCEPT. Эти действия не влияют на само маршрутизированное решение, а скорее определяют, что делать с пакетом после того, как решение о его маршрутизации уже принято. Таким образом, можно сказать, что "routing decision" только касается факта того, куда направляется пакет, а не последующих действий с ним.
В этом смысле вы не можете полностью заменить фразу "routing decision" на "окончательное решение". Окончательное решение будет зависеть от правил, которые применяются после определения маршрута, таких как ACCEPT или DROP. Эти целевые действия применяются позже в обработке пакета и не влияют на само решение о том, куда направить пакет.
Другими словами, решение о маршрутизации — это определение направления движения пакета (локально или на внешний хост), в то время как дальнейшие действия, такие как DROP или ACCEPT, относятся к тому, как система будет обрабатывать пакет после того, как это решение принято.