Using ngrok to access internal services


Ngrok allows us to share internal services to Internet facing systems. It's an incredibly useful way to access internal systems or create a way to directly access sensitive network systems.


Visit to get set up with an account.
Download the tool at​
Configure the ngrok preferences with the applicable key
ngrok config add-authtoken ***REDACTED KEY***


As always, we ask for help to learn what to do.
ngrok help
To start a listener, we can simply run the code below:
ngrok http 9999
This will result in a window similar to below:
After starting the listener, this shows the web interface to reach the internal port
In the example above, we can directly access the service on localhost:9999 by accessing the page at This was a python3 simple http server on that port.
ngrok http 80 # secure public URL for port 80 web server
ngrok http -subdomain=baz 8080 # port 8080 available at
ngrok http # tunnel to host:port instead of localhost
ngrok http https://localhost # expose a local https server
ngrok tcp 22 # tunnel arbitrary TCP traffic to port 22
ngrok tls 443 # TLS traffic for to port 443
ngrok start foo bar baz # start tunnels from the configuration file