Η σύνδεση αυθεντικοποιείται, ο πελάτης αναφέρει συνδεδεμένος και ένα δευτερόλεπτο αργότερα το αρχείο καταγραφής κλείνει με LCP τερματισμένο από τον ομότιμο. Αυτή η γραμμή προέρχεται από τη διαπραγμάτευση PPP μέσα στο τούνελ GRE, άρα η μεταφορά λειτουργούσε ήδη και τα δύο άκρα διαφωνούσαν για τις επιλογές της σύνδεσης. Οι κωδικοί και οι διευθύνσεις διακομιστή είναι συνήθως αθώοι εδώ. Η πολιτική κρυπτογράφησης είναι το πρώτο που πρέπει να συγκριθεί και στο Linux το αρχείο ομοτίμου του pppd είναι το πρώτο μέρος για να κοιτάξετε.

Τι λέει η αποτυχία LCP για το στάδιο PPP

Το PPTP τυλίγει το PPP μέσα στο GRE: η σύνδεση ελέγχου TCP 1723 στήνει την κλήση, το GRE μεταφέρει το ωφέλιμο φορτίο και μετά το LCP διαπραγματεύεται επιλογές όπως το πρωτόκολλο αυθεντικοποίησης, τη συμπίεση και το MPPE. Ο ομότιμος τερματίζει το LCP όταν μια απαιτούμενη επιλογή δεν είναι αποδεκτή από τη δική του πλευρά. Ένα αρχείο καταγραφής όπου η ανταλλαγή CHAP ή MSCHAPv2 ολοκληρώνεται και το LCP τελειώνει αμέσως μετά είναι απόρριψη πολιτικής, όχι αποτυχία προσβασιμότητας. Αν το τούνελ δεν φτάσει καθόλου σε διαπραγμάτευση, ελέγξτε το pppd και το πρόσθετό του πριν διαβάσετε τη γραμμή LCP.

Δύο προϋποθέσεις ξεφεύγουν εύκολα. Το δυαδικό του pppd πρέπει να υπάρχει και το πρόσθετο PPTP που αναφέρεται στο αρχείο ομοτίμου πρέπει να είναι εγκατεστημένο, ενώ ένα πακέτο που λείπει τερματίζει την κλήση πριν συζητηθεί οποιαδήποτε επιλογή.

Ενεργοποιήστε το MPPE στην πλευρά που το απαιτεί

Η πραγματική απόφαση είναι ποια πλευρά κατέχει την πολιτική κρυπτογράφησης. Ένας πελάτης μπορεί να προσφέρει MPPE, να το απαιτήσει ή να το αρνηθεί, και ο διακομιστής κάνει την ίδια επιλογή. Όταν και οι δύο το απαιτούν, η σύνδεση σηκώνεται, ενώ όταν ο ένας το απαιτεί και ο άλλος αρνείται, το LCP τελειώνει.

pty "pptp vpn.example.net --nolaunchpppd"
name alice
remotename PPTP
require-mppe-128

Φορτώστε το module με modprobe ppp_mppe πριν την κλήση, γιατί χωρίς αυτό το require-mppe-128 αποτυγχάνει. Στα Windows ο αντίστοιχος έλεγχος είναι η καρτέλα ασφαλείας της καταχώρισης VPN, όπου πρέπει να πούμε στον πελάτη να απαιτεί κρυπτογράφηση αντί να δέχεται ό,τι προσφέρει ο διακομιστής. Αν ο διακομιστής εξακολουθεί να τερματίζει το LCP, ρωτήστε τον διαχειριστή του αν το MPPE είναι υποχρεωτικό, προαιρετικό ή απενεργοποιημένο, αφού ο πελάτης δεν μπορεί να διαπραγματευτεί προστασία που ο διακομιστής αρνείται. Το να κλείσετε την κρυπτογράφηση για να εξαφανιστεί το μήνυμα είναι λάθος κατεύθυνση: αφαιρεί τη μόνη προστασία που έχει αυτό το πρωτόκολλο.

Αποθηκεύστε το αρχείο ομοτίμου που δουλεύει πριν το επεξεργαστείτε. Μια λανθασμένη γραμμή require-mppe αναπαράγει την ίδια γενική αποτυχία LCP και σας γυρίζει στην αρχή.

Διαβάστε το δικό του αρχείο καταγραφής του pppd, όχι το applet

Τα applets επιφάνειας εργασίας δείχνουν την αποσύνδεση και κρύβουν την αιτία, οπότε διαβάστε την αναφορά του daemon για μία προσπάθεια. Σε συστήματα systemd το μήνυμα καταλήγει στο journal, ενώ παλαιότερες ρυθμίσεις γράφουν στα παραδοσιακά αρχεία καταγραφής.

journalctl --since "10 min ago" | grep -i -E "pppd|lcp|mppe"
tail -n 50 /var/log/syslog

Αναζητήστε σε ένα παράθυρο γύρω από μία κλήση αντί για μια ολόκληρη μέρα επανασυνδέσεων, ώστε η απορριφθείσα επιλογή να εντοπίζεται εύκολα. Το pppd συνήθως ονομάζει την επιλογή και την απάντηση του ομοτίμου, που σας λέει αν πρέπει να αλλάξετε τη δική σας πρόταση ή να ζητήσετε από την πλευρά του διακομιστή να χαλαρώσει την απαίτησή του. Κρατάτε τις προσπάθειες με χρονοσφραγίδες, γιατί η σύγκριση δύο αρχείων καταγραφής είναι χρήσιμη μόνο όταν ξέρετε ποιες γραμμές ανήκουν σε ποια κλήση. Όταν δεν εμφανίζεται καθόλου ανταλλαγή LCP, η βλάβη βρίσκεται νωρίτερα στην αλυσίδα και το MPPE δεν είναι ο ύποπτος.

Κρατήστε τη διόρθωση στις επανασυνδέσεις: ονόματα hooks και MTU

Μόλις η σύνδεση μείνει όρθια, δύο λεπτομέρειες κρίνουν αν θα επιβιώσει από μια επανασύνδεση. Τα hooks ζουν στο /etc/ppp/ip-up.d και στο /etc/network/if-up.d, και οι δύο κατάλογοι επεξεργάζονται από το run-parts, του οποίου το φίλτρο ονομάτων αρχείων απορρίπτει ό,τι περιέχει τελεία. Ένα script με όνομα set-pptp.sh παραλείπεται λοιπόν, ενώ το set-pptp εκτελείται. Ελέγξτε το όνομα πριν αποσφαλματώσετε το περιεχόμενο του script και μετά ορίστε το μικρότερο MTU μέσα από αυτό το hook ώστε κάθε νέα διεπαφή ppp να το κληρονομεί χωρίς χειροκίνητη εντολή.

run-parts --test /etc/ppp/ip-up.d
ip link set dev ppp0 mtu 1200

Για να τερματίσετε μια συνεδρία σκόπιμα, στοχεύστε το pid που έχει καταγράψει το pppd αντί να ταιριάζετε ονόματα διεργασιών με μοτίβο, γιατί το σκότωμα όλων όσων περιέχουν ppp γκρεμίζει και άσχετες συνδέσεις. Το PPTP είναι παρωχημένο και το MS-CHAPv2 είναι αδύναμο, οπότε αντιμετωπίστε αυτούς τους ελέγχους ως συντήρηση για μια σύνδεση που πρέπει να συνεχίσει να δουλεύει, όχι ως λόγο να αναπτύξετε PPTP οπουδήποτε νέο.

Σχετικά άρθρα