Как только первый пакет нового потока (т. е. состояние NEW) проходит через предварительная маршрутизация цепь, ДНК происходит, и с новым пунктом назначения пакет маршрутизируется и пересекает фильтровать вперед цепь.
Затем это правило отбрасывает его:
iif "enp3s0" oif "enp1s0f0" счетчик пакетов 0 байт 0 отбрасывается
Правило, разрешающее этот первый пакет (которого нет в учредил государство) нужно.
Это можно было бы вставить перед правилом отбрасывания на первый взгляд наивно:
iif "enp3s0" oif "enp1s0f0" ip daddr 192.168.1.2 tcp dport 22 принять
и из-за специфической топологии: локальная сеть 192.168.1.0/24 не маршрутизируется, поэтому по умолчанию недоступна из Интернета, этого, вероятно, будет достаточно (технически маршрутизатор следующего перехода может обмануть и достичь 192.168.1.2:22 напрямую без НАТ). Но если система ничего не делала маскарад (и вместо 192.168.1.0/24 была маршрутизируемая локальная сеть), это оставило бы службу доступной напрямую.
На самом деле есть более простой и безопасный метод, который также является более общим на случай, если некоторые другие порты также ДНК-ed и все такое ДНК все правила должны быть разрешены: добавьте правило, разрешающее Любые пакет, подвергшийся ДНК трансформация. Это более подробно в эквиваленте iptables-расширения' контрек матч:
ДНКТ
Виртуальное состояние, совпадающее, если исходный пункт назначения отличается от
источник ответа.
Просто вставьте это вместо этого в фильтровать вперед перед последним уронить правило:
кт статус днат принять
или, если быть немного более точным:
iif enp3s0 oif enp1s0f0 ct статус dnat accept
вплоть до очень точного:
iif enp3s0 oif enp1s0f0 ct state новый ct status dnat ip saddr 192.168.1.2 tcp dport 22 accept
Этот статус может появиться только из-за предыдущего ДНК правило, выполненное в потоке, поэтому оно подтверждает намерение: принять.
Примечания:
нет необходимости использовать разные таблицы для разных типов крючков (фильтр и нат) пока речь идет об одной семье (IP здесь).
Это привычка, унаследованная от iptables это может ограничить возможности. Например, сфера действия установлен это стол. Используя тот же набор между фильтр цепь и нат цепочка требует, чтобы они находились в одной таблице (где установлен определено). К сожалению, многие примеры даже из вики по-прежнему используют соглашения об именах, имитирующие iptables.
а тут не важно, исторический приоритет для предварительная маршрутизация не 100, а -100 (иначе дстнат).
Это имело бы значение только в том случае, если бы были другие таблицы, включая предварительная маршрутизация цепи или если iptables нат правила использовались вместе (и в таком случае рекомендуется использовать -101 или -99, а не точно -100), чтобы определить, какие правила имеют приоритет.