Η σήραγγα ανεβαίνει, το πιστοποιητικό επικυρώνεται και μετά ένα παράθυρο διαλόγου λέει ότι δεν ήταν δυνατός ο ορισμός του διακομιστή DNS ή των τομέων. Στο Linux αυτό το παράθυρο συνήθως δεν αφορά την πύλη: ο πελάτης παραδίδει τη διαμόρφωση ονομάτων στο systemd-resolved μέσω D-Bus, και μια απορριφθείσα παράδοση αφήνει τη διεπαφή σηκωμένη με την επίλυση να δείχνει ακόμη στον παλιό σύνδεσμο. Ο ίδιος φορητός υπολογιστής επιλύει ονόματα καλά πριν το προφίλ αποκτήσει επίθημα, και αυτό είναι το στοιχείο που αξίζει να ακολουθήσετε. Τίποτα στη σήραγγα δεν άλλαξε τη στιγμή που εμφανίστηκε το παράθυρο.

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

Επιβεβαιώστε ότι το systemd-resolved είναι ο επιλυτής

Αυτός ο πελάτης μιλάει με το systemd-resolved και με κανέναν άλλο. Το Arch και αρκετές άλλες διανομές το παρέχουν απενεργοποιημένο, και το /etc/resolv.conf μπορεί να ανήκει σε εντελώς άλλον επιλυτή, οπότε καθορίστε τον ιδιοκτήτη πριν κοιτάξετε τα δικαιώματα.

Τρεις εντολές το ξεκαθαρίζουν:

systemctl status systemd-resolved
ls -l /etc/resolv.conf
resolvectl status

Ψάχνετε για ενεργή υπηρεσία, έναν συμβολικό σύνδεσμο που δείχνει προς το /run/systemd/resolve/stub-resolv.conf, και DNS ανά σύνδεσμο στο resolvectl. Όταν την ιδιοκτησία την κρατά το NetworkManager, μεταφέρετέ την στο resolved αντί να παλεύετε με τον πελάτη· το drop-in παρακάτω ορίζει και τα δύο κλειδιά:

[main]
dns=systemd-resolved
systemd-resolved=true

Επανεκκινήστε το NetworkManager μόλις υπάρξει αυτό το αρχείο. Ένας ανενεργός επιλυτής μαζί με έναν πελάτη που συνεχίζει να καλεί το όνομα D-Bus του παράγει σφάλμα που δεν κατονομάζει κανέναν από τους δύο.

Παρακολουθήστε την κλήση D-Bus που αποτυγχάνει

Αυτό το βήμα μετατρέπει το παράθυρο σε συγκεκριμένη απάντηση. Παρακολουθήστε τη διεπαφή του επιλυτή σε ένα τερματικό και το ημερολόγιο σε άλλο, και μετά επανασυνδεθείτε:

sudo dbus-monitor --system "interface='org.freedesktop.resolve1.Manager'"
journalctl -fu systemd-resolved

Τρεις κλήσεις πρέπει να εμφανιστούν: SetLinkDNS, SetLinkDomains και SetLinkDefaultRoute. Εκείνη που επιστρέφει ως απάντηση σφάλματος είναι αυτή που πρέπει να διορθωθεί. Αυτή η απάντηση συνήθως αναφέρει την αιτία της, για παράδειγμα org.freedesktop.DBus.Error.AccessDenied έναντι SetLinkDomains. Σημειώστε ποια κλήση ήταν, γιατί η επόμενη ενότητα αφορά το πέρασμα αυτής της κλήσης.

Χορηγήστε τις ενέργειες polkit που χρειάζεται ο πελάτης

Διαβάστε την πολιτική πριν γράψετε κανόνα. Ένας πελάτης που τρέχει ως υπηρεσία δεν μπορεί να απαντήσει σε διαδραστική προτροπή, οπότε ένα σιωπηρό auth_admin_keep είναι αδιέξοδο.

pkaction --verbose --action-id org.freedesktop.resolve1.set-domains
pkaction --action-id org.freedesktop.resolve1.set-dns-servers --verbose

Αν η απάντηση είναι auth_admin_keep, ο πελάτης χρειάζεται ρητό κανόνα. Το απόσπασμα παρακάτω επιτρέπει τις τέσσερις ενέργειες resolve1 που χρησιμοποιεί ένας πελάτης VPN κατά τη σύνδεση και αφήνει όλα τα άλλα στο polkit.Result.NOT_HANDLED:

polkit.addRule(function(action, subject) {
  var allowed = [
    "org.freedesktop.resolve1.set-dns-servers",
    "org.freedesktop.resolve1.set-domains",
    "org.freedesktop.resolve1.set-default-route",
    "org.freedesktop.resolve1.revert"
  ];
  if (allowed.indexOf(action.id) !== -1 &&
      subject.isInGroup("wheel")) {
    return polkit.Result.YES;
  }
  return polkit.Result.NOT_HANDLED;
});

Τοποθετήστε το στο /etc/polkit-1/rules.d/ ως αρχείο που θα αναγνωρίσετε αργότερα, όπως 50-azurevpn.rules, και αντικαταστήστε το όνομα ομάδας στο απόσπασμα με το δικό σας πριν αποσυνδεθείτε και συνδεθείτε ξανά. Κρατήστε το στενό, γιατί το να επιτρέπετε κάθε ενέργεια resolve1 για κάθε λογαριασμό είναι ευρύτερο από ό,τι χρειάζεται αυτός ο πελάτης και πολύ δυσκολότερο να ελεγχθεί αργότερα.

Ελέγξτε το XML του προφίλ πριν επεξεργαστείτε το polkit

Ένα προφίλ που επεξεργάστηκε με το χέρι μπορεί να αγνοηθεί χωρίς λέξη. Η Microsoft τεκμηριώνει μια επίπεδη διάταξη στην οποία οι καταχωρίσεις dnsserver βρίσκονται απευθείας μέσα στο dnsservers και τα επιθήματα μέσα στο dnssuffixes. Ένα επιπλέον στοιχείο περιτυλίγματος γύρω από κάθε διεύθυνση δεν είναι αυτό το σχήμα, και ο πελάτης επιστρέφει ήσυχα σε ό,τι προωθεί η πύλη.

Κάντε τη δοκιμή αφαίρεσης πριν αγγίξετε το polkit. Αφαιρέστε το μπλοκ επιθήματος, επανασυνδεθείτε και δείτε αν αλλάζει το παράθυρο. Αν αλλάζει, η κλήση που αποτύγχανε ήταν η παράδοση τομέα, και η διόρθωση είναι εξουσιοδότηση και όχι άλλη επεξεργασία XML.

Επαληθεύστε τον τομέα στον σύνδεσμο της σήραγγας

Επανασυνδεθείτε και διαβάστε ξανά το resolvectl status, ελέγχοντας ότι ο σύνδεσμος της σήραγγας φέρει τον διακομιστή ονομάτων και τον τομέα αναζήτησης μαζί. Επιλύστε ένα σύντομο ιδιωτικό όνομα αντί για δημόσιο. Όταν το όνομα επιλύεται αλλά η υπηρεσία πίσω του δεν απαντά, η παράδοση DNS λειτούργησε και το υπόλοιπο πρόβλημα είναι δρομολόγηση.

Γράψτε στο δελτίο τον ιδιοκτήτη του επιλυτή, την κλήση D-Bus που απέτυχε, το αρχείο κανόνα και την έκδοση του προφίλ. Αυτές οι τέσσερις γραμμές κάνουν τον επόμενο φορητό υπολογιστή Linux μια σύντομη διόρθωση αντί για επαναλαμβανόμενη έρευνα.

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