Raspberry Pi’ı İnternete Açmak (ngrok)

Kitap boyunca Raspberry Pi’ın birçok özelliğini ağ üzerinden kullandığımız uygulamalar yer alıyor. Yerel bilgisayarda çalışan bu ağ uygulamalarına yerel ağ üzerinden kolayca erişebilirken internet ortamından erişmek için önceki başlıkta anlatıldığı gibi özel yönlendirmeler yapmak gerekiyor. Bu yönlendirmeleri yapmak bazen mevcut ağ yapılandırması, güvenlik duvarı veya servis sağlayıcıdan kaynaklanan nedenlerle zorlayıcı olabilir. Bu başlıkta Raspberry Pi’a ngrok yazılımını kurarak localhost’da çalışan bir ağ uygulamasına adimiz.ngrok.io gibi bir adres ile internet ortamından kolayca nasıl erişebileceğinizi anlatacağım.

ngrok, NAT ve firewall arkasındaki uygulamaların trafiğini ngrok bulut sunucularına tünel (TLS bağlantısı) açarak ulaştırır ve size özel bir adres sağlayarak tünel içinden geçerek Raspberry Pi’a ulaşmanızı sağlar. Aşağıdaki görsel bu durumu açıklamaktadır.


ngrok’un çalışma yapısı

ngrok’u kurmak için ngrok.io sitesindeki Download sayfasına gidin ve ARM sürümünün indirme bağlantısını kopyalayın. Ardından aşağıdaki gibi wget aracı ile Raspberry Pi’a çekin ve arşiv dosyasını genişletin.

pi@raspberrypi:~ $ wget https://bin.equinox.io/c/x/ngrok-stable-linux-arm.zip

pi@raspberrypi:~ $ unzip ngrok-stable-linux-arm.zip

Archive:  ngrok-stable-linux-arm.zip

  inflating: ngrok

Arşiv dosyasının içerisinde ngrok adında çalıştırılabilir bir dosya vardır. Şimdi, Raspberry Pi üzerinde 80. üzerinden çalışan web sunucumuza ngrok ile internet ortamından nasıl ulaşabileceğimize bakalım. Bu örneği Raspberry Pi üzerinde çalışan herhangi bir web sunucusu için de uygulayabilirsiniz. ngrok’un temel kullanımı aşağıdaki gibidir:

ngrok <uzak port> <yerel port>

ngrok’u kullanarak yerelde çalışan Apache’yi internete çıkarmak için aşağıdaki komutu verelim:

pi@raspberrypi:~ $ ./ngrok http 80

Komutu verdikten sonra tünel açılır ve Apache’ye ulaşabileceğiniz <rastgele>.ngrok.io şeklindeki adresler listelenir ve trafik detayları ekrana basılır.

Session Status                online

Session Expires               7 hours, 59 minutes

Web Interface                 http://127.0.0.1:4040

Forwarding                    http://32aa26030bb7.ngrok.io -> http://localhost:80

Forwarding                    https://32aa26030bb7.ngrok.io -> http://localhost:80

Yukarıdaki ekran çıktısını açıklamamız gerekirse; tünel 8 saat sonra kendiliğinden kapanacak, tüneldeki canlı trafik hakkında raporlamayı http://127.0.0.1:4040 adresini kullanarak Raspberry Pi üzerinden görebilirsiniz, Apache’ye internet üzerinden ulaşmak için http://32aa26030bb7.ngrok.io adresini kullanabilirsiniz. Tünelin bağlantısını sonlandırmak için Ctrl+C tuş bileşimini kullanabilirsiniz.

Apache’ye ulaşmak için ngrok’un bize verdiği alt alan adı rastgele oluşturulmuş bir alan adıdır. ngrok sitesinden üye olup bir abone paketi satın alarak kendinize ait bir alt alan adı tanımlayabilir ve rezerve edebilirsiniz. Buraya kadar tek bir komutla bir web uygulamasını hızlı bir şekilde internete nasıl açabileceğimizi gördük. Dilerseniz ngrok’un işimize yarayabilecek bazı kullanışlı seçeneklerini de inceleyelim. Bunun için öncelikle ngrok.io sitesi  üzerinde bir hesap açarak üye olmamız gerekiyor. Sitenin ana sayfası üzerindeki SIGNUP bağlantısına tıklatarak kolaycak abone olabilirsiniz.

Üye girişi yaptıktan sonra Setup & Installation sayfasında yer alan authtoken’ımızı (kimlik doğrulama anaharı) Raspberry Pi’a kaydedeceğiz. Bunun için sayfadaki authtoken parametreli komutu Raspberry Pi üzerinde çalıştırın. Böylece authtoken  ~/.ngrok2/ngrok.yml adlı yapılandırma dosyasına kaydedilecek ve bundan sonra ngrok’un daha fazla özelliğini kullanabiliyor olacağız.

pi@raspberrypi:~ $ ./ngrok authtoken 1dvX6OFEeQO_fe9nZxNH6jq

Authtoken saved to configuration file: /home/pi/.ngrok2/ngrok.yml

Yukarıdaki işlemden sonra dilediğiniz TCP port’unu internete açabilirsiniz. Aşağıdaki komut ile SSH’ın port’u olan 22’yi internete açıyoruz. Böylece NAT arkasındaki Raspberry Pi’ın komut satırına 2.tcp.ngrok.io:19148 adresini kullanarak internet üzerinden erişebileceğiz. SSH istemcinize adres olarak 2.tcp.ngrok.io port olarak da 19148 girmeniz yeterlidir.

pi@raspberrypi:~ $ ./ngrok tcp 22

Session Status                online

Account                       [email protected] (Plan: Free)

Forwarding                    tcp://2.tcp.ngrok.io:19148 -> localhost:22

ngrok’un internete açtığı servisleri parola ile korumak için -auth seçeneğinden yararlanabilirsiniz. Aşağıdaki komut Raspberry Pi üzerinde çalışan Apache’yi (port 80) tankado kullanıcı adı ve 123456 parolası ile korumaya almıştır.

pi@raspberrypi:~ $ ./ngrok http 1880 -auth "tankado:123456"

Session Status                online

Account                       [email protected] (Plan: Free)

Forwarding                    http://a749e8475226.ngrok.io -> http://localhost:1880

Forwarding                    https://a749e8475226.ngrok.io -> http://localhost:1880

ngrok ile yapılabilecekler hakkında daha fazla örneğe üyelik hesabınızdaki Tutorials bağlantısından ve ngrok dokümantasyonundan[1] ulaşabilirsiniz. ngrok ile açılan tünellerin belli bir zaman aşımı süresi vardır. Bu süre ve tünel alt alan adının rastgele değişmesi nedeniyle ngrok’un ücretsiz üyelik paketi ile tünelin her daim açık kalmasını sağlamak mümkün değildir. Ancak ücretli bir üyeliniz varsa bu süre re sınırlamasından kurtulmak için ngrok’un bir servis olarak çalışmasını sağlayabilirsiniz. Bunun için ngrok’a service install komutu ile birlikte yapılandırma dosyasının yolunu verelim.

pi@raspberrypi:~ $ ./ngrok service install --config ~/.ngrok2/ngrok.yml

Bu komut ile ngrok bir servis olarak yüklenmiş olacak. Servisin durumunu görmek, durdurmak ve yeniden başlatmak için aşağıdaki komutları kullanabilirsiniz.

pi@raspberrypi:~ $ systemctl status ngrok

pi@raspberrypi:~ $ sudo systemctl stop ngrok

pi@raspberrypi:~ $ sudo systemctl restart ngrok

ngrok’u servis olarak yükledikten sonra Rasbperyy Pi üzerindeki hangi port’u tünelleyeceğini de yapılandırma dosyası olan ~/.ngrok2/ngrok.yml içinde tanımlamamız gerekir. Örneğin ilk yaptığımız örnekteki gibi Apache’yi internete açma işlemini servis dosyasında tanımlayalım. Bunun için ~/.ngrok2/ngrok.yml dosyasında aşağıdaki gibi bir tanımlama yapmanız yeterlidir.

pi@raspberrypi:~ $ nano ~/.ngrok2/ngrok.yml

authtoken: 1dvX6OFEeQO_fe9nZxNH6jq

tunnels:

    app:

        proto: http

        addr: 80

        auth: "username:password"

Tanımlamanın uygulanabilmesi için servisi yeniden başlatmayı unutmayın.

ngrok’u güncellemek için update seçeneğini aşağıda olduğu gibi kullanabilirsiniz.

pi@raspberrypi:~ $ ./ngrok update

No update available, this is the latest version.

serveo projesi

ngrok’a iyi bir alternatif olarak geliştirilen serveo projesi ngrok’un yaptığı gibi tünel açarak NAT ve güvenlik duvarını atlatmanızı sağlar. Eğer, internete sürekli bağlı bir bilgisayarınız ya da sunucunuz varsa kendi alan adınızı ve serveo’yu kullanarak iç ağınızdaki uygulamaları internete açabilirsiniz. serveo’yu Linux, Windows ve Mac bilgisayarlara kurabilirsiniz. serveo ücretsiz sürümünde aynı anda 3 tünel açmaya izin verir. Detaylı bilgi için http://serveo.net adresindeki projeyi inceleyebilirsiniz.


[1] ngrok documentation – https://ngrok.com/docs

Yazar: Özgür Koca

Yazar - Tankado.com

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site istenmeyenleri azaltmak için Akismet kullanır. Yorum verilerinizin nasıl işlendiğini öğrenin.