Использование iptables для изменения порта назначения
Можно ли изменить порт назначения UDP-пакета с помощью iptables?
Я пытаюсь получить SNMP-агент для отправки ловушек на 1620 вместо 162. К сожалению, до сих пор мне удалось изменить исходный порт:
iptables -t nat -A POSTROUTING -p udp --dport 162 -j SNAT --to: 1620
Ответы
Ответ 1
Это использование, по-видимому, не поддерживается. Взято из http://www.netfilter.org/documentation/HOWTO/NAT-HOWTO.txt:
6.3.7. Изменение назначения локально генерируемых соединений
Код NAT позволяет вставлять DNAT в цепочке OUTPUT, но
это не полностью поддерживается в 2.4 (это может быть, но для этого требуется новый вариант конфигурации, некоторое тестирование, и справедливое кодирование, поэтому, если кто-то контракты Расти, чтобы написать это, я не ожидал этого скоро).
Текущее ограничение заключается в том, что вы может только изменить пункт назначения на локальная машина (например, `j DNAT - для 127.0.0.1 '), а не на другую машину, иначе ответы не будут правильно переводиться.
Ответ 2
вы можете перенаправить с 162 до 1620
iptables -t nat -A PREROUTING -p UDP -dport 162 -j REDIRECT -to-port 1620
Ответ 3
Предполагая, что вы знаете, на какой компьютер вы отправляете:
iptables -t nat -A OUTPUT -p udp --dport 162 -j DNAT --to-destination <dest-ip>:1620
Ответ 4
@PiedPiper был прав. С DNAT вы должны указать IP-адрес, но мы хотим только перенаправление портов, поэтому -j REDIRECT может работать в этом случае.
См. http://www.netfilter.org/documentation/HOWTO//NAT-HOWTO-6.html#ss6.2
Ответ 5
Вы можете настроить правило переадресации и затем повторно вставить пакет с измененным портом.
Я сделал это некоторое время назад в Mac OS X, но это тот же самый принцип в Linux:
http://blog.dv8.ro/2006/08/using-divert-sockets-on-mac-os-x.html
Вам в основном нужно создать простую прозрачную прокси.
Ответ 6
Вместо того, чтобы делать SNAT, попробуйте DNAT. Исходный порт изменяется, потому что SNAT означает SourceNAT, поэтому DNAT будет работать для вас.