Eu tenho dois computadores Linux separados, A e B, que precisam se comunicar via UDP na porta 3000. Cada um deles está atrás de um roteador diferente e tenho regras de encaminhamento de porta configuradas em cada roteador.
Por alguma razão, a única maneira de B receber pacotes UDP de A é se B enviar um pacote para A primeiro.
Caso de trabalho:
# Computer A Listens (IP 1.2.3.4)
netcat -ul 3000
# Computer B Initiates
netcat -u 1.2.3.4 3000
No caso acima, os dois se “conectam” via netcat, e posso enviar e receber dados nos dois sentidos. Isso me leva a acreditar que não se trata de um problema de encaminhamento ou roteamento de porta.
Caso quebrado:
# Computer B Listens (IP 5.6.7.8)
netcat -ul 3000
# Computer A Initiates
netcat -u 5.6.7.8 3000
Neste caso quebrado, os dois não conseguem "conectar-se" via netcat e não consigo enviar nenhum dado entre os terminais.
Também tentei usar ferramentas diretas de envio de pacotes para enviar pacotes UDP entre A e B. A mesma coisa acontece: B não consegue receber nada de A até que B envie um pacote para A.
Não tenho ideia de por que algo assim aconteceria, especialmente com o UDP. Alguma idéia do que poderia estar causando o problema?
EDITAR
Verificado o encaminhamento de porta em B. Aqui está a configuração atual do iptables:
$iptables -L -t nat
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT udp -- anywhere anywhere udp dpt:3000 to:192.168.3.2:3000
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE 0 -- anywhere anywhere
$iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT 0 -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT 0 -- anywhere anywhere
ACCEPT udp -- anywhere 192.168.3.2 udp dpt:3000
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Estou faltando alguma coisa na minha configuração do iptables para o encaminhamento adequado de qualquer lugar: 3000 para 192.168.3.2:3000 para UDP?