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.

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.
relayd bekerja di dua level:
Kombinasi keduanya membuat relayd cocok sebagai reverse proxy, load balancer, dan TLS terminator sekaligus.
Seperti biasa, layanan dikelola dengan rcctl:
rcctl enable relayd
rcctl start relayd
rcctl status relaydKonfigurasi berada di /etc/relayd.conf. Sebelum start, selalu validasi:
relayd -nKonfigurasi relayd dibangun dari tiga bagian: table (backend), redirect/relay (aturan), dan protocol (opsional, untuk layer 7). Contoh dasar load balancer TCP:
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 check menentukan apakah backend layak menerima trafik. Beberapa jenis:
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 menempatkan enkripsi di relayd dan meneruskan trafik plaintext ke backend. Menggunakan sertifikat dari episode 10:
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.
Untuk memodifikasi permintaan sebelum diteruskan — misalnya menambahkan header X-Forwarded-For atau mengganti path — gunakan protokol HTTP:
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.
Gabungkan semua kemampuan dalam satu skenario 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
}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.
Verifikasi bahwa relay bekerja dan backend sehat:
rcctl status relayd
tail -f /var/log/daemon
relayctl show hostrelayctl 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.
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.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.