Для того чтобы понять что такое ngrok, давайте поговорим о проблемах которые он может решить.
Часто бывает нужно сделать запрос к сервису к которому не так просто получить досту. Причины проблем с доступом могут быть разными. Это может быть тестовый сервис, который работает локально дома. Но у домашнего компьютера нет выделенного ip адреса или домашний роутер не позволяет пробросить запрос. Также сервер, к которому нужно получить доступ, может находиться в корпоративной VPN сети или за фаерволом.
Но при этом, может быть необходимо развернуть локальную базу данных и получить к ней доступ. Например для тестирования и демонстрации работы мобильного приложения. Или это может быть локальный WEB сервер, а вам необходимо продемонстрировать работу сайта заказчику. Или вам просто нужно отладить удаленный php скрипт. И при этом вы хотите подключить xdebug удаленного сервера к IDE в которой работаете локально.
В этой статье поговорим о том, как ngrok решает эти задачи.
Установка ngrok
Ngrok это локальная программа, которая дает возможность открыть сетевой порт в мир. Даже если у вас нет выделенного IP или вы находитесь в VPN сети и тд. Давайте попробуем установить ngrok.
Регистрация
Вначале нам нужно зарегистрироваться на сайте ngrok. Переходим сюда и проходим регистрацию. После чего попадаем в нашу учетную запись и видим следующее.

Дальнейшая установка для windows и ubuntu отличается незначительно. На странице нашей учетной записи мы видим ссылки для загрузки разных версий под разные операционные системы. Выбираем нашу и скачиваем архив.

Распаковка и установка authtoken
В скачанном архиве находится исполняемый файл ngrok. Распаковываем этот архив в папку где он будет жить. Далее заходим в эту папку с помощью командной строки или терминала и вводим следующую команду.
windows
.\ngrok help
ubuntu
./ngrok help
И видим следующее.

Дальше нужно задать наш authtoken. Это нужно для связи ngrok с нашей учетной записью.
Переходим на страницу с токеном и копируем его. Далее пишем следующую команду.
windows
.\ngrok authtoken <<ваш скопированный токен>>
ubuntu
./ngrok authtoken <<ваш скопированный токен>>
Все, установка завершена. Давайте попробуем как это работает.
Пример использования ngrok
Для примера давайте возьмем случай с локальным WEB сервером, который мы хотим открыть в мир. Берем стандартный случай когда веб сервер работает на 80 порту и доступен по адресу 127.0.0.1:80.
Все что нам нужно выполнить для того чтобы открыть доступ это выполнить следующую команду. Где http это протокол который мы будем использовать, а 80 порт на который нам будут приходить запросы.
windows
.\ngrok http 80
ubuntu
./ngrok http 80
И мы увидим следующую информацию.

Мы видим что ngrok сгенерировал ссылки. Теперь по этим ссылка наш сервер доступен из любой точки мира.
Т.е. когда приходит запрос на сгенерированную ссылку, то этот запрос идет на облачные сервера ngrok. После чего сервер перенаправляет этот запрос локальному клиенту который мы устанавливали и запускали ранее. А этот ngrok клиент перенаправляет запрос на порт 80 локальной машины. И таким образом наш WEB сервер получает запрос и шлет ответ. Ответ проходит в обратном направлении по такой же цепочке.
Мониторинг
Во время работы ngrok поднимает маленький WEB сервер, по адресу 127.0.0.1:4040. Здесь мы можем смотреть все запросы и ответы которые приходили за время текущей сессии. Выглядит это следующим образом.

Эта информация может помочь в дебаггинге.
Надеюсь вам помогла эта информация. Вообще ngrok имеет больше возможностей. Там и работа с разными протоколами и возможность закрыть свой трафик паролем и много другого. Но об этом в другой раз.