Como posso redirecionar todo o tráfego UDP de uma porta para outra no BSD / OS X?

6

Em Mac OS X 10.9.5 , estou executando boot2docker e gostaria de encaminhar temporariamente uma porta UDP não privilegiada 69 para a porta 69 da máquina virtual boot2docker . O Virtualbox suporta apenas o encaminhamento de portas privilegiadas.

Eu tentei executar socat da seguinte forma:

socat UDP-LISTEN:69,fork,reuseaddr UDP:192.168.59.101:69

Funciona muito bem até que eu tente fazer uma conexão tftp e, em seguida, ela falha com:

socat[32232] E bind(5, {LEN=16 AF=2 0.0.0.0:69}, 16): Address already in use

A verificação de netstat -an não é muito aberta no que diz respeito ao UDP:

udp6       0      0  *.58669                *.*
udp4       0      0  *.58669                *.*

A única coisa relacionada que eu encontrei na web não foi de muita ajuda.

Como no Mac OS X o que é uma boa maneira de "espelhar" o tráfego UDP de uma porta para outra?

    
por cwd 27.05.2015 / 21:59

1 resposta

0

Eu tentei as etapas abaixo, que devem funcionar, mas não funciona no Mac (encaminha mensagens de texto UDP da porta 20 para a porta 29), mas você pode querer tente assim mesmo:

  1. cd /tmp
  2. mkfifo backpipe
  3. sudo nc -ulk 20 0<backpipe |sudo nc -ulk 29 | tee backpipe
  4. Em outro terminal - teste com echo -n “this is a test” | sudo nc -4u -w1 localhost 20

É possível que o uso seja destroçado ou o arquivo especial do fifo não esteja funcionando.

No entanto, encontrei uma maneira "mais fácil".

  1. Faça o download de um arquivo de origem do programa c muito pequeno chamado: udp_redirect (clique aqui para fazer o download)
  2. Compile com gcc -w udp_redirect.c -o udp_redirect
  3. Executar no plano de fundo sudo ./udp_redirect 127.0.0.1 20 127.0.0.1 29 &
  4. Configure um ouvinte na porta 29 para testá-lo sudo nc -ul 29
  5. Em um segundo terminal, teste-o com echo “this is a test” | sudo nc -4u -w1 localhost 20

Este teste envia mensagens de texto UDP para a porta 20 e observa o ouvinte na porta 29 no primeiro terminal imprimir as mensagens. Você também pode configurar um ouvinte na porta 20 e ver que nenhuma mensagem está disponível, todas elas são encaminhadas (não duplicadas) para a porta 29.

Eu digo que é 'mais fácil' porque o binário udp_redirect tem um uso muito mais fácil, não tem a necessidade de um arquivo especial fifo, não requer pipes, não requer o utilitário nc e, mais importante, funciona!

    
por 04.06.2015 / 19:00