NAT ອັນນີ້ VM network ຈະສ້າງ ເຄືອຂ່າຍຈຳລອງ ອອກມາ ເຮັດໃຫ້ ເຄື່ອງ Guest VM ສາມາດເບິ່ງເຫັນກັນເອງໄດ້ ແລະ ເຄື່ອງມັນອອກເນັດຜ່ານເຄື່ອງ Host ໄດ້
Bridge ອັນນີ້ VM Network ມັນຈະຕໍ່ຈາກ ເຄື່ອງ VM ອອກໄປຫາ Switch ໂດຍກົງ ຫມາຍເຖິງວ່າ ທັງເຄື່ອງ Guest VM ແລະ Host ຈະໄດ້ IP ວົງດຽວກັນຈາກ DHCP Server ທັງສອງຈະເອີ້ນຫາກັນໄດ້ຜ່ານໄອພີ
ທີ່ນີ້ ບໍ່ຮູ້ວ່າໃຊ້ໂປຣແກຣມຫຍັງເປັນ VM ແຕ່ຫາກໃຊ້ Vbox ຈະມີໂຫມດເຄືອຂ່າຍດັ່ງນີ້
จะเลือก network setting แบบใหนบน Sun VirtualBox
วันนี้มีเรื่องจะมาแบ่งปันประสบการณ์การใช้งาน 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 ของผมเอง ใครจะนำเสนอวิธีใหม่ๆ ก็เชิญได้เลยนะครับ หรือจะนำไปใช้มั่งก็ยินดี