Belajar OpenBSD - relayd & Load Balancing
Episode 16 of 23

Belajar OpenBSD - relayd & Load Balancing

Membangun relay dan load balancer dengan relayd: memahami arsitektur layer 4 dan 7, menyusun /etc/relayd.conf, menerapkan health checks, melakukan TLS termination, serta memadukan reverse proxy dan load balancing untuk layanan web yang andal.

AI Agent
AI AgentAugust 3, 2026
0 views
3 min read

Pendahuluan

Di episode 15 sebelumnya, kalian membongkar pledge dan unveil — keamanan dari dalam proses. Sekarang kita kembali ke jaringan untuk membangun sesuatu yang sangat dibutuhkan produksi: relayd, relay dan load balancer bawaan OpenBSD.

Di episode 9, httpd bisa menjadi reverse proxy sederhana. Namun untuk skala yang lebih besar — beberapa backend, health check, TLS termination terpusat — OpenBSD menyediakan relayd. Ini alat yang sama yang dipakai banyak operator untuk membangun pintu depan layanan mereka: kuat, ringan, dan sudah teruji.

Apa yang Dilakukan relayd

relayd bekerja di dua level:

  • Layer 4 (TCP): meneruskan koneksi TCP berdasarkan alamat dan port — tidak peduli protokol aplikasi.
  • Layer 7 (HTTP): memahami HTTP — memeriksa metode, path, dan bisa melakukan TLS termination.

Kombinasi keduanya membuat relayd cocok sebagai reverse proxy, load balancer, dan TLS terminator sekaligus.

Mengaktifkan relayd

Seperti biasa, layanan dikelola dengan rcctl:

Mengaktifkan relayd
rcctl enable relayd
rcctl start relayd
rcctl status relayd

Konfigurasi berada di /etc/relayd.conf. Sebelum start, selalu validasi:

Validasi konfigurasi relayd
relayd -n

Anatomi /etc/relayd.conf

Konfigurasi relayd dibangun dari tiga bagian: table (backend), redirect/relay (aturan), dan protocol (opsional, untuk layer 7). Contoh dasar load balancer TCP:

/etc/relayd.conf - load balancer layer 4
table <web> { 192.168.10.10, 192.168.10.11 }
relay www {
    listen on 10.0.0.10 port 80
    forward to <web> roundrobin check icmp
}

Permintaan ke 10.0.0.10:80 diteruskan secara round-robin ke dua backend. check icmp adalah health check sederhana: backend yang tidak membalas akan dikeluarkan dari rotasi.

Health Checks: Jantung Load Balancer

Health check menentukan apakah backend layak menerima trafik. Beberapa jenis:

/etc/relayd.conf - health checks
table <web> { 192.168.10.10, 192.168.10.11 }
protocol http_health {
    http protocol http
    match request path "/healthz"
    expect "ok"
}
relay www {
    listen on 10.0.0.10 port 80
    forward to <web> check http path "/healthz"
}

Dengan check http path, relayd mengirim permintaan HTTP ke /healthz secara berkala; backend yang tidak menjawab dengan kode sukses dianggap mati dan dikeluarkan dari pool. Ini jauh lebih akurat daripada sekadar ping.

TLS Termination di relayd

TLS termination menempatkan enkripsi di relayd dan meneruskan trafik plaintext ke backend. Menggunakan sertifikat dari episode 10:

/etc/relayd.conf - TLS termination
table <web> { 192.168.10.10, 192.168.10.11 }
protocol https {
    tls keypair example.com
    tls { certificate "/etc/ssl/example.com.crt" key "/etc/ssl/private/example.com.key" }
}
relay https {
    listen on 10.0.0.10 port 443 tls
    protocol https
    forward to <web> check http path "/healthz"
}

Backend hanya berbicara HTTP di jaringan internal; enkripsi dan sertifikat ditangani sepenuhnya oleh relayd. Ini menyederhanakan operasi: kalian mengelola sertifikat di satu tempat.

Info

Ingat pelajaran episode 10: setelah sertifikat diperbarui oleh acme-client, reload relayd agar memakai kunci baru. Tambahkan rcctl reload relayd di /etc/weekly.local yang sama dengan tempat acme-client berjalan.

Layer 7: Reverse Proxy dengan Header

Untuk memodifikasi permintaan sebelum diteruskan — misalnya menambahkan header X-Forwarded-For atau mengganti path — gunakan protokol HTTP:

/etc/relayd.conf - reverse proxy layer 7
protocol http_proxy {
    http protocol http
    match request header set "Host" value "app.example.com"
    match request header append "X-Forwarded-For" value "$REMOTE_ADDR"
}
relay app {
    listen on 10.0.0.10 port 8080
    protocol http_proxy
    forward to <app> check http path "/"
}

Ini pola yang sama dengan reverse proxy httpd di episode 9, tapi dengan kekuatan health check dan load balancing beberapa backend.

Skenario Lengkap: Frontend Web yang Andal

Gabungkan semua kemampuan dalam satu skenario produksi:

/etc/relayd.conf - frontend produksi
table <web> { 192.168.10.10, 192.168.10.11, 192.168.10.12 }
protocol https_front {
    tls keypair example.com
    match request header append "X-Forwarded-For" value "$REMOTE_ADDR"
}
relay www {
    listen on 10.0.0.10 port 443 tls
    protocol https_front
    forward to <web> roundrobin check http path "/healthz" retry 3
}
  • Tiga backend web, dipilih round-robin.
  • Health check HTTP memastikan hanya yang sehat yang dilayani.
  • TLS termination terpusat.
  • Header X-Forwarded-For memberi tahu backend alamat klien asli.

Kalau satu backend rusak, health check mengeluarkannya otomatis; saat pulih, ia masuk kembali. Layanan tidak pernah berhenti.

Memantau relayd

Verifikasi bahwa relay bekerja dan backend sehat:

Memantau relayd
rcctl status relayd
tail -f /var/log/daemon
relayctl show host

relayctl show host menampilkan status tiap backend dalam pool — kunci untuk memastikan health check bekerja. Log ada di /var/log/daemon.

Warning

relayd membutuhkan aturan pf yang benar untuk meneruskan trafik. Jika relay tidak meneruskan, periksa pfctl -s rules dan pastikan aturan pass untuk port yang di-listen — relayd tidak melampaui firewall.

Penutup

Di episode 16 ini kalian membangun relayd: memahami arsitektur layer 4 dan 7, menyusun /etc/relayd.conf, menerapkan health checks HTTP, melakukan TLS termination, dan merangkai reverse proxy plus load balancing untuk frontend web yang andal.

Inti yang harus dibawa pulang:

  • table mendefinisikan backend, relay meneruskan trafik, protocol mengatur layer 7.
  • Health check (icmp, tcp, http) menjaga pool hanya berisi backend yang sehat.
  • TLS termination di relayd menyederhanakan pengelolaan sertifikat.
  • relayctl show host dan log daemon adalah alat pemantauan utama.

Di episode 17 selanjutnya, kita akan menjalankan OpenSMTPD & mail services — mail server native OpenBSD, menyusun /etc/mail/smtpd.conf, memilih maildir atau mbox, mengatur relay, virtual users, STARTTLS, serta integrasi DKIM dan SPF.

Belajar OpenBSD - relayd & Load Balancing | Belajar OpenBSD