В дополнение к ответу 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
может быть слишком старым; см. Отправка дублированных пакетов через два интернет-соединения.