ปกติการสร้าง SSH Tunnel จะมีเอาไว้เพื่อให้เครื่องตัวเองใช้งานเพื่อทะลุไปยังเครื่องปลายทางที่ต้องการโดยการเปลี่ยน port ที่เชื่อมต่อ เช่น
ssh -L 3307:TARGET-IP:3306 USER@CURRENT-IP -N
แบบนี้ คือการเปิด port 3307 ที่เครื่องตัวเอง ถ้ามีการใช้งาน port 3307 จะเสมือนว่าทำงานอยู่บน TARGET-IP ที่ port 3306 เลย หรือ พูดอีกแบบกลับกันคือ เราสามารถทำงานกับข้อมูล บนเครื่อง TARGET-IP ที่ port 3306 ได้จาก port 3307 ในเครื่องตัวเอง
ทีนี้ถ้าเราต้องการให้เครื่องเรารับ connection จากเครื่องอื่นๆได้ละ เสมือนว่ากำลังจะทำให้ตัวเองเป็น proxy เพื่อผ่านต่อไปเครื่องอื่น หรือ โจทย์คือ
ทำอย่างไร ให้เครื่องใครก็ได้ ใช้งานข้อมูลของ TARGET-IP ,port 3306 ได้จากการเชื่อมต่อเข้ามาที่ เครื่องนี้ ที่ port 3307
กรณีแบบนี้จะใช้ในกรณีที่เครื่องที่ออก internet ไปข้างนอกได้รับอนุญาตเพียงเครื่องเดียว(คือเครื่องที่ใช้งานอยู่นี้) ทุกเครื่องจึงต้องมาอ้อมผ่านเครื่องนี้ เพื่อออกไปทำงานอื่นๆที่ข้างนอกได้
วิธีการ setup ก็มีไม่กี่ขั้นตอน ขั้นแรก คือเปลี่ยน Command ให้เป็นแบบนี้
ssh -R "[::]:3307:TARGET-IP:3306" USER@CURRENT-IP -N
ก็คือเปลี่ยน -L ให้เป็น -R และเติม binding IP เข้าไป กรณีนี้ผมใช้ [::] หมายถึงรับ connection หมดเลย ทั้ง ip v4 v6 และทุก subnet ip
จากนั้นอีกสิ่งที่ต้องทำคือ เปลี่ยนค่า config ใน /etc/ssh/sshd_config ให้เป็นดังนี้
GatewayPorts yes
โดยปกติจะเป็น no แล้ว restart sshd และอย่าลืม เปิด firewall port 3307 ให้รับ connection จากเครื่องอื่นๆด้วย ก็เรียบร้อย ใช้งานได้ครับ