Sep 26, 2010

จะเลือก network setting แบบใหนบน Sun VirtualBox

วันนี้มีเรื่องจะมาแบ่งปันประสบการณ์การใช้งาน Sun VirtualBox ใหักับทุกท่านได้ทราบกัน อาจจะไม่ใช่ best practice หรือวิธีการที่ถูกต้อง แต่เป็นวิธีการ config "Network Setting" สำหรับ GuestOS. เพื่อให้สามารถใช้งานได้ ในแบบที่ผมต้องการ

คงจะไม่เสียเวลาสาธยายว่า Sun VirtualBox คืออะไรนะครับ ผมพุ่งเป้าไปเลยแล้วกันว่า ผมต้องการ install GuestOS บน VirtualBox โดยความต้องการของผม มีง่ายๆ แค่ 3 ข้อ คือ

  1. ผมจะต้องสามารถ access network service เช่น ssh, http ... บน GuestOS จาก HostOS หรือเครื่องอื่นๆ ใน network เดียวกับ Host ได้
  2. GuestOS จะต้องสามารถ access internet ได้ (ผ่านทาง Host) 
  3. ผมจะต้องสามารถใช้งาน GuestOS ในทั้งสองความต้องการข้างบนได้ ไม่ว่าจะเชื่อมต่อ internet แบบใหนก็ตาม เช่น wireless, wire 

ทำความเข้าใจ Network Setting ของ Sun VirtualBox ก่อน

network setting ของ VirtualBox ก็จะคล้ายๆ กับของ VMWare แต่อาจจะเรียกชื่อต่างกัน ซึ่งก็สร้างความสับสนได้มากๆ เรามาดูกันเลยว่า มีให้เลือกกี่แบบ แต่ละแบบต่างกันอย่างไร
  1. Not attached: โหมดนี้ ถ้าบูต GuestOS ขึ้นมา ก็จะมองเห็น LAN card ที่ไม่มี connection ประมาณว่ามีการ์ด แต่ไม่ได้เสียบสายแลน ประมาณนั้น 
  2. Nat: อันนี้ก็ง่ายๆ ตรงๆ คือ GuestOS จะส่ง DHCP request ออกมา ซึ่งจะโดน VirtualBox ดัก และส่งค่าไอพีที่เหมาะสมให้ รวมทั้งค่า gateway ip ด้วย การทำงานในโหมดนี้ช่วยให้ GuestOS สามารถเชื่อมต่อและใช้งาน network/internet ได้

    ข้อเสียอย่างเดียวของ NAT Mode คือ Host ไม่สามารถเชื่อมต่อเข้าไปยัง GuestOS ได้ ทำให้เป็นแค่ one way communication เท่านั้น
  3. Bridged Adaptor: โหมดนี้น่าจะเป็นโหมดที่หลายๆ คนชอบ โดย VirtualBox จะ Bridge Interface Network ของเครื่อง Host มาให้กับ GuestOS ใช้งานได้ พูดง่ายๆ ว่า GuestOS จะมองเห็น network เดียวกันกับ Host นั่นเอง แต่มีข้อแม้นิดนึงคือ 
    • สามารถใช้ได้กับ LAN interface เท่านั้น
    • และ LAN Interface นั้น จะต้องมีสถานะการเืชื่อมต่อเป็น Connected (ต้องเสียบสายแลน)
  4. Internal Network: ทำงานได้เหมือน bridged adaptor แต่มีข้อดีเพิ่มเติมมา 2 อย่างคือ
    • security + speed เำพราะ packet จะไม่วิ่งผ่าน network stack ของ Host ทำให้ Host ไม่สามารถ sniff packet ได้ นอกจากนี้ยังทำให้ packet รัีบส่่งได้เร็วขึ้นอีกด้วย
  5. Host-only Adaptor: Host-only Adaptorโหมดนี้ มีไว้เพื่อกำจัดจุดอ่อนของ Bridged adaptor ทำให้ Host สามารถสื่อสารกับ GuestOS (รวมทั้ง GuestOS สื่อสารกับ GuestOS) ได้ โดยที่ LAN Interface ของ HostOS ไม่จำเป็นต้องมีการเชื่อมกับกับ switch/hub แต่อย่างใด

ปัญหาเกิดขึ้น เพราะ
  1. ผมอยากใช้งานแบบ bridged หรือ internal network แต่ผมไม่สามารถเสียบแลนได้ตลอดเวลา
  2. ถ้าจะไปใช้ nat มันก็ออกเน็ตได้อย่างเดียว ไม่สามารถ  access network service บน GuestOS ได้เลย
  3. ถ้าจะไปใช้ Host-Only มันก็ออกเน็ตไม่ได้ แต่จะ access network service บน GuestOS ได้

Solution

  1. วานลูกน้องเก่า @theclodhopper ทำสาย loopback เพื่อเอามาเสียบช่องแลนของ notebook เพื่อหลอกว่า เราต่อสายแลนให้เครื่อง Host นะ เพื่อที่จะได้ใช้งาน Bridged หรือ Internal Network ได้ ประกฏว่า มีปัญหาในทางปฏิบัติ คือ มันจะแสดงสถานะเป็น disconnect ทั้งๆ ที่ทดสอบกับ PC แล้วใช้งานได้ปกติ สรุปว่า วิธีนี้  FAIL 
    แต่ก็ต้องขอบใจ @theclodhopper ที่ช่วยสนับสนุนการทดลองครั้งนี้ (เคยทำแล้วใช้ได้กับ vmware สมัย 4-5 ปีที่แล้ว)
  2. ประยุกต์ สร้าง lan card 2 interface

    โดย interface แรกตั้งค่าให้เป็น Host-Only เพื่อให้สามารถควบคุมจาก Host ได้

    ส่วน interface ที่ 2 ตั้งค่าเป็น NAT mode
เพียงเท่านี้ เราก็สามารถใช้งาน GuestOS ได้จาก Host (via Host-Only interface) และตัว GuestOS เองก็สามารถใช้งาน internet ได้ (via NAT interface) โดยที่ไม่จำเป็นต้องง้อ Bridged adaptor อีกต่อไป
 
ปล. วิธีนี้ อาจจะไม่ใช่วิธีที่ถูกต้องตามหลักการ แต่เป็นวิธีที่ผมพบว่าใช้งานง่าย สะดวก ต่อ environment ของผมเอง ใครจะนำเสนอวิธีใหม่ๆ ก็เชิญได้เลยนะครับ หรือจะนำไปใช้มั่งก็ยินดี 

2 comments:

NewSun said...

เป็นประโยชน์มากเลยครับ
ขอบคุณมาก

ไทยแลนด์บริการ said...

Thank you for information krub very good