Я пытаюсь создать перенаправление для 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