อุโมงค์แยกของคุณยกเว้นตัวเรียกใช้ ไม่ใช่เกม
ตัวเรียกใช้เริ่มไฟล์เรียกใช้อีกไฟล์สำหรับการแข่งขัน และโปรเซสนั้นมีซ็อกเก็ตของตัวเอง ค้นหาโปรเซสจริง จับคู่ตัวระบุที่ถูกต้อง แล้วทดสอบ
คุณเพิ่มตัวเรียกใช้ในรายการยกเว้น การดาวน์โหลดกระโดดจากช้าเป็นเร็ว และการแข่งขันก็ยังไปลงบนเซิร์ฟเวอร์ไกลอยู่ดี ไม่มีอะไรเสีย ตัวเรียกใช้กับเกมเป็นสองโปรเซสที่มีชุดซ็อกเก็ตคนละชุด และการยกเว้นอันหนึ่งไม่ได้บอกอะไรเกี่ยวกับอีกอัน การดาวน์โหลดเร็วขึ้นเพราะการดาวน์โหลดเป็นทราฟฟิกของตัวเรียกใช้ ส่วนการแข่งขันเป็นการเชื่อมต่อของคนอื่นที่ถูกเปิดโดยไฟล์เรียกใช้ซึ่งกฎของคุณไม่เคยเห็น
ตัวติดตั้งเดียว หลายโปรเซส
ซอฟต์แวร์เกมสมัยใหม่เป็นกลุ่มดาวเล็ก ๆ มีไคลเอนต์ที่ลงชื่อเข้าใช้ ตัวอัปเดตที่ดึงเนื้อหา ตัวเรียกใช้ที่เริ่มเกม และไฟล์เรียกใช้ของเกมที่อาจสร้างโปรเซสที่สองเองสำหรับระบบป้องกันการโกงหรือชั้นจับคู่การแข่งขัน แต่ละตัวสามารถถือการเชื่อมต่อของตัวเองไปยังปลายทางของตัวเอง
กฎการยกเว้นมักระบุชื่อหนึ่งในนั้น การระบุว่าเป็นตัวไหนขึ้นอยู่กับตัวระบุที่ไคลเอนต์ VPN รองรับทั้งหมด และนั่นคือส่วนที่ผู้ใช้ไม่ค่อยตรวจสอบ อ่านกฎก่อนอ่านรายการโปรเซส เพราะกฎจำกัดสิ่งที่คุณแสดงออกได้ด้วย และควรรู้ด้วยว่ากฎนี้จำกัดอะไรไว้บ้าง
ดังนั้นอาการไม่ใช่ “อุโมงค์แยกเสีย” แต่เป็น “กฎครอบคลุมโปรเซสที่ไม่ใช่ตัวที่พาทราฟฟิกที่ฉันสนใจ” ซึ่งเป็นข้อความที่แคบกว่าและแก้ได้ง่ายกว่ามาก เมื่อพูดแบบนั้น ขั้นต่อไปก็ไม่ใช่การเดาอีก
หาโปรเซสที่เป็นเจ้าของการเชื่อมต่อการแข่งขัน
เริ่มเกม เข้าสู่การแข่งขัน แล้วดูว่าใครเป็นเจ้าของซ็อกเก็ต ไม่ใช่ดูว่ามีอะไรบนหน้าจอ บน 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
คำสั่งที่สองพิมพ์ ID โปรเซส ไม่ใช่ชื่อ ดังนั้นรวมผลลัพธ์ทั้งสองด้วย ID แถวที่คุณหาคือแถวที่ที่อยู่ระยะไกลเป็นของบริการเกม และโปรเซสที่เป็นเจ้าของคือไฟล์เรียกใช้ที่กฎของคุณต้องระบุชื่อ
บน Linux คำถามเดียวกันต้องใช้คำสั่งหนึ่งคำสั่งต่อชนิดซ็อกเก็ต และควรตรวจทั้งสอง เพราะการเชื่อมต่อการแข่งขันอาจเป็น UDP ขณะที่อย่างอื่นเป็น TCP:
ss -tunp state established | grep -i game
ss -tunp | awk 'NR==1 || /udp/'
ถ้าเกมทำงานในคอนเทนเนอร์หรือชั้นความเข้ากันได้ โปรเซสที่คุณพบอาจเป็น 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
คำสั่งแรกต้องใช้ที่อยู่ที่เซิร์ฟเวอร์การแข่งขันแปลงมา ซึ่งบันทึกการเชื่อมต่อของเกมหรือไคลเอนต์ของคุณให้ได้ ถ้าเส้นทางระบุอินเทอร์เฟซกายภาพ กฎก็ทำงาน คำสั่งที่สองแสดงว่ามีเซสชันอยู่หรือไม่ ซึ่งแยก “ยกเว้นแล้วแต่เซิร์ฟเวอร์ล่ม” ออกจาก “ไม่ได้ยกเว้น”
ตรึงภูมิภาคและเครือข่ายการเข้าถึงไว้ขณะทดสอบ การแข่งขันที่ไปลงศูนย์ข้อมูลอื่นทุกครั้งทำให้ได้ที่อยู่ต่างกัน และคุณจะไล่ตามเป้าหมายที่เคลื่อนที่แทนการตรวจสอบกฎ สองรอบด้วยที่อยู่เดียวกันมีค่ามากกว่าสิบรอบด้วยที่อยู่ต่างกัน
ตรวจซ้ำหลังการอัปเดตครั้งถัดไป
กฎที่อิงพาธทุกข้อมีอายุการใช้งานวัดเป็นรอบแพตช์ เมื่อเกมหยุดเคารพการยกเว้นในอีกหนึ่งเดือน สิ่งแรกที่ต้องตรวจคือไฟล์เรียกใช้ย้ายหรือไม่ และอย่างที่สองคือมีโปรเซสช่วยเหลือใหม่โผล่ขึ้นข้าง ๆ หรือไม่
โมเดลการยกเว้นแอปพลิเคชันที่ไคลเอนต์หนึ่งบันทึกไว้เป็นข้อมูลอ้างอิงที่สมเหตุสมผลสำหรับวิธีอธิบายกฎเหล่านี้ แม้รายละเอียดจะต่างกันระหว่างผลิตภัณฑ์ อ่านของตัวเอง บันทึกตัวระบุที่ใช้ และจดวันที่ บันทึกนั้นเองที่เปลี่ยนปริศนาให้เป็นการแก้ไขห้านาทีในครั้งถัดไปที่ตัวเรียกใช้ออกอัปเดต
ถ้าไคลเอนต์ไม่สามารถแสดงขอบเขตที่คุณต้องการได้จริง ๆ นโยบายที่กว้างกว่าซึ่งได้รับอนุมัติย่อมดีกว่ากองข้อยกเว้นที่ไม่มีเอกสาร กว้างและเข้าใจได้ชนะแคบและผิด โดยเฉพาะเมื่อเวอร์ชันแคบคือสิ่งที่ทุกคนเชื่อว่าบังคับใช้อยู่