Δεν υπάρχει cmdlet Import-VpnProfile, και αυτό που μοιάζει πιο κοντινό, το Add-VpnConnection, δεν διαβάζει ποτέ αρχείο .ovpn ή .conf. Συναρμολογεί ένα γνήσιο προφίλ Windows από τις παραμέτρους που του περνάτε, γι' αυτό το πρώτο σημείο ελέγχου εδώ είναι η μορφή του αρχείου και όχι η γραμμή εντολών. Αν η πύλη μιλά SSTP, IKEv2, L2TP/IPsec ή PPTP, τα Windows μπορούν να κατέχουν το προφίλ και ισχύει το υπόλοιπο της λίστας. Αν σας έδωσαν αρχείο OpenVPN ή WireGuard, σταματήστε στο πρώτο βήμα: αυτοί οι πελάτες έχουν τους δικούς τους εισαγωγείς.

Βήμα 1: Επιβεβαιώστε ποιο προφίλ μπορούν πραγματικά να κατέχουν τα Windows

Εκτελέστε το Get-Command -Module VpnClient στο μηχάνημα πριν από οτιδήποτε άλλο. Τα Windows 10, Windows 11 και Server 2016 ή νεότερα παρέχουν τη μονάδα· αν λείπει, κανένα αντιγραμμένο script δεν θα κάνει αυτόν τον υπολογιστή να δεχτεί γνήσιο προφίλ. Τα cmdlet που μετράνε είναι τα Add-VpnConnection, Get-VpnConnection και Remove-VpnConnection, και η λίστα παραμέτρων στην αναφορά του Add-VpnConnection αξίζει ένα πλήρες διάβασμα.

Γνήσιο σημαίνει ότι η στοίβα VPN των Windows τερματίζει τη σήραγγα. Αυτό καλύπτει το IKEv2, συχνά με πιστοποιητικό μηχανήματος· το SSTP, που είναι TLS με έλεγχο ταυτότητας χρήστη ή πιστοποιητικού μέσα· και το L2TP/IPsec με προκοινοποιημένο κλειδί. Ένα αρχείο .ovpn είναι script του OpenVPN, όχι σύνδεση Windows: μεταφέρει οδηγίες όπως remote, cipher ή tls-auth που η στοίβα των Windows δεν γνωρίζει καθόλου. Ένα WireGuard .conf είναι η ίδια ιστορία με PrivateKey και AllowedIPs· το να μετατρέψεις το ένα στο άλλο δεν είναι επιλογή παραμέτρου αλλά διαφορετική υλοποίηση σήραγγας.

Υπάρχει και τρίτος κλάδος. Αν ένας διαχειριστής σας δώσει έγγραφο VPNv2 CSP XML ή προφίλ Intune, αυτή είναι η διαδρομή MDM, που την εφαρμόζει η στοίβα παροχής και όχι το Add-VpnConnection. Μη μεταφράζετε αυτά τα ονόματα κόμβων σε παραμέτρους PowerShell· ρωτήστε ποιος μηχανισμός εφαρμόζει το XML.

Βήμα 2: Συνδυάστε τον τύπο σήραγγας με τη μέθοδο ελέγχου ταυτότητας

Τα -TunnelType και -AuthenticationMethod είναι ξεχωριστές παράμετροι και η πύλη ενδιαφέρεται μόνο για τον συνδυασμό. Κάντε το ένα σωστό και το άλλο λάθος και παίρνετε προφίλ που δεν συνδέεται πουθενά, ή κολλάει με τη σήραγγα ήδη σηκωμένη. Ορίστε και τα δύο ρητά αντί να εμπιστεύεστε μια προεπιλογή που επιλέχθηκε για άλλη υπηρεσία.

  • IKEv2 με MachineCertificate: ο πελάτης παρουσιάζει πιστοποιητικό υπολογιστή· ορίστε επίσης -EncryptionLevel Required.
  • SSTP με Eap: πρώτα σήραγγα TLS, μετά PEAP/MSCHAPv2 ή πιστοποιητικό μέσα στο EAP. Αυτό χρειάζεται το XML του βήματος 3.
  • SSTP, L2TP ή PPTP με MSChapv2, Chap ή Pap: απλό όνομα χρήστη και κωδικός, χωρίς blob EAP.
  • L2TP με MSChapv2 και -Lt2pPsk: το PSK καλύπτει το μισό IPsec, ο χρήστης καλύπτει το PPP· και τα δύο πρέπει να ταιριάζουν με τον διακομιστή.

Ένα splat κρατά τις τιμές σε ένα σημείο:

$p = @{
  Name                 = "Corp IKEv2"
  ServerAddress        = "vpn.example.com"
  TunnelType           = "Ikev2"
  AuthenticationMethod = "MachineCertificate"
  EncryptionLevel      = "Required"
  SplitTunneling       = $false
  DnsSuffix            = "corp.example.com"
}
Add-VpnConnection @p -PassThru

Το -PassThru επιστρέφει το αντικείμενο που μόλις έγραψε τα Windows, ώστε να το επιθεωρήσετε χωρίς δεύτερη κλήση. Αν το όνομα υπάρχει ήδη, το cmdlet αρνείται να εκτελεστεί· το -Force το αντικαθιστά, που είναι λάθος αντανακλαστικό σε φορητό παραγωγής, γιατί πετάει σιωπηλά ό,τι έχει ρυθμίσει κάποιος με το χέρι.

Βήμα 3: Παραδώστε σωστά το υλικό διαπιστευτηρίων

Οι κωδικοί, τα προκοινοποιημένα κλειδιά και τα blobs EAP είναι εκεί όπου αυτά τα script σπάνε συνήθως. Το -EapConfigXmlStream θέλει XmlDocument, όχι διαδρομή, οπότε διαβάστε και μετατρέψτε πρώτα το αρχείο. Αν περάσετε συμβολοσειρά, παίρνετε σφάλμα μετατροπής που μοιάζει με πρόβλημα σχήματος και κάνει τους ανθρώπους να ξαναγράφουν XML που ποτέ δεν ήταν λάθος.

$eap = [xml](Get-Content -Raw .\peap-mschapv2.xml)
Add-VpnConnection -Name "Corp SSTP" -ServerAddress "sstp.example.com" `
  -TunnelType Sstp -AuthenticationMethod Eap `
  -EapConfigXmlStream $eap -EncryptionLevel Required

Αυτό το XML δεν είναι κάτι που επινοείται από απόσπασμα blog. Ονομάζει τον τύπο μεθόδου EAP και τον εσωτερικό έλεγχο ταυτότητας, και η πύλη συγκρίνει και τα δύο με την πολιτική της. Μια ασύμβατη εσωτερική μέθοδος αποτυγχάνει αφού ολοκληρωθεί η χειραψία TLS, που μοιάζει ακριβώς με λάθος κωδικό και δεν είναι. Πάρτε το XML από όποιον διαχειρίζεται την πύλη, ή εξαγάγετέ το από προφίλ που ήδη λειτουργεί.

Για το IKEv2 το μισό του πιστοποιητικού είναι αναζήτηση στο χώρο αποθήκευσης. Το -MachineCertificateIssuerFilter παίρνει αντικείμενο πιστοποιητικού και τα Windows το χρησιμοποιούν για να βρουν χρησιμοποιήσιμο πιστοποιητικό πελάτη στο LocalMachine\My. Το πιστοποιητικό χρειάζεται ιδιωτικό κλειδί και αλυσίδα που εμπιστεύεται ο διακομιστής· όταν λείπει κάτι από τα δύο, ο έλεγχος αποτυγχάνει χωρίς χρήσιμη λεπτομέρεια, οπότε ελέγξτε πρώτα το χώρο:

Get-ChildItem Cert:\LocalMachine\My |
  Where-Object { $_.HasPrivateKey -and $_.NotAfter -gt (Get-Date) } |
  Select-Object Subject, Issuer, Thumbprint, NotAfter

Κρατήστε τα μυστικά έξω από το αρχείο script. Ένα PSK που περνιέται στη γραμμή εντολών ή ψήνεται σε .ps1 καταλήγει σε απομαγνητοφωνήσεις, αποθηκευμένες συνεδρίες και κοινά αποθετήρια, και το -RememberCredential αποθηκεύει προσωρινά τα διαπιστευτήρια χρήστη για αργότερα, μετατρέποντας μια δοκιμή μιας φοράς σε μόνιμη άδεια.

Βήμα 4: Αποφασίστε το εύρος πριν από την πρώτη εκτέλεση

Το ίδιο cmdlet γράφει σε δύο διαφορετικούς τηλεφωνικούς καταλόγους. Χωρίς το -AllUserConnection το προφίλ ανήκει σε εσάς και ζει κάτω από το %APPDATA%\Microsoft\Network\Connections\Pbk\rasphone.pbk. Με αυτό, από αναβαθμισμένη γραμμή εντολών, το προφίλ πηγαίνει στο %ProgramData%\Microsoft\Network\Connections\Pbk\rasphone.pbk και είναι ορατό σε κάθε λογαριασμό, μαζί με την οθόνη σύνδεσης.

Το εύρος δεν είναι καλλωπισμός. Ένα προφίλ για όλους τους χρήστες είναι αυτό που μπορεί να χρησιμοποιήσει λογαριασμός υπηρεσίας, προγραμματισμένη εργασία ή σενάριο πριν τη σύνδεση· ένα προφίλ ανά χρήστη είναι αόρατο και στα τρία. Τα αντικείμενα διαβάζονται επίσης διαφορετικά: το Get-VpnConnection απαριθμεί τις καταχωρίσεις του τρέχοντος χρήστη, το Get-VpnConnection -AllUserConnection αυτές όλου του μηχανήματος. Διαλέξτε ένα τώρα και αντιμετωπίστε μια μεταγενέστερη αλλαγή ως διαγραφή και επαναδημιουργία, όχι ως επεξεργασία:

# elevated prompt
Remove-VpnConnection -Name "Corp IKEv2" -Force
Add-VpnConnection -Name "Corp IKEv2" -ServerAddress "vpn.example.com" `
  -TunnelType Ikev2 -AuthenticationMethod MachineCertificate `
  -EncryptionLevel Required -AllUserConnection

Βήμα 5: Δοκιμάστε τι πρέπει πραγματικά να παραδώσει μια σήραγγα

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

rasdial "Corp IKEv2"
Get-VpnConnection -Name "Corp IKEv2" |
  Select-Object Name, ServerAddress, TunnelType, ConnectionStatus, SplitTunneling
Get-NetRoute -DestinationPrefix "0.0.0.0/0"

Οι δύο αποτυχίες που αναφέρουν οι χρήστες ενώ η κατάσταση λέει ακόμη Connected είναι το DNS και η δρομολόγηση. Αναλύστε ένα εσωτερικό όνομα και ελέγξτε ποιος διακομιστής απάντησε· ένα προφίλ χωρίς -DnsSuffix μπορεί να δημιουργήσει σήραγγα τέλεια και παρ' όλα αυτά να αποτυγχάνει σε κάθε αναζήτηση intranet. Έπειτα κοιτάξτε την προεπιλεγμένη διαδρομή: με απενεργοποιημένο split tunneling η διαδρομή 0.0.0.0/0 με τη χαμηλότερη μετρική πρέπει να δείχνει στη διεπαφή VPN, και με ενεργό μόνο τα προθέματα που περιμένετε. Αν και τα δύο φαίνονται σωστά και η κίνηση πεθαίνει, το πρόβλημα είναι πέρα από το προφίλ, στην πολιτική ή στο φίλτρο της πύλης.

Όταν η σύνδεση αποτυγχάνει εντελώς, ο κωδικός περιορίζει το βήμα στο οποίο πρέπει να επιστρέψετε:

  • 691: η πύλη απέρριψε τα διαπιστευτήρια. Επιστρέψτε στο βήμα 3, όχι στη σήραγγα.
  • 809: η χειραψία IKEv2 δεν ολοκληρώθηκε ποτέ. Ελέγξτε UDP 500 και 4500, και την εμπιστοσύνη στα πιστοποιητικά.
  • 789: το προκοινοποιημένο κλειδί L2TP/IPsec λείπει ή είναι λάθος.
  • 868: το όνομα διακομιστή δεν αναλύθηκε. Διορθώστε το DNS πριν επεξεργαστείτε το προφίλ.

Κρατήστε τη λειτουργική εντολή δίπλα στις ρυθμίσεις που κωδικοποιεί, ώστε ο επόμενος να μπορεί να ξαναχτίσει αντί να κάνει αντίστροφη μηχανική στο προφίλ από το περιβάλλον χρήστη. Αν πρέπει να ξαναχτίσετε, διαγράψτε την καταχώριση και δημιουργήστε την ξανά από τις ίδιες παραμέτρους· το μπάλωμα ενός μισοσυνδεδεμένου προφίλ αφήνει παλιές διαδρομές και κατάσταση ελέγχου ταυτότητας. Και αν το αρχείο δεν ήταν ποτέ γνήσιο, επιστρέψτε στον πελάτη που το κατέχει. Ένα .ovpn ντυμένο ως προφίλ IKEv2 δεν είναι εισαγωγή, είναι δελτίο υποστήριξης.

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