Ο πελάτης πιστοποιείται, το PPP διαπραγματεύεται διεύθυνση και μετά τίποτα δεν κινείται. Το ping αποτυγχάνει, το πρόγραμμα περιήγησης αποτυγχάνει και το container φαίνεται συνδεδεμένο όλη την ώρα. Αυτό το μοτίβο δεν είναι πρόβλημα πίνακα δρομολόγησης, γιατί τα προβλήματα δρομολόγησης συνήθως σπάνε και τη σύνδεση ελέγχου. Είναι η διαδρομή του ωφέλιμου φορτίου, και στο PPTP το ωφέλιμο φορτίο είναι διαφορετικό πρωτόκολλο από αυτό που μόλις πέτυχε.

Πέντε έλεγχοι, με τη σειρά που εξοικονομεί τον περισσότερο χρόνο.

Έλεγχος 1: διαχωρίστε το κανάλι ελέγχου από το ωφέλιμο φορτίο

Το PPTP πιστοποιείται πάνω από TCP 1723 και μετά μεταφέρει το ωφέλιμο φορτίο PPP μέσα σε GRE, πρωτόκολλο IP 47. Το GRE δεν είναι ούτε TCP ούτε UDP, άρα κάθε κανόνας που προωθεί τη θύρα ελέγχου δεν λέει τίποτα γι' αυτό. Ένα NAT ή τείχος προστασίας που περνά το 1723 μπορεί να απορρίψει το πρωτόκολλο 47 χωρίς παράπονο, και η συνεδρία μένει μισοχτισμένη με τρόπο που μοιάζει με επιτυχία.

Αν η σύνδεση λειτουργεί και δεν επιστρέφει πακέτο, υποθέστε πρώτα GRE και αποδείξτε το μετά.

Έλεγχος 2: επιβεβαιώστε τον βοηθό στον πυρήνα του host

Η παρακολούθηση συνδέσεων δεν μπορεί να συνδέσει μια σύνδεση ελέγχου TCP με ροή GRE χωρίς βοηθό. Το άρθρωμα είναι nf_conntrack_pptp, ζει στον πυρήνα του host, και η φόρτωσή του μέσα στην εικόνα του container δεν πετυχαίνει τίποτα, γιατί τα αρθρώματα ισχύουν για όλο τον host. Το lsmod | grep nf_conntrack_pptp στον host του Docker είναι ο έλεγχος. Αν λείπει, το modprobe nf_conntrack_pptp το φορτώνει για τον τρέχοντα πυρήνα και δεν λέει τίποτα για την επόμενη εκκίνηση, οπότε προσθέστε το και στη διαμόρφωση του host.

Ένα άρθρωμα που εξαφανίζεται στην επανεκκίνηση γίνεται το ίδιο δελτίο τον επόμενο μήνα.

Έλεγχος 3: διαβάστε την πολιτική πυρήνα που το απενεργοποιεί

Ακόμη και με το άρθρωμα παρόν, οι πυρήνες από την 4.7 θέτουν το net.netfilter.nf_conntrack_helper σε 0 εξ ορισμού, που απενεργοποιεί την αυτόματη ανάθεση βοηθού για κάθε πρωτόκολλο. Αυτή η προεπιλογή είναι ο λόγος που ένα σωστά εγκατεστημένο άρθρωμα δεν κάνει ακόμα τίποτα: ο κώδικας είναι εκεί και η πολιτική λέει να μη χρησιμοποιηθεί. Το sysctl net.netfilter.nf_conntrack_helper αναφέρει την τρέχουσα τιμή, και η ρύθμιση σε 1 κατά τον χρόνο εκτέλεσης κάνει τον βοηθό ξανά διαθέσιμο. Διατηρήστε την τιμή μέσω της διαμόρφωσης sysctl του host αν το επιτρέπει ο σχεδιασμός.

Η αυτόματη ανάθεση επιτρέπει στην κίνηση να δημιουργεί προσδοκίες σιωπηρά, και γι' αυτό ακριβώς άλλαξε η προεπιλογή. Περιορίστε την στον έμπιστο host ή χρησιμοποιήστε ρητό κανόνα που στοχεύει τον βοηθό.

Έλεγχος 4: δείτε τη διαδρομή του container ξεχωριστά

Ένας φορτωμένος βοηθός δεν δημιουργεί διαδρομή. Το container χρειάζεται διαδρομή προς τον διακομιστή PPTP, και η προώθηση στον host πρέπει να επιτρέπει GRE και προς τις δύο κατευθύνσεις: το iptables -L FORWARD -v -n δείχνει αν το πρωτόκολλο 47 γίνεται δεκτό και αν οι μετρητές κινούνται. Οι κανόνες masquerade του Docker μεταφράζουν TCP και UDP, όχι το πρωτόκολλο 47, οπότε ένα γεφυρωμένο container μπορεί να χρειάζεται ρητή αποδοχή forward και, σε μερικούς hosts, δικό του κανόνα μετάφρασης. Επιβεβαιώστε επίσης ότι το container έχει την υποστήριξη συσκευών PPP που περιμένει η εικόνα του.

Διαβάστε τους μετρητές αντί για το κείμενο του κανόνα. Ένας κανόνας που υπάρχει και δεν ταιριάζει με τίποτα είναι διακόσμηση.

Έλεγχος 5: αποδείξτε ότι το GRE παρακολουθείται, μετά αποφασίστε για το PPTP

Με τον πελάτη σε λειτουργία, διαβάστε τον πίνακα παρακολούθησης. Μια εγκατεστημένη καταχώριση ελέγχου PPTP μαζί με σχετική καταχώριση GRE σημαίνει ότι ο βοηθός συνδέει τις ροές και το υπόλοιπο σφάλμα είναι αλλού. Μια καταχώριση ελέγχου χωρίς καταχώριση GRE σημαίνει ότι το ωφέλιμο φορτίο απορρίπτεται ή δεν παρακολουθείται, που σας επιστρέφει στους ελέγχους 2 και 3.

Το ίδιο το PPTP είναι παλαιό και το MS-CHAPv2 είναι αδύναμο. Αν ο διακομιστής προσφέρει επίσης L2TP/IPsec, IKEv2 ή WireGuard, η μετάβαση σε ένα από αυτά αφαιρεί ολόκληρη αυτή την κατηγορία προβλημάτων.

Όπου το PPTP πρέπει να μείνει, η εκτέλεση του πελάτη στον host αντί μέσα σε container αφαιρεί ένα στρώμα NAT και φιλτραρίσματος, που συχνά είναι η φθηνότερη απόφαση.

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