Οι περισσότερες χαλασμένες ρυθμίσεις WireGuard δεν κάνουν λάθος σε μια τιμή· βάζουν τη σωστή τιμή στη λάθος πλευρά. Ένα ιδιωτικό κλειδί ανήκει σε αυτό το μηχάνημα, ένα peer μεταφέρει το δημόσιο κλειδί του άλλου μηχανήματος, και μια διεύθυνση κάθεται στο μπλοκ interface παρόλο που περιγράφει πού ζει το τούνελ. Διαβάστε το αρχείο ως δύο κατευθύνσεις που συναντιούνται και μετά ελέγξτε τι πρόσθεσε από πάνω το βοηθητικό σκριπτ. Το πρωτόκολλο ίδιο έχει λιγότερα πεδία από το αρχείο, και τα επιπλέον αξίζει να τα ξέρει κανείς ξεχωριστά.

Τα κλειδιά του interface περιγράφουν αυτό το μηχάνημα

Το μπλοκ interface κρατά την ταυτότητα αυτού του άκρου. PrivateKey είναι αυτή η ταυτότητα και δεν φεύγει ποτέ από τον κεντρικό υπολογιστή· το αντίστοιχο δημόσιο κλειδί παράγεται από αυτήν και αυτό είναι που παραθέτουν τα άλλα peers. ListenPort είναι όπου αυτή η πλευρά δέχεται χειραψίες, οπότε δύο πελάτες πίσω από μία διεύθυνση χρειάζονται διαφορετικές θύρες.

Address είναι η διεύθυνση του τούνελ στην οποία απαντά αυτός ο κεντρικός υπολογιστής, γραμμένη με μήκος προθέματος επειδή είναι και η πηγή που θα χρησιμοποιήσει. Λάθος πρόθεμα εδώ αλλάζει ποιους προορισμούς θεωρεί ο κεντρικός υπολογιστής άμεσα συνδεδεμένους, και αυτό παράγει αποτυχίες που μοιάζουν με δρομολόγηση και όχι με ρύθμιση.

Όλα τα υπόλοιπα σε ένα [Interface] μπλοκ με πραγματικό πελάτη τα προσθέτει συνήθως το wg-quick: DNS, MTU, Table, και οι γραμμές αγκίστρων. Δεν είναι πεδία πρωτοκόλλου, και μια γυμνή wg εγκατάσταση τα αγνοεί εντελώς.

Κάθε καταχώριση peer περιγράφει μία άλλη πλευρά

Ένα [Peer] μπλοκ είναι το απομακρυσμένο μέρος. PublicKey είναι το παράγωγο κλειδί αυτού του μέρους, ποτέ το ιδιωτικό του κλειδί, και PresharedKey είναι ένα προαιρετικό επιπλέον μυστικό που και οι δύο πλευρές πρέπει να κρατούν πανομοιότυπο. Endpoint είναι πού να στέλνει, και PersistentKeepalive ζητά από αυτόν τον κεντρικό υπολογιστή να στείλει ένα πακέτο μετά το διάστημα όταν τίποτε άλλο δεν βγαίνει.

Δύο λάθη εξηγούν το μεγαλύτερο μέρος της σύγχυσης εδώ. Η αντιγραφή του δικού σας ιδιωτικού κλειδιού σε ένα μπλοκ peer κάνει τα δύο άκρα να μοιράζονται μία ταυτότητα, και η χειραψία αποτυγχάνει με τρόπο που καταγράφεται άσχημα. Το να αφήσετε το Endpoint έξω σε έναν πελάτη είναι συνήθως σκόπιμο, επειδή ο διακομιστής μαθαίνει τη διεύθυνση από την εισερχόμενη χειραψία· το να το αφήσετε έξω σε έναν διακομιστή που πρέπει να ξεκινήσει δεν είναι. Θυμηθείτε επίσης ότι το keepalive κρατά ανοιχτή μια αντιστοίχιση NAT, και δεν βελτιώνει τη διεκπεραιωτικότητα ούτε μειώνει την καθυστέρηση, οπότε τριάντα δευτερόλεπτα επιπλέον πακέτων δεν αγοράζουν τίποτε όταν η κίνηση ήδη ρέει.

Το AllowedIPs είναι δρομολόγηση, όχι λίστα αδειών

AllowedIPs είναι η κρυπτοκλειδική δρομολόγηση του WireGuard. Προς τα έξω, αποφασίζει ποιο peer λαμβάνει ένα πακέτο με βάση τον προορισμό του. Προς τα μέσα, αποφασίζει αν ένα πακέτο που φτάνει από αυτό το peer γίνεται δεκτό με βάση την πηγή του. Το ίδιο πεδίο κάνει και τις δύο δουλειές, γι' αυτό δεν είναι λίστα ελέγχου πρόσβασης και δεν είναι λίστα επιτρεπόμενων ιστοτόπων.

Ένα στενό AllowedIPs στον διακομιστή για έναν πελάτη σημαίνει ότι ο διακομιστής θα δεχτεί μόνο πακέτα που δηλώνουν αυτές τις πηγές και θα στείλει μόνο αυτούς τους προορισμούς σε αυτόν τον πελάτη. Διευρύνετε τη μία πλευρά χωρίς να διευρύνετε την άλλη και παίρνετε ένα τούνελ που σηκώνεται και δεν περνά τίποτε.

Τι προσθέτει το wg-quick γύρω από το πρωτόκολλο

wg-quick διαβάζει το ίδιο αρχείο και εκτελεί τα δικτυακά βήματα που το πρωτόκολλο αφήνει στο λειτουργικό σύστημα. Αναθέτει τη διεύθυνση του interface, προσθέτει διαδρομές που παράγονται από το AllowedIPs, γράφει τις ρυθμίσεις του resolver και εκτελεί τις εντολές αγκίστρων με σειρά.

Αυτό το στρώμα εξηγεί τη γνωστή ασυμμετρία. Ένα αρχείο με 0.0.0.0/0 και μια γραμμή DNS δίνει στον πελάτη μια προεπιλεγμένη διαδρομή και έναν resolver, και δεν κάνει απολύτως τίποτε στους κανόνες προώθησης ή NAT του διακομιστή. Αυτοί ανήκουν στη δική του ρύθμιση του διακομιστή, και κανένα αρχείο πελάτη δεν μπορεί να τους παρέχει.

Κρατήστε έναν ιδιοκτήτη για το αρχείο. Η χειροκίνητη επεξεργασία του ενώ το SaveConfig είναι ενεργό σημαίνει ότι η αλλαγή σας εξαφανίζεται την επόμενη φορά που το interface πέφτει, και το interface δεν θα σας πει ότι συνέβη.

Ελέγξτε την εφαρμοσμένη κατάσταση, όχι το αρχείο

Το αρχείο είναι μια πρόθεση. Η εφαρμοσμένη κατάσταση είναι αυτό που κρατά ο πυρήνας, και αποκλίνουν όποτε ένα βοήθημα, ένα drop-in ή ένα άγκιστρο επεξεργάστηκε κάτι μετά την ενεργοποίηση.

Διαβάστε τη ζωντανή κατάσταση και τη διευθυνσιοδότηση μαζί και μετά συγκρίνετε και τα δύο με αυτό που γράψατε:

sudo wg show
ip -4 addr show dev wg0
ip -4 route show dev wg0
grep -v "^#" /etc/wireguard/wg0.conf

Αν η λίστα peer είναι κενή, το interface δημιουργήθηκε χωρίς να εφαρμοστεί η ρύθμισή του. Αν υπάρχουν διευθύνσεις και διαδρομές αλλά οι μετρητές μένουν στο μηδέν, το αρχείο φορτώθηκε και η χειραψία αποτυγχάνει, που είναι πρόβλημα κλειδιού ή άκρου και όχι σειράς ενοτήτων. Συγκρίνετε τις δύο όψεις πριν επεξεργαστείτε, γιατί το χάσμα ανάμεσά τους είναι συνήθως το πραγματικό σφάλμα.

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