Add-VpnConnection: γιατί χαλάει το PSK και γιατί μένει η παλιά διεύθυνση
Το PowerShell αναπτύσσει το προ-κοινόχρηστο κλειδί μέσα σε διπλά εισαγωγικά πριν το αποθηκεύσει το cmdlet, και μια ενεργή σήραγγα κρατά την παλιά διεύθυνση μέχρι να επανασυνδεθείτε.
Ένα προφίλ VPN των Windows είναι μια καταχώριση σε τηλεφωνικό κατάλογο, και το PowerShell είναι ένας τρόπος να επεξεργαστείτε αυτή την καταχώριση. Από αυτή τη διάκριση προκύπτουν δύο αποτυχίες: ένα προ-κοινόχρηστο κλειδί που φτάνει στον διακομιστή ήδη κατεστραμμένο, και μια διεύθυνση διακομιστή που φαίνεται ενημερωμένη αλλά δεν είναι αυτή που θα καλέσει η επόμενη σήραγγα. Και τα δύο φαίνονται ευκολότερα όταν αντιμετωπίζετε το προφίλ ως αποθηκευμένη κατάσταση και όχι ως εντολή που εκτελέσατε. Η πορεία ακολουθεί τη σειρά με την οποία γίνονται οι αλλαγές: δημιουργία, αλλαγή, εμβέλεια, ανάγνωση εκ νέου.
Δημιουργήστε το προφίλ με κυριολεκτικό κλειδί
Το Add-VpnConnection δέχεται το προ-κοινόχρηστο κλειδί L2TP μέσω του -L2tpPsk. Το PowerShell επεξεργάζεται τη συμβολοσειρά πριν την παραλάβει το cmdlet, και μέσα σε διπλά εισαγωγικά το σύμβολο του δολαρίου ξεκινά αναφορά μεταβλητής ενώ το backtick ξεκινά διαφυγή. Ένα κλειδί που περιέχει οποιοδήποτε από τα δύο φτάνει συντομότερο ή με διαφορετικό χαρακτήρα, και το προφίλ δημιουργείται επιτυχώς με λάθος μυστικό.
Στη συνέχεια η αποτυχία εμφανίζεται στον έλεγχο ταυτότητας IPsec, όπου η σήραγγα αρνείται να σηκωθεί. Γι αυτό ένα σφάλμα εισαγωγικών αναφέρεται τόσο συχνά ως πρόβλημα από την πλευρά του διακομιστή: το προφίλ υπάρχει, το όνομα είναι σωστό και το μυστικό είναι ήσυχα λάθος.
| How you write it | What PowerShell does | Result |
|---|---|---|
| "p@ss$word!42" | Expands $word as a variable | Stored key is truncated |
| Double-quoted with an escape character | Consumes the next character as an escape | One character disappears |
| 'p@ss$word!42' | Keeps the literal characters | Stored key matches the secret |
Τα απλά εισαγωγικά είναι η λύση και πρέπει να περικλείουν ολόκληρη την τιμή. Αν η καταχώριση υπάρχει ήδη με κακό κλειδί, το -Force την αντικαθιστά, ή αφαιρέστε και δημιουργήστε ξανά το προφίλ και δοκιμάστε με νέα σύνδεση:
Add-VpnConnection -Name "Contoso-L2TP" -ServerAddress vpn.contoso.example -TunnelType L2tp -L2tpPsk 'n3w$ecret!2026' -AuthenticationMethod Pap -RememberCredential -Force
Κρατήστε το πραγματικό μυστικό έξω από το ιστορικό του κελύφους και από κοινόχρηστα σενάρια. Διαβάστε το κατά την εκτέλεση από τον εγκεκριμένο χώρο αποθήκευσης και περάστε τη μεταβλητή αντί για το κυριολεκτικό, κάτι που αποφεύγει εντελώς το πρόβλημα των εισαγωγικών.
Αλλάξτε τη διεύθυνση και μετά επανασυνδεθείτε
Το Set-VpnConnection δέχεται παραμέτρους χωρισμένες με κενά, όχι σύνταξη ανάθεσης. Γράφοντας -ServerAddress = "203.0.113.10" περνάτε ένα επιπλέον διακριτικό, και το cmdlet είτε σφάλλει είτε αποθηκεύει κάτι που δεν σκοπεύατε. Η σωστή μορφή είναι -Name "Office L2TP" -ServerAddress 203.0.113.10.
Ακόμη και με τη σωστή σύνταξη, η αλλαγή δεν φτάνει σε σήραγγα που είναι ήδη ενεργή. Μια εγκατεστημένη σύνδεση κρατά τη διεύθυνση που κάλεσε μέχρι να αποσυνδεθεί, οπότε η δοκιμή της ίδιας συνεδρίας δεν αποδεικνύει τίποτα για τη νέα τιμή. Αποσυνδεθείτε, επεξεργαστείτε, επανασυνδεθείτε και επιβεβαιώστε τη διεύθυνση του ομολόγου στις λεπτομέρειες της σύνδεσης.
Ορισμένες ιδιότητες δεν αλλάζουν επί τόπου. Όταν το cmdlet αρνείται, σημειώστε τις υπάρχουσες παραμέτρους, διαγράψτε το προφίλ και δημιουργήστε το ξανά με τις διορθωμένες τιμές, και κρατήστε τις αρχικές ρυθμίσεις σήραγγας και ελέγχου ταυτότητας. Ένα σενάριο που χρειάζεται να αλλάξει μόνο τον αριθμό τηλεφώνου μπορεί να επεξεργαστεί την καταχώριση του τηλεφωνικού καταλόγου μέσω του RAS API αντί να τα ξαναφτιάξει όλα. Όποια διαδρομή κι αν ακολουθήσετε, επιβεβαιώστε τις αποθηκευμένες τιμές μετά, αντί να εμπιστευτείτε τη σιωπή της εντολής.
Μάθετε ποιον τηλεφωνικό κατάλογο επεξεργαστήκατε
Ένα προφίλ ανά χρήστη ζει στον κατάλογο συνδέσεων δικτύου εκείνου του χρήστη, και ένα προφίλ για όλους τους χρήστες ζει στον κατάλογο όλης της μηχανής κάτω από το δέντρο δεδομένων προγραμμάτων. Είναι διαφορετικές καταχωρίσεις με διαφορετική εμβέλεια, και η επεξεργασία της μίας αφήνει την άλλη ανέγγιχτη.
Γι αυτό μια αλλαγή μπορεί να φαίνεται ότι εξαφανίστηκε: το σενάριο έτρεξε με έναν λογαριασμό και η δοκιμή με άλλον. Χρησιμοποιήστε το -AllUserConnection όταν το προφίλ ανήκει στη μηχανή, και ελέγξτε την ίδια εμβέλεια όταν το διαβάζετε ξανά.
Διαβάστε το προφίλ ξανά πριν τη δοκιμή
Ρωτήστε τα Windows τι αποθήκευσαν και όχι τι περάσατε:
Get-VpnConnection -Name "Office L2TP" | Select-Object Name, ServerAddress, TunnelType, AuthenticationMethod
Συγκρίνετε αυτή την έξοδο με την πρόθεση και μετά ξεκινήστε μια νέα σύνδεση. Αν η κλήση αποτύχει, ελέγξτε το αρχείο καταγραφής του πελάτη RAS στην Προβολή συμβάντων πριν αλλάξετε ξανά το προφίλ, γιατί το αρχείο ονομάζει το στάδιο που απέτυχε.
Κρατήστε τον σχεδιασμό ελέγχου ταυτότητας άθικτο κατά την επεξεργασία. Μια εντολή που αλλάζει τη διεύθυνση αλλά αφήνει το πιστοποιητικό ή τη διαμόρφωση EAP παράγει αποτυχία που φαίνεται άσχετη με την αλλαγή, και η εξαγωγή του προφίλ που λειτουργεί εκ των προτέρων σας δίνει κάτι να επαναφέρετε αντί για εικασία.