Seseorang memajukan 1723, klien sampai ke pelayan, pengesahan bermula, dan kemudian semuanya berhenti tanpa ralat. Kesimpulan semula jadi ialah kata laluan salah, jadi kata laluan ditaip semula tiga kali. Pemajuan itu betul dan kelayakan itu betul. Yang rosak ialah protokol kedua yang tidak pernah diliputi oleh pemajuan itu, dan nilai lalai kernel yang senyap berhenti membantu dengannya.

Pemajuan itu tidak pernah menjadi masalah

Peraturan pemajuan port menerangkan trafik TCP atau UDP. Ia tidak boleh menerangkan muatan yang bertukar kepada protokol IP lain di tengah-tengah sesi, dan PPTP melakukan tepat itu.

Sebab itulah sambungan kelihatan sihat sehingga saat ia tergantung. Bahagian yang boleh dikawal oleh peraturan port berjaya, dan bahagian yang tidak boleh dikawal ialah bahagian yang gagal.

TCP untuk kawalan, GRE untuk data

Panggilan dirundingkan melalui TCP 1723. Setelah ia naik, muatan berpindah ke GRE, protokol IP 47, yang tidak membawa sebarang nombor port. Peraturan yang bergantung pada port tiada apa untuk dipadankan.

Apa yang dibawa GRE ialah pengecam panggilan dalam pengepalanya, dan penterjemah NAT mesti menulis semula medan itu secara konsisten dalam kedua-dua arah atau dua bahagian sesi berhenti bersetuju. Satu arah ditulis semula dan yang lain tidak menghasilkan sesi yang mengesahkan lalu membuang setiap paket data. Itulah tepat bentuk gejalanya: berjaya, kemudian senyap.

GRE bogel tanpa PPTP tidak memerlukan penulisan semula sedemikian, sebab itulah terowong GRE biasa boleh berfungsi melalui penghala yang gagal untuk klien PPTP pada laluan yang sama.

Empat modul dan sysctl yang mematikannya

Dua modul mengendalikan pembingkaian, nf_conntrack_proto_gre dan nf_nat_proto_gre. Dua lagi mengendalikan pengecam panggilan, nf_conntrack_pptp dan nf_nat_pptp. Memuatkan yang terakhir menarik yang lain melalui kebergantungan, jadi senarai modul sepatutnya menunjukkan keempat-empatnya.

Arahan lama menggunakan awalan ip_ dari era 2.6. Arahan itu mungkin kelihatan berjalan sementara tidak memuatkan apa-apa, jadi periksa senarai yang dimuatkan dan bukan status keluar.

Memuatkannya tidak lagi mencukupi. Sejak Linux 4.7 sysctl net.netfilter.nf_conntrack_helper bernilai 0 secara lalai, yang mematikan penetapan pembantu automatik untuk aliran baharu. Penghala boleh mempunyai setiap modul dan masih tidak menterjemah apa-apa. Periksa nilai berkesan sebelum melihat senarai modul lagi.

Sama ada hidupkan semula penetapan automatik secara global, atau pasangkan pembantu pada aliran yang memerlukannya dan biarkan yang lain:

iptables -t raw -A PREROUTING -p tcp --dport 1723 -j CT --helper pptp

Pilihan kedua lebih baik. Ia mengehadkan tingkah laku kepada trafik PPTP dan bukannya menghidupkan semula penetapan automatik di seluruh penghala.

Membuka protokol yang tiada port

Peraturan tembok api yang membenarkan 1723 tidak mengatakan apa-apa tentang protokol 47. Di firewalld, benarkan protokol itu dalam zon yang menghadap klien. Di iptables biasa, terima protokol gre dalam rantaian input.

Kemudian tangkap di kedua-dua belah. Paket yang meninggalkan klien tanpa balasan datang bermakna laluan balik ditapis, dan itu kerosakan berbeza daripada kelayakan yang ditolak.

Selepas ia bersambung, had saiz

GRE menyisipkan pengepala, dan PPP di dalamnya menambah lebih banyak, jadi pautan yang berfungsi melaporkan MTU jauh di bawah 1500. Respons kecil dimuatkan dan yang besar tersekat, yang kelihatan seperti masalah kedua yang tidak berkaitan muncul tepat apabila masalah pertama diselesaikan.

Baca MTU pada penyesuai PPP klien dan selaraskannya dengan pengiraan penghala sendiri dan bukannya menurunkan nombor sehingga sesuatu berfungsi. Paket bersaiz penuh yang keluar tanpa apa-apa kembali menunjuk kepada had itu dan bukan kepada penterjemahan.

Membaiki laluan mengembalikan pengguna kepada kerja, dan ia tidak menjadikan PPTP pilihan yang baik. MS-CHAPv2 dan RC4 sudah lama usang, jadi anggap pemuatan modul sebagai pembaikan sementara dan rancang peralihan kepada protokol yang diselenggara.

Artikel berkaitan