Raspberry Pi'de Cloudflare Tunnel Kurulumu

Bu yazı, PiMyLifeUp - Setting up a Cloudflare Tunnel on the Raspberry Pi kaynağından Türkçe'ye çevrilerek hazırlanmıştır.

Bu proje, Raspberry Pi'de Cloudflare tunnel'ı nasıl kuracağınızı gösterecek.

Raspberry Pi Cloudflare Tunnel

Cloudflare, DDOS koruma hizmetleriyle tanınan bir şirket haline geldi. Ancak, aynı zamanda güvenli ve özel bağlantılar sağlamada da öncülerden biridir.

Cloudflare'in ücretsiz sunduğu ürünlerden biri de tunnel hizmetidir. Bu tunnel, cihazınız ile Cloudflare ağı arasında güvenli bir bağlantı oluşturmanızı sağlar.

Raspberry Pi'nizde Cloudflare'in tunnel'ını kullanarak, güvenlik duvarınızda herhangi bir port açma konusunda endişelenmenize gerek kalmaz. HTTP veya HTTPS kullanan bir hizmete erişim vermek istiyorsanız, başka bir cihaza Cloudflared kurmanıza bile gerek kalmaz.

Bu rehberin, Cloudflare'in hizmetleri üzerinden çalışacak şekilde yapılandırılmış bir alan adına sahip olmanızı gerektirdiğini lütfen unutmayın. Zaten kurulu bir alan adınız yoksa, devam etmeden önce bunu yapmanız gerekecek.

Raspberry Pi'nizi Cloudflare Tunnel İçin Hazırlama

Raspberry Pi'de Cloudflare tunnel'ı kurmak için, "Cloudflared" adlı bir yazılım parçasına güveneceğiz. Cloudflared, Pi ile Cloudflare ağı arasındaki güvenli tunnel'ı oluşturan ve sürdüren yazılımdır.

Bu adımlar nispeten basit olsa da, gerekli yazılımı kurmak için resmi Cloudflare deposunu eklememiz gerekecek.

Gerekli Herhangi Bir Yazılımı Kurma

1. İlk görevimiz, paket listesinde bir güncelleme yapmak ve güncel olmayan tüm paketleri yükseltmektir.

Terminalde aşağıdaki komutu kullanarak her iki görevi de gerçekleştirebilirsiniz.

sudo apt update
sudo apt upgrade

2. Güncelleme tamamlandıktan sonra, hem "curl" hem de "lsb-release" paketlerine sahip olduğumuzdan emin olmalıyız.

Terminalde aşağıdaki komutu kullanarak her iki paketi de kurun.

sudo apt install curl lsb-release
  • curl – Cloudflared deposu için GPG anahtarını almak amacıyla curl kullanacağız.
  • lsb-release – Bu paket, sürüm adı gibi sistem hakkındaki bilgileri kolayca almamızı sağlar.

Raspberry Pi'ye Cloudflare Deposunu Ekleme

3. Gerekli tüm paketler yerinde olduğuna göre, sonunda Cloudflared deposu için GPG anahtarını alıp Raspberry Pi'mizde saklayabiliriz.

Bu anahtarı cihazınıza kaydetmek için, aşağıdaki komutu kullanın.

curl -L https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null

Bir GPG anahtarı, kurduğumuz paketlerin geçerli olduğunu ve depoya ait olduğunu doğrulamak için kritik önem taşır.

4. GPG anahtarı keyrings klasörümüze kaydedildikten sonra, bir sonraki adımımız Cloudflared deposunu Raspberry Pi'mize eklemektir.

Aşağıdaki komutu çalıştırarak depoyu ekleyebilirsiniz.

echo "deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared any main" | sudo tee  /etc/apt/sources.list.d/cloudflared.list

5. Mevcut depolarda değişiklik yaptığımızdan, paket listesi önbelleğinde başka bir güncelleme daha yapmamız gerekecek.

Terminalde aşağıdaki komutu kullanarak bu önbelleği güncelleyebilirsiniz.

sudo apt update

Raspberry Pi'ye Cloudfared Kurulumu

6. Depo eklendikten sonra, artık Cloudflared paketini Raspberry Pi'mize kurmaya devam edebiliriz.

Bu paketi kurmak için, aşağıdaki komutu çalıştırmak isteyeceksiniz.

sudo apt install cloudflared

Raspberry Pi'de Bir Cloudflare Tunnel Kurma

Artık Raspberry Pi'mizi hazırladığımıza göre, Cloudflare tunnel'ı kurabiliriz. Bu tunnel, trafiğinizin üzerinden çalıştırılacağı yerdir.

Cloudflare Hizmetiyle Kimlik Doğrulama

1. İlk adımımız, Raspberry Pi'miz ile Cloudflare hizmeti arasında bir bağlantı oluşturmaktır.

Aşağıdaki komutu kullanarak Cloudflare hizmetiyle kimlik doğrulamaya başlayabiliriz.

cloudflared tunnel login

Bu süreç tamamlanırken cihazınızda Cloudflared'i açık tuttuğunuzdan emin olun.

2. Yukarıdaki komutu çalıştırdıktan sonra, terminalde aşağıdaki mesajın göründüğünü göreceksiniz.

Mesajda görüntülenen URL'ye gitmek ve Cloudflare hesabınıza giriş yapmak için bunu kullanmak isteyeceksiniz.

Please open the following URL and log in with your Cloudflare account:

https://dash.cloudflare.com/argotunnel?callback=https%3A%2F%2Flogin.cloudflareaccess.org%2FXXXXXXXXXX

Leave cloudflared running to download the cert automatically.

3. Raspberry Pi'niz Cloudflare hizmetiyle başarıyla kimlik doğrulamasını tamamladığında, aşağıdaki mesajı göreceksiniz.

You have successfully logged in.
If you wish to copy your credentials to a server, they have been saved to:
/home/pi/.cloudflared/cert.pem

Raspberry Pi'de Cloudflare Tunnel Oluşturma

4. Artık yetkilendirildiğimize göre, aşağıdaki komutu kullanarak bir Cloudflare tunnel'ı oluşturabiliriz.

"TUNNELNAME" kısmını bu tunnel'a atamak istediğiniz isimle değiştirdiğinizden emin olun.

cloudflared tunnel create TUNNELNAME

5. Yukarıdaki komutu çalıştırdıktan sonra, aşağıdakine benzer bir mesaj göreceksiniz.

Daha sonra ihtiyacımız olacağından ID'yi not etmek isteyeceksiniz.

Tunnel credentials written to /home/pi/.cloudflared/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX.json. cloudflared chose this file based on where your origin certificate was found. Keep this file secret. To revoke these credentials, delete the tunnel.

Created tunnel pimytunnel with id XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

Tunnel'ı Bir Alan Adına Yönlendirme

6. Tunnel oluşturulduktan sonra, artık tunnel'ı Cloudflare'de sahip olduğumuz bir alan adına yönlendirebiliriz. Bu, Raspberry Pi'mize o alan adı üzerinden erişmemizi sağlayacak.

Örneğin, Minecraft sunucunuzun veya PhotoPrism'inizin belirli bir alan adı üzerinden erişilebilir olmasını istiyorsanız, aşağıdakini kullanabilirsiniz. Ancak, bunun için bir tunnel oluşturmak istediğiniz program HTTP veya HTTPS protokolünü kullanmıyorsa, diğer kullanıcının Cloudflared kurulu olması gerekecektir.

"TUNNELNAME" kısmını tunnel'ınızın adıyla ve "DOMAINNAME" kısmını kullanmak istediğiniz alan adıyla değiştirdiğinizden emin olun.

cloudflared tunnel route dns TUNNELNAME DOMAINNAME

7. Yukarıdaki komut doğru çalıştıysa, aşağıdakine benzer bir mesaj görürsünüz. Bu mesaj, Cloudflare'in tunnel'ınıza yönlendiren bir CNAME oluşturduğunu doğrular.

2022-10-18T04:54:54Z INF Added CNAME DOMAINNAME which will route to this tunnel tunnelID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

Raspberry Pi Portlarınızı Cloudflare Tunnel Üzerinden Yönlendirme

8. Yapmamız gereken son görev, Cloudflare tunnel'ını Raspberry Pi'mizdeki bir hedefe bağlamaktır.

Tunnel var olsa da, şu anda herhangi bir şeye bağlı değil, bu yüzden bu örnekte onu belirli bir URL'ye koyacağız.

Bu komutu çalıştırırken, "PORT" kısmını açığa çıkarmak istediğiniz uygulamaya ait portla değiştirin. Örneğin, web sunucunuzun HTTP portunu açığa çıkarmak istiyorsanız, 80 portunu kullanabilirsiniz.

"TUNNELNAME" kısmını tunnel'ın adıyla değiştirin.

cloudflared tunnel run --url localhost:PORT TUNNELNAME

9. Cloudflare tunnel'ı başlatıldıktan sonra, aşağıdakine benzer bir mesaj göreceksiniz.

2022-10-18T09:34:40Z INF Starting tunnel tunnelID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
2022-10-18T09:34:40Z INF Cannot determine default configuration path. No file [config.yml config.yaml] in [~/.clouddflare-warp /etc/cloudflared /usr/local/etc/cloudflared]
2022-10-18T09:34:40Z INF Version 2022.10.0
2022-10-18T09:34:40Z INF GOOS: linux, GOVersion: go1.18.6, GoArch: arm
2022-10-18T09:34:40Z INF Settings: map[url:localhost:80]

Bu tunnel'ı istediğiniz zaman klavyenizde CTRL + C tuşuna basarak kapatabilirsiniz.

10. Raspberry Pi'nize giden Cloudflare tunnel'ının çalıştığını doğrulamak için, artık daha önce kurduğunuz alan adı üzerinden erişmeyi denemelisiniz.

Örneğin, NGINX web sunucumuz için bir Cloudflare tunnel'ı kurduk ve ona bu şekilde eriştik.

Açılışta Cloudflare Tunnel'ınıza Bağlanma

11. Cloudflare tunnel'ınızın çalıştığını doğruladıktan sonra, muhtemelen Raspberry Pi'niz başladığında başlamasını isteyeceksiniz.

Bunu yapmak için, tüm bunları Cloudflare daemon'unun okuyacağı bir "config.yml" dosyasına yazmamız gerekecek.

sudo nano ~/.cloudflared/config.yml

12. Bu dosyanın içine, aşağıdaki satırları yazmak ve kullanım durumunuza göre ilerledikçe ayarlamak isteyeceksiniz.

  • [TUNNELNAME] – Bu değeri tunnel'ınızın adıyla değiştirin.

  • [USERNAME] – Bu değer, kullanıcınızın adıyla değiştirilmelidir.

  • [UUID] – Bu bölümün 5. adımında aldığınız UUID'yi belirtmeniz gerekecek.

  • [HOSTNAME] – Bu değeri kullanmayı planladığınız alan adıyla değiştirin. Örneğin, "test.pimylifeup.com".

  • [PORT] – Son olarak, "PORT" kısmını tunnel üzerinden erişilebilir olmasını istediğiniz portla değiştirin.

  • [PROTOCOL] – Bu, hizmetiniz için kullanmak istediğiniz protokoldür. Bir web sunucusu durumunda, "http" veya "https" kullanmak isteyeceksiniz. Ancak, kullandığınız hizmet farklı bir protokol kullanıyorsa yararlanabileceğiniz birkaç başka seçenek daha vardır.

    • http – HTTP isteklerini belirtilen hizmete iletir. Örn., http://localhost:8080
    • https – HTTPS isteklerini belirtilen hizmete iletir. Örn., https://localhost:8080
    • unix – HTTP ile aynıdır ama bir Unix Socket kullanır. Örn., unix:/home/example/exam.sock
    • unix+tls – HTTPS ile aynıdır ama bir Unix socket kullanır. Örn., unix+tls:/home/example/exam.sock
    • tcp – TCP protokolünü kullanan bir hizmeti yerel bir hizmete proxy'ler. (Örneğin, bir Minecraft sunucusu) Örn., tcp://localhost:25655
    • ssh – Bir SSH bağlantısını yerel bir hizmete proxy'lemenizi sağlar. Örn., ssh://localhost:22
    • rdp – RDP kullanılarak yapılan bir bağlantıyı belirtilen hizmete proxy'ler. Örn., rdp://localhost:338

    tunnel: [TUNNELNAME]
    credentials-file: /home/[USERNAME]/.cloudflared/[UUID].json

    ingress:
    - hostname: [HOSTNAME]
    service: [PROTOCOL]://localhost:[PORT]
    - service: http_status:404

13. Yapılandırma dosyasında bu değişiklikleri yaptıktan sonra, CTRL + X, ardından Y, sonra ENTER tuşuna basarak kaydedip çıkın.

14. Yapılandırma dosyası oluşturulduktan sonra, aşağıdaki komutu kullanarak onu bir servis olarak kurabiliriz.

Bu komut, yapılandırma dosyamızı doğru konuma kopyalayacak ve systemd için bir servis dosyası hazırlayacaktır.

sudo cloudflared --config ~/.cloudflared/config.yml service install

15. Aşağıdaki komutu kullanarak Cloudflare tunnel servisini, Raspberry Pi'miz açıldığında başlayacak şekilde etkinleştirebiliriz.

sudo systemctl enable cloudflared

16. Son olarak, terminalde aşağıdaki komutu kullanarak tunnel'ın şimdi çevrimiçi olduğundan emin olabilirsiniz.

sudo systemctl start cloudflared

Sonuç

Bu eğitim, Raspberry Pi'de bir Cloudflare Tunnel'ı nasıl kuracağınızı gösterir.

Bir Cloudflare tunnel'ı, ana makinenizde port açmak zorunda kalmadan Cloudflare ağına güvenli bir bağlantı oluşturmanızı sağlar.

Yalnızca HTTP veya HTTPS'den yayın yapmak istiyorsanız, istemci makinelere Cloudflared kurulu olmasına gerek yoktur.

Raspberry Pi'nizde Cloudflare tunnel'ını çalışır hale getirirken herhangi bir sorunla karşılaştıysanız, aşağıya yorum bırakın.