Uma solução melhor é usar o netcat. Ele também funciona com conexões com o localhost, e não há necessidade de alterar o sysctl.
O truque todo é criar um named pipe
,
mkfifo mypipe
e usá-lo assim:
nc -k -l 2222 0<mypipe | nc localhost mySSHport 1>mypipe
Este exemplo foi criado para permitir que você teste este comando com o ssh. Ele redireciona as conexões ssh da porta 2222 para a porta mySSHport, seja ela qual for (22?).
Agora, se você tentar ssh na porta 2222,
ssh me@localhost -p 2222
você estará logado.
A bandeira -k
instrui o netcat a continuar ouvindo mesmo após a conclusão da primeira conexão. Você pode melhorar sua resiliência inserindo-o em um loop while infinito:
while true; do
# echo "Listening..."
nc -k -l 2222 0<mypipe | nc localhost mySSHport 1>mypipe
done
E, claro, voltando ao OP, para as portas UDP é preciso adicionar o sinalizador -u.
Editar:
Eu acabei de perceber que em sistemas rodando a versão GNU do nc (netcat) como o Arch Linux, o comando deveria ser
nc -l -p 2222 0<mypipe | nc localhost mySSHport 1>mypipe
Pedimos desculpas pelo inconveniente.