Diagram arsitektur transparent proxy Sing-box di LXC Proxmox dengan routing NAT dan antarmuka TUN

Membangun Transparent Proxy dengan Sing-box di LXC Proxmox untuk Privasi Jaringan

Menggunakan SOCKS5 proxy di level aplikasi memang mudah, tetapi pendekatan ini memiliki kelemahan mendasar: traffic dari aplikasi yang tidak mendukung konfigurasi proxy akan tetap keluar melalui jalur normal. Solusi yang lebih solid adalah membangun transparent proxy — sebuah gateway yang secara transparan mengarahkan semua traffic dari perangkat klien melewati proxy, tanpa konfigurasi tambahan di sisi aplikasi.

Artikel ini membahas cara membangun transparent proxy berbasis Sing-box di atas LXC Debian di Proxmox. LXC bertindak sebagai router sekaligus proxy gateway: menerima traffic dari klien di jaringan lokal, mengenkapsulasi seluruhnya melalui antarmuka TUN, lalu meneruskannya ke SOCKS5 proxy eksternal. Hasilnya, semua perangkat yang mengarahkan gateway-nya ke LXC ini akan otomatis menggunakan IP dari provider proxy.


Arsitektur Singkat

[Klien (Windows/Linux/dll)]
        |
        | (gateway → IP LXC eth1)
        ↓
[LXC Debian — Router + Sing-box]
   eth0 → Internet (uplink utama)
   eth1 → Jaringan lokal klien (vmbr40)
   tun0 → Antarmuka virtual Sing-box
        |
        ↓
[SOCKS5 Proxy Eksternal]
        |
        ↓
[Internet (dengan IP Proxy)]

Fase 1: Persiapan Proxmox Host — Izin TUN untuk LXC

LXC secara default tidak memiliki akses ke /dev/net/tun yang dibutuhkan Sing-box untuk membuat antarmuka virtual. Izin ini harus diberikan dari host Proxmox.

1.1 Edit Konfigurasi LXC

Buka shell Proxmox Host, lalu edit file konfigurasi LXC (ganti 100 dengan ID container yang sesuai):

nano /etc/pve/lxc/100.conf

Tambahkan dua baris berikut di bagian paling bawah file:

lxc.cgroup2.devices.allow: c 10:200 rwm
lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file

Penjelasan:

  • c 10:200 rwm — memberikan izin read/write/mknod pada device character 10:200, yaitu /dev/net/tun.
  • bind,create=file — me-mount /dev/net/tun dari host ke dalam namespace LXC.

1.2 Restart LXC

Restart LXC dari panel Proxmox agar perubahan pada konfigurasi cgroup dan mount diterapkan.


Fase 2: Konfigurasi Jaringan LXC Debian — Routing & NAT

Langkah ini mengubah LXC Debian menjadi router yang bisa meneruskan traffic dari klien ke internet.

2.1 Aktifkan IP Forwarding Secara Permanen

Buka konsol LXC Debian, lalu edit /etc/sysctl.conf:

nano /etc/sysctl.conf

Cari baris berikut dan hapus tanda # di depannya:

net.ipv4.ip_forward=1

Terapkan perubahan tanpa perlu reboot:

sysctl -p

2.2 Install iptables dan Konfigurasi NAT

apt update
apt install iptables iptables-persistent -y

Pilih Yes pada kedua pop-up yang muncul saat instalasi iptables-persistent untuk menyimpan rule yang ada saat ini.

Buat rule NAT agar traffic dari jaringan lokal dapat keluar melalui eth0 (antarmuka uplink ke internet), lalu simpan agar persisten setelah reboot:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
netfilter-persistent save

Fase 3: Instalasi & Konfigurasi Sing-box

Sing-box bertugas sebagai transparent proxy: mencegat semua traffic termasuk DNS, membypass traffic ke IP privat, dan melempar sisanya ke SOCKS5 proxy eksternal.

3.1 Install Sing-box

bash <(curl -fsSL https://sing-box.app/deb-install.sh)

Script ini mendeteksi arsitektur sistem, menambahkan repository resmi Sing-box, dan menginstall versi terbaru.

3.2 Buat File Konfigurasi

nano /etc/sing-box/config.json

Hapus semua konten bawaan, lalu tempelkan konfigurasi berikut. Konfigurasi ini kompatibel dengan Sing-box versi 1.13+:

{
  "log": {
    "level": "info"
  },
  "dns": {
    "servers": [
      {
        "type": "tcp",
        "tag": "dns-remote",
        "server": "8.8.8.8",
        "detour": "proxy"
      },
      {
        "type": "local",
        "tag": "dns-local"
      }
    ]
  },
  "inbounds": [
    {
      "type": "tun",
      "tag": "tun-in",
      "interface_name": "tun0",
      "address": [
        "172.19.0.1/30"
      ],
      "auto_route": true,
      "strict_route": true
    }
  ],
  "outbounds": [
    {
      "type": "socks",
      "tag": "proxy",
      "server": "your-proxy-server.com",
      "server_port": 12345,
      "version": "5",
      "username": "your-username",
      "password": "your-password"
    },
    {
      "type": "direct",
      "tag": "direct"
    }
  ],
  "route": {
    "default_domain_resolver": "dns-local",
    "rules": [
      {
        "action": "sniff"
      },
      {
        "protocol": "dns",
        "action": "hijack-dns"
      },
      {
        "ip_is_private": true,
        "outbound": "direct"
      }
    ],
    "auto_detect_interface": true,
    "final": "proxy"
  }
}

Sesuaikan nilai berikut dengan kredensial SOCKS5 yang dimiliki:

FieldKeterangan
serverHostname atau IP SOCKS5 proxy
server_portPort SOCKS5 proxy
usernameUsername autentikasi
passwordPassword autentikasi

Penjelasan konfigurasi kunci:

  • tun inbound — Membuat antarmuka virtual tun0. auto_route mengatur routing tabel agar semua traffic masuk ke TUN. strict_route mencegah kebocoran traffic yang bypass TUN.
  • dns-remote — DNS resolver yang querynya dikirim melalui proxy, memastikan tidak ada DNS leak ke ISP lokal.
  • hijack-dns — Mencegat semua query DNS dari klien (termasuk yang mengarah ke 8.8.8.8), memproses ulang lewat Sing-box.
  • ip_is_private — Traffic ke IP privat (RFC 1918) dikirim langsung tanpa proxy, menjaga aksesibilitas jaringan lokal.
  • final: "proxy" — Semua traffic yang tidak cocok dengan rule di atas diteruskan ke SOCKS5.

3.3 Validasi Konfigurasi

Sebelum menjalankan layanan, pastikan tidak ada error sintaks pada config:

sing-box check -c /etc/sing-box/config.json

Jika tidak ada output error, konfigurasi valid.

3.4 Aktifkan dan Jalankan Layanan

systemctl enable sing-box
systemctl restart sing-box

Verifikasi status layanan:

systemctl status sing-box

Pastikan statusnya active (running) dan tidak ada baris error atau failed di log.


Fase 4: Konfigurasi Klien

Arahkan perangkat klien yang berada di segmen jaringan yang sama dengan eth1 LXC (misalnya jaringan vmbr40).

Pengaturan IPv4 Manual di Klien

ParameterNilai
IP AddressBebas dalam satu segmen vmbr40 (contoh: 192.168.40.10)
Subnet Mask255.255.255.0
Default GatewayIP eth1 dari LXC Debian (contoh: 192.168.40.1)
DNS Server8.8.8.8 (akan di-hijack Sing-box, bersifat dekoratif)

Catatan: DNS server yang diisi di klien tidak berpengaruh pada privasi — Sing-box akan mengintersepsi semua query DNS dan meneruskannya melalui proxy. Isi 8.8.8.8 sebagai nilai valid agar konfigurasi tidak error.

Setelah pengaturan disimpan, verifikasi dengan mengakses situs seperti https://ipinfo.io dari browser klien — IP yang tampil seharusnya adalah IP dari provider SOCKS5, bukan IP ISP lokal.


Ringkasan Perintah

# --- Proxmox Host ---
nano /etc/pve/lxc/100.conf          # Tambahkan izin TUN

# --- LXC Debian: Routing & NAT ---
nano /etc/sysctl.conf               # Aktifkan ip_forward
sysctl -p                           # Terapkan sysctl
apt update && apt install iptables iptables-persistent -y
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
netfilter-persistent save

# --- LXC Debian: Sing-box ---
bash <(curl -fsSL https://sing-box.app/deb-install.sh)
nano /etc/sing-box/config.json      # Paste dan sesuaikan konfigurasi
sing-box check -c /etc/sing-box/config.json
systemctl enable sing-box
systemctl restart sing-box
systemctl status sing-box

Troubleshooting Singkat

GejalaKemungkinan PenyebabSolusi
sing-box gagal startError pada config.jsonJalankan sing-box check dan periksa log dengan journalctl -u sing-box
TUN device tidak tersediaIzin LXC belum diterapkanPastikan dua baris di 100.conf sudah benar, restart LXC
Klien tidak bisa akses internetIP forwarding tidak aktifCek dengan sysctl net.ipv4.ip_forward, harus bernilai 1
IP yang terdeteksi masih IP lokalGateway klien salahPastikan default gateway mengarah ke IP eth1 LXC
DNS leak (query ke ISP lokal)strict_route tidak aktifPastikan "strict_route": true ada di konfigurasi inbound TUN

Referensi


Catatan Penutup

Artikel ini disusun berdasarkan pengujian langsung pada lingkungan berikut:

  • Proxmox VE: 9.x
  • LXC Template: Debian 12 (Bookworm)
  • Sing-box: 1.13+
  • Jaringan klien: Segmen terpisah via bridge vmbr40

Konfigurasi SOCKS5 dalam artikel ini menggunakan placeholder generik. Sesuaikan nilai server, server_port, username, dan password dengan kredensial provider proxy yang digunakan.

Disclaimer: Artikel ini ditujukan untuk keperluan privasi jaringan yang sah, seperti melindungi traffic dari surveillance ISP atau mengakses layanan dengan pembatasan geografis. Penggunaan transparent proxy untuk tujuan yang melanggar hukum atau ketentuan layanan pihak ketiga sepenuhnya menjadi tanggung jawab pengguna.


Leave a Reply

Your email address will not be published. Required fields are marked *