Mac VPN กับพร็อกซี PAC: สองการตัดสินใจ ไม่ใช่การตั้งค่าเดียว
ไฟล์ PAC เลือกพร็อกซีต่อคำขอ ขณะที่ VPN เลือกเส้นทาง ติดตามการดาวน์โหลด การเลือก และซ็อกเก็ต และเลิกอ่าน DIRECT ว่าเป็นออฟไลน์
Mac ของคุณดาวน์โหลดสคริปต์นโยบายแล้วถามสคริปต์นั้นว่าคำขอควรใช้ตัวกลางใด ขณะที่อุโมงค์เพียงตัดสินว่าจะไปถึงฮอปที่เลือกได้อย่างไร คำตอบทั้งสองลงเอยที่ซ็อกเก็ตเดียวกัน คำขอที่ล้มเหลวหลังจากทั้งสองสำเร็จจึงดูเหมือนความผิดพลาดเดียวทั้งที่มีสอง การแยกการดาวน์โหลดออกจากการเลือก และการเลือกออกจากเส้นทาง คือส่วนใหญ่ของงานในตั๋วเหล่านี้ ลำดับด้านล่างทำตามสิ่งที่ macOS ทำจริง พร้อมการตรวจสอบที่ทำให้แต่ละขั้นมองเห็นได้
จุดที่ที่อยู่ PAC กับพร็อกซีแยกจากกัน
ที่อยู่อย่าง https://config.corp.example/proxy.pac ระบุเอกสารที่จะดาวน์โหลด และเอกสารนั้นระบุเซิร์ฟเวอร์ที่จะส่งทราฟฟิกผ่าน การวาง URL ลงในช่องโฮสต์ของพร็อกซีขอให้ไคลเอนต์เปิดการเชื่อมต่อพร็อกซีไปยังเซิร์ฟเวอร์ไฟล์ที่ไม่เคยรอการเชื่อมต่อแบบนั้น ภายในไฟล์มีฟังก์ชันที่ไคลเอนต์เรียกต่อคำขอ และค่าที่ส่งคืนคือฮอปถัดไปสำหรับปลายทางเดียวนั้น การอ้อมนี้อธิบายว่าเหตุใดเครื่องสองเครื่องบนบริการเครือข่ายเดียวกันจึงทำงานต่างกันได้แม้ทั้งคู่มี URL ที่ถูกต้อง มันยังอธิบายว่าเหตุใดการเปลี่ยนนโยบายจึงมีผลโดยไม่มีใครแตะพร็อกซีเอง
อ่านสคริปต์ก่อนตีความสิ่งใดทางปลายน้ำ เพราะกฎภายในนั้นพาข้อยกเว้นขององค์กรและลำดับที่ใช้ ช่วงกว้างช่วงต้นสามารถบดบังส่วนต่อท้ายภายในที่มาทีหลัง และโฮสต์ที่ควรข้ามพร็อกซีอย่างชัดเจนก็ยังใช้มันอยู่ เมื่อมีคนยืนยันว่านโยบายผิด สคริปต์คือที่เดียวที่ข้อกล่าวอ้างนั้นถูกตัดสิน
สคริปต์ต้องถูกดึงมาก่อนจึงจะตัดสินสิ่งใดได้
การดาวน์โหลดนโยบายต้องมีชื่อที่แปลงแล้วและเส้นทางไปยังสิ่งที่ให้บริการไฟล์ และอุโมงค์ที่เชื่อมต่ออยู่ไม่ได้ยืนยันทั้งสองอย่าง หากโฮสต์แปลงได้ผ่าน DNS ส่วนตัวเท่านั้น ตัวแปลงที่ใช้อยู่ในขณะนั้นเป็นตัวตัดสินว่าการดาวน์โหลดจะเริ่มได้หรือไม่ หากโฮสต์อยู่ในช่วงส่วนตัว เส้นทางต้องมีจากเครื่องนี้ ไม่ใช่จากแล็ปท็อปของเพื่อนร่วมงาน สำเนาที่แคชไว้ในเซสชันก่อนหน้าซ่อนทั้งหมดนี้จนกว่าแคชจะหมดอายุหรือเครื่องรีสตาร์ท
ทำการตรวจสอบสามข้อด้านล่างตามลำดับและหยุดที่ความล้มเหลวแรก เพราะแต่ละขั้นไม่ได้มีสาเหตุร่วมกัน เมื่อรวมกันแล้วจะบอกว่านโยบายถูกกำหนดค่าไว้หรือไม่ เข้าถึงได้หรือไม่ และส่งคืนอะไร
scutil --proxy
networksetup -getautoproxyurl "Wi-Fi"
curl -sS -o /dev/null -w "%{http_code}\n" https://config.corp.example/proxy.pac
คำสั่งแรกพิมพ์พจนานุกรมพร็อกซีของบริการที่ใช้งานอยู่ รวมถึง URL การกำหนดค่าอัตโนมัติใด ๆ ที่ระบบถืออยู่ คำสั่งที่สองรายงาน URL ที่ผูกกับบริการที่ระบุชื่อหนึ่งบริการ ซึ่งสำคัญบนแล็ปท็อปที่ย้ายระหว่าง Wi-Fi และ Ethernet คำสั่งที่สามดึงไฟล์โดยไม่เรนเดอร์ ทำให้ 404 การหมดเวลา และความล้มเหลวของตัวแปลงยังแยกออกจากกันได้ หากคำสั่งสุดท้ายคืนสคริปต์ในขณะที่แอปยังล้มเหลว ปัญหาได้ผ่านการดึงไปแล้ว
สิ่งที่คำตอบ DIRECT ข้ามไปจริง ๆ
ข้อกำหนด PAC ให้คำศัพท์เล็ก ๆ แก่ไคลเอนต์ และ DIRECT คือคำหนึ่งในนั้น คำนั้นบอกไคลเอนต์ให้ข้ามพร็อกซีสำหรับคำขอนั้น และไม่พูดอะไรเกี่ยวกับอินเทอร์เฟซที่ซ็อกเก็ตจะใช้หลังจากนั้น ซ็อกเก็ตตรงบนอุโมงค์เต็มยังคงออกผ่าน VPN และยังคงแสดงที่อยู่ทางออกของอุโมงค์ให้ปลายทางเห็น
การอ่าน DIRECT ว่าเป็นภายนอก VPN คือความผิดพลาดที่ส่งคนไปยังแผงการตั้งค่าที่ผิด ภาพตรงข้ามก็พบได้บ่อยเช่นกัน เพราะพร็อกซีส่วนตัวเข้าถึงได้ผ่านเส้นทางแยกในขณะที่เครื่องที่เหลืออยู่นอกอุโมงค์ สิ่งที่ปลายทางรายงานในตอนนั้นเป็นของทางออกของพร็อกซีเอง ซึ่งอาจอยู่ในอีกประเทศ การเขียนความคาดหวังสำหรับโฮสต์ภายในหนึ่งเครื่องและโฮสต์สาธารณะหนึ่งเครื่องจะเปิดเผยเรื่องนี้อย่างรวดเร็ว เพราะสคริปต์มักตอบสองอย่างนั้นต่างกัน เมื่อรู้ว่าฮอปใดสร้างที่อยู่ รายงานก็ไม่ลึกลับอีกต่อไป
ความล้มเหลวสามอย่างที่ปรากฏเป็นหน้าข้อผิดพลาดเดียว
นโยบายอาจดาวน์โหลดไม่สำเร็จ พร็อกซีที่เลือกอาจเข้าถึงไม่ได้ และคำขอที่มาถึงบริการอาจยังถูกปฏิเสธที่นั่น ทั้งสามมาถึงเป็นการหมดเวลาหรือหน้าข้อผิดพลาดทั่วไป และไม่มีอันใดระบุขั้นที่พัง การบันทึกการตัดสินใจไว้ข้างข้อผิดพลาดคือสิ่งที่แยกออกจากกัน การทดสอบสองอย่างด้านล่างทดสอบฮอปที่สคริปต์เลือก อย่างละหนึ่งสำหรับแต่ละสาขาที่มันสามารถส่งคืนได้
curl -v --max-time 8 http://proxy.corp.example:8080/
curl -v --max-time 8 https://intranet.corp.example/
การเชื่อมต่อที่สมบูรณ์ไปยังพร็อกซีย้ายคำถามไปที่การพิสูจน์ตัวตนหรือนโยบายของพร็อกซีเอง ซึ่งมีเจ้าของต่างกัน การเชื่อมต่อที่สมบูรณ์ไปยังโฮสต์ภายในโดยไม่มีพร็อกซีในเส้นทางตัดเส้นทางออกและชี้ไปที่นโยบาย คำสั่งทั้งสองเพิกเฉยต่อพจนานุกรมพร็อกซีของ macOS เว้นแต่เชลล์จะส่งออกตัวแปรพร็อกซี ดังนั้นล้างค่าเหล่านั้นก่อน การทดสอบทั้งสองไม่ได้พิสูจน์อีกอัน นั่นคือเหตุผลที่หน้าข้อผิดพลาดเดียวทำให้เข้าใจผิดได้นาน
สิ่งที่ต้องส่งมอบพร้อมตั๋ว
ส่งบริการเครือข่ายที่ใช้งานอยู่ URL ของ PAC ผลการประเมินสำหรับโฮสต์ที่ล้มเหลว และขั้นที่ข้อผิดพลาดปรากฏ สี่อย่างนี้ช่วยให้คนถัดไปสร้างการตัดสินใจซ้ำได้แทนที่จะเดาว่าชั้นใดเกี่ยวข้อง เพิ่มสถานะอุโมงค์ ณ เวลาทดสอบ เพราะผลลัพธ์ที่เก็บไว้ก่อนการเชื่อมต่อใหม่นั้นเก่าแล้ว เก็บการแก้ไขสคริปต์ไว้ด้วย เพราะไฟล์นโยบายเปลี่ยนโดยไม่แจ้ง และคำตอบเมื่อวานอาจใช้ไม่ได้แล้ว
บันทึกว่าไคลเอนต์ทำงานอย่างไรเมื่อดึงสคริปต์ไม่ได้ เพราะการใช้งานแตกต่างกันและการตัดสินใจเรื่องพร็อกซีไม่ใช่สวิตช์ปิดทั้งอุปกรณ์ บางตัวถอยกลับไปใช้การเชื่อมต่อตรงและบางตัวล้มเหลวแบบปิด และความต่างนี้เปลี่ยนว่าการขัดข้องดูเหมือนพร็อกซีเสียหรือนโยบายที่ทำงานอยู่ ยืนยันพฤติกรรมสำหรับไคลเอนต์และเวอร์ชันที่แน่นอนก่อนพึ่งพามันระหว่างเหตุการณ์