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

สำหรับบิลด์ socat ที่ให้ SOCKS4A การจัดวางตัวอย่างคือ

socat TCP4-LISTEN:9443,bind=127.0.0.1,reuseaddr,fork \
  SOCKS4A:127.0.0.1:service.example.net:443,socksport=1080

ปลายทาง SOCKS คือพอร์ตภายใน 1080 อะแดปเตอร์รับฟังที่พอร์ตภายใน 9443 และขอจากปลายทางนั้น service.example.net:443 ค่าเหล่านี้เป็นค่าตัวอย่าง ไม่ใช่การติดตั้งบริการที่สมบูรณ์

อะแดปเตอร์มีเป้าหมายคงที่หนึ่งเดียว

ทุกการเชื่อมต่อ TCP ที่รับเข้ามาจะขอใช้บริการเดียวกัน แอปพลิเคชันที่เชื่อมต่อกับ 9443 ส่งไบต์โปรโตคอลปกติของตน และ socat จัดการการเจรจา SOCKS4A การส่งคำขอ HTTP CONNECT ใหม่ไปยัง 9443 จะไม่เลือกปลายทางอื่น—แต่จะส่งไบต์เหล่านั้นต่อไปยังบริการคงที่

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

เชื่อมต่อภายใน ระบุบริการจริง

การเปลี่ยน URL แบบ HTTPS เป็น https://127.0.0.1:9443/ เปลี่ยนชื่อโฮสต์ที่ไคลเอนต์อาจใช้สำหรับ TLS และ HTTP ใบรับรองสำหรับ service.example.net จะไม่กลายเป็นใบรับรองที่ใช้ได้สำหรับ loopback

เมื่อไคลเอนต์รองรับการกำหนดเส้นทางการเชื่อมต่อแยกต่างหาก ให้คงตัวตนของ URL เดิมไว้ Curl แสดงความแตกต่างนั้นได้

curl --noproxy '*' \
  --connect-to service.example.net:443:127.0.0.1:9443 \
  https://service.example.net/

ซ็อกเก็ตไปยังอะแดปเตอร์ภายใน ขณะที่การตรวจสอบ TLS และปลายทาง HTTP ยังคงเป็น service.example.net แอปพลิเคชันอื่นต้องมีการควบคุมที่รองรับเทียบเท่าของตนเอง ไม่ใช่ทุกไคลเอนต์ที่มีให้

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

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