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

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

พร็อกซีเคลื่อนย้ายเฉพาะสิ่งที่มันเข้าใจ

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

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

ssh -D 1080 user@bastion
ssh -L 8443:fileserver.internal:443 user@bastion

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

ต้องมีใครสักคนแปลงชื่อ

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

curl แสดงการแบ่งอย่างชัดเจน: แฟล็กหนึ่งส่งชื่อโฮสต์ให้พร็อกซี อีกตัวแปลงชื่อในเครื่องก่อน ด้วยการแปลงในเครื่อง ชื่อภายในจะล้มเหลวก่อนที่จะแตะอุโมงค์ใด ๆ และข้อผิดพลาดโทษพร็อกซีในสิ่งที่จริง ๆ เป็นการตัดสินใจเรื่อง DNS

VPN ใช้เส้นทางที่สามโดยติดตั้งตัวแปลงส่วนตัวและโดเมนค้นหาคู่กับเส้นทาง สะดวก และสร้างภาพลวงที่คุ้นเคย: เส้นทางที่มีอยู่พร้อมตัวแปลงที่ไม่ตอบ ดูเหมือนอุโมงค์ที่ตายแล้ว ทั้งที่แพ็กเก็ตไปถึงอีกฝั่ง

เมื่อเครือข่ายอนุญาตทางออกเดียว

เครือข่ายองค์กรจำนวนมากอนุญาตการเชื่อมต่อออกภายนอกผ่านพร็อกซีเว็บที่ผ่านการรับรองเท่านั้น OpenVPN และ SSH ทำให้ทำงานที่นั่นได้ทั้งคู่ ตัวแรกโดยทำอุโมงค์การขนส่งของตัวเองผ่านพร็อกซี ตัวที่สองผ่านคำสั่งพร็อกซีที่รันตัวช่วย CONNECT ขนาดเล็ก

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

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

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

ที่อยู่ปลอมไม่ใช่หนึ่งในตัวเลือก

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

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

ตัดสินด้วยโปรโตคอลและชื่อ

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

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

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