ทำไมแอป iPhone ของคุณจึงแสดง IP หนึ่ง ขณะที่เซิร์ฟเวอร์บันทึกอีกอัน
ที่อยู่ของอินเทอร์เฟซ จุดปลายทางของซ็อกเก็ต และแหล่งที่เซิร์ฟเวอร์บันทึก ตอบคำถามที่แตกต่างกัน VPN เพิ่มบริบท มันไม่ได้ทำให้เป็นตัวเลขเดียว
มีตั๋วสนับสนุนเข้ามาโดยบอกว่าแอปแสดงที่อยู่หนึ่ง ขณะที่เซิร์ฟเวอร์บันทึกอีกที่อยู่หนึ่ง แล้วถามว่าอันไหนโกหก ทั้งคู่ไม่โกหก นี่คือการสังเกตสองครั้งของสองสิ่งที่แตกต่างกัน ที่อยู่ที่ผูกกับอินเทอร์เฟซ ที่อยู่ที่ผูกกับซ็อกเก็ต และที่อยู่ต้นทางที่บริการระยะไกลเห็น ตอบคำถามสามข้อที่แยกจากกัน VPN เพิ่มบริบทเครือข่ายให้โทรศัพท์และ ไม่ได้ยุบทั้งสามนั้นเป็นตัวเลขเดียวสำหรับทั้งอุปกรณ์ อ่านชื่อฟิลด์ในตั๋วก่อนอ่านที่อยู่
ตั๋วมักอธิบายอะไร
ลองนึกถึงโทรศัพท์ที่ต่อ Wi-Fi และมีอุโมงค์ทำงานอยู่ อินเทอร์เฟซ Wi-Fi มีที่อยู่ LAN อินเทอร์เฟซอุโมงค์มีที่อยู่ภายในที่ได้รับจัดสรร และคำขอที่ออกผ่านอุโมงค์ไปถึงบริการสาธารณะจากแหล่งใดก็ตามที่รอดจากการแปลงใด ๆ ระหว่างทาง แอปที่พิมพ์ที่อยู่ภายในและเซิร์ฟเวอร์ที่บันทึกแหล่งที่แปลงแล้วต่างรายงานอย่างถูกต้อง และสองค่านั้นจะไม่มีวันตรงกัน
การสังเกตทั้งสามแตกต่างกันในสิ่งที่พิสูจน์ได้ ไม่ใช่แค่ในสิ่งที่อธิบาย
| Observation | What it describes | What it cannot prove |
|---|---|---|
| An address on a local interface | One configured attachment: Wi-Fi, cellular or a tunnel | The source a remote site receives |
| A socket's local endpoint | The binding used by that one connection | The address after translation further along |
| The peer address at a service | What arrived at that observation point | Any other interface on the phone |
เก็บตารางนั้นไว้ข้างโค้ดที่เติมค่าเหล่านี้ลงในตั๋ว เพราะความสับสนส่วนใหญ่นี่คือการสลับคอลัมน์ ไม่ใช่ความผิดพลาดของเครือข่าย
การเรียกซ็อกเก็ตตอบอะไรได้และตอบอะไรไม่ได้
ในระดับ API getsockname รายงานจุดปลายทางภายในที่ผูกกับซ็อกเก็ตหนึ่งอยู่ขณะนี้ สำหรับซ็อกเก็ตที่เชื่อมต่อแล้ว นั่นคือแหล่งที่เคอร์เนลเลือกสำหรับการเชื่อมต่อนั้น ซึ่งเฉพาะเจาะจงกว่ารายการอินเทอร์เฟซใด ๆ อยู่แล้ว นี่ไม่ใช่การค้นหาที่อยู่สาธารณะ และการเรียกบนซ็อกเก็ตที่ยังไม่ผูกแทบไม่บอกอะไรคุณเลย สิ่งที่มันคืนค่าอาจถูกเขียนใหม่ในภายหลังระหว่างทาง ดังนั้นการสังเกตของบริการเองเท่านั้นที่มีอำนาจเกี่ยวกับสิ่งที่บริการได้รับ
บนแพลตฟอร์ม Apple ด้านอินเทอร์เฟซมีพื้นผิวแยกต่างหาก การตั้งค่าอุโมงค์แสดงที่อยู่ที่จัดสรรให้อินเทอร์เฟซอุโมงค์ การอ่านค่าเหล่านั้นบอกว่าอุโมงค์ถูกกำหนดค่าอย่างไร และไม่บอกว่าคำขอที่กำหนดใช้เส้นทางใด เพราะการกำหนดเส้นทางและกฎต่อแอปเป็นตัวตัดสินสำหรับแต่ละการเชื่อมต่อ
อุโมงค์แบบแยกส่วนทำให้ช่องว่างนั้นมองเห็นได้ คำขอหนึ่งอาจออกผ่านอุโมงค์ ขณะที่คำขอถัดไปซึ่งมุ่งไปยังปลายทางหรือตระกูลที่อยู่คนละแบบอาจไม่ออก ดังนั้นผลลัพธ์สองรายการจากแอปเดียวกันที่ห่างกันไม่กี่วินาทีจึงซื่อสัตย์และต่างกันได้
เลือกการสังเกตที่ตรงกับคำถาม
เลือกอย่างตั้งใจแทนการวัดทุกอย่าง สำหรับสิ่งที่แบ็กเอนด์เห็น ให้บันทึกแหล่งที่มาในแบ็กเอนด์ และที่ซึ่งมีพร็อกซีย้อนกลับอยู่ข้างหน้า ให้อ่านที่อยู่ไคลเอนต์จากเฮดเดอร์ส่งต่อที่การติดตั้งของคุณตั้งค่าจริง ไม่ใช่จากสิ่งที่ไคลเอนต์ส่งมา
หากต้องการรู้ว่าอุโมงค์ถูกกำหนดค่าไว้หรือไม่ ให้อ่านอินเทอร์เฟซ หากต้องการรู้ว่าทราฟฟิกของแอปนี้ใช้มันหรือไม่ ให้ส่งทราฟฟิกจากแอปนั้นไปยังปลายทางที่คุณควบคุมและเปรียบเทียบแหล่งที่มาที่ปลายทั้งสอง
กฎต่อแอปสมควรได้ประโยคของตัวเอง ผลลัพธ์ของเบราว์เซอร์เป็นหลักฐานเกี่ยวกับเบราว์เซอร์นั้น และอุโมงค์แบบจัดการต่อแอปสามารถวางสองแอปบนโทรศัพท์เครื่องเดียวกันไว้บนเส้นทางต่างกันในขณะเดียวกัน การตรวจสอบความครอบคลุมหมายถึงการส่งทราฟฟิกจากแอปที่เกี่ยวข้อง ในตระกูลที่อยู่ที่เกี่ยวข้อง
ชื่ออินเทอร์เฟซไม่ใช่ตัวตรวจจับ
อย่าใช้ชื่ออินเทอร์เฟซเป็นตัวตรวจสอบ VPN เช่นกัน ชื่อเหล่านั้นไม่ใช่สัญญาสาธารณะ และโทรศัพท์หนึ่งเครื่องอาจมีการเชื่อมต่อหลายอย่างขณะที่มีเพียงอย่างเดียวที่พาคำขอของคุณ
ตั้งชื่อฟิลด์ตามการสังเกตที่มันเก็บ local_interface_address, socket_local_endpoint และ service_observed_source นั้นเงอะงะและไม่กำกวม และความไม่กำกวมคือสิ่งที่คุณต้องการเมื่อค่าไปอยู่ในตั๋วสนับสนุนในอีกหนึ่งสัปดาห์ คอลัมน์เดียวชื่อ device IP จะรวบรวมทั้งสามแล้วจากนั้นก็ถูกเชื่อถือราวกับว่ามันเป็นหนึ่งเดียว
เก็บตัวตนไว้นอกคอลัมน์ที่อยู่
ทางออก VPN ที่ใช้ร่วมกันไม่ใช่ตัวตนของผู้ใช้ และที่อยู่ส่วนตัวไม่ใช่ข้อมูลรับรองการเข้าถึง ทั้งสองอธิบายเส้นทางไม่ใช่บุคคล และการถืออย่างใดอย่างหนึ่งเป็นการพิสูจน์ตัวตนจะเปลี่ยนอุบัติเหตุการกำหนดเส้นทางให้เป็นการตัดสินใจอนุญาต
เมื่อมีคนถามว่าโทรศัพท์มีที่อยู่ใด คำตอบที่มีประโยชน์คือคำถามว่าเป็นการเชื่อมต่อใดและผู้สังเกตคนใด นิยามของ getsockname น่าอ้างอิงสำหรับกรณีตรงกลาง เพราะมันตัดสินคำถามเรื่องซ็อกเก็ตโดยไม่แสร้งว่าตัดสินอีกสองข้อ
จากนั้นเขียนว่าผลิตภัณฑ์ของคุณต้องแสดงที่อยู่ใดในสามอย่างจริง ๆ และลบอีกสองอย่างออกจากอินเทอร์เฟซ