Belajar Traefik - TCP & UDP Routing
Episode 18 of 31

Belajar Traefik - TCP & UDP Routing

Episode ini membawa Traefik melampaui HTTP: entrypoint dan router TCP dengan rule HostSNI, TLS termination versus passthrough untuk database, SSH, dan SMTP, entrypoint UDP dengan load balancing, serta contoh nyata untuk DNS dan game server.

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

Pendahuluan

Sejauh ini semua routing Traefik berurusan dengan HTTP. Tapi Traefik juga adalah proxy TCP dan UDP yang mumpuni: database PostgreSQL, SSH, SMTP, DNS, dan game server semuanya bisa dilewatkan lewat gerbang yang sama, dengan rule routing dan TLS passthrough yang fleksibel.

Episode 18 membedah tiga lapis: router TCP dengan HostSNI, router UDP, dan pola TLS passthrough. Dengan memahami ini, kalian bisa memusatkan seluruh akses jaringan kalian — bukan hanya web — ke satu titik kontrol.

TCP Routers dan Entrypoints

Definisi Entrypoint TCP

Entrypoint TCP didefinisikan dengan protokol tcp. Penamaan bebas, misalnya ssh, db, atau smtp:

Entrypoint TCP di static config
entryPoints:
  web:
    address: ":80"
  websecure:
    address: ":443"
  ssh:
    address: ":2222"
  db:
    address: ":5432"

Rule HostSNI

Router TCP memakai HostSNI sebagai matcher utama — nilai yang sama dengan SNI pada handshake TLS. Contoh router TCP untuk database PostgreSQL, lengkap dengan label alternatif traefik.tcp.routers.pg.rule yang setara di Docker:

Router TCP untuk PostgreSQL
tcp:
  routers:
    pg-internal:
      rule: "HostSNI(`pg.internal.local`)"
      entrypoints:
        - db
      service: pg-svc
      tls:
        passthrough: true
  services:
    pg-svc:
      loadBalancer:
        servers:
          - address: "10.0.0.80:5432"

Perhatikan tls.passthrough: true: Traefik tidak mendekripsi koneksi, hanya melihat SNI untuk memutuskan rute, lalu meneruskan stream mentah ke PostgreSQL. Backend memegang sertifikat dan menangani TLS sepenuhnya.

TLS Termination vs Passthrough pada TCP

Dua Mode untuk TCP

  • Termination: Traefik memegang sertifikat, mendekripsi, dan meneruskan plaintext ke backend. Cocok jika backend tidak mau repot dengan TLS. Middleware TCP seperti IPWhiteList masih bisa diterapkan.
  • Passthrough: Traefik hanya menyambungkan stream. Wajib dipakai jika backend menuntut TLS end-to-end atau protokol tidak mendukung dekripsi di tengah.
TCP dengan TLS termination
tcp:
  routers:
    smtp-secure:
      rule: "HostSNI(`mail.example.com`)"
      entrypoints:
        - smtp
      service: smtp-svc
      tls: {}
  services:
    smtp-svc:
      loadBalancer:
        servers:
          - address: "10.0.0.90:2525"

Router SMTP di atas memakai tls: {} — Traefik menangani TLS dengan sertifikat yang tersedia, lalu meneruskan plaintext ke backend di port internal. Waktu paling tepat memilih termination: kalian ingin satu tempat untuk sertifikat; paling tepat passthrough: keamanan end-to-end wajib.

Use Case TCP Umum

Database, SSH, dan Lainnya

  • PostgreSQL/MySQL: route HostSNI per instance, terminate atau passthrough sesuai kebutuhan.
  • SSH: passthrough ke server tujuan; karena SSH memakai protokol sendiri, routing berbasis SNI tidak tersedia — gunakan entrypoint terpisah per tujuan.
  • SMTP/IMAP: terminate di Traefik untuk menyatukan sertifikat mail server.
  • Custom protocol: apa pun yang berbasis TCP bisa dirutekan selama matcher tersedia.

Untuk protokol yang tidak memakai TLS sama sekali (misalnya SSH mentah), Traefik menyediakan matcher khusus: rule HostSNI(*) mencocokkan semua koneksi dan mengarahkannya ke service pilihan. Ini pola yang dipakai untuk entrypoint single-purpose:

Router TCP tanpa TLS
tcp:
  routers:
    ssh-gateway:
      rule: "HostSNI(`*`)"
      entrypoints:
        - ssh
      service: ssh-svc
  services:
    ssh-svc:
      loadBalancer:
        servers:
          - address: "10.0.0.100:22"

UDP Routers dan Services

Entrypoint dan Load Balancing UDP

UDP bekerja serupa dengan TCP, dengan satu perbedaan besar: tidak ada handshake. Untuk itu, router UDP memakai rule HostSNI(*) untuk menerima semua datagram pada entrypoint-nya:

Entrypoint dan router UDP
entryPoints:
  dns-udp:
    address: ":53/udp"
 
udp:
  routers:
    dns-router:
      rule: "HostSNI(`*`)"
      entrypoints:
        - dns-udp
      service: dns-svc
  services:
    dns-svc:
      loadBalancer:
        servers:
          - address: "10.0.0.110:53"

Use Case UDP

  • DNS proxying: meneruskan query DNS ke resolver internal.
  • Game servers: banyak game memakai UDP untuk gameplay.
  • VoIP/SIP: protokol telephony berbasis UDP.
  • Custom UDP protocols: selama Traefik hanya meneruskan datagram, siapa pun bisa jadi target.

Load balancing UDP di Traefik meneruskan datagram ke server yang dipilih berdasarkan rute; karena sifat connectionless, pemilihan server memakai hash pada source address untuk menjaga konsistensi percakapan.

Tip

Jangan campur UDP dan TCP pada entrypoint yang sama. Definisi entrypoint :53 (TCP) dan :53/udp adalah dua entitas terpisah — buat dua entrypoint bernama berbeda agar jelas.

Penutup

Inti yang harus dibawa pulang:

  • Entrypoint TCP dan UDP didefinisikan terpisah di static config.
  • Router TCP memakai HostSNI sebagai matcher; HostSNI(*) mencakup semua.
  • TLS passthrough melewatkan stream mentah; termination mendekripsi di Traefik.
  • Database, SSH, SMTP, dan custom protocol semua bisa dirutekan.
  • Router UDP memakai HostSNI(*) dan bisa load-balancing datagram.
  • Gunakan entrypoint terpisah untuk TCP dan UDP pada port yang sama.

Di episode 19 selanjutnya kita akan membahas file provider & dynamic configuration — menulis router, service, dan middleware dalam file YAML/TOML, directory watching dengan hot reload, struktur bagian http, tcp, udp, dan tls, serta praktik terbaik untuk layanan non-container. Gerbang kalian kini bisa mengatur apa pun tanpa Docker.

Belajar Traefik - TCP & UDP Routing | Belajar Traefik