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

วิธีใช้ Reverse SSH Tunnel เพื่ออนุญาตการเชื่อมต่อภายนอกเข้าสู่เครื่องของคุณ

วิธีใช้ Reverse SSH Tunnel เพื่ออนุญาตการเชื่อมต่อภายนอกเข้าสู่เครื่องของคุณ

หากคุณโชคดีที่ ISP ให้ IP Address แบบ Dedicated คุณสามารถตั้งค่า Home Server และทำให้เข้าถึงได้จากอินเทอร์เน็ตโดยเพิ่มกฎ Port Forwarding ไปที่ Router แต่ถ้า ISP บังคับให้แชร์ IP กับเพื่อนบ้าน Port Forwarding จะไม่ช่วยได้ อื่นๆ ก็บล็อกการเชื่อมต่อเข้า (Incoming Connections) ด้วยกฎ Firewall

คุณสามารถข้ามข้อจำกัดทั้งหมดนี้ได้ด้วยความช่วยเหลือจาก Virtual Private Server (VPS) อะไรก็ได้ แม้จะมี RAM น้อยกว่า 512MB ก็พอ เพราะมันแค่ Redirect Network Traffic ใช้ CPU และ RAM น้อยมาก เซิร์ฟเวอร์จะรับ Incoming Connections และ Redirect ไปยังคอมพิวเตอร์ของคุณผ่านสิ่งที่เรียกว่า "Reverse SSH Tunnel" วิธีนี้ทำให้คุณตั้งค่า Home Server ได้ทุกประเภท ด้วยค่าใช้จ่ายรายเดือนที่ต่ำมาก

จินตนาการว่าคุณสร้าง NextCloud Server เพื่ออัปโหลด/ซิงค์ไฟล์ คุณได้ความเป็นส่วนตัวจากการมีไฟล์อยู่บน Home Server แล้วซื้อ Hard Drive 6TB มาได้พื้นที่ทั้งหมด คุณจ่ายแค่ค่าไฟฟ้ารายเดือนและค่า VPS น้อยกว่า $5/เดือน นี่ถูกกว่าค่าเซิร์ฟเวอร์ที่มีพื้นที่ 6TB มาก

หมายเหตุ: วิธีนี้ทำงานได้เฉพาะการ Redirect TCP Network Traffic TCP ใช้โดย Web Servers (Port 80/tcp) UDP ใช้โดยบาง Game Servers เช่น Counter Strike (Port 27015/UDP) UDP Tunneling ทำได้แต่ต้องใช้ "핵" ซึ่งอาจเป็นหัวข้อกล่าวในบทความอนาคต

Windows 10 มี Built-in SSH Client แล้ว

ไม่ต้องใช้ PuTTY อีกต่อไปเพื่อสร้าง SSH Connection จริงๆ สำหรับบทความนี้คุณจะใช้ Built-in Client นี้เพื่อตั้งค่า Tunnel อ่านบทความเกี่ยวกับ OpenSSH Client ของ Windows 10 หากยังไม่คุ้นเคย

เตรียม VPS เพื่อ Tunnel Connections

สร้าง VPS กับ Provider ที่ชอบ เช่น DigitalOcean, Linode, Vultr หรืออื่นๆ สิ่งสำคัญที่สุดคือเลือก Location เซิร์ฟเวอร์ที่ใกล้ที่สุดเท่าที่จะเป็นไปได้ เพื่อลด Network Latency พยายามตั้งค่าเซิร์ฟเวอร์ให้ล็อกอินเข้าบัญชี Root ได้โดยตรง โดยเฉพาะด้วย SSH Key เพราะปลอดภัยกว่า จำเป็นหากต้องการให้เซิร์ฟเวอร์ฟัง Connection ที่มาบน Port ต่ำกว่า 1024 (Privileged Ports)

เปิด Command Prompt (หรือ Terminal ถ้าบน Linux) และล็อกอินเข้าเซิร์ฟเวอร์ผ่าน SSH

แก้ไขการตั้งค่า OpenSSH Server:

nano /etc/ssh/sshd_config

หากไม่ได้ล็อกอินเป็น Root แตเป็น User ธรรมดา ต้องใช้คำสั่งนี้ มิฉะนั้นจะเซฟไฟล์ไม่ได้:

sudo nano /etc/ssh/sshd_config

เลื่อนลงจนเจอตัวแปรชื่อ "GatewayPorts" บรรทัดอาจจะเป็นแบบนี้: #GatewayPorts no ลบ "#" ออก (Uncomment) และเปลี่ยนเป็น GatewayPorts yes

วิธีใช้ Reverse SSH Tunnel เพื่ออนุญาตการเชื่อมต่อภายนอกเข้าสู่เครื่องของคุณ

หากหาไม่เจอ ให้เลื่อนลงท้ายไฟล์และเพิ่มบรรทัดเอง:

GatewayPorts yes

กด Ctrl + X แล้วกด y และ Enter เพื่อเซฟไฟล์

Reload SSH Daemon เพื่อให้รับการตั้งค่าใหม่

systemctl reload ssh.service

ออกจาก SSH Session

exit

วิธีตั้งค่า Reverse SSH Tunnel

พารามิเตอร์คำสั่งเหมือนกันทั้ง Linux, Windows และ BSD Syntax ทั่วไปคือ:

ssh -R remote_port:host:localport your_username@IP-of-server
  • remote_port บอกเซิร์ฟเวอร์ว่า Redirect Connection ที่มาที่ Port นี้
  • host บอกเซิร์ฟเวอร์ว่า Redirect ไปที่ IP Address ไหน จะใช้ 127.0.0.1 เพื่อ Redirect ไปที่เครื่องตัวเอง
  • localport ระบุว่า Packet ควร Redirect ไปที่ Port ไหน นี่คือ Port ที่ Application บนเครื่อง Local ฟังอยู่

เช่น ต้องการ Forward Connection ทั้งหมดที่มาที่ Port 80 (ที่เซิร์ฟเวอร์) ส่งไป Port 8080 บนเครื่อง Local คำสั่งคือ:

ssh -R 80:127.0.0.1:8080 root@203.0.113.1

สมมติว่าคุณมี Web Server เช่น Apache หรือ Nginx ฟังที่ Port 8080 บนเครื่อง Local แต่ถ้า Apache/Nginx ฟังที่ Default Port 80 ก็ไม่มีปัญหาใช้ Port 80 ซ้ำในคำสั่งเดียวกัน (เพราะมันหมายถึง Port 80 บนเซิร์ฟเวอร์ต่างกัน)

ssh -R 80:127.0.0.1:80 root@203.0.113.1

ในจุดนี้ หากใครใส่ IP ของ VPS ใน Address Bar ของ Browser Connection จะถูก Redirect และถูก Serve โดยเครื่อง Local ของคุณ

วิธีใช้ Reverse SSH Tunnel เพื่ออนุญาตการเชื่อมต่อภายนอกเข้าสู่เครื่องของคุณ

ในภาพด้านบน ใช้ Web Server เรียบง่ายสำหรับ Chrome ที่ฟัง Port 8887 โดย Default คุณสามารถลอง Setup นี้ได้ด้วยการติดตั้ง App แล้วใช้คำสั่งเหมือนในภาพ

ค่าถูกกล่าวว่า เพื่อให้ Tunnel ทำงานต่อเนื่อง SSH Session ต้องคงอยู่ หากต้องการปิด Tunnel ให้พิมพ์ exit ใน Terminal/Command Prompt

สรุป

comme คุณเห็น การสร้าง Reverse SSH Tunnel ไม่ยาก แต่การ Secure Website นั้นยาก หากคุณเลือกทำอย่างเช่น Local NextCloud Server ให้ Isolate ไว้ใน VM อย่างน้อย เพื่อถ้า Website ถูกโจมตี ส่วนอื่นของ OS จะปลอดภัย

และ เรื่องสำคัญ... จง Backup สิ่งที่คุณไม่ muốnเสียเสมอ!