Belajar PPTP - Automation & Deployment
Series/Belajar PPTP/Episode 12
Episode 12 of 23

Belajar PPTP - Automation & Deployment

Episode ini membahas cara menyebarkan server PPTP secara otomatis: script shell untuk setup sekali jalan, pembuatan user secara massal, role Ansible untuk konfigurasi berulang, dan pertimbangan menjalankan PPTP di dalam container Docker beserta keterbatasannya.

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

Pendahuluan

Mengkonfigurasi satu server PPTP secara manual itu mudah. Menyebarkannya ke lima puluh server sekaligus adalah cerita lain. Episode 12 membahas cara mengotomatiskan setup, membuat user secara massal, dan men-deploy konfigurasi secara konsisten.

Automation adalah keterampilan yang membuat pekerjaan kalian berulang kali lebih cepat. Meskipun kita sedang membahas teknologi legacy, prinsip-prinsip di episode ini tetap berlaku untuk layanan apa pun.

Script Shell untuk Setup Sekali Jalan

Mengotomatiskan Instalasi

Script shell paling sederhana mengotomatiskan langkah-langkah yang kita lakukan manual di episode 3:

Script setup server PPTP
#!/usr/bin/env bash
set -euo pipefail
 
apt-get update
apt-get install -y pptpd ppp
sysctl -w net.ipv4.ip_forward=1
 
sed -i 's/#localip 192.168.0.1/localip 192.168.1.10/' /etc/pptpd.conf
sed -i 's/#remoteip 192.168.0.234-238/remoteip 192.168.1.100-110/' /etc/pptpd.conf
 
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
systemctl enable pptpd
systemctl restart pptpd

Script di atas memakai set -euo pipefail agar berhenti saat ada kesalahan. Perhatikan bahwa perintah sed memodifikasi file konfigurasi yang sudah ada di paket — pendekatan yang umum, tapi pastikan format file paket tidak berubah antar versi.

Pembuatan User Massal

Loop untuk Menambahkan Banyak User

Saat ada puluhan user baru sekaligus, jangan edit chap-secrets satu per satu. Gunakan loop:

Tambah banyak user sekaligus
for user in ali budi citra dewi; do
  echo "$user pptpd \"P@ssw0rd-$user\" *" >> /etc/ppp/chap-secrets
done

Loop di atas menambahkan empat user dengan password yang berbeda-beda. Untuk environment nyata, jangan simpan password statis di script — ambil dari source yang aman atau generate secara acak.

Menghindari Duplikasi

Jalankan script sekali saja, atau tambahkan pengecekan agar user yang sudah ada tidak ditulis ulang:

Cek user sebelum menambah
for user in ali budi citra dewi; do
  if ! grep -q "^$user " /etc/ppp/chap-secrets; then
    echo "$user pptpd \"P@ssw0rd-$user\" *" >> /etc/ppp/chap-secrets
  fi
done

Pola grep -q "^$user " /etc/ppp/chap-secrets memastikan script idempoten: menjalankan ulang tidak akan membuat duplikat.

Role Ansible

Menyebarkan Konfigurasi secara Konsisten

Untuk infrastruktur besar, Ansible adalah pilihan yang lebih terstruktur daripada script shell. Sebuah role PPTP berisi template file konfigurasi dan task instalasi:

tasks/main.yml - role PPTP
- name: Install paket PPTP
  ansible.builtin.apt:
    name: [pptpd, ppp]
    state: present
 
- name: Tulis konfigurasi pptpd.conf
  ansible.builtin.template:
    src: pptpd.conf.j2
    dest: /etc/pptpd.conf
  notify: Restart pptpd
 
- name: Aktifkan IP forwarding
  ansible.builtin.sysctl:
    name: net.ipv4.ip_forward
    value: "1"
    sysctl_file: /etc/sysctl.d/99-pptp.conf

Playbook Ansible bersifat idempoten dan terdokumentasi, sehingga kondisi server bisa selalu kembali ke state yang diharapkan. Ini jauh lebih mudah dipelihara daripada kumpulan script.

PPTP di dalam Docker

Kemungkinan dan Keterbatasan

Menjalankan pptpd di dalam container menarik secara estetika, tapi ada catatan teknis yang penting. GRE adalah protokol IP (bukan TCP/UDP), sehingga container harus memakai network host — port publishing biasa tidak bisa meneruskan GRE.

Jalankan container PPTP dengan network host
docker run -d --name pptp --network host \
  --privileged \
  -v /etc/pptpd.conf:/etc/pptpd.conf:ro \
  -v /etc/ppp/chap-secrets:/etc/ppp/chap-secrets:ro \
  ghcr.io/example/pptp-server

Opsi --network host diperlukan karena GRE membutuhkan akses langsung ke stack IP host, dan --privileged biasanya dibutuhkan karena container perlu mengelola modul kernel dan interface. Keduanya membuat isolasi container menjadi longgar.

Keputusan yang Jujur

Kombinasi PPTP plus Docker menambah kompleksitas tanpa menambah keamanan — justru sebaliknya. Untuk workload legacy, menjalankan pptpd langsung di VM atau host lebih sederhana dan lebih mudah di-troubleshoot.

Penutup

Episode 12 membekali kalian pola-pola automation: script shell setup, pembuatan user massal yang idempoten, role Ansible, dan wacana container dengan seluruh keterbatasannya.

Inti yang harus dibawa pulang:

  • Script shell memakai set -euo pipefail agar aman dijalankan berulang.
  • Pembuatan user massal bisa memakai loop dengan pengecekan duplikasi.
  • Ansible membuat konfigurasi idempoten dan terdokumentasi.
  • Container PPTP butuh --network host karena GRE bukan TCP/UDP.
  • Mode privileged melonggarkan isolasi container.
  • Untuk workload legacy, host atau VM lebih sederhana daripada container.

Di episode 13 selanjutnya kita akan membahas analisis keamanan dan kerentanan PPTP — brute-force MS-CHAPv2 tahun 2012, kelemahan RC4 di MPPE, GRE tanpa enkripsi, risk assessment, dan daftar CVE serta advisory yang relevan.

Belajar PPTP - Automation & Deployment | Belajar PPTP