วันอังคารที่ 4 พฤษภาคม พ.ศ. 2553

Secure TCP/IP Connections with SSH Tunnels กับ PostgreSQL

ผมชอบ SSH ตรงที่มันสามารถทำ SSH Tunnels ได้นี่แหละ และก็อีกครั้งที่ผมได้ประสบการณ์ดี ๆ เกี่ยวกับการใช้งาน Database ระยะไกลอีกครั้ง

|---------------------|
| 222.222.22.222 |
| Postgres:5432 |
|----------|----------|
|
|
|---------------------|
| 10.0.0.01 |
| Firewall |
|----------|----------|
|
|
|---------------------|
| 10.0.0.20 |
| local web server |
|----------|----------|


ดูจากรูป เครื่อง Server ของผมฝากไว้ที่ ISP โดยได้ทำการ ติดตั้ง PostgreSQL และ run ไว้ที่พอร์ต 127.0.0.1:5432 เพราะว่าไม่อยากให้ใครมาต่อ นอกจากที่ตัวมันเอง

คราว นี้ก็เป็นประเด็นว่า แล้วถ้าอยากต่อ Database ไปยังเครื่อง Server จากที่อยู่หลัง FireWall หละ จะทำอย่างไร อย่างแรกที่นึกออกก็คือ VPN

หลัง จากติดตั้ง OpenVPN แล้ว ปัญหาก็ตามมา คือ มันช้า แล้วก็หลุดบ่อยด้วย หาทางแก้อยู่ตั้งนาน สุดท้ายก็มาจบที่ SSH Tunnel อีกตามเคย


เอกสาร ที่ผมนำมาเล่าให้ฟังนั้นสามารถอ่านแบบภาษาอังกฤษได้ที่ http://developer.postgresql.org/pgdocs/postgres/ssh-tunnels.html


ขั้น แรกก็ SSh เข้าไปที่เครื่อง local ก่อน
$ ssh username@10.0.0.20

ต่อ มาก็ต้องลุยด้วยการสร้าง Tunnel
$ ssh -L 63333:localhost:5432 username@222.222.222.222
# อธิบายได้ดังนี้
# จะทำการสร้าง Tunnel ที่ 10.0.0.20:63333 (เค้าเรียกว่า End of Tunnel) ไปยัง 222.222.222.222:5432 (เรียกว่า End of Remote Tunnel) และก็เป็นพอร์ตที่เปิดให้บริการ Database อยู่ด้วย
# โดยใช้ผู้ใช้งาน username ต่อไปยัง 222.222.222.222

ที่เครื่อง local web server ตรวจดูความเรียบร้อยหน่อยว่า มีการเปิดพอร์ต 63333 ไว้จริงหรือไม่ด้วย
$ netstat -an |grep 63333

จากนั้นก็ลองดูว่าสามารถใช้งาน postgres ได้จากเครื่อง local หรือไม่
$ psql -h localhost -p 63333 -U postgresuser -l

ไม่มีความคิดเห็น:

แสดงความคิดเห็น