Finally got it. I'm attaching this as it could be useful for a lot of situations.
Just keep in mind this method won't encrypt the traffic.
I'm behind a NAT, so I can't open ports.
Thus, for it to work, I need to initiate the connection.
On my side: Will run this script, starts a nc client to the ESP port (serial->tcp bridge), and another to your server, both bridged:
cd /tmp; rm -f a; mkfifo a
while true; do
cat a | nc ESP_IP ESP_PORT 2>&1 | nc -nv REMOTE_IP REMOTE_PORT -w5 >a
done
On your side: Linux machine, or Windows with cygwin and nc package installed.
Start a netcat server for my system to connect to, and another to open a local port where Putty can connect to, also bridged.
cd /tmp
rm -f a b; mkfifo a b
nc -lk REMOTE_PORT < b > a &
nc -lk INTERNAL_PORT < a > b &
printf "" > a
Only REMOTE_PORT needs to be open in the firewall/router.
Then putty connects to localhost and INTERNAL_PORT, which is the local netcat server.
This way, the shell works perfectly.
Took me several hours to find the correct commands!
Sending files: Login first, then exit the terminal (you can't have two concurrent connections) and run:
sz --tcp-client 127.0.0.1:9922 FILE
Also SecureCRT (paid) works well for this, you can download it on internet.