ผมเชื่อมต่อไคลเอนต์ VPN บนแล็ปท็อป Windows 11 ไทล์เปลี่ยนเป็น Connected แชร์ไฟล์ภายในเปิดขึ้น และเว็บไซต์สาธารณะยังโหลดตรงจาก Wi-Fi ของออฟฟิศ การผสมกันนี้ดูเหมือนอุโมงค์ที่พัง แต่จริง ๆ แล้วเป็นผลลัพธ์ปกติของโปรไฟล์ที่ส่งทราฟฟิกบางส่วนผ่าน VPN และปล่อยส่วนที่เหลือไว้บนอะแดปเตอร์จริง การบังคับอุโมงค์เปลี่ยนเส้นทางเริ่มต้นที่ Windows เลือกใช้ แต่ไม่ได้ลบเส้นทางที่เจาะจงกว่า และไม่ได้สัญญาว่าทราฟฟิกจะหยุดเมื่อการเชื่อมต่อหลุด ต่อไปนี้คือลำดับที่ผมใช้เมื่อไคลเอนต์อ้างว่าครอบคลุม: สถานะไคลเอนต์ โปรไฟล์ที่บันทึกไว้ เส้นทางที่ใช้งาน ตัวแก้ชื่อ แล้วจึงเป็นโฟลว์จริง

เริ่มจากไคลเอนต์ แล้วเลิกเชื่อถือมัน

ไคลเอนต์เป็นจุดเริ่มที่ถูกต้องเพียงเพราะมันบอกว่าโปรไฟล์ใดทำงานอยู่ เปิดคุณสมบัติการเชื่อมต่อและบันทึกชื่อโปรไฟล์ที่แน่นอน ว่าสร้างสำหรับผู้ใช้ปัจจุบันหรือทุกคนบนเครื่อง และอะแดปเตอร์ใดปรากฏใน ncpa.cpl หลังเชื่อมต่อ บนแล็ปท็อปทดสอบของผมอะแดปเตอร์มีชื่อโปรไฟล์ ซึ่งทำให้อ่านเอาต์พุตเส้นทางได้ง่าย บนเครื่องอื่นมันปรากฏเป็นรายการ WAN Miniport และชื่อไม่ได้บอกอะไรคุณเลย

สิ่งที่ไคลเอนต์บอกคุณไม่ได้คือความครอบคลุม ไทล์ที่เชื่อมต่ออยู่อธิบายสถานะของอุโมงค์ ไม่ใช่บัญชีปลายทาง ไคลเอนต์ของบุคคลที่สามก็เก็บการกำหนดค่าของตัวเองไว้ ดังนั้นโปรไฟล์ Windows แท้ และทุกคุณสมบัติที่คุณจะอ่านจากมัน อาจไม่เกี่ยวข้องกับสิ่งที่ไคลเอนต์นั้นติดตั้งไว้ หาก VPN มาจาก AnyConnect, OpenVPN GUI, WireGuard หรือเอเจนต์ของผู้จำหน่าย การตรวจสอบ PowerShell ด้านล่างมักใช้ไม่ได้ และคุณควรอ่านการตั้งค่า split-tunnel และการกำหนดเส้นทางของไคลเอนต์นั้นแทน

อ่านโปรไฟล์ที่บันทึกไว้ ไม่ใช่ไทล์

สำหรับโปรไฟล์ Windows แท้ (IKEv2, L2TP, SSTP หรือโปรไฟล์ที่ MDM ผลัก) การตัดสินใจ split-tunnel ที่บันทึกไว้เป็นคุณสมบัติเดียว:

Get-VpnConnection -Name 'Office' | Select-Object Name, ServerAddress, SplitTunneling, DnsSuffix

เพิ่ม -AllUserConnection เมื่อโปรไฟล์ถูกสร้างสำหรับทุกคนบนอุปกรณ์ หากไม่มี คุณกำลังอ่านรายชื่อของผู้ใช้ปัจจุบัน ซึ่งอาจว่างเปล่าหรือมีรายการอื่นที่ชื่อคล้ายกัน ค่า False ใน SplitTunneling หมายความว่าโปรไฟล์ถูกบันทึกเป็นอุโมงค์เต็มรูปแบบ: Windows ติดตั้งเส้นทางเริ่มต้นผ่านอะแดปเตอร์ VPN True หมายถึง split tunnel และความครอบคลุมจะขึ้นอยู่กับเส้นทางและกฎการแก้ชื่อที่โปรไฟล์นั้นผลักทั้งหมด

มองค่านั้นเป็นการกำหนดค่า ไม่ใช่การสังเกต มันบันทึกว่าโปรไฟล์ขออะไรตอนเชื่อมต่อ Windows อาจลงเอยด้วยเส้นทางที่ใช้งานต่างออกไป เพราะเส้นทางที่เจาะจงกว่าของอินเทอร์เฟซอื่น การตั้งค่านโยบาย หรือรายการที่ตกค้างจากการเชื่อมต่อก่อนหน้า ดังนั้นค่าบูลีนเพียงอย่างเดียวไม่เคยตัดสินคำถาม

เปรียบเทียบค่าที่บันทึกไว้กับตารางเส้นทางที่ใช้งาน

หลังเชื่อมต่อ ให้แสดงรายการเส้นทางบนอะแดปเตอร์อุโมงค์แทนการเลื่อนทั้งตาราง

$vpn = Get-NetAdapter | Where-Object InterfaceDescription -match 'VPN|WAN Miniport'
Get-NetRoute -InterfaceIndex $vpn.ifIndex | Sort-Object DestinationPrefix
Find-NetRoute -RemoteIPAddress 10.20.4.15 | Select-Object -First 1

Find-NetRoute คือครึ่งที่มีประโยชน์ มันตอบคำถามที่ไคลเอนต์ไม่เคยตอบ: สำหรับปลายทางนี้ Windows จะใช้อินเทอร์เฟซใดและที่อยู่ต้นทางใดจริง ๆ เรียกใช้กับโฮสต์ภายใน โฮสต์สาธารณะ และสิ่งที่คุณถือเป็นข้อยกเว้นโดยเจตนา โปรไฟล์อุโมงค์เต็มควรแสดงอินเทอร์เฟซอุโมงค์สำหรับที่อยู่สาธารณะ โปรไฟล์ split tunnel มักแสดงอะแดปเตอร์จริงตรงนั้น ขณะที่พรีฟิกซ์ภายในยังแก้ไปยัง VPN

กับดักสองอย่างอธิบายรายงาน «มันกำหนดเส้นทางผิดทาง» ส่วนใหญ่ พรีฟิกซ์ที่เจาะจงที่สุดชนะเสมอ ดังนั้น /24 บนอะแดปเตอร์จริงจึงชนะเส้นทางเริ่มต้นบน VPN ไม่ว่าค่าเมตริกของอุโมงค์จะต่ำเพียงใด เมตริกตัดสินเฉพาะค่าเสมอกันระหว่างเส้นทางของพรีฟิกซ์เดียวกัน และ IPv4 กับ IPv6 ถูกตัดสินแยกกัน: โปรไฟล์ที่ครอบ 0.0.0.0/0 อาจทิ้ง IPv6 ไว้บนลิงก์ท้องถิ่น ซึ่งทำให้ไซต์ dual-stack ดูเหมือนถูกอุโมงค์เพียงครึ่งเดียว ตรวจสอบ Get-NetRoute -AddressFamily IPv6 ก่อนสรุปว่าอุโมงค์ปกติ

What you seeMost likely causeCheck next
Public traffic leaves the physical adapter while SplitTunneling reads FalseA more specific route on that adapter wins over the tunnel defaultFind-NetRoute for the exact destination, then look for a /24 or host route on the physical interface
Internal name fails, internal IP worksNo NRPT rule for that namespace, or a broader rule matches firstGet-DnsClientNrptPolicy and the namespace order
A dual-stack site opens directly while IPv4 uses the tunnelThe profile covers only the IPv4 default routeThe IPv6 route table on both interfaces
Routes look right but one app still goes directThe app uses its own proxy, or the client keeps a per-app listThe app's proxy settings and the client's application list

ตรวจสอบการแก้ชื่อแยกต่างหากด้วย NRPT

ชื่อภายในที่ล้มเหลวในขณะที่ที่อยู่ IP ภายในใช้งานได้ชี้ไปที่นโยบายของตัวแก้ชื่อ ไม่ใช่การกำหนดเส้นทาง Windows ตัดสิน DNS ต่อเนมสเปซผ่านตารางนโยบายการแก้ชื่อ ซึ่งเป็นอิสระจากตารางเส้นทาง:

Get-DnsClientNrptPolicy -Effective | Select-Object Namespace, NameServers
Get-DnsClientServerAddress -InterfaceIndex $vpn.ifIndex

เมื่อกฎตรงกับ *.corp.example คำค้นสำหรับเนมสเปซนั้นจะไปยังเซิร์ฟเวอร์ DNS ของอุโมงค์ แม้เส้นทางข้อมูลไปยังเซิร์ฟเวอร์เหล่านั้นในโหมด split tunnel จะอยู่บนอะแดปเตอร์จริง นั่นคือการออกแบบ และนั่นคือเหตุผลที่การทดสอบเบราว์เซอร์ที่เปิดไซต์สาธารณะไม่ได้บอกอะไรเกี่ยวกับชื่อภายใน หากอะแดปเตอร์แสดงเซิร์ฟเวอร์ที่คาดไว้แต่การค้นยังไปที่อื่น ให้เปรียบเทียบลำดับกฎ NRPT และตรวจสอบว่าเนมสเปซที่เจาะจงกว่าตรงก่อนหรือไม่

ตรวจสอบโฟลว์ แล้วตัดสินว่าคุณขออะไรจริง ๆ

ไล่ปลายทางตามลำดับคงที่เพื่อให้ผลลัพธ์เทียบกันได้ระหว่างเครื่อง: ที่อยู่สาธารณะ ที่อยู่ภายใน ชื่อภายใน และข้อยกเว้นโดยเจตนาหนึ่งรายการ เช่น เครื่องพิมพ์ท้องถิ่นหรือวิดีโอคอล บันทึกอินเทอร์เฟซและที่อยู่ต้นทางที่ Find-NetRoute คืนค่าสำหรับแต่ละรายการ หลังการเปลี่ยนนโยบายใด ๆ ให้เชื่อมต่อใหม่และทำการตรวจทั้งสี่ซ้ำ ตารางเส้นทางหลังการเชื่อมต่อใหม่คือหลักฐานเดียวว่าโปรไฟล์ใหม่มีผล

จากนั้นแยกการกำหนดเส้นทางออกจากการบังคับใช้ การบังคับอุโมงค์เลือกอุโมงค์สำหรับทราฟฟิกที่ครอบคลุมขณะที่อุโมงค์ยังขึ้นอยู่ ไม่ใช่ kill switch หากข้อกำหนดคือไม่มีสิ่งใดออกจากเครื่องเมื่ออุโมงค์ล่ม สิ่งนั้นต้องมาจากการออกแบบที่บล็อก: โปรไฟล์ไฟร์วอลล์ที่ผูกกับสถานะอุโมงค์ โปรไฟล์เปิดตลอดพร้อมตัวกรองทราฟฟิก หรือตัวเลือกปิดเมื่อล้มเหลวของไคลเอนต์ผู้จำหน่ายเอง การบังคับอุโมงค์ยังต้องปล่อยให้ที่อยู่ของเซิร์ฟเวอร์ VPN เองเข้าถึงได้นอกอุโมงค์ และการบล็อกมันในนามของ «บังคับทุกอย่าง» เป็นวิธีที่เชื่อถือได้ในการล็อกตัวเองออกจากการเชื่อมต่อที่คุณพยายามบังคับ

ก่อนเปลี่ยนอะไร ให้ไล่รายการนี้ ทุกรายการที่ล้มเหลวจะทำให้เห็นว่าปัญหาจริงอยู่ที่ใดแคบลง

  • ยืนยันชื่อและขอบเขตโปรไฟล์แล้ว ใช้ -AllUserConnection สำหรับโปรไฟล์ทั้งเครื่อง
  • อ่าน SplitTunneling แล้วและถือเป็นการกำหนดค่า ไม่ใช่หลักฐานความครอบคลุม
  • แสดงรายการเส้นทางของอะแดปเตอร์อุโมงค์แยกสำหรับ IPv4 และ IPv6
  • เรียกใช้ Find-NetRoute สำหรับปลายทางสาธารณะหนึ่ง ภายในหนึ่ง และข้อยกเว้นหนึ่ง
  • ตรวจสอบกฎ NRPT ก่อนตำหนิเส้นทางสำหรับความล้มเหลวของชื่อ
  • อ่านข้อกำหนดการบล็อกอีกครั้ง: การกำหนดเส้นทางที่ต้องการไม่เหมือนกับการบล็อกที่บังคับใช้

การตัดสินใจเรื่องอุโมงค์เต็มหรือ split เป็นของเจ้าของโปรไฟล์ และบันทึกการกำหนดเส้นทางของ Microsoft อธิบายพฤติกรรมที่ Windows ใช้งานเมื่อโปรไฟล์ตั้งค่าไว้ Microsoft: อุโมงค์แบบบังคับและ split คือเอกสารอ้างอิงที่ผมเปิดไว้ขณะอ่านเอาต์พุต

บทความที่เกี่ยวข้อง