ngrok – tunelowanie ruchu

Wprowadzenie

Zdarza się, że potrzebujemy dostać się do jakiejś usługi działającej na komputerze lokalnym z sieci zewnętrznej – na przykład podczas testowania integracji z webhookami wysyłanymi między innymi przez takiego SendGrida. O ile mamy publiczne IP i możemy skonfigurować przekierowanie portów, to nie jest to jakoś mocno problematyczne. Gorzej jak pracujemy w biurze i doproszenie się o to administratorów graniczy z cudem. W takiej sytuacji z pomocą przychodzi tytułowy ngrok.

ngrok

Za pomocą ngrok (https://ngrok.com/) możemy w prosty i szybki sposób tunelować ruch z Internetu do portu w lokalnym komputerze. Przydaje się to w wielu sytuacjach jak wspomniane wcześniej testowanie webhooków, wiadomości wysyłanych przez Event Grida w Azure, czy udostępnianie usług z sieci lokalnej. Sytuacji, kiedy ngrok może nam się przydać, jest wiele, a co ważne uruchomienie i konfiguracja zajmuje dosłownie chwilkę.

Co najfajniejsze, z podstawowej wersji usługi możemy korzystać za darmo. Mamy wtedy dostęp do jednego aktywnego procesu ngrok, który umożliwia postawienie 4 tuneli i obsługę do 40 połączeń na minutę. Jednym z większych minusów darmowej wersji jest to, że każde uruchomienie nowego procesu/tunelu powoduje wygenerowanie nowego adresu publicznego. A to skutkuje tym, że na przykład musimy aktualizować konfigurację webhooków, aby żądania były wysyłane pod nowy adres.

Do celów developerskich takie ograniczenie jest nie dużym problemem. Szczególnie, że wtedy usługa jest za darmo. Zawsze można również skorzystać z płatnych wersji, które znoszą to ograniczenie i dają jeszcze inne funkcjonalności.

Na co dzień korzystam z Windowsa, więc poniższy opis będzie dotyczył tego systemu, ale ngrok może działać również na innych systemach i same kroki są bardzo podobne.

Darmowy kurs Visual Studio

Pracując z setkami programistów, zauważyłem, że większość osób nie pracuje efektywnie w Visual Studio. W skrajnych przypadkach korzystali z kopiowania z wykorzystaniem menu Edit. Wiem, że to dziwne, ale naprawdę niektórzy tak pracują. Dlatego postanowiłem stworzyć kurs Visual Studio – aby pomóc koleżankom i kolegom w efektywniejszej pracy.

Przygotowałem 30 lekcji e-mail, w których pokażę Ci, w jaki sposób pracować efektywniej i szybciej w Visual Studio. Poznasz dodatki, bez których nie wyobrażam sobie pracy w tym IDE.

Po więcej informacji zapraszam na dedykowaną stronę kursu: Darmowy Kurs Visual Studio.

Quiz C#

Ostatnio przygotowałem również quiz C#, w którym możesz sprawdzić swoją wiedzę. Podejmiesz wyzwanie?

Utworzenie tunelu w ngrok

Utworzenie nowego tunelu jest bardzo proste. Trzeba przede wszystkim założyć konto na stronie https://ngrok.com, a następnie pobrać ngrok.zip. Wypakowujemy plik ngrok.exe i możemy przejść do konfiguracji aplikacji.

Przed pierwszym uruchomieniem aplikacji musimy połączyć ją z naszym kontem. Robimy to uruchamiając komendę:

ngrok authtoken token

Musimy ustawić nasz token, który możemy pobrać z portalu ngrok – https://dashboard.ngrok.com/get-started/setup (tutaj znajduje się również prosty tutorial, jak uruchomić tunelowanie). Powyższa komenda tworzy plik konfiguracyjny, w którym jest token. Plik znajduje się w lokalizacji „C:\Users\[nazwa użytkownika]\.ngrok2”

Po konfiguracji ngrok możemy przejść już do utworzenia nowego tunelu. Robi się to w wierszu poleceń za pomocą komendy (w folderze, gdzie wypakowaliśmy ngrok):

ngrok http 5000

Gdzie 5000 to numer portu, na który chcemy przekierować ruch. W efekcie zobaczymy coś takiego:

Uruchomiony ngrok

W konsoli mamy przede wszystkim informacje o publicznych adresach. Są to dwa adresy – jeden dla protokołu HTTP, a drugi dla HTTPS. Oba są przekierowane do portu 5000, gdzie w momencie tworzenia tego wpisu, była uruchomiona aplikacja z poprzedniego wpisu o SendGrid.

Testowa aplikacja ma skonfigurowanego swaggera i w momencie działania tunelu jest on również dostępny pod adresem: https://58c380b6ab04.ngrok.io/swagger/index.html:

Uruchomiony swagger pod adresem https

Co fajne, w przypadku adresu HTTPS jest dostępny ważny certyfikat, więc nie musimy się tym przejmować, co miałoby miejsce w przypadku publicznego ip i przekierowania portów. I to nawet w darmowej wersji.

W momencie tunelowania połączeń na konsoli wyświetlają się informacje o kolejnych żądaniach. Poniżej widoczny jest zrzut po wyświetleniu powyższego swagger ui:

W wersji darmowej za każdym razem jak uruchomimy tunel, będziemy mieli zupełnie nowy adres.

Dashboard

Poza samym tunelem lokalnie mamy dostęp do dashboardu (http://127.0.0.1:4040/). Znajdziemy w nim szereg ciekawych informacji.

Przede wszystkim jest to lista przesłanych żądań. Mamy informacje o treści żądania, nagłówki, odpowiedzi i tak dalej. Bardzo przydadzą się do późniejszej analizy:

ngrok lokalny dashboard

Na zakładce Status wyświetla się konfiguracja oraz trochę statystyk.

Przykład

Do tego wpisu nie ma dedykowanego przykładu. Aby sprawdzić działanie ngrok możesz na szybko utworzyć prostą aplikację na przykład MVC, uruchomić ją w Visual Studio i do niej przekierować ruch.

Podsumowanie

W dobie chmury bardzo często nie jesteśmy w stanie wszystkiego odpalić lokalnie podczas developmentu. Czasami będziemy potrzebowali w jakiś sposób przekierować ruch z Internetu do naszego lokalnego komputera. W takiej sytuacji ngrok jest bardzo przydatny. W kilka chwili możemy utworzyć tunel i to za darmo. A co fajne, w wersji HTTPS nie będziemy musieli przejmować się posiadaniem ważnego certyfikatu.

A Ty w jaki sposób radzisz sobie w takich sytuacjach?

.NET 5 Web App w Azure

Szkolenie .NET 5 Web App w Azure

Zainteresował Ciebie ten temat? A może chcesz więcej? Jak tak to zapraszam na moje autorskie szkolenie o Web API działającym w Azure.

3 thoughts on “ngrok – tunelowanie ruchu

  • Pingback: dotnetomaniak.pl
  • Wow! Dzięki! Jestem początkującym programistą za granicą i właśnie dziś na spotkaniu deweloperów jeden mówił o ngrok i jego używaniu. I mi się przypomniało że ty pisałeś jakiś czas temu o tym. Dziękuję za wyjaśnienie bo wiadomo że w ojczystym języku lepiej idzie wszystko pojąć 😉

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *