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

ตั๋วมักอธิบายอะไร

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

การสังเกตทั้งสามแตกต่างกันในสิ่งที่พิสูจน์ได้ ไม่ใช่แค่ในสิ่งที่อธิบาย

ObservationWhat it describesWhat it cannot prove
An address on a local interfaceOne configured attachment: Wi-Fi, cellular or a tunnelThe source a remote site receives
A socket's local endpointThe binding used by that one connectionThe address after translation further along
The peer address at a serviceWhat arrived at that observation pointAny other interface on the phone

เก็บตารางนั้นไว้ข้างโค้ดที่เติมค่าเหล่านี้ลงในตั๋ว เพราะความสับสนส่วนใหญ่นี่คือการสลับคอลัมน์ ไม่ใช่ความผิดพลาดของเครือข่าย

การเรียกซ็อกเก็ตตอบอะไรได้และตอบอะไรไม่ได้

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

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

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

เลือกการสังเกตที่ตรงกับคำถาม

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

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

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

ชื่ออินเทอร์เฟซไม่ใช่ตัวตรวจจับ

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

ตั้งชื่อฟิลด์ตามการสังเกตที่มันเก็บ local_interface_address, socket_local_endpoint และ service_observed_source นั้นเงอะงะและไม่กำกวม และความไม่กำกวมคือสิ่งที่คุณต้องการเมื่อค่าไปอยู่ในตั๋วสนับสนุนในอีกหนึ่งสัปดาห์ คอลัมน์เดียวชื่อ device IP จะรวบรวมทั้งสามแล้วจากนั้นก็ถูกเชื่อถือราวกับว่ามันเป็นหนึ่งเดียว

เก็บตัวตนไว้นอกคอลัมน์ที่อยู่

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

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

จากนั้นเขียนว่าผลิตภัณฑ์ของคุณต้องแสดงที่อยู่ใดในสามอย่างจริง ๆ และลบอีกสองอย่างออกจากอินเทอร์เฟซ

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