พอร์ตที่ส่งต่อผ่าน SSH ไม่ใช่พร็อกซี SOCKS เสมอไป
แยกความแตกต่างระหว่างการส่งต่อภายในแบบคงที่ของ SSH กับตัวรับฟัง SOCKS แบบไดนามิกก่อนกำหนดค่าแอปพลิเคชัน
คุณสร้างอุโมงค์ SSH ใส่ 127.0.0.1 และพอร์ตของมันในการตั้งค่าพร็อกซีของเบราว์เซอร์ แล้วไม่มีอะไรโหลด ตัวรับฟังอาจทำงานได้อย่างสมบูรณ์ อาจเป็นเพียงแค่รอทราฟฟิกผิดชนิด
| การส่งต่อ | สิ่งที่แอปพลิเคชันภายในส่ง | การเลือกปลายทาง |
|---|---|---|
-L | โปรโตคอลปกติของบริการปลายทาง | กำหนดตายตัวในคำสั่ง SSH |
-D | การเจรจา SOCKS แล้วจึงเป็นทราฟฟิกของแอปพลิเคชัน | ร้องขอโดยไคลเอนต์ SOCKS |
สำหรับเว็บเซิร์ฟเวอร์เครื่องเดียว นี่คือการส่งต่อแบบคงที่:
ssh -N -L 127.0.0.1:9080:web.example.com:80 [email protected]
เปิด http://127.0.0.1:9080/ เป็นเว็บไซต์ อย่าติดป้ายพอร์ต 9080 ว่า SOCKS: มันส่งต่อไบต์ไปยังเว็บเซิร์ฟเวอร์เครื่องเดียวที่ระบุในคำสั่ง การเปิดไซต์ภายใต้ชื่อโฮสต์อื่นอาจส่งผลต่อการโฮสต์เสมือน การเปลี่ยนเส้นทาง หรือคุกกี้ของไซต์นั้นด้วย
สำหรับตัวรับฟัง SOCKS รูปแบบจะเปลี่ยนไป:
ssh -N -D 127.0.0.1:1080 [email protected]
กำหนดค่าแอปพลิเคชันให้ใช้ SOCKS ที่ 127.0.0.1:1080 การพิมพ์ที่อยู่นั้นลงในแถบที่อยู่ของเบราว์เซอร์โดยตรงจะส่งคำขอเว็บไปยังตัวรับฟัง SOCKS ซึ่งเป็นความไม่ตรงกันของโปรโตคอลอีกครั้ง
คู่มือ OpenSSH เอกสารทั้งสองรูปแบบ มีข้อยกเว้นที่เป็นประโยชน์: การส่งต่อพร็อกซี HTTP ที่มีอยู่ด้วย -L จะสร้างพอร์ตภายในที่พูดโปรโตคอลพร็อกซี HTTP เพราะปลายทางคงที่ของมันเองก็คือพร็อกซี HTTP บริการที่ปลายไกลเป็นตัวกำหนดว่าอะไรเหมาะกับการส่งต่อแบบคงที่ การส่งต่อพร็อกซีที่มีอยู่ผ่าน SSH จะรักษาโปรโตคอลและบัญชีของพร็อกซีนั้นไว้