Iptables hashlimit и nat

Здравствуйте, я пытаюсь создать правило PREROUTING, чтобы перенаправить трафик на другой порт на основе hashlimit.

iptables -I PREROUTING -t nat -p udp --src 0/0 --dport 53 -j DNAT --to-destination 10.0.2.4:1053

Это работает нормально и перенаправляет все с порта 53 на 1053.

Похоже, что с использованием hashlimit работает:

iptables -I PREROUTING -t raw -p udp --dport 53 -m hashlimit --hashlimit-mode srcip --hashlimit-srcmask 32 --hashlimit-above 100/second --hashlimit-burst 1 --hashlimit-name OL_Proc -j DROP

Но следующее, похоже, вообще не работает:

iptables -I PREROUTING -t nat -p udp --dport 53 -m hashlimit --hashlimit-mode srcip --hashlimit-srcmask 32 --hashlimit-above 100/second --hashlimit-burst 1 --hashlimit-name OL_Proc -j DNAT --to-destination 10.0.2.4:1053

Я здесь что-то делаю не так?

РЕДАКТИРОВАТЬ 1:

Основываясь на отзывах parkamark (что имеет смысл), я попробовал следующее:

Это работает, как ожидалось, и направляет весь трафик на новый IP / порт:

iptables -t mangle -A PREROUTING -p udp --dport 53 -j MARK --set-mark 1

iptables -t nat -A PREROUTING -p udp -m mark --mark 0x1 -j DNAT --to-destination 10.0.2.5:1053

Но это не работает, и я не могу понять почему:

iptables -t mangle -A PREROUTING -p udp --dport 53 -m hashlimit --hashlimit-mode srcip --hashlimit-srcmask 32 --hashlimit-above 100/second --hashlimit-burst 1 --hashlimit-htable-expire 300000 --hashlimit-name OL_Proc -j MARK --set-mark 1

iptables -t nat -A PREROUTING -p udp -m mark --mark 0x1 -j DNAT --to-destination 10.0.2.5:1053

Я вижу в iptables -t mangle -L -v -n, что первое правило выполняется правильно, но второе никогда не срабатывает. Я также включил вход в первое правило и могу убедиться, что он срабатывает на 100%.

Есть идеи / отзывы по этому поводу?

0
задан 7 February 2020 в 16:06
1 ответ

Нет, вы не делаете что-то неправильно.

Подключения NAT отслеживаются в таблице отслеживания подключений внутри ядро. Вы можете просмотреть эту таблицу в любой момент времени с помощью команды conntrack ( conntrack -L - хорошее начало) - вам может потребоваться yum install conntrack-tools , если он недоступен в вашей системе.

Как я ранее объяснял здесь , когда дело доходит до NAT, правила iptables, определенные в таблице -t nat , определяют, как пакеты изначально соответствовали для добавления их в таблицу отслеживания соединений. После этого начального совпадения / попадания в правило iptables сеанс будет добавлен в таблицу отслеживания подключений, и все связанные пакеты будут обрабатываться через NAT в ядре, либо до тех пор, пока не истечет время ожидания подключения (в течение определенного периода не наблюдается трафика. времени), соединение разрывается / прерывается (в случае TCP), или вы используете параметр conntrack -D , чтобы удалить правило NAT из таблицы отслеживания соединений, чтобы оно больше не отслеживалось.

В контексте вашего вопроса первое правило находится в таблице raw , направляя трафик на -j DROP , что является немедленным падением трафика, где NAT не задействован. . Во втором правиле, которое находится в таблице nat , -j DNAT --to-destination 10.0.2.4:1053 сопоставляет пакеты и добавляет пакеты начального сеанса в таблицу отслеживания соединений. , после чего любой дальнейший связанный трафик между исходным IP / портом клиента и целевым IP / портом 10.0.2.4:1053 больше не будет соответствовать никаким правилам iptables nat .

0
ответ дан 26 February 2020 в 00:43

Теги

Похожие вопросы