I really like ngrok. I use it a lot. I just really dislike how the TCP tunnels work. With HTTP you get a unique subdomain which makes it harder for people to just scan and connect. With TCP, it's always 0.tcp.ngrok.io, so you can just scan that domain and connect to anything that's open.
I'not currently using it (so I did not test this) but seems like you have the option of custom TCP as I can see here https://ngrok.com/product#pricing for Pro account.