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.
1 2 3 4 5 6 7 |
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:
1 |
ngrok <uzak port> <yerel port> |
ngrok’u kullanarak yerelde çalışan Apache’yi internete çıkarmak için aşağıdaki komutu verelim:
1 |
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.
1 2 3 4 5 6 7 8 9 |
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.
1 2 3 |
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.
1 2 3 4 5 6 7 |
pi@raspberrypi:~ $ ./ngrok tcp 22 Session Status online Account ozgurkoca@gmail.com (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.
1 2 3 4 5 6 7 8 9 |
pi@raspberrypi:~ $ ./ngrok http 1880 -auth "tankado:123456" Session Status online Account ozgurkoca@gmail.com (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.
1 |
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.
1 2 3 4 5 |
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
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