การส่งต่อ IP ในพื้นที่และระยะไกลแตกต่างกันอย่างไร


10

ความแตกต่างในการทำงานระหว่างสองคืออะไร? ฉันสับสนเล็กน้อย

การส่งต่อโลคัลทำให้พอร์ตรีโมตพร้อมใช้งานแบบโลคัล

การส่งต่อระยะไกลทำให้พอร์ตท้องถิ่นสามารถใช้ได้จากระยะไกล

แต่ 'ความพร้อมใช้งาน' นี้จะใช้งานได้ทั้งสองทิศทาง ... หรือไม่

เช่นต่อไปนี้ (ออกจากโฮสต์ 'บ้าน')

ssh -R 1234:localhost:2345 user@work

สิ่งนี้จะสร้างอุโมงค์ที่ปลอดภัยระหว่างงาน :: 1234 และที่บ้าน :: 2345 ใช่มั้ย

ถ้าฉันทำอะไรที่ปลายข้างหนึ่งมันจะออกมาที่ปลายอีกด้าน

แต่จากนั้นฉันสามารถทำสิ่งเดียวกันได้โดยการเรียกต่อไปนี้จากโฮสต์ 'งาน':

ssh -L 1234:localhost:2345 user@home

ดังนั้นความแตกต่างเพียงอย่างเดียวคือที่ฉันเรียกมันว่าถูกต้อง?


ในตัวอย่างของคุณไม่มีความแตกต่างในการทำงาน คุณเรียงลำดับของการชดเชยตนเองสำหรับการใช้อาร์กิวเมนต์ตรงข้ามโดยการแลกเปลี่ยนโฮสต์เป้าหมาย หากคุณไม่ได้ทำสิ่งนี้และใช้ทั้งคู่จากภายในโฮสต์เดียว - มันจะทำให้เกิดพฤติกรรมที่ตรงกันข้ามโดยสิ้นเชิง
XXL

คำตอบ:


2

ข้อแตกต่างที่สำคัญในทางปฏิบัติคือถ้าเชื่อมต่อคอมพิวเตอร์ 2 เครื่อง A และ B และ B อยู่หลังไฟร์วอลล์หรือ NAT Router ที่คุณไม่ได้ควบคุมและปิดกั้นการรับสัญญาณเข้า .. คุณกำลังนั่งอยู่ที่ A. คุณไม่สามารถรับ A เพื่อเชื่อมต่อกับ B แต่ B จะไม่บล็อกขาออกดังนั้นคุณจะได้รับ B เพื่อเชื่อมต่อกับ A

- ชี้แจงเพิ่มเติม -

ด้านบนซึ่งผู้ถามเข้าใจ .. หมายถึงความแตกต่างในทางปฏิบัติที่สำคัญระหว่างการส่งต่อภายในและระยะไกล ssh -L และ ssh -R เมื่อคุณใช้แต่ละอัน ฉันไม่ได้แสดงความคิดเห็นเกี่ยวกับคำสั่งตัวอย่างที่เขาให้ซึ่งเขาสลับ -L และ -R และเซิร์ฟเวอร์ sshd ที่เขาเชื่อมต่อด้วย แต่ตอนนี้ฉันจะพยายามแสดงความคิดเห็นเกี่ยวกับมัน .. ด้วยคำสั่ง ssh ที่เขาให้จากมุมมองของลูกค้าปกติและเซิร์ฟเวอร์ปกติดูเหมือนจะไม่แตกต่างกันเพราะไม่ได้บอกว่า "อานี่เป็นลูกค้า ssh และ นี่เป็นเซิร์ฟเวอร์ ssh .. "มันไม่รู้ ssh และซึ่งเป็นลักษณะของไคลเอ็นต์ / เซิร์ฟเวอร์ของ ssh นั้นไม่เกี่ยวข้องและไม่รู้จักกับลูกค้าปกติและเซิร์ฟเวอร์ปกติเช่นกัน พวกเขาสนใจว่าใครกำลังฟังอยู่และจากมุมมองของพวกเขามันก็ดูเหมือนกัน คอมพิวเตอร์ที่ทำงานกำลังฟังและอยู่ที่ 1234 อย่าสังเกตว่าในกรณีหนึ่งมันเป็นเซิร์ฟเวอร์ sshd.exe และในอีกกรณีหนึ่งมันเป็น ssh.exe, ไคลเอ็นต์ ssh โดยวิธีการที่ลูกค้า ssh คือถือว่าเป็นท้องถิ่น


ตกลงขอบคุณที่ตอบคำถามของฉันอย่างแน่นอน! :-)
nandaloo

@nandoo ฉันคิดว่ามันเรียกว่าอุโมงค์ ssh ย้อนกลับ ถ้าเราใช้ประกอบคำริเริ่มและฟัง ('เพราะคำเหล่านั้นมีความคลุมเครือน้อยกว่าลูกค้าและเซิร์ฟเวอร์) แนวคิดคือคุณมีผู้เริ่มต้นและผู้ฟังและผู้เริ่มต้นและผู้ฟัง ssh ของคุณ คุณไม่สามารถเลือกได้ว่าผู้เริ่มต้นและผู้ฟังปกติของคุณอยู่ที่ไหน เช่นเซิร์ฟเวอร์ HTTP (ฟังปกติ) อยู่ใน B. B อยู่หลังไฟร์วอลล์ A มีไคลเอ็นต์ HTTP (ผู้เริ่มต้นทั่วไป) คุณวาง SSH initiator ของคุณบน B. ดูด้วยอุโมงค์ย้อนกลับ SSH ริเริ่มและฟังอยู่บนคอมพิวเตอร์ตรงข้ามกับผู้เริ่มต้นและผู้ฟังปกติ
barlop

10

ใช่ถ้าฉันเข้าใจถูกต้องการส่งต่อพอร์ตในพื้นที่จาก a ถึง b ควรเหมือนกับการส่งต่อพอร์ตระยะไกลจาก b ไป a (และในทางกลับกัน) ช่องสัญญาณขาออกจาก a ถึง b (ดูจาก a) ควรเท่ากับช่องสัญญาณขาเข้าจาก a ถึง b (ดูจาก b)

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

ssh -L local_port:remote_host:remote_port user@hostname

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

ssh -R local_port:remote_host:remote_port user@hostname

1
ฉันคิดว่าความแตกต่างอื่นนอกเหนือจากไวยากรณ์จะเป็นกระบวนการที่ฟังเพื่อให้ผู้ใช้เชื่อมต่อ ssh.exe -L บอกให้ ssh.exe ฟัง (นอกเหนือจากการเชื่อมต่อขาออกที่ทำไปแล้ว) ssh.exe -R บอกให้ sshd.exe ฟัง (นอกเหนือจากการฟังที่ทำไปแล้ว)
barlop

@ 0x4a6f4672 0x4a6f4672หมายความว่าอะไร
Pacerier

@Pierier เพียงชื่อย่อของฉัน“ JoFr” ในรูปแบบเลขฐานสิบหก :-)
0x4a6f4672

3

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

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


ขอบคุณที่ทำให้ชัดเจนว่าการส่งต่อพอร์ตทำงานอย่างไร และขอขอบคุณสำหรับการย้ายคำถาม - ฉันเพิ่งไม่รู้เกี่ยวกับไซต์ superuser นี้ :-)
nandaloo

1

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

Local Server - (LAN) - เทอร์มินัล ----- (SSH มักผ่านทางอินเทอร์เน็ต) ----- Tunnel Endpoint - (LAN) - Remote Machine

คุณใช้การส่งต่อพอร์ตโลคัลหากคุณต้องการช่องสัญญาณไปยังเครื่อง / พอร์ตระยะไกลบางช่องสามารถเข้าถึงได้โดยจุดปลายทางช่องสัญญาณที่คุณสามารถเข้าถึง ssh ได้ ยังพอร์ตของเครื่องระยะไกลนั้นยังสามารถเข้าถึงได้ในเครื่องของคุณเองเช่น http: // localhost: terminal_port /

ทำโดยใช้ไวยากรณ์ต่อไปนี้:

ssh -L terminal_port:remote_machine_ip:remote_service_port -p tunnel_endpoint_ssh_port ssh-login@tunnel_endpoint_ip

คุณอาจใช้การส่งต่อพอร์ตระยะไกลหากคุณต้องการเปิดใช้งานรีโมททุกคน (!)ที่สามารถเข้าถึงพอร์ตการรับฟังของจุดปลายอุโมงค์เพื่อให้สามารถเข้าถึง ip / พอร์ตจากระยะไกลใน LAN ท้องถิ่นของคุณ ไปยังเซิร์ฟเวอร์ภายในของคุณดูเหมือนว่าการเชื่อมต่อจากเครื่องระยะไกลจะเริ่มต้นโดยเทอร์มินัล

ไวยากรณ์คือ:

ssh -R tunnel_endpoint_listen_port:local_server_ip:local_server_port -p tunnel_endpoint_ssh_port ssh-login@tunnel_endpoint_ip

0

manpage สำหรับ socat ชี้แจงเรื่องนี้ดีมาก ใช่ฉันรู้ว่า ssh และ socat เป็นสองสิ่งที่แตกต่างอย่างสิ้นเชิง - แต่เอกสารของ socat นั้นดีมาก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.