В дополнение к ответу Caleb , если вы работаете с более новой iptablesверсией (v1.4.14), у которой больше нет ROUTEцели, вам понадобится что-то вроде следующего, протестированное на Debian Wheezy *:
iptables -A PREROUTING -t mangle -p tcp ! -s 127.0.0.1 --dport 8001 -j TEE --gateway 127.0.0.1
iptables -A OUTPUT -t nat -p tcp -s 127.0.0.1/32 --dport 8001 -j DNAT --to 127.0.0.1:8002
Протестируйте с помощью netcat ( man nc). В окне терминала введите следующее и нажмите Enterклавишу:
nc -l 8002
Команда будет ожидать ввода, который вы наберете во втором окне терминала.
Во втором окне терминала введите следующее и нажмите Enterклавишу:
nc 127.0.0.1 8001
Команда будет ждать дальнейшего ввода. Введите что-нибудь и нажмите Enterклавишу. После того, как вы нажмете Enterклавишу во втором окне терминала, текст, который вы набрали во втором окне терминала, должен появиться в первом окне терминала. Нажмите Ctrl-c во втором окне, чтобы завершить сеанс.
* Этот синтаксис не поддерживается в RHEL / Centos (6.5 или более ранней версии) :-(, поэтому вам нужно использовать socatдля передачи и пересылки входящих пакетов на исходном порту на два новых порта. Если у вас были процессы, прослушивающие исходный порт приема, то вы необходимо перенастроить их для прослушивания на одном из портов tee'd, как socatсейчас слушатель на исходном порте. См. этот пост SE для примера socatсинтаксиса клонирования портов.
iptablesможет быть слишком старым; см. Отправка дублированных пакетов через два интернет-соединения.