Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Windows Server

การส่งต่อพอร์ต SSH แบบ Native (Tunneling) บน Windows 10

บทความนี้จะแสดงวิธีใช้เซิร์ฟเวอร์ OpenSSH ส่วนตัวของ Windows 10 เพื่อส่งต่อพอร์ตผ่าน SSH tunnel การส่งต่อพอร์ต SSH ช่วยให้คุณ tunnel (ส่งต่อ) พอร์ตแอปพลิเคชันจากคอมพิวเตอร์ท้องถิ่นไปยังเซิร์ฟเวอร์ระยะไกลและในทางกลับกัน ก่อนหน้านี้ SSH tunneling ใช้ได้เฉพาะในสภาพแวดล้อม Linux/Unix แต่ตอนนี้สามารถใช้ใน Windows 10/Windows Server 2016 ได้ด้วย นี่คือกรณีศึกษาการใช้การเชื่อมต่อ RDP ผ่าน SSH tunnel (TCP พอร์ต 22) บน Windows

SSH tunneling ใช้มากในสถานการณ์ที่ต้องเชื่อมต่อกับคอมพิวเตอร์ระยะไกลที่อยู่เบื้องหลังไฟร์วอลล์ ตัวอย่างเช่น คุณมี Windows Server ที่เปิดพอร์ต SSH เท่านั้น (TCP 22) พอร์ตอื่นๆ ถูกบล็อกโดยไฟร์วอลล์ฮาร์ดแวร์หรือ Windows Firewall ภารกิจของคุณคือเชื่อมต่อกับ Windows Server โดยใช้ไคลเอนต์ RDP ดูเหมือนเป็นไปไม่ได้เพราะพอร์ต Remote Desktop 3389 ถูกบล็อกโดยไฟร์วอลล์ อย่างไรก็ตาม คุณสามารถใช้เทคนิคการส่งต่อพอร์ตผ่าน SSH tunnel

สถานการณ์การใช้งานทั่วไปของ SSH tunneling:

  • Local TCP forwarding คือการส่งต่อพอร์ตท้องถิ่นไปยังเซิร์ฟเวอร์ระยะไกล;
  • Remote TCP forwarding คือการส่งต่อพอร์ตระยะไกลไปยังคอมพิวเตอร์ท้องถิ่น;
  • Double SSH tunnel เชื่อมต่อคอมพิวเตอร์ที่ไม่มีที่อยู่ IP สาธารณะเฉพาะเจาะจงเบื้องหลัง NAT ผ่านเซิร์ฟเวอร์ SSH (หากโซลูชัน OpenVPN ไม่ได้ใช้)

การเข้าถึง RDP ผ่าน SSH Tunnel (Local TCP Forwarding)

ในโหมดนี้ คุณสร้างพอร์ต TCP ท้องถิ่นบนคอมพิวเตอร์ของคุณ การเชื่อมต่อทั้งหมดไปยังพอร์ตนี้จะถูกส่งต่อไปยังพอร์ตที่ระบุบนเซิร์ฟเวอร์ระยะไกลผ่าน SSH tunnel ในตัวอย่างนี้ เราจะสร้างพอร์ตท้องถิ่น 8888 และการเชื่อมต่อไปยังมันจะถูกส่งต่อไปยังพอร์ต RDP 3389 บนคอมพิวเตอร์ Windows ระยะไกล แผนภาพการเชื่อมต่อทั่วไปแสดงด้านล่าง

การส่งต่อพอร์ต SSH แบบ Native (Tunneling) บน Windows 10

เพื่อสร้าง SSH tunnel โดยใช้ไคลเอนต์ SSH ส่วนตัวของ Windows 10 (เป็นส่วนหนึ่งของ Windows ตั้งแต่ Windows 10 1809 และ Windows Server 2019) ให้รันคำสั่งนี้:

ssh -L 8888:192.168.1.90:3389 root@192.168.1.90

เพื่อให้ SSH tunnel ทำงานในพื้นหลัง ให้เพิ่มพารามิเตอร์ –f

การส่งต่อพอร์ต SSH แบบ Native (Tunneling) บน Windows 10

เพื่อเชื่อมต่อกับเดสก์ท็อปคอมพิวเตอร์ระยะไกลผ่าน SSH tunnel คุณต้องเชื่อมต่อกับพอร์ตท้องถิ่น 8888 ของคอมพิวเตอร์ของคุณโดยใช้ไคลเอนต์ RDP (mstsc.exe):

127.0.0.1:8888

การส่งต่อพอร์ต SSH แบบ Native (Tunneling) บน Windows 10

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

การส่งต่อพอร์ต SSH แบบ Native (Tunneling) บน Windows 10

โปรดทราบว่าหากคุณส่งต่อトラฟฟิกแอปที่ไม่ได้เข้ารหัส จะถูกส่งผ่านเครือข่ายสาธารณะในรูปแบบเข้ารหัส ทราฟฟิกเช่นนี้จะถูกเข้ารหัสที่ปลายหนึ่งของการเชื่อมต่อ SSH และถอดรหัสที่อีกปลายหนึ่ง

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

mstsc.exe /v 10.10.1.220:8888

การส่งต่อพอร์ต SSH แบบ Native (Tunneling) บน Windows 10

Remote TCP Forwarding ไปยังคอมพิวเตอร์ท้องถิ่น

มีกรณีการใช้ SSH tunnel อีกอย่าง — Remote TCP Forwarding โดยใช้ SSH tunnel คุณสามารถอนุญาตให้เซิร์ฟเวอร์ระยะไกลเข้าถึงพอร์ตท้องถิ่นบนคอมพิวเตอร์ของคุณ หรือพอร์ตบนคอมพิวเตอร์อื่นในเครือข่ายท้องถิ่นของคุณ ตัวอย่างเช่น คุณต้องการให้เซิร์ฟเวอร์ภายนอก (200.168.1.90) เข้าถึงไซต์ Intranet ของคุณ (ไม่ได้เผยแพร่ในอินเทอร์เน็ต) เพื่อสร้าง reverse SSH tunnel ใช้คำสั่งนี้:

ssh -R 8080:internalwww:80 user@200.168.1.90

เพื่อเข้าถึง internalwwww ไซต์จากเซิร์ฟเวอร์ SSH ระยะไกล เพียงพิมพ์ที่อยู่ในเบราว์เซอร์: https://localhost:8080

ใน Windows ทุกเวอร์ชัน สร้างกฎการส่งต่อพอร์ตได้ด้วยคำสั่ง netsh interface portproxy command

โดยใช้ SSH tunnels คุณสามารถสร้างเชนการส่งต่อพอร์ตได้ เพื่อเปิดหรือปิด SSH tunneling ให้เพิ่มคำสั่งต่อไปนี้ในไฟล์กำหนดค่า OpenSSH (%programdata%\ssh\sshd_config):

AllowStreamLocalForwarding yes
AllowTcpForwarding remote