Мне нужно иметь возможность получить копию пакетов, полученных через порт 8001 на порт 8002. Я пробовал следующее, но я получаю сообщение об ошибке --tee не определено.
sudo iptables -t nat -A PREROUTING -p TCP -s 127.0.0.1 --sport 8001 -j DNAT --to-destination 127.0.0.1:8002 --tee
iptables
может быть слишком старым; см. Отправка дублированных пакетов через два интернет-соединения.Ответы:
--tee
Флаг не является частью DNAT цепи, она является частью ROUTE. Вы можете использовать его только после декларации-j ROUTE
. Вы можете получить конкретную помощь от iptables по этому вопросу:Я смотрел на вашу команду iptables, и она не имеет никакого смысла для меня. Почему вы пытаетесь соответствовать против порта источника и источника пакета , когда в вашем вопросе вы сказали «packegs получил на порт»? Вы пытаетесь разделить входящий трафик на два порта или взять выход одного порта и связать его с входом другого?
Если первое, то здесь действительно два шага. Вы не можете использовать tee, чтобы получить копию пакета И манипулировать пакетом, чтобы изменить номера портов одновременно. Вы можете попробовать это в два этапа, сначала отправив себе дубликат копии пакета, затем сопоставив только копию и искажая порт назначения. ВНИМАНИЕ: не проверено, рассмотрите этот псевдокод:
источник
ROUTE
цель, использованная в ответе выше, на момент написания статьи устарела и недоступна в iptables на самых последних дистрибутивах. См. Serverfault.com/questions/333155/…В дополнение к ответу Caleb , если вы работаете с более новой
iptables
версией (v1.4.14), у которой больше нетROUTE
цели, вам понадобится что-то вроде следующего, протестированное на Debian Wheezy *:Протестируйте с помощью netcat (
man nc
). В окне терминала введите следующее и нажмитеEnter
клавишу:Команда будет ожидать ввода, который вы наберете во втором окне терминала.
Во втором окне терминала введите следующее и нажмите
Enter
клавишу:Команда будет ждать дальнейшего ввода. Введите что-нибудь и нажмите
Enter
клавишу. После того, как вы нажметеEnter
клавишу во втором окне терминала, текст, который вы набрали во втором окне терминала, должен появиться в первом окне терминала. НажмитеCtrl
-c во втором окне, чтобы завершить сеанс.* Этот синтаксис не поддерживается в RHEL / Centos (6.5 или более ранней версии) :-(, поэтому вам нужно использовать
socat
для передачи и пересылки входящих пакетов на исходном порту на два новых порта. Если у вас были процессы, прослушивающие исходный порт приема, то вы необходимо перенастроить их для прослушивания на одном из портов tee'd, какsocat
сейчас слушатель на исходном порте. См. этот пост SE для примераsocat
синтаксиса клонирования портов.источник
nc -l -p 8002