Preciso obter uma cópia dos pacotes recebidos na porta 8001 para a porta 8002. Tentei o seguinte, mas recebo um erro que --tee é indefinido.
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
pode ser muito antigo; consulte Enviar pacotes duplicados por duas conexões com a Internet.Respostas:
A
--tee
bandeira não faz parte da cadeia DNAT, faz parte da ROUTE. Você só pode usá-lo após uma declaração de-j ROUTE
. Você pode obter ajuda específica do iptables sobre o assunto desta forma:Eu estava olhando para o seu comando iptables, e isso não faz nenhum sentido para mim. Por que você está tentando comparar com a fonte e a porta de origem de um pacote quando em sua pergunta disse "pacotes recebidos na porta"? Você está tentando dividir o tráfego de entrada para atingir duas portas ou pegar a saída de uma porta e ligá-la à entrada de outra?
Se o primeiro, existem realmente duas etapas. Você não pode usar tee para obter uma cópia do pacote E alterar o pacote para alterar os números de porta ao mesmo tempo. Você pode tentar isso em duas etapas, primeiro enviando uma cópia duplicada do pacote, combinando apenas a cópia e destruindo a porta de destino. AVISO: não testado, considere este pseudo-código:
fonte
ROUTE
alvo usado na resposta acima é obsoleto até o momento e não está disponível nas tabelas de ip nas distros mais recentes. Veja serverfault.com/questions/333155/…Além Caleb resposta 's, se você estiver trabalhando com mais recente
iptables
(v1.4.14) que não tem mais oROUTE
alvo que você vai precisar de algo como o seguinte, testado em Debian Wheezy *:Teste usando "netcat" (
man nc
). Em uma janela do terminal, digite o seguinte e pressione aEnter
tecla:O comando aguardará a entrada que você digitará em uma segunda janela do terminal.
Na segunda janela do terminal, digite o seguinte e pressione a
Enter
tecla:O comando aguardará por mais informações. Digite qualquer coisa e pressione a
Enter
tecla Depois de pressionar aEnter
tecla na segunda janela do terminal, o texto digitado na segunda janela do terminal deve aparecer na primeira janela do terminal. PressioneCtrl
-c na segunda janela para finalizar a sessão.* Esta sintaxe não é suportada no RHEL / Centos (6.5 ou anterior) :-( portanto, você precisa usar o
socat
T e encaminhar pacotes de entrada na porta original para duas novas portas. Se você teve processos ouvindo a porta de recebimento original, então é necessário reconfigurá-los para escutar em uma das portas em tee, comosocat
agora é o ouvinte na porta original.Veja esta postagem do SE, por exemplo,socat
sintaxe para clonagem de portas.fonte
nc -l -p 8002