msgbartop
Just another blog of mine
msgbarbottom

29 Jul 08 SSH Tunneling

ผมมักจะมีปัญหาเสมอในการใช้งานโปรแกรมต่างๆ ผ่านเน็ตเวิร์ค เนื่องจากที่ทำงานผมติดตั้งไฟร์วอลล์ที่อนุญาตให้ใช้งานหลักๆ ได้แค่ “เว็บ” กับ “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 ก็จะมีตัวเลือกให้กำหนดพอร์ตต้นทางและปลายทางได้ ดังรูป

Tags: ,



Leave a Comment

*
To prove you're a person (not a spam script), type the answer to the math equation shown in the picture. Click on the picture to hear an audio file of the equation.
Click to hear an audio file of the anti-spam equation