Home > unix > SSH Tunneling

SSH Tunneling

July 29th, 2008

ผมมักจะมีปัญหาเสมอในการใช้งานโปรแกรมต่างๆ ผ่านเน็ตเวิร์ค เนื่องจากที่ทำงานผมติดตั้งไฟร์วอลล์ที่อนุญาตให้ใช้งานหลักๆ ได้แค่ “เว็บ” กับ “ssh” อย่างเช่น ผมไม่สามารถอัพเดตข้อมูลแพคเกจของ MacPorts ได้ เพราะว่ามันใช้วิธี rsync ผ่านพอร์ต 783 ที่ไม่ได้รับอนุญาต ครั้นจะไปขอให้เขาเปิดพอร์ตเพิ่มก็ดูกระไรอยู่ ส่วนใหญ่ผมจึงมักจะอัพเดตข้อมูลแพคเกจที่บ้านก่อนมาทำงาน

จริงๆ แล้ว ถ้าหากเรามีเซิร์ฟเวอร์ที่ใช้งาน ssh ได้อยู่ภายนอก และเซิร์ฟเวอร์เครื่องนั้นไม่มีไฟร์วอลล์ เราจะสามารถใช้วิธี ssh tunneling เพื่อติดต่อจากเครื่องของเราผ่านเซิร์ฟเวอร์ออกไปโลกภายนอกได้

$ ssh xxx.myserver.net -L 1783:rsync.somewhere.com:783

จะเป็นการติดต่อผ่าน ssh ไปยังเครื่อง xxx.myserver.net ตัวเลือก -L ใช้กำหนด ssh tunneling โดยโปรแกรม ssh จะจับข้อมูลที่ส่งไปยังพอร์ท 1783 ของเครื่องเราทั้งหมด ส่งต่อผ่านไปยังเครื่อง xxx.myserver.net และส่งต่อไปยังพอร์ต 783 ของเครื่อง rsync.somewhere.com ทำให้เราสามารถใช้งานเครื่อง rsync.somewhere.com ที่อยู่ข้างนอกได้ โดย ssh ทำตัวเสมือนเป็นอุโมงค์ให้ข้อมูลของเราลอดผ่านไฟร์วอลล์ออกไป

ในทำนองเดียวกัน ผมก็มักจะใช้ ssh tunneling เพื่อต่อเข้ามาใช้งานเน็ตเวิร์คภายในหน่วยงาน เวลาผมอยู่ข้างนอก อย่างเช่น ถ้าผมอยากจะโหลดเปเปอร์จากฐานข้อมูลที่สถาบันเป็นสมาชิก ซึ่งปรกติเขาจะตรวจสอบบุคคลด้วยไอพีแอดเดรส เวลาผมอยู่บ้านผมก็จะแค่ ssh เข้ามาที่เซิร์ฟเวอร์ภายในสถาบันก่อนแล้ว โดยกำหนดให้ forward ข้อมูลไปยังเครื่อง proxy ที่สามารถใช้งานได้ จากนั้นผมก็แค่เซ็ต proxy บนเครื่องผมให้เป็น localhost และใช้พอร์ตที่กำหนด ก็จะดูเหมือนว่าผมใช้งานจากภายในหน่วยงาน ผมสามารถเข้าไปใช้งานฐานข้อมูลได้ตามปกติ

$ ssh xxx.myinternal.net -L 8080:proxy.myinternal.net:8080

โปรแกรม ssh ส่วนใหญ่จะสนับสนุน tunneling หรือบางทีเรียกว่า port forwarding อย่างเช่น บน Windows คนที่ใช้ putty ก็จะมีตัวเลือกให้กำหนดพอร์ตต้นทางและปลายทางได้ ดังรูป

unix ,

  1. No comments yet.
  1. No trackbacks yet.