Назад | Перейти на главную страницу

Правило перенаправления iptables для udp не работает

Я пытаюсь создать перенаправление для UDP-трафика syslog с входящего IP: PORT на другой порт в том же окне Linux. Целью этого является маршрутизация трафика, поступающего на разные IP-адреса на сервере, к службам, работающим на более высоких номерах портов в зависимости от адреса назначения.

ОС: RHEL 7.2

Правило:

iptables -A PREROUTING -t nat -p udp --dport 514 -d A.D.D.R -j REDIRECT --to-port 1514

для отладки я также тестировал:

iptables -A PREROUTING -t nat -p udp --dport 514 -d A.D.D.R -j LOG --log-prefix "SYSLOG_REDIRECT"

iptables -t nat -L -v -n 

показывает 0 для счетчика, журналы не записываются

tcpdump показывает трафик, входящий на входной порт 514

IP-адрес назначения (A.D.D.R) назначен субинтерфейсу / псевдониму интерфейса enoXXXX: 1

У кого-нибудь был подобный случай?

Ваше правило NAT кажется правильным и должно делать то, что вы ожидали. Однако есть один момент, чтобы убедиться, что я считаю, что это причина, по которой ваш UDP-трафик не перенаправляется.

Перенаправление трафика UDP может быть сложнее, чем перенаправление TCP. Это главным образом потому, что TCP - это протокол, ориентированный на соединение, а UDP - без установления соединения.

Правила NAT полагаются на модуль отслеживания соединений, который отслеживает состояние любого "связь". В случае TCP ясно, что это означает, поскольку существуют специальные пакеты TCP для обозначения новых подключений. В UDP нет фазы установления соединения. Первый пакет, который увидит ваш ящик, считается инициирующим"связь"и ответный пакет указывает, что"соединение установлено".

Как насчет закрытия соединения? В TCP это также ясно, потому что TCP использует специальные флаги для индикации закрытия соединения. Когда вы увидите, вы можете использовать их и соответственно очистить состояние подключения. Однако вы никогда не узнаете, когда UDP "связь"завершено. Таким образом, запись отслеживания соединения не будет удалена, пока не будет достигнут тайм-аут (на моем компьютере он установлен на 180 секунд) без какого-либо пакета UDP.

Как это связано с вашей проблемой? Когда ваш ящик постоянно получает UDP-трафик для системного журнала, тайм-аут UDP «соединения» не истечет, и состояние соединения будет постоянно сохраняться. Правило NAT не буду применяться, пока есть состояние в таблице отслеживания соединений.

Как заставить новое правило NAT? Вы можете попытаться удалить запись отслеживания подключений вручную, используя команду ниже (не используйте ее без каких-либо других параметров, так как она очистит всю таблицу, прервав все ваши текущие подключения). Для получения дополнительных параметров вы можете проверить руководство.

$ sudo conntrack -D