Το διαχωρισμένο σας τούνελ εξαιρεί τον εκκινητή, όχι το παιχνίδι
Ένας εκκινητής ξεκινά ένα άλλο εκτελέσιμο για τον αγώνα, και αυτή η διεργασία έχει τις δικές της υποδοχές. Βρείτε την πραγματική διεργασία, αντιστοιχίστε το σωστό αναγνωριστικό και μετά δοκιμάστε.
Προσθέτετε τον εκκινητή στη λίστα εξαιρέσεων, η λήψη πηγαίνει από αργή σε γρήγορη και ο αγώνας εξακολουθεί να καταλήγει σε έναν απομακρυσμένο διακομιστή. Τίποτα δεν είναι χαλασμένο. Ο εκκινητής και το παιχνίδι είναι δύο διεργασίες με δύο σύνολα υποδοχών, και η εξαίρεση της μίας δεν λέει τίποτα για την άλλη. Η λήψη έγινε γρηγορότερη επειδή η λήψη ήταν η κίνηση του εκκινητή· ο αγώνας είναι η σύνδεση κάποιου άλλου, που άνοιξε ένα εκτελέσιμο που ο κανόνας σας δεν έχει δει ποτέ.
Ένας εγκαταστάτης, πολλές διεργασίες
Το σύγχρονο λογισμικό παιχνιδιών είναι ένας μικρός αστερισμός. Υπάρχει ένας πελάτης που σας συνδέει, ένας ενημερωτής που κατεβάζει περιεχόμενο, ένας εκκινητής που ξεκινά το παιχνίδι και ένα εκτελέσιμο του παιχνιδιού που μπορεί το ίδιο να δημιουργήσει μια δεύτερη διεργασία για την αντιμετώπιση απάτης ή για την επικάλυψη αντιστοίχισης αγώνων. Καθένα από αυτά μπορεί να κρατά τις δικές του συνδέσεις προς τους δικούς του προορισμούς.
Ένας κανόνας εξαίρεσης συνήθως ονομάζει ένα από αυτά. Ποιο ονομάζει εξαρτάται απολύτως από το αναγνωριστικό που υποστηρίζει ο πελάτης VPN, και αυτό είναι το μέρος που οι χρήστες σπάνια ελέγχουν. Μερικοί πελάτες αντιστοιχίζουν μια διαδρομή εκτελέσιμου, μερικοί ένα αναγνωριστικό πακέτου ή bundle, και μερικοί ένα όνομα διεργασίας που δύο άσχετα δυαδικά αρχεία μπορούν να μοιράζονται. Διαβάστε τον κανόνα πριν διαβάσετε τη λίστα διεργασιών, γιατί ο κανόνας περιορίζει ακόμη και αυτό που μπορείτε να εκφράσετε.
Το σύμπτωμα επομένως δεν είναι «το διαχωρισμένο τούνελ είναι χαλασμένο». Είναι «ο κανόνας καλύπτει μια διεργασία που δεν είναι αυτή που μεταφέρει την κίνηση που με ενδιαφέρει», το οποίο είναι μια πολύ στενότερη και πολύ πιο επισκευάσιμη δήλωση. Μόλις το πείτε έτσι, το επόμενο βήμα παύει να είναι εικασία.
Βρείτε τη διεργασία που κατέχει τη σύνδεση του αγώνα
Ξεκινήστε το παιχνίδι, μπείτε σε έναν αγώνα και κοιτάξτε ποιος κατέχει τις υποδοχές αντί για το τι υπάρχει στην οθόνη. Στα Windows η λίστα διεργασιών μαζί με ένα ερώτημα υποδοχών ανά διεργασία το απαντούν με δύο εντολές:
Get-Process | Where-Object { $_.ProcessName -match 'launcher|game|client' } | Select-Object Id,ProcessName,Path
Get-NetTCPConnection -State Established | Select-Object OwningProcess,RemoteAddress,RemotePort | Sort-Object OwningProcess
Η δεύτερη εντολή εκτυπώνει ένα αναγνωριστικό διεργασίας, όχι όνομα, οπότε ενώστε τις δύο εξόδους κατά αναγνωριστικό. Η γραμμή που ψάχνετε είναι αυτή της οποίας η απομακρυσμένη διεύθυνση ανήκει στην υπηρεσία του παιχνιδιού, και η διεργασία που την κατέχει είναι το εκτελέσιμο που πρέπει να ονομάσει ο κανόνας σας.
Στο Linux η ίδια ερώτηση απαιτεί μία εντολή ανά τύπο υποδοχής, και αξίζει να ελέγξετε και τις δύο, γιατί η σύνδεση του αγώνα μπορεί να είναι UDP ενώ όλα τα άλλα είναι TCP:
ss -tunp state established | grep -i game
ss -tunp | awk 'NR==1 || /udp/'
Αν το παιχνίδι τρέχει σε container ή σε επίπεδο συμβατότητας, η διεργασία που βρίσκετε μπορεί να είναι ένα shim και όχι το δυαδικό αρχείο που εγκαταστήσατε. Σε αυτή την περίπτωση το αναγνωριστικό που μετράει είναι αυτό που βλέπει ο πελάτης, το οποίο μπορεί να είναι η διαδρομή του shim, και καμία επεξεργασία του αρχικού αρχείου δεν θα το επηρεάσει.
Αντιστοιχίστε το αναγνωριστικό που υποστηρίζει ο πελάτης σας
Διαβάστε την τεκμηρίωση του πελάτη για τον κανόνα εξαίρεσης πριν προσθέσετε οτιδήποτε. Τα τρία συνηθισμένα μοντέλα συμπεριφέρονται διαφορετικά, και ένα από αυτά είναι παγίδα.
| Identifier | How it behaves | Failure mode |
|---|---|---|
| Executable path | Matches exactly the file at that path | Breaks when an update moves the binary |
| Process name | Matches any binary with that name | Too broad; catches unrelated software |
| Package or bundle id | Matches a signed application group | May include services you did not intend |
Οι κανόνες διαδρομής είναι οι πιο ακριβείς και οι πιο εύθραυστοι. Μια ενημέρωση του εκκινητή που μετακινεί το εκτελέσιμο αφήνει τον κανόνα να δείχνει σε ένα αρχείο που δεν εκτελείται πλέον, και το σύμπτωμα επιστρέφει χωρίς να αλλάζει τίποτα προφανές. Οι κανόνες πακέτου το επιβιώνουν, και μπορούν επίσης να καλύπτουν σιωπηλά βοηθητικές διεργασίες που δεν σκεφτήκατε ποτέ, κάτι που είναι είτε βολικό είτε ανησυχητικό ανάλογα με τον βοηθό.
Ό,τι κι αν υποστηρίζει ο πελάτης, μην προσθέτετε καταχωρήσεις για κάθε εκτελέσιμο που βρίσκετε. Μια λίστα που συναρμολογήθηκε με δοκιμές και λάθη μέχρι να δουλέψει μία συνεδρία δεν μπορεί να ελεγχθεί, και θα συσσωρεύει σιωπηλά εξαιρέσεις για άσχετο λογισμικό. Ονομάστε τη διεργασία που βρήκατε και γράψτε για τι ήταν.
Δοκιμάστε στον αγώνα, όχι σε μια λήψη
Η ταχύτητα λήψης του εκκινητή είναι η χειρότερη δυνατή δοκιμή, γιατί ασκεί ακριβώς τη διεργασία που ήταν ήδη εξαιρεμένη. Χρησιμοποιήστε αυτό που αποτύγχανε και ελέγξτε τη διαδρομή αντί για την οθόνη απόδοσης του ίδιου του παιχνιδιού:
ip route get 203.0.113.55
Get-NetTCPConnection -State Established | Where-Object RemotePort -eq 27015
Η πρώτη εντολή χρειάζεται τη διεύθυνση στην οποία επιλύθηκε ο διακομιστής του αγώνα, την οποία μπορεί να σας δώσει το αρχείο καταγραφής συνδέσεων του παιχνιδιού ή ο πελάτης σας. Αν η διαδρομή ονομάζει τη φυσική διεπαφή, ο κανόνας λειτουργεί. Η δεύτερη δείχνει αν υπάρχει καθόλου συνεδρία, κάτι που χωρίζει το «εξαιρεμένο αλλά ο διακομιστής είναι κάτω» από το «μη εξαιρεμένο».
Κρατήστε την περιοχή και το δίκτυο πρόσβασης σταθερά όσο δοκιμάζετε. Ένας αγώνας που προσγειώνεται σε διαφορετικό κέντρο δεδομένων κάθε φορά παράγει διαφορετικές διευθύνσεις, και θα καταλήξετε να κυνηγάτε έναν κινούμενο στόχο αντί να επικυρώνετε έναν κανόνα. Δύο εκτελέσεις με την ίδια διεύθυνση αξίζουν περισσότερο από δέκα με διαφορετικές.
Ελέγξτε ξανά μετά την επόμενη ενημέρωση
Κάθε κανόνας που βασίζεται σε διαδρομή έχει διάρκεια ζωής μετρημένη σε κύκλους ενημερώσεων. Όταν το παιχνίδι σταματήσει να σέβεται την εξαίρεση ένα μήνα αργότερα, το πρώτο που ελέγχετε είναι αν μετακινήθηκε το εκτελέσιμο, και το δεύτερο αν εμφανίστηκε δίπλα του μια νέα βοηθητική διεργασία.
Το μοντέλο εξαίρεσης εφαρμογών που τεκμηριώνει ένας πελάτης είναι μια λογική αναφορά για το πώς περιγράφονται αυτοί οι κανόνες, αν και οι λεπτομέρειες διαφέρουν μεταξύ προϊόντων. Διαβάστε το δικό σας, καταγράψτε το αναγνωριστικό που χρησιμοποιήσατε και σημειώστε την ημερομηνία. Αυτή η καταγραφή μετατρέπει ένα μυστήριο σε πεντάλεπτη διόρθωση την επόμενη φορά που ο εκκινητής θα κυκλοφορήσει ενημέρωση.
Αν ο πελάτης απλώς δεν μπορεί να εκφράσει το όριο που χρειάζεστε, μια εγκεκριμένη ευρύτερη πολιτική είναι καλύτερη από έναν σωρό μη τεκμηριωμένων εξαιρέσεων. Το ευρύ και κατανοητό νικά το στενό και λάθος, ειδικά όταν η στενή εκδοχή είναι αυτό που όλοι πιστεύουν ότι ισχύει.