Cara mengatur akses aman Cloudflare Tunnel melalui infrastruktur pribadi Anda menggunakan Docker

Baru-baru ini, saya menghadapi tantangan di mana saya perlu menyebarkan aplikasi web dan memiliki akses SSH untuk CI/CD Pipeline saya, tetapi saya tidak ingin membayar Server di Cloud / Hosting seperti VPS atau server khusus. Saya juga tidak ingin menggunakan layanan VPN, jadi saya memutuskan untuk menggunakan Cloudflare Tunnel untuk mengamankan akses ke infrastruktur pribadi saya. Saya merancang topologi jaringan untuk mengimplementasikan ini di laboratorium rumah saya menggunakan Docker.
Tip
Anda dapat mengabaikan perangkat lain dalam gambar topologi ini, ini hanya ilustrasi bagaimana topologi jaringan rumah saya diimplementasikan. Anda cukup fokus pada cloudflare tunnel, dan container docker.
Topologi Jaringan RumahJadi dengan pengaturan ini, kita dapat mengakses infrastruktur pribadi kita dari internet, kita dapat mengakses aplikasi web, dan juga memiliki akses SSH ke server KVM.
Sebelum kita mulai, pastikan Anda memiliki hal-hal berikut:
Anda harus memiliki nama domain, Anda bisa mendapatkannya dari Pendaftar Domain seperti Google Domains, Namecheap, atau pendaftar domain lainnya. Pastikan NS (Name Server) mengarah ke DNS Cloudflare.
Dalam contoh saya, saya akan menggunakan domain saya sendiri devvnull.me, dan saat ini Name Server-nya sudah mengarah ke DNS Cloudflare. Untuk memverifikasinya, Anda dapat menggunakan perintah berikut:
dig devvnull.me -t NSKeluarannya kurang lebih akan seperti ini:
; <<>> DiG 9.18.39-0ubuntu0.24.04.2-Ubuntu <<>> devvnull.me -t NS
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24249
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;devvnull.me. IN NS
;; ANSWER SECTION:
devvnull.me. 7198 IN NS heidi.ns.cloudflare.com.
devvnull.me. 7198 IN NS gordon.ns.cloudflare.com.
;; Query time: 0 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Wed Jan 07 15:23:59 WIB 2026
;; MSG SIZE rcvd: 98Pastikan akun Cloudflare Anda sudah menambahkan Metode Penagihan / Pembayaran, karena fitur Zero Trust pada paket gratis memerlukan metode pembayaran untuk mengaktifkannya (tetapi tidak akan membebani biaya kepada Anda).
Tip
Anda dapat menginstal cloudflare tunnel di server/mesin apa pun yang Anda inginkan, seperti Windows, Linux, macOS, Systemd, Docker, dll.
Anda perlu memiliki server untuk menjalankan cloudflare tunnel, dan juga untuk menjalankan container docker. Dalam kasus ini saya akan menggunakan KVM Ubuntu Server, tetapi Anda dapat menggunakan server apa pun yang Anda inginkan.
Important
Jalankan perintah ini di dalam shell server/mesin tempat Anda ingin menjalankan cloudflare tunnel. Jadi Anda perlu melakukan remote ke server/mesin terlebih dahulu. Contoh dalam kasus saya menggunakan ssh:
ssh devnull@ubuntu.home.internalKarena dalam kasus ini saya akan menggunakan Docker untuk menjalankan cloudflare tunnel, jadi pastikan Anda telah menginstal Docker di server Anda. Jika Anda belum menginstal Docker, Anda dapat mengikuti postingan blog saya untuk menginstalnya: Ubuntu 24.04 - Instal Docker.
Setelah menginstal Docker, kita perlu membuat jaringan container khusus untuk semua container, sehingga kita dapat menggunakan jaringan yang sama untuk semua container. Ini dapat dilakukan dengan menjalankan perintah berikut:
Note
Pastikan subnet tidak tumpang tindih dengan subnet jaringan lokal Anda. Dalam kasus ini saya akan menggunakan IPv4 Class B (172.25.0.0/16) untuk jaringan container.
Ini dapat memiliki 65536 alamat IP (dari 172.25.0.0 hingga 172.25.255.255), jadi cukup untuk semua container.
Anda juga dapat mengubah nama untuk jaringan container, agar lebih deskriptif bagi Anda.
docker network create \
--driver=bridge \
--subnet=172.25.0.0/16 \
cloudflared-tunnelSetelah semua prasyarat terpenuhi, kita dapat mulai mengatur cloudflare tunnel. Pertama, kita perlu mengautentikasi ke cloudflare dan membuat tunnel.
Important
Jalankan perintah ini di dalam shell server/mesin tempat Anda ingin menjalankan cloudflare tunnel. Jadi Anda perlu melakukan remote ke server/mesin terlebih dahulu. Contoh dalam kasus saya menggunakan ssh:
ssh devnull@ubuntu.home.internalKarena kita akan menggunakan Docker, jadi kita bisa cukup menggunakan perintah sederhana seperti ini untuk login ke cloudflare:
Tip
Ubah nama folder dengan nama domain Anda sendiri, dalam kasus ini saya akan menggunakan devvnull.me.
Pastikan direktori cloudflared memiliki izin untuk pengguna nonroot atau 65532, sehingga kita dapat menggunakannya di dalam container.
mkdir -p /opt/docker-app/devvnull.me && \
cd /opt/docker-app/devvnull.me
mkdir cloudflared && \
sudo chown -R 65532:65532 cloudflareddocker run --rm -it \
-v $PWD/cloudflared:/home/nonroot/.cloudflared \
cloudflare/cloudflared:latest \
tunnel loginSetelah menjalankan perintah tersebut, akan muncul URL untuk dibuka di browser Anda guna login ke cloudflare. Setelah dibuka di browser pilih zona atau domain yang ingin Anda Otorisasi Cloudflare Tunnel. Dalam kasus ini saya akan memilih devvnull.me > Klik tombol Authorize.
Otorisasi Zona Cloudflare TunnelJika proses Otorisasi berhasil, akan muncul pesan seperti ini:
Leave cloudflared running to download the cert automatically.
2026-01-07T09:01:06Z INF You have successfully logged in.
If you wish to copy your credentials to a server, they have been saved to:
/home/nonroot/.cloudflared/cert.pemDan struktur foldernya harus seperti ini:
devvnull.me
└── cloudflared
└── cert.pemSetelah login ke cloudflare, kita dapat membuat tunnel menggunakan perintah ini:
Tip
Ubah nama tunnel dengan nama tunnel Anda sendiri, dalam kasus ini saya akan menggunakan devvnull-tunnel.
docker run --rm -it \
-v $PWD/cloudflared:/home/nonroot/.cloudflared \
cloudflare/cloudflared:latest \
tunnel create devvnull-tunnelJika tunnel berhasil dibuat, akan muncul pesan seperti ini:
Tunnel credentials written to /home/nonroot/.cloudflared/6d40d748-1ef2-4899-97f5-a33489ad43fc.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 devvnull-tunnel with id 6d40d748-1ef2-4899-97f5-a33489ad43fcDan struktur foldernya harus seperti ini:
devvnull.me
└── cloudflared
├── 6d40d748-1ef2-4899-97f5-a33489ad43fc.json
└── cert.pemSekarang kita perlu membuat DNS record untuk tunnel, dalam kasus saya, saya akan memetakan record ini ke domain devvnull.me.
Note
@ dalam record ini berarti root domain, ini akan memetakan ke devvnull.me, jadi record ini akan berfungsi sebagai layanan web.ssh dalam record ini berarti subdomain, jadi ini akan memetakan ke ssh.devvnull.me, jadi record ini akan berfungsi sebagai layanan SSH.Nilai uniknya adalah UUID yang akan dibuat oleh cloudflare, ini akan memetakan ke cfargotunnel.com, jadi record ini akan berfungsi sebagai layanan tunnel.
| No | Tipe | Nama | Konten |
|---|---|---|---|
| 1 | CNAME | @ | <UUID>.cfargotunnel.com |
| 2 | CNAME | ssh | <UUID>.cfargotunnel.com |
Untuk membuat DNS record, Anda dapat membuatnya menggunakan perintah di bawah ini:
Tip
Anda dapat menambahkan lebih banyak record jika Anda mau, misalnya Anda dapat menambahkan subdomain portainer untuk layanan portainer.
Jika Anda mendapatkan pesan error saat membuat DNS record ini, seperti ini
Failed to add route: code: 1003, reason: Failed to create record devvnull.me with err An A, AAAA, or CNAME record with that host already exists. For more details, refer to <https://developers.cloudflare.com/dns/manage-dns-records/troubleshooting/records-with-same-name/>.Itu berarti record tersebut sudah ada, jadi untuk memperbaikinya dengan cara menghapus record yang ada atau menggunakan subdomain yang berbeda untuk record tersebut. Untuk menghapus record yang ada Anda dapat pergi ke Cloudflare > DNS > Record > Pilih Record > Hapus Record.
docker run --rm -it \
-v $PWD/cloudflared:/home/nonroot/.cloudflared \
cloudflare/cloudflared:latest \
tunnel route dns devvnull-tunnel devvnull.meJika tunnel berhasil dibuat, akan muncul pesan seperti ini:
2026-01-07T15:05:08Z INF Added CNAME devvnull.me which will route to this tunnel tunnelID=6d40d748-1ef2-4899-97f5-a33489ad43fc
2026-01-07T15:05:45Z INF Added CNAME ssh.devvnull.me which will route to this tunnel tunnelID=6d40d748-1ef2-4899-97f5-a33489ad43fcDan jika Anda melihat di Dashboard Cloudflare, sekarang akan muncul DNS record seperti ini:
DNS RecordSetelah membuat DNS record, kita perlu membuat aturan ingress untuk tunnel. Jadi berdasarkan DNS record apa yang kita buat, kita perlu mendefinisikan aturan ingress untuk memetakan layanan apa yang harus diakses ketika DNS record diakses.
Dalam kasus ini saya akan membuat aturan ingress untuk layanan web dan ssh. Untuk membuat aturan ingress, Anda dapat membuatnya menggunakan perintah di bawah ini:
Tip
Anda dapat menggunakan editor teks apa pun yang Anda inginkan seperti nano, vim, nvim, dll untuk membuat file konfigurasi. Dalam kasus ini saya akan menggunakan nvim.
sudo nvim cloudflared/config.ymlIsi file konfigurasi dengan konten ini:
Important
Ganti <TUNNEL-UUID> dengan uuid tunnel Anda, Anda dapat melihat uuid tunnel di langkah sebelumnya atau di folder cloudflared.
docker-welcome-page untuk meneruskan koneksi http ke Server Nginx di dalam Docker Container.172.25.0.1 untuk meneruskan koneksi ssh ke Server KVM atau Guest OS via jaringan host.tunnel: devvnull-tunnel
credentials-file: /etc/cloudflared/<TUNNEL-UUID>.json
ingress:
# --- Web HTTPS
- hostname: devvnull.me
service: http://docker-welcome-page:80
# --- SSH (host KVM)
- hostname: ssh.devvnull.me
service: ssh://172.25.0.1:22
# --- Fallback
- service: http_status:404Jadi sekarang struktur foldernya harus seperti ini:
devvnull.me
└── cloudflared
├── 6d40d748-1ef2-4899-97f5-a33489ad43fc.json
├── cert.pem
└── config.ymlSekarang kita perlu menjalankan cloudflare tunnel sebagai layanan container agar tetap berjalan sepanjang waktu. Untuk membuat file docker compose, Anda dapat membuatnya menggunakan perintah di bawah ini:
sudo nvim docker-compose.ymlImportant
Dalam layanan web, saya akan menggunakan gambar dari GitHub Container Registry saya ghcr.io/armandwipangestu/docker-welcome-page:1.0.2. Ini adalah gambar sederhana yang akan berfungsi sebagai halaman sambutan untuk layanan web.
Jangan ragu untuk melihat repositori di sini armandwipangestu/docker-welcome-page atau melihat Halaman Sambutan secara langsung di sini docker-welcome-page.vercel.app.
Berikut adalah beberapa hal penting yang perlu Anda pertimbangkan agar ini berhasil:
cloudflared_tunnel dapat diakses oleh container lain di jaringan yang sama.Karena kita sudah membuat jaringan docker sebelumnya, jadi dalam kasus ini container akan menggunakan dhcp untuk mendapatkan alamat ip menggunakan nama jaringan eksternal cloudflared-tunnel.
services:
cloudflared_tunnel:
image: cloudflare/cloudflared:latest
container_name: cloudflared_tunnel
restart: unless-stopped
command: tunnel --no-autoupdate run
volumes:
- ./cloudflared:/etc/cloudflared:ro
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
networks:
- cloudflared-tunnel
docker-welcome-page:
image: ghcr.io/armandwipangestu/docker-welcome-page:1.0.2
container_name: docker-welcome-page
ports:
- "80:80"
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
networks:
- cloudflared-tunnel
networks:
cloudflared-tunnel:
external: trueSetelah membuat file docker compose, sekarang kita dapat menjalankan layanan container menggunakan perintah di bawah ini:
docker compose up -d
docker compose ps -aJika container berjalan dengan sukses, akan muncul pesan seperti ini:
[+] up 1/3
[+] up 5/5hcr.io/armandwipangestu/docker-welcome-page:1.0.2 [⣿⣿] 132.4kB / 132.4kB Pulling 3.5s
✔ Image ghcr.io/armandwipangestu/docker-welcome-page:1.0.2 Pulled 3.5s
✔ 9bc53414cea7 Pull complete 0.9s
✔ e97543ee5c71 Pull complete 0.6s
✔ Container docker-welcome-page Created 0.1s
✔ Container cloudflared_tunnel Created 0.1s
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
cloudflared_tunnel cloudflare/cloudflared:latest "cloudflared --no-au…" cloudflared_tunnel 31 seconds ago Up 31 seconds
docker-welcome-page ghcr.io/armandwipangestu/docker-welcome-page:1.0.2 "/docker-entrypoint.…" docker-welcome-page 31 seconds ago Up 31 seconds 0.0.0.0:80->80/tcp, [::]:80->80/tcpUntuk memastikan cloudflare tunnel berjalan dengan sukses, Anda dapat memeriksa log menggunakan perintah di bawah ini:
docker compose logs -f cloudflared_tunnelJika berhasil akan muncul pesan seperti ini:
cloudflared_tunnel | 2026-01-07T15:36:26Z INF Starting tunnel tunnelID=6d40d748-1ef2-4899-97f5-a33489ad43fc
cloudflared_tunnel | 2026-01-07T15:36:26Z INF Version 2025.11.1 (Checksum cf95c90f5f6d6c87296bbab3b5a967ef580b017357353bfc1777ed5451ff9805)
cloudflared_tunnel | 2026-01-07T15:36:26Z INF GOOS: linux, GOVersion: go1.24.9, GoArch: amd64
cloudflared_tunnel | 2026-01-07T15:36:26Z INF Settings: map[cred-file:/etc/cloudflared/6d40d748-1ef2-4899-97f5-a33489ad43fc.json credentials-file:/etc/cloudflared/6d40d748-1ef2-4899-97f5-a33489ad43fc.json no-autoupdate:true]
cloudflared_tunnel | 2026-01-07T15:36:26Z INF Generated Connector ID: 07ea2563-0952-40ac-821a-2d942e066170
cloudflared_tunnel | 2026-01-07T15:36:26Z INF Initial protocol quic
cloudflared_tunnel | 2026-01-07T15:36:26Z INF ICMP proxy will use 172.25.0.3 as source for IPv4
cloudflared_tunnel | 2026-01-07T15:36:26Z INF ICMP proxy will use ::1 in zone lo as source for IPv6
cloudflared_tunnel | 2026-01-07T15:36:27Z INF ICMP proxy will use 172.25.0.3 as source for IPv4
cloudflared_tunnel | 2026-01-07T15:36:27Z INF ICMP proxy will use ::1 in zone lo as source for IPv6
cloudflared_tunnel | 2026-01-07T15:36:27Z INF Starting metrics server on [::]:20241/metrics
cloudflared_tunnel | 2026-01-07T15:36:27Z INF Tunnel connection curve preferences: [X25519MLKEM768 CurveP256] connIndex=0 event=0 ip=198.41.200.63
cloudflared_tunnel | 2026/01/07 15:36:27 failed to sufficiently increase receive buffer size (was: 208 kiB, wanted: 7168 kiB, got: 416 kiB). See https://github.com/quic-go/quic-go/wiki/UDP-Buffer-Sizes for details.
cloudflared_tunnel | 2026-01-07T15:36:27Z INF Registered tunnel connection connIndex=0 connection=d0ea08a2-dc82-412c-b4e5-c7883cbf8c88 event=0 ip=198.41.200.63 location=sin13 protocol=quic
cloudflared_tunnel | 2026-01-07T15:36:27Z INF Tunnel connection curve preferences: [X25519MLKEM768 CurveP256] connIndex=1 event=0 ip=198.41.192.67
cloudflared_tunnel | 2026-01-07T15:36:28Z INF Registered tunnel connection connIndex=1 connection=ab21325c-65d0-4ac8-b6de-76c0c3fe76f4 event=0 ip=198.41.192.67 location=sin06 protocol=quic
cloudflared_tunnel | 2026-01-07T15:36:28Z INF Tunnel connection curve preferences: [X25519MLKEM768 CurveP256] connIndex=2 event=0 ip=198.41.192.57
cloudflared_tunnel | 2026-01-07T15:36:29Z INF Registered tunnel connection connIndex=2 connection=ca6da423-76c1-4424-9e58-45796454119a event=0 ip=198.41.192.57 location=sin09 protocol=quic
cloudflared_tunnel | 2026-01-07T15:36:29Z INF Tunnel connection curve preferences: [X25519MLKEM768 CurveP256] connIndex=3 event=0 ip=198.41.200.43
cloudflared_tunnel | 2026-01-07T15:36:30Z INF Registered tunnel connection connIndex=3 connection=dacbabe4-b00c-4ef1-8141-91e40b25620b event=0 ip=198.41.200.43 location=sin11 protocol=quicNote
Pengaturan ini akan berguna jika Anda ingin mengakses Server KVM Anda untuk CI/CD Pipeline, jadi Koneksi SSH akan diverifikasi oleh Access dan Secret dari Service Token dan tidak menggunakan metode verifikasi Email (jadi akan berguna untuk klien headless).
Jika Anda tidak menggunakan CI/CD Pipeline atau tidak membutuhkan klien headless, Anda dapat melewati langkah ini.
Sekarang kita perlu membuat token layanan untuk klien headless (misalnya CI/CD Pipeline). Untuk membuat token layanan, Anda dapat mengikuti langkah-langkah di bawah ini:
Zero Trust di bilah sisi kiriAccess controls > Service credentials di bilah sisi kiriCreate Service TokenSekarang isi formulir dengan data berikut:
Service token name (Required): headless-client
Service Token Duration (Required): 1 yearKlik Generate token dan simpan atau salin token ke clipboard.
Jika sukses akan muncul pesan seperti ini:
Service Token GeneratedAturan kebijakan ini akan digunakan untuk memverifikasi apakah Koneksi SSH dilindungi oleh Service Token atau metode Verifikasi Email.
Untuk membuat aturan kebijakan, Anda dapat mengikuti langkah-langkah di bawah ini:
Zero Trust di bilah sisi kiriAccess controls > Policies di bilah sisi kiriAdd a policyIsi formulir dengan data berikut:
- Basic Information:
- Policy name (Required): Allow SSH Connection with Service Token
- Action (Required): Service Auth
- Session duration: 24 hours
- Add rules:
- Selector: Service Token
- Value: headless-clientKonfigurasinya akan terlihat seperti ini:
Policy Service TokenKlik Save untuk menyimpan kebijakan.
Tambahkan kebijakan baru dengan data berikut:
- Basic Information:
- Policy name (Required): Allow SSH Connection with Email Verification
- Action (Required): Allow
- Session duration: 24 hours
- Add rules:
- Selector: Emails
- Value: your-email@domain.comKonfigurasinya akan terlihat seperti ini:
Policy Email VerificationKlik Save untuk menyimpan kebijakan.
Jadi sekarang daftar Reusable policies akan terlihat seperti ini:
Daftar Reusable PoliciesSekarang kita perlu membuat Aplikasi Akses Zero Trust untuk mengizinkan Koneksi SSH ke infrastruktur pribadi kita.
Untuk membuat Aplikasi Akses Zero Trust, Anda dapat mengikuti langkah-langkah di bawah ini:
Zero Trust di bilah sisi kiriAccess controls > Applications di bilah sisi kiriAdd an applicationSelf-hostedDan isi formulir dengan data berikut:
- Basic Information:
- Application name (Required): devvnull.me SSH
- Session Duration (Required): 24 hours
- Public hostname:
- Input method: Default
- Subdomain: ssh
- Domain: devvnull.me
- Path: kosong
- Access policies:
- Pilih existing policies:
- Allow SSH Connection with Service Token
- Allow SSH Connection with Email VerificationBuat konfigurasi lain menjadi default, sehingga akan terlihat seperti ini:
Aplikasi Akses Zero TrustKlik Next > Next > Save untuk menyimpan aplikasi.
Sekarang daftar Applications akan terlihat seperti ini:
Daftar AplikasiImportant
Jalankan perintah ini di dalam shell mesin klien yang ingin Anda hubungkan ke infrastruktur pribadi.
Untuk membuat Autentikasi Kunci SSH, Anda dapat mengikuti langkah-langkah di bawah ini:
Anda perlu membuat Pasangan Kunci SSH baru jika Anda belum memilikinya. Anda dapat membuat Pasangan Kunci SSH baru menggunakan perintah berikut:
ssh-keygen -t ed25519 -f ~/.ssh/devvnull.meJadi sekarang direktori ~/.ssh akan terlihat seperti ini:
~/.ssh
├── authorized_keys
├── devvnull.me
├── devvnull.me.pub
└── known_hostsSetelah itu, salin kunci publik dan simpan di file authorized_keys dari Server KVM yang ingin Anda hubungkan. Jadi sekarang file authorized_keys akan terlihat seperti ini:
cat ~/.ssh/authorized_keys
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICK72PwHf0X9btH2ijYCmlx7jzulr0j5viVqBCm/Y9YA devnull@devnullSekarang nonaktifkan autentikasi kata sandi dengan mengedit file sshd_config.
sudo nvim /etc/ssh/sshd_configDan atur konfigurasi berikut:
PermitRootLogin no
PubkeyAuthentication yes
ChallengeResponseAuthentication no
PasswordAuthentication no
PermitEmptyPasswords no
UsePAM noCaution
Jangan logout sebelum menguji apakah Autentikasi Kunci SSH berfungsi.
Setelah itu, restart layanan SSH.
sudo systemctl restart sshSekarang kita dapat menambahkan Konfigurasi SSH ke mesin klien untuk mempermudah koneksi ke infrastruktur pribadi. Untuk menambahkan Konfigurasi SSH, Anda dapat mengikuti langkah-langkah di bawah ini:
nvim ~/.ssh/configDan tambahkan konfigurasi berikut:
Tip
Jika Anda tidak ingin menggunakan Konfigurasi SSH, berikut adalah contoh cara menghubungkan ke infrastruktur pribadi menggunakan perintah ssh secara langsung:
export CF_ACCESS_CLIENT_ID="your-client-id"
export CF_ACCESS_CLIENT_SECRET="your-client-secret"
ssh \
-o ProxyCommand="cloudflared access ssh \
--hostname ssh.devvnull.me \
--id $CF_ACCESS_CLIENT_ID \
--secret $CF_ACCESS_CLIENT_SECRET" \
devnull@ssh.devvnull.meHost devvnull.me
HostName ssh.devvnull.me
User devnull
IdentityFile ~/.ssh/devvnull.me
IdentitiesOnly yes
ProxyCommand cloudflared access ssh --hostname %h --id $CF_ACCESS_CLIENT_ID --secret $CF_ACCESS_CLIENT_SECRETSekarang kita perlu menambahkan binary Cloudflared ke mesin klien untuk mempermudah koneksi ke infrastruktur pribadi. Untuk menambahkan binary Cloudflared, Anda dapat mengikuti langkah-langkah di bawah ini:
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null
echo 'deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared noble main' | sudo tee /etc/apt/sources.list.d/cloudflared.list
sudo apt update && sudo apt install cloudflaredSetelah semua pengaturan selesai, sekarang kita dapat menguji koneksi tunneling.
Untuk mengakses layanan web, Anda dapat membuka browser dan mengunjungi https://devvnull.me. Jika koneksi berhasil, Anda akan melihat halaman layanan web seperti ini:
Layanan WebUntuk mengakses Layanan SSH menggunakan Token Layanan, Anda dapat mengikuti langkah-langkah di bawah ini:
export CF_ACCESS_CLIENT_ID="your-client-id"
export CF_ACCESS_CLIENT_SECRET="your-client-secret"
ssh devvnull.meJika koneksi berhasil, Anda akan melihat shell berubah menjadi seperti ini:
Akses Layanan SSH menggunakan Token LayananUntuk mengakses Layanan SSH menggunakan Verifikasi Email, Anda dapat mengikuti langkah-langkah di bawah ini:
ssh -o ProxyCommand="cloudflared access ssh --hostname ssh.devvnull.me" devnull@ssh.devvnull.meJika koneksi berhasil, akan muncul URL untuk dibuka di browser seperti ini
A browser window should have opened at the following URL:
https://ssh.devvnull.me/cdn-cgi/access/cli?aud=32cf2e2a14bccd667d8e508a9bfb6fd822399debe130f533ae176ee9f5aa3b7d&edge_token_transfer=true&redirect_url=https%3A%2F%2Fssh.devvnull.me%3Faud%3D32cf2e2a14bccd667d8e508a9bfb6fd822399debe130f533ae176ee9f5aa3b7d%26token%3Dq2l9u_F-OWkOt0hdtaj9zJ7yTG2qeqi2g6laXs1Oqn4%253D&send_org_token=true&token=q2l9u_F-OWkOt0hdtaj9zJ7yTG2qeqi2g6laXs1Oqn4%3D
If the browser failed to open, please visit the URL above directly in your browser.Dan setelah membuka URL tersebut, akan muncul halaman login seperti ini:
Note
Isi alamat email dengan yang sama dengan yang terdaftar di Kebijakan sebelumnya.
Akses Layanan SSH masukkan verifikasi emailJika Anda memasukkan email yang benar, Anda akan menerima Kode Akses Cloudflare seperti ini:
Akses Layanan SSH terima kode akses CloudflareSetelah itu akan muncul tombol Deny dan Approve seperti ini:
Akses Layanan SSH setujui kode akses CloudflareJika Anda memilih Approve, maka shell akan berubah menjadi seperti ini:
Akses Layanan SSH koneksi berhasilSekarang kembali ke shell, Anda akan melihat shell berubah menjadi seperti ini:
Akses Layanan SSH koneksi berhasil 2Dengan menggunakan metode ini, Anda mendapatkan:
Menyiapkan Cloudflare Tunnel dengan Docker menyediakan cara yang kuat dan aman untuk mengakses infrastruktur pribadi Anda tanpa mengekspos port apa pun ke internet publik. Dengan memanfaatkan Cloudflare Zero Trust, Anda dapat menerapkan kontrol akses berbasis identitas, memastikan bahwa hanya pengguna yang berwenang yang dapat menjangkau layanan web dan server SSH Anda.
Pengaturan ini tidak hanya menyederhanakan konfigurasi jaringan Anda dengan menghilangkan kebutuhan akan aturan NAT yang rumit atau port forwarding, tetapi juga secara signifikan meningkatkan postur keamanan Anda melalui tunnel terenkripsi dan autentikasi multi-faktor. Baik Anda mengelola lab rumah atau server pribadi profesional, pendekatan ini menawarkan solusi modern dan skalabel untuk akses jarak jauh yang aman.
Pengaturan awal membutuhkan sedikit usaha, tetapi hasilnya adalah solusi akses tingkat perusahaan yang kuat untuk infrastruktur mandiri Anda dengan semua fitur di tingkat gratis Cloudflare.