Belajar PPTP - GRE & Encapsulation
Episode 5 of 23

Belajar PPTP - GRE & Encapsulation

Episode ini membahas GRE sebagai pembawa data PPTP: struktur header GRE versi 1, cara frame PPP dienkapsulasi, overhead yang ditambahkan, pertimbangan MTU dan MSS clamping, serta keterbatasan GRE yang stateless dan tidak ramah NAT.

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

Pendahuluan

Jika control channel adalah otak PPTP, maka GRE adalah tulang punggungnya. Semua data yang kalian kirim melalui tunnel diangkut oleh GRE, dan sifat-sifat GRE inilah yang menentukan kecepatan, kompatibilitas, dan masalah NAT yang terkenal dari PPTP.

Episode 5 membedah Generic Routing Encapsulation: struktur header-nya, bagaimana frame PPP dibungkus, overhead yang harus diperhitungkan untuk MTU, teknik MSS clamping, dan keterbatasan fundamental GRE.

Apa Itu GRE

Generic Routing Encapsulation

GRE (Generic Routing Encapsulation) adalah protokol tunneling yang didefinisikan di RFC 2784. Tugasnya sederhana: membungkus sebuah paket atau frame di dalam paket IP lain, sehingga seolah-olah kedua jaringan saling terhubung langsung.

PPTP memakai GRE versi 1 yang didefinisikan khusus di RFC 2637. Header GRE versi 1 ini menambahkan field Call ID dan sequence number yang tidak ada di GRE standar — inilah yang membedakan GRE-nya PPTP dari GRE VPN lain.

Melihat traffic GRE di jaringan
sudo tcpdump -i any proto 47 -n

tcpdump -i any proto 47 -n menampilkan semua paket GRE. Ketika tunnel PPTP aktif dan ada transfer data, kalian akan melihat aliran paket dengan protocol 47 yang membawa frame PPP.

Dua Keluarga GRE

GRE standar didefinisikan di RFC 2784 dan bersifat umum: ia bisa membungkus protokol apa pun di dalam IP. PPTP memakai varian khusus yang dicatat di RFC 2637, dengan dua field tambahan: Call ID untuk mengidentifikasi tunnel dan sequence number untuk menjaga urutan paket.

Konsekuensinya, filter paket di firewall tidak cukup hanya melihat protocol 47. Untuk membedakan GRE PPTP dari GRE lain, kalian perlu memeriksa versi header GRE — sesuatu yang umumnya sudah ditangani otomatis oleh modul conntrack PPTP yang dibahas di episode 16.

Bagaimana Frame PPP Dibungkus GRE

Struktur Paket GRE PPTP

Saat aplikasi mengirim data, urutan enkapsulasinya adalah: payload dibungkus frame PPP, frame PPP dipotong sesuai MTU PPP, lalu dimasukkan sebagai payload GRE. Paket GRE kemudian diberi header IP tujuan.

Header GRE PPTP berisi versi, flag, Call ID untuk membedakan tunnel, dan sequence number untuk mendeteksi kehilangan paket pada mode stateful MPPE. Tanpa Call ID, server tidak bisa membedakan beberapa klien sekaligus dalam satu connection.

Overhead dan MTU

Menghitung Overhead

Setiap lapisan menambah byte:

  • Header IP: 20 byte.
  • Header GRE: 4 byte atau lebih dengan flag.
  • Header PPP: 2-6 byte.
  • Header MPPE (jika enkripsi aktif): 2-6 byte.

Total overhead PPTP biasanya berada di kisaran 50-80 byte tergantung opsi. Artinya, jika MTU jaringan adalah 1500, payload maksimum yang bisa dikirim hanya sekitar 1400 byte.

Menyesuaikan MTU Tunnel

Agar paket tidak terpecah (fragment), MTU interface PPP harus dikurangi. Di file opsi pppd:

/etc/ppp/options.pptpd - MTU tunnel
mtu 1400
mru 1400

Baris mtu 1400 dan mru 1400 membatasi ukuran frame agar sesuai dengan overhead PPTP. Nilai 1400 adalah titik awal yang umum; pada jaringan dengan MTU lebih kecil, kalian perlu menurunkannya lagi.

MSS Clamping

Mengapa MSS Perlu Dipotong

MSS (Maximum Segment Size) dinegosiasikan saat handshake TCP. Jika aplikasi menetapkan MSS 1460 untuk MTU 1500, paket di dalam tunnel PPTP akan melebihi batas dan pecah. Solusinya adalah MSS clamping di firewall.

Clamp MSS untuk traffic melewati tunnel
sudo iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

Aturan iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu menyesuaikan MSS setiap koneksi TCP yang lewat berdasarkan path MTU. Ini sering menjadi penyelamat saat situs web terasa lambat atau tidak bisa dibuka melalui tunnel.

Menghitung Nilai MSS Eksplisit

Nilai MSS yang benar mengikuti rumus sederhana: MTU tunnel dikurangi ukuran header TCP dan IP. Untuk MTU tunnel 1400, hasilnya sekitar 1360:

  • Header IP: 20 byte.
  • Header TCP: 20 byte.
  • MSS = 1400 - 40 = 1360.

Jika clamping otomatis tidak tersedia di firewall kalian, pasang nilai eksplisit dengan --set-mss 1360 pada aturan TCPMSS. Pastikan nilai ini konsisten dengan MTU yang dikonfigurasi di file opsi pppd, dan sesuaikan lagi setiap kali MTU tunnel diubah.

Keterbatasan GRE

Stateless dan Tanpa Enkripsi Bawaan

GRE adalah protokol yang stateless: ia tidak melacak status koneksi, tidak menawarkan retransmission, dan tidak memiliki konsep congestion control. Semua itu diserahkan ke TCP yang ada di atasnya.

GRE juga tidak memiliki enkripsi bawaan. Keamanan data di tunnel PPTP sepenuhnya bergantung pada MPPE yang bersifat opsional. Jika MPPE tidak aktif, semua data melintas dalam bentuk plaintext di dalam GRE — risiko yang akan kita bahas di episode 13.

Tidak Ramah NAT

Karena GRE hanya memakai protocol number tanpa port, router NAT tidak bisa membedakan sesi GRE yang berbeda. Ini menyebabkan banyak koneksi PPTP gagal di belakang NAT. Detail dan solusinya akan dibahas utuh di episode 16.

Sequence Number dan Fragmentasi

GRE PPTP memiliki sequence number sendiri, dan fragmentasi di tingkat IP bisa menyulitkan tunnel. Ketika paket GRE terpecah di jaringan, urutannya bisa kacau dan performa menurun drastis. Itulah mengapa MTU tunnel harus selalu lebih kecil dari MTU jalur fisik.

Memilih MTU Secara Praktis

Aturan praktisnya: mulai dari MTU jalur fisik (misalnya 1500), kurangi overhead PPTP (sekitar 80 byte), lalu tambahkan margin kecil. Hasilnya biasanya di kisaran 1400. Untuk jalur PPPoE yang sudah memakai MTU 1492, angka tunnel perlu turun lagi menjadi sekitar 1300.

Menguji Konfigurasi MTU

Setelah mengubah MTU, selalu uji dengan transfer file berukuran besar dan ping dengan ukuran maksimum. Jika ada penurunan kinerja, periksa ulang perhitungan overhead dan pastikan aturan MSS clamping sudah dipasang di firewall.

Penutup

Episode 5 memetakan lapisan data PPTP: header GRE versi 1 dengan Call ID dan sequence number, overhead 50-80 byte yang mengharuskan MTU turun, teknik MSS clamping, serta keterbatasan GRE yang stateless dan tidak ramah NAT.

Inti yang harus dibawa pulang:

  • PPTP memakai GRE versi 1 dengan Call ID dan sequence number.
  • Frame PPP dienkapsulasi GRE dan dikirim sebagai IP protocol 47.
  • Overhead PPTP berkisar 50-80 byte, sehingga MTU harus dikurangi.
  • mtu 1400 dan mru 1400 adalah titik awal yang umum di pppd.
  • MSS clamping dengan TCPMSS mencegah fragmentasi TCP di dalam tunnel.
  • GRE stateless, tanpa enkripsi bawaan, dan bermasalah di belakang NAT.

Di episode 6 selanjutnya kita akan membahas MPPE, enkripsi Microsoft untuk PPTP — bagaimana kunci diturunkan dari password MS-CHAPv2, konfigurasi MPPE 128-bit, dan kelemahan kriptografis yang membuatnya rentan.

Belajar PPTP - GRE & Encapsulation | Belajar PPTP