วันนี้มีเรื่องจะมาแบ่งปันประสบการณ์การใช้งาน Sun VirtualBox ใหักับทุกท่านได้ทราบกัน อาจจะไม่ใช่ best practice หรือวิธีการที่ถูกต้อง แต่เป็นวิธีการ config "Network Setting" สำหรับ GuestOS. เพื่อให้สามารถใช้งานได้ ในแบบที่ผมต้องการ
คงจะไม่เสียเวลาสาธยายว่า Sun VirtualBox คืออะไรนะครับ ผมพุ่งเป้าไปเลยแล้วกันว่า ผมต้องการ install GuestOS บน VirtualBox โดยความต้องการของผม มีง่ายๆ แค่ 3 ข้อ คือ
- ผมจะต้องสามารถ access network service เช่น ssh, http ... บน GuestOS จาก HostOS หรือเครื่องอื่นๆ ใน network เดียวกับ Host ได้
- GuestOS จะต้องสามารถ access internet ได้ (ผ่านทาง Host)
- ผมจะต้องสามารถใช้งาน GuestOS ในทั้งสองความต้องการข้างบนได้ ไม่ว่าจะเชื่อมต่อ internet แบบใหนก็ตาม เช่น wireless, wire
ทำความเข้าใจ Network Setting ของ Sun VirtualBox ก่อน
network setting ของ VirtualBox ก็จะคล้ายๆ กับของ VMWare แต่อาจจะเรียกชื่อต่างกัน ซึ่งก็สร้างความสับสนได้มากๆ เรามาดูกันเลยว่า มีให้เลือกกี่แบบ แต่ละแบบต่างกันอย่างไร
- Not attached: โหมดนี้ ถ้าบูต GuestOS ขึ้นมา ก็จะมองเห็น LAN card ที่ไม่มี connection ประมาณว่ามีการ์ด แต่ไม่ได้เสียบสายแลน ประมาณนั้น
- Nat: อันนี้ก็ง่ายๆ ตรงๆ คือ GuestOS จะส่ง DHCP request ออกมา ซึ่งจะโดน VirtualBox ดัก และส่งค่าไอพีที่เหมาะสมให้ รวมทั้งค่า gateway ip ด้วย การทำงานในโหมดนี้ช่วยให้ GuestOS สามารถเชื่อมต่อและใช้งาน network/internet ได้
ข้อเสียอย่างเดียวของ NAT Mode คือ Host ไม่สามารถเชื่อมต่อเข้าไปยัง GuestOS ได้ ทำให้เป็นแค่ one way communication เท่านั้น - Bridged Adaptor: โหมดนี้น่าจะเป็นโหมดที่หลายๆ คนชอบ โดย VirtualBox จะ Bridge Interface Network ของเครื่อง Host มาให้กับ GuestOS ใช้งานได้ พูดง่ายๆ ว่า GuestOS จะมองเห็น network เดียวกันกับ Host นั่นเอง แต่มีข้อแม้นิดนึงคือ
- สามารถใช้ได้กับ LAN interface เท่านั้น
- และ LAN Interface นั้น จะต้องมีสถานะการเืชื่อมต่อเป็น Connected (ต้องเสียบสายแลน)
- Internal Network: ทำงานได้เหมือน bridged adaptor แต่มีข้อดีเพิ่มเติมมา 2 อย่างคือ
- security + speed เำพราะ packet จะไม่วิ่งผ่าน network stack ของ Host ทำให้ Host ไม่สามารถ sniff packet ได้ นอกจากนี้ยังทำให้ packet รัีบส่่งได้เร็วขึ้นอีกด้วย
- Host-only Adaptor: Host-only Adaptorโหมดนี้ มีไว้เพื่อกำจัดจุดอ่อนของ Bridged adaptor ทำให้ Host สามารถสื่อสารกับ GuestOS (รวมทั้ง GuestOS สื่อสารกับ GuestOS) ได้ โดยที่ LAN Interface ของ HostOS ไม่จำเป็นต้องมีการเชื่อมกับกับ switch/hub แต่อย่างใด
ปัญหาเกิดขึ้น เพราะ
- ผมอยากใช้งานแบบ bridged หรือ internal network แต่ผมไม่สามารถเสียบแลนได้ตลอดเวลา
- ถ้าจะไปใช้ nat มันก็ออกเน็ตได้อย่างเดียว ไม่สามารถ access network service บน GuestOS ได้เลย
- ถ้าจะไปใช้ Host-Only มันก็ออกเน็ตไม่ได้ แต่จะ access network service บน GuestOS ได้
Solution
- วานลูกน้องเก่า @theclodhopper ทำสาย loopback เพื่อเอามาเสียบช่องแลนของ notebook เพื่อหลอกว่า เราต่อสายแลนให้เครื่อง Host นะ เพื่อที่จะได้ใช้งาน Bridged หรือ Internal Network ได้ ประกฏว่า มีปัญหาในทางปฏิบัติ คือ มันจะแสดงสถานะเป็น disconnect ทั้งๆ ที่ทดสอบกับ PC แล้วใช้งานได้ปกติ สรุปว่า วิธีนี้ FAIL
แต่ก็ต้องขอบใจ @theclodhopper ที่ช่วยสนับสนุนการทดลองครั้งนี้ (เคยทำแล้วใช้ได้กับ vmware สมัย 4-5 ปีที่แล้ว)
- ประยุกต์ สร้าง 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:
เป็นประโยชน์มากเลยครับ
ขอบคุณมาก
Thank you for information krub very good
Post a Comment