Bikin Server Trojan HTTPUpgrade + TLS

Setup simpel dengan Sing-box + Docker

Sebelumnya aku menggunakan Trojan dikombinasikan dengan transport WebSocket sebagai server proxy pribadi, sekarang beralih ke transport HTTPUpgrade karena mempunyai performa yang lebih bagus.

Jadi, sekalian saja kubagikan setup yang kugunakan untuk membuat proxy pribadi, yang menggunakan protokol Trojan dan transport HTTPUpgrade.

Kita akan menggunakan sing-box sebagai server, karena sing-box bisa membuat sertifikat TLS secara otomatis sehingga tidak perlu lagi menginstal alat tambahan.

Persiapan#

Docker harus terinstal terlebih dahulu di server kamu, untuk cara menginstalnya, kamu bisa mengikuti tutorial instalasi Docker dari situs resminya.

Selain itu, karena kita akan menggunakan sertifikat TLS dari Let’s Encrypt, kamu harus punya domain seperti .com, bebas mau pakai domain apa saja, asalkan domainnya bisa ditambahkan ke Cloudflare.

Membuat API Token Cloudflare#

Tambahkan domain kamu ke Cloudflare kalau belum ditambahkan, kemudian ambil API Token Cloudflare yang nantinya diperlukan untuk proses verifikasi domain saat membuat sertifikat TLS.

Kamu bisa mengikuti tutorial resmi dari Cloudflare untuk mengambil API token.

Biar lebih praktis, gunakan template Edit zone DNS yang telah disediakan.

Kemudian, pilih zone sesuai domain yang akan digunakan untuk server.

Konfigurasi Server Sing-Box#

Pertama, buatlah direktori khusus untuk menyimpan konfigurasi server.

mkdir trojan-httupgrade

Selanjutnya, buatlah file server.json di dalam direktori tadi dan isilah dengan konfigurasi di bawah ini:

server.json
{
  "log": {
    "level": "info",
    "timestamp": true
  },
  "inbounds": [
    {
      "type": "trojan",
      "tag": "trojan-httpupgrade",
      "listen": "::",
      "listen_port": 443,
      "users": [
        {
          "name": "NAMA_KAMU",
          "password": "PASSWORD_KAMU"
        }
      ],
      "tls": {
        "enabled": true,
        "acme": {
          "domain": "DOMAIN_KAMU.id",
          "data_directory": "/var/lib/certmagic",
          "email": "ALAMAT_EMAIL_KAMU",
          "provider": "letsencrypt",
          "dns01_challenge": {
            "provider": "cloudflare",
            "api_token": "API_TOKEN"
          }
        }
      },
      "transport": {
        "type": "httpupgrade",
        "path": "/secret"
      }
    }
  ]
}

Ganti NAMA_KAMU, PASSWORD_KAMU, ALAMAT_EMAIL_KAMU, dan DOMAIN_KAMU.id sesuai dengan preferensimu.

Kemudian, ganti API_TOKEN dengan API Token Cloudflare yang sudah dibuat tadi.

Domain DOMAIN_KAMU.id bisa menggunakan subdomain juga seperti agus.DOMAIN_KAMU.id, sedangkan path /secret bisa kamu biarkan atau diganti dengan path yang lain.

Konfigurasi Docker#

Masih di dalam direktori khusus yang sudah dibuat tadi, buatlah file docker-conpose.yml yang isinya adalah konfigurasi di bawah ini:

docker-compose.yml
services:
  sing-box:
    image: ghcr.io/sagernet/sing-box
    container_name: sing-box
    restart: unless-stopped
    ports:
      - 443:443
    volumes:
      - ./config.json:/etc/sing-box/config.json
      - ./certmagic:/var/lib/certmagic
    command: run -c /etc/sing-box/config.json

Menghidupkan Server#

Masih di dalam direktori yang telah dibuat khusus tadi, hidupkan kontainer sing-box.

docker compose up -d

Awal mula dihidupkan mungkin perlu waktu agak lama karena sing-box membuat sertifikasi TLS terlebih dahulu, kemudian ada proses verifikasi domain oleh Let’s Encrypt juga, mungkin butuh waktu beberapa menit.

Lihat log, kalau tidak ada error, artinya server berhasil dihidupkan.

docker logs sing-box -f

Setelah itu, uji coba status server.

curl -v https://NAMA_DOMAIN.id

Jangan lupa, agar bisa diakses, tambahkan alamat IP server pada setelan DNS Cloudflare sesuai domain yang kamu gunakan.

Kira-kira seperti ini responsnya kalau server berhasil dihidupkan:

...

* ALPN: server accepted http/1.1
* Server certificate:
*  subject: CN=adityaphra.com
*  start date: Oct  2 14:45:28 2024 GMT
*  expire date: Dec 31 14:45:27 2024 GMT
*  subjectAltName: host "adityaphra.com" matched cert's "adityaphra.com"
*  issuer: C=US; O=Let's Encrypt; CN=E6
*  SSL certificate verify ok.
...
< HTTP/1.1 404 Not Found
< Date: Fri, 18 Oct 2024 12:36:29 GMT
< Content-Length: 0
...

Kalau ada nama domain kamu yang muncul, artinya sertifikat TLS berhasil dibuat dan server Trojan siap digunakan.

Konfigurasi Klien Sing-Box#

Untuk versi klien sing-box bebas menggunakan versi CLI atau GUI, yang bisa kamu unduh dari repositori sing-box di GitHub.

Contoh konfigurasi di bawah ini untuk membuat server proxy SOCKS5 dengan port 1080, yang nantinya bisa digunakan di klien HTTP yang mendukung SOCKS5.

client.json
{
  "log": {
    "level": "error"
  },
  "dns": {
    "servers": [
      {
        "tag": "cloudflare",
        "address": "https://cloudflare-dns.com/dns-query",
        "address_resolver": "local"
      },
      {
        "tag": "local",
        "address": "8.8.8.8",
        "detour": "direct"
      }
    ]
  },
  "inbounds": [
    {
      "type": "socks",
      "listen": "::",
      "listen_port": 1080
    }
  ],
  "outbounds": [
    {
      "type": "trojan",
      "tag": "main",
      "server": "DOMAIN_KAMU.id",
      "server_port": 443,
      "password": "PASSWORD_KAMU",
      "tls": {
        "enabled": true
      },
      "transport": {
        "type": "httpupgrade",
        "path": "/secret"
      }
    },
    {
      "type": "direct",
      "tag": "direct"
    }
  ]
}

Hidupkan klien sing-box, kemudian cek alamat IP klien saat ini:

sing-box run -c client.json
curl -x socks5h://localhost:1080 ifconfig.co

Kalau mendapatkan respons alamat IP yang sama dengan alamat IP server kamu, artinya klien berhasil terhubung ke server proxy tersebut.

Selesai, selamat telah berhasil setup server Trojan + HTTPUpgrade + TLS dari awal.