PPTP di balik router rumah gagal dengan dua cara yang tidak saling terkait, dan mencampuradukkannya menghabiskan satu malam penuh. Satu kegagalan adalah celah penerusan: router meneruskan TCP 1723 tetapi membuang protokol IP 47, sehingga klien tertahan pada galat 619. Yang lain adalah masalah ukuran: terowongan naik, terautentikasi, lalu membeku saat paket berukuran penuh harus melintas. Mencari tahu mana yang Anda alami adalah langkah nyata pertama; sisanya membandingkan apa yang bisa diungkapkan router Anda, bukan merek mana yang lebih baik.

Dua pengangkut, dan hanya satu yang punya port

PPTP terbagi ke dua pengangkut: koneksi kendali pada TCP 1723, dan bingkai PPP yang dibungkus GRE yang diperluas, yaitu protokol IP 47. GRE tidak punya nomor port, jadi aturan yang ditulis sebagai penerusan port 1723 tidak dapat mencakupnya, apa pun nama yang dipakai antarmuka web untuk kolom itu. Router rumahan biasanya menawarkan kotak centang bernama passthrough PPTP alih-alih aturan protokol, dan kotak itu melakukan dua tugas: mengizinkan protokol 47 melewati firewall, dan mengajari NAT cara melacak aliran GRE. Pada router Linux tugas itu adalah modul terpisah dan aturan terpisah, itulah sebabnya passthrough yang baru setengah dikonfigurasi masih menghasilkan kanal kendali yang bekerja. Cari tahu separuh mana yang ada sebelum mengubah apa pun.

Firewall server itu sendiri juga harus mengizinkan protokol 47 dari alamat router. Firewall host yang hanya menerima 1723/tcp mereproduksi galat 619 dari dalam LAN, sehingga penerusan yang rusak dan aturan host yang rusak tampak sama.

sudo iptables -S FORWARD | grep -i gre
sudo nft list ruleset | grep -i gre
lsmod | grep -E 'nf_conntrack_proto_gre|nf_nat_proto_gre'

Jika modulnya tidak ada, muat dengan sudo modprobe nf_conntrack_proto_gre nf_nat_proto_gre dan buat pemuatannya permanen, karena reboot yang melupakan pembantu mengembalikan terowongan yang bekerja menjadi galat 619. Aturan penerusan hanya perlu menerima protokol 47 menuju alamat server, bukan seluruh LAN. Definisi RFC 2637 memisahkan jalur kendali dan data, itulah sebabnya tidak ada satu layar penerusan port yang menjelaskan PPTP secara lengkap.

Kotak centang passthrough atau aturan protokol eksplisit

Kotak centang passthrough yang hanya membuka firewall lebih dekat ke yang benar daripada ALG yang menulis ulang pengenal panggilan. Separuh firewall dapat diprediksi, karena protokol 47 diterima atau dibuang, dan penghitung menunjukkan yang mana. Separuh penulisan ulang adalah tempat vendor berbeda, karena pengenal panggilan PPTP bersifat per terowongan dan NAT yang menyuntingnya harus melacak setiap panggilan yang disentuhnya. Ketika satu klien terhubung dan dua tidak, ALG adalah tersangka pertama.

Aturan NAT tujuan untuk 1723 juga punya masalah kepemilikan. Jika aturan lama masih mengirim 1723 ke host yang berhenti menjalankan server, paket jatuh ke port tertutup dan layanan PPTP router sendiri berhenti menjawab, yang terbaca seperti kegagalan firewall tetapi sebenarnya target yang usang. Baca aturan dan tujuannya sebelum menambahkan yang kedua. Pada router yang mengakhiri PPTP sendiri, aturan WAN bersaing dengan layanan bawaan, jadi pilih satu pemilik untuk 1723 dan protokol 47.

Dua klien di balik NAT yang sama adalah kasus yang memisahkan penerusan sederhana dari yang cerdik. Meneruskan protokol 47 tanpa menulis ulang pengenal panggilan biasanya berperilaku lebih baik daripada pembantu yang mencoba memperbaikinya.

Ukur terowongan sebelum menyalahkan router

PPTP menyusutkan muatan berguna, dan penyusutan itu aritmetika, bukan misteri. Setiap paket terowongan membawa tajuk IP luar, tajuk GRE yang diperluas, tajuk PPP dan, dengan enkripsi, tajuk MPPE. Ketika jalur tidak dapat membawa bingkai yang dihasilkan, paket kecil lolos, login selesai, dan sesi berhenti pertama kali transfer berkas atau jabat tangan TLS mengirim paket berukuran penuh.

Hitung angkanya alih-alih menebaknya. GRE yang diperluas memakan 8 bita, PPP memakan 4, MPPE memakan 4, dan tajuk IP luar memakan 20, jadi terowongan memakan 36 bita sebelum muatan apa pun. Pada WAN PPPoE yang berakhir di 1492, PPP MTU terbesar yang muat adalah 1492 dikurangi 36, yaitu 1456. Setel mtu dan mru ke nilai itu pada opsi PPP dan uji ulang dengan ping tanpa fragmentasi.

ping -M do -s 1464 198.51.100.7
grep -E '^(mtu|mru)' /etc/ppp/options.pptpd

Ping mengukur jalur, bukan terowongan: 1464 bita muatan ditambah 28 bita tajuk IP dan ICMP mengisi tepat bingkai 1492 bita. Jika ping itu gagal, turunkan angkanya sampai lolos lalu kurangi 36 dari hasilnya. MTU terowongan yang disetel di atas batas jalur menghasilkan pembekuan tanpa satu pun baris log yang menyebut ukuran.

PPTP, L2TP/IPsec atau OpenVPN pada router yang sama

Router yang sama dapat membawa salah satu dari tiga terowongan umum, dan bedanya adalah apa yang harus diungkapkannya. PPTP memerlukan dua aturan pada dua lapisan berbeda. L2TP di atas IPsec memerlukan UDP 500 dan 4500 untuk pertukaran kunci dan, kecuali NAT-T membawanya, protokol 50 untuk muatan. OpenVPN memerlukan satu port UDP dan tidak perlu pembantu sama sekali.

TunnelWhat the router must allowPractical note
PPTPTCP 1723 and IP protocol 47Two transports, two rules
L2TP/IPsecUDP 500, UDP 4500, protocol 50 without NAT-TESP has no port either
OpenVPNUDP 1194 or a chosen TCP portSingle rule, no helper

Kolom L2TP tidak otomatis lebih ramah daripada GRE. ESP adalah protokol IP 50 dan juga tidak punya port, jadi router yang kesulitan dengan protokol 47 bisa kesulitan dengan protokol 50 karena alasan yang sama. NAT-T ada untuk membungkus ESP di dalam UDP 4500, dan ketika kedua ujung mendukungnya aturan protokol 50 menjadi tidak perlu. Itu sifat ujung-ujungnya, bukan sifat kotak PPTP router. Pastikan enkapsulasi mana yang benar-benar dinegosiasikan klien sebelum menulis aturan untuk keduanya.

OpenVPN adalah opsi dengan bagian bergerak paling sedikit di sisi router. Satu port UDP, satu penerusan, tanpa pembantu pelacak koneksi dan tanpa penulisan ulang pengenal panggilan. Pertukarannya adalah klien yang harus dipasang alih-alih pemanggil bawaan, dan itu sering menjadi satu-satunya alasan PPTP tetap dalam pembicaraan.

Apa yang diperbaiki dan apa yang diganti

Memperbaiki penerusan dan MTU memberi Anda terowongan yang bekerja, bukan yang sebaiknya dipertahankan. Autentikasi MSCHAPv2 milik PPTP sudah bisa diserang bertahun-tahun, dan terowongan yang bekerja memindahkan kredensial yang dapat dipulihkan secara luring. Jika perangkat jauh dapat menjalankan L2TP/IPsec atau OpenVPN, perlakukan perbaikan sebagai langkah sementara yang bertanggal.

Keputusan bergantung pada apa yang didukung ujung jauh dan berapa lama pengaturan itu harus bertahan. Perangkat lama yang hanya berbicara PPTP mendapat perbaikan; apa pun yang dapat memasang klien dimigrasikan.

Sebelum menutup tiket, pastikan klien bertahan pada transfer besar dan bukan hanya login, dan router masih memegang aturan protokol 47 setelah reboot. Terowongan yang lolos satu salinan berkas lalu mati setelah pembaruan firmware berikutnya tidak pernah selesai.

Artikel terkait