7/18/2555

การ tunneling VNC ผ่าน Putty

VNC นับเป็นโปรแกรม Remote Control ที่ดีมากๆ ตัวหนึ่ง   โดยจะประกอบไปด้วยสองส่วน  ส่วนที่ทำหน้าที่เป็น Server และส่วนที่ทำหน้าที่ Client  ส่วนที่ทำหน้าที่ Server จะทำการรับข้อมูลเกี่ยวกับการจัดการคีย์บอร์ดและเมาส์จากทางฝั่ง Client และมากระทำการบนส่วนบริการ GUI ของเครื่อง ซึ่งอาจจะเป็นการใช้งานร่วมกันกับ GUI หลักของระบบ (เช่นในระบบปฏิบัติการวินโดวส์ทุกรุ่น) หรืออาจจะมีการจำลอง GUI เฉพาะกิจขึ้นมา (เช่นในระบบปฏิบัติการยูนิกซ์ และลินุกซ์ ที่จะมีการจำลองตนเอง เป็น X เซอร์เวอร์ที่สามารถเชื่อมต่อกับตัว viewer ได้โดยตรง) สำหรับส่วน Client จะทำหน้าที่รับการกดคีย์บอร์ดและการจัดการเมาส์  เมื่อผู้ใช้ใช้งานกับหน้าต่างของ VNCViewer  เพื่อส่งไปยังเซอร์เวอร์  และทำหน้าที่รับชุดคำสั่งจากทาง Server เพื่อนำมาทำการวาดภาพบน VNCViewer ต่อไป  จุดเด่นที่ผู้ใช้งาน VNC ต่างติดอกติดใจก็คือ  VNC นั้นมีตัว Server และ Viewer อยู่เกือบจะทุกแฟลตฟอร์ม  นับตั้งแต่วินโดส์ทุกตระกูล  ลินูกซ์  ไปจนถึงยูนิกซ์  และทุกแฟลตฟอร์มสามารถใช้งานข้ามกันได้หมด (เช่น เปิด server ที่ ลินุกซ์ เพื่อมา View และทำงานบน XP เป็นต้น) นอกจากนี้ ยังเหมาะสมกว่าการใช้ XTerminal สำหรับลินุกซ์และยูนิกซ์ โดยเฉพาะบนเครือข่ายที่อาจจะมีการหลุดได้ตลอดเวลาอย่างอินเทอร์เน็ต  เพราะการเชื่อมต่อระหว่าง server กับ client ของ VNC สามารถที่จะตัดการเชื่อมต่อ และเชื่อมต่อเข้ากันใหม่ได้ตลอดเวลา ดังนั้นเราสามารถปิดหน้าต่าง VNCViewer เมื่อใดก็ได้ แล้วไปเปิดใหม่ ณ อีกเครื่องที่อาจจะอยู่คนละมุมโลก โดยที่ซอฟต์แวร์ต่างๆ ที่รันจะไม่ได้รู้สึกถึงผลดังกล่าวเลย

แต่ VNC มีข้อเสียที่ร้ายแรงอยู่ตรงที่ข้อมูลที่ส่งไปกลับระหว่าง server กับ client นั้นไม่ได้มีการเข้ารหัส  การพิมพ์ข้อความใดๆ จะส่งไปในลักษณะที่ถูกดักจับและวิเคราะห์ได้ง่าย  นี่จึงเป็นที่มาของแนวทางการนำเอาข้อมูลที่ส่งไปมาของ VNC มาผ่านช่องทางของ Secure shell ในลักษณะของการทำ tunnelling

ขั้นตอนต่อไปนี้เป็นขบวนการเซ็ต Putty ซึ่งเป็น text terminal โปรแกรมที่นิยมใช้กันมาก  ในลักษณะของการทำ tunnelling พอร์ตของ VNC ให้มาผ่าน SSH  โดย VNCserver รันอยู่บนเครื่องที่ใช้ระบบปฏิบัติการลินุกซ์ (หรืออื่นใด) แต่ VNCViewer รันอยู่บนเครื่องที่ใช้ระบบปฏิบัติการวินโดวส์  ซึ่งผู้ใช้ส่วนมากมักจะใช้ลินุกซ์หรือยูนิกซ์เป็นเครื่องรีโมต  และทำงานทั่วไปบนเครื่องที่ใช้ระบบปฏิบัติการวินโดวส์  ขบวนการเซ็ตมีดังนี้ครับ


1. เปิดหน้าต่าง PuTTY Configuration ขึ้นมา จากนั้นเลือก Connection/SSH/Tunnels


เติมพอร์ตที่ต้องการทำ Tunnelling ผ่าน SSH ลงไป  ในที่นี้เราต้องการ tunnel พอร์ตของตัว VNC ผ่าน SSH ซึ่ง VNC นั้นใช้หมายเลขพอร์ต 5900 เป็นต้นไป โดยที่พอร์ต 5900 จะตรงกันกับเทอร์มินัลที่ 0 5901 ตรงกับเทอร์มินัลที่ 1 เรียงเช่นนี้เรื่อยไป  ในที่นี้เราติดตั้ง vncserver บนเครื่องลินุกซ์ ซึ่งในกรณีของระบบปฏิบัติการลินุกซ์และยูนิกซ์  ตัว VNCserver จะทำการเปิด Xterminal ตัวใหม่ขึ้นที่บนเซอร์เวอร์และทำการเชื่อมต่อเข้ากับ VNCserver (สำหรับคนที่ไม่คุ้นเคยกับ VNCserver บนลินุกซ์ เรายังสามารถเซ็ตตัว GUI เป็นตัวอะไรก็ได้ตามต้องการ อย่างกรณีนี้ผมแก้ไฟล์ ~ยูสเซอร์/.vnc/xstartup ในบรรทัดที่เรียก twm & ให้เป็น /bin/bash /bin/startkde & ซึ่งมันจะทำการโหลด KDE ขึ้นมาแทนตัว twm)  จากตัวอย่างข้างบน ผมกรอกค่าพอร์ตที่ต้องการ tunnel เป็น 5901(ของเครื่องที่เราทำการใช้อยู่ ณ ปัจจุบันโดย PuTTY) ซึ่งจะมีจุดหมายปลายทางที่เครื่อง thanwa.cpe.mut.ac.th ที่พอร์ต 5901 เช่นกัน  (เครื่อง thanwa.cpe.mut.ac.th เป็นเครื่องที่ผมใช้รันตัวเซอร์เวอร์)

เมื่อผมกด Add ก็จะได้ดังนี้




2. หลังจากนั้นผมเลือกที่ Connecttion/SSH เพื่อทำการเปิดโหมด compression โดยจะยอมให้มีการบีบอัดข้อมูลก่อนที่จะส่งผ่าน SSH ด้วย 


อนึ่ง ขั้นตอนนี้ไม่จำเป็นสำหรับการทำงานครับ  คุณสามารถข้ามไปได้   แต่ถ้าคุณเลือกให้มีการบีบอัด ก็จะเห็นว่าใช้งาน VNC โดยรวมจะมีการหน่วงช้าลง (เพราะข้อมูลรับส่งนั้นมีน้อยลง เป็นผลจากการบีบอัด)

3. กลับมาที่ Session  เพื่อความสะดวก ผมว่าเราน่าจะเก็บค่าการเซ็ตนี้เอาไว้เสียหน่อย



เรากรอก IP หรือโดเมนของเครื่องปลายทาง (ที่รัน VNCServer) และเลือกโหมดการติดต่อเป็น SSH (พอร์ต 22) โดยการกดเลือกที่ radio button  SSH
จากนั้นตั้งชื่อ Session เสียหน่อยครับ แล้วกด Save  เป็นอันเสร็จพิธี

4. เวลาเราจะใช้งาน  เมื่อเปิดโปรแกรม PuTTy เราก็เพียงแต่โหลด session ที่เราเก็บไว้ขึ้นมา  แล้วก็ล็อกอินเข้าไปใน text terminal ตามปกติครับ   ซึ่งเราจะต้องคงการเชื่อมต่อ text terminal ใน SSH โหมดนี้ไว้ตลอดเวลาที่เราใช้งาน VNCViewer ครับ (ถ้าเราล็อกเอาต์มาขณะที่ VNCViewer ทำงาน หน้าจอ text terminal จะยังคงค้างเติ่งอยู่ จนกว่าเราจะปิด VNCViewer


5.จากนั้น  เรารัน VNCViewer แต่เวลาที่เราจะใส่ IP ของตัว VNCserver เราจะใส่ localhost หรือ 127.0.0.1 แทนครับ โดยค่าหมายเลขเทอร์มินัลจะเป็นไปตามพอร์ตที่เรา tunnel ไว้ตามที่กำหนดที่ Source port  ในที่นี้เป็น 5901 ซึ่งตรงกับ localhost:1




ถ้า VNCserver ได้ทำงานบนเครื่องเซอร์เวอร์อย่างถูกต้อง  เราก็จะเห็นหน้าจอพาสเวิร์ด  ก็พิมพ์ไปตามเดิมครับ

6. เป็นอันเรียบร้อย VNCviewer เริ่มทำงาน อย่างในที่นี้ ผมได้เซ็ตให้ Xterminal ตัวที่ 1 (ตัวที่รันบนคอนโซลเป็นตัวที่ 0) รันตัว KDE ถ้าคุณเพิ่งรัน VNCserver ก่อนหน้าที่จะรัน VNCViewer เพียงเล็กน้อย คุณก็จะได้เห็นหน้าจอในขณะที่ KDE กำลังตรวจสอบและติดตั้งการทำงานต่างๆ ด้วยครับ



อ้อ... สำหรับคนที่ไม่คุ้นกับ VNC  เนื่องจาก VNCserver ไม่ได้จัดการส่งข้อมูลเสียง และการจัดการระบบไฟล์ต่างๆ มายังเครื่อง client ดังนั้น KDE อาจจะเตือนว่า ไม่มีระบบเสียงอยู่  ซึ่งเราก็เพียงแต่ปิดไปครับ  นั่นคือ KDE อีกตัวนี้จะไม่มีการติดต่อกับซาวน์การ์ดแบบตัวที่อยู่บน Xterminal หมายเลข 0 ครับ 

0 ความคิดเห็น:

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