Os pipes usados por | são unidirecionais. Quando você executa nc | nc , a saída da segunda conexão vai para seu terminal ; a entrada da primeira conexão é lida do seu teclado. Basicamente, a forma completa seria </dev/tty nc | nc >/dev/tty .
Para criar um túnel bidirecional, você teria que usar outra coisa, como ...
socat tcp-l:localhost:1234 tcp:localhost:1235
(Ou crie um pipe nomeado e use-o com dois nc , mas isso é menos eficiente.)
No entanto, isso não fará o que você deseja. Não fará com que 1234 se torne a porta de origem da segunda conexão; você terá apenas como a porta destino da primeira conexão, e as duas conexões não estão relacionadas: stunnel simplesmente recebe bytes das duas conexões e reenvia-as para o oposto fim.
Se você quiser simplesmente especificar a porta de origem de uma conexão, é mais simples:
nc -l 56789 localhost 1235
socat stdio tcp:localhost:1235,sourceport=56789
Como stunnel não tem uma opção "porta local", você pode pegar um dos comandos acima e usá-lo na opção exec= .