ผมชอบ V'box และไม่ปฏิเสธ ทุก nerds ไม่ปฏิเสธ ใช้ VirtualBox ทดสอบทุกอย่าง fair deal แต่บางครั้งโปรแกรม sensible นี้ตัดสินใจ misbehave หยุด cooperate กรณี: bridged networking
หลายปีเขียน guides รอบ VirtualBox networking เช่น network & sharing tutorial, share over NAT with port-forwarding, configure NAT networks ใช้ bridged network เพราะ simple, convenient, reliable wired/wireless adapters หลายปีไม่มีปัญหา กะทันหันมี Bridged networking หยุด networking บน Linux hosts รัน VirtualBox 6.X Get it? Network not-work. Ho ho. ตามมา
ปัญหาในรายละเอียด (Problem in more detail)
เจอบน Slimbook laptop, Kubuntu 18.04, VirtualBox 6.1 Laptop มี Intel dual-band Wireless adapter ใช้ bridged networking ได้นานไม่มีปัญหา ไปสองสามสัปดาห์ก่อน guest OS (Windows และ Linux) ไม่ได้ IP addresses ด้วย network config นี้
(ภาพประกอบ network settings)
เพื่อ rule out router ทดสอบบน Windows host รัน VirtualBox ไม่มี issue เพื่อ rule out Linux ลองหลาย distros ผล bad เหมือนกัน แม้ architecture และ kernel versions ต่างกัน ดูเหมือน limited to VirtualBox build สำหรับ Linux แต่ไม่ใช่เพราะ Linux หา official forums จะเจอ threads เยอะ เรื่องนี้ จบลงที่ fix หรือ vague comments ว่า bridged networking ไม่ reliable ควร high ใจที่มันทำงาน แต่ไม่
อาจพบ regression ใหม่ใน network stack อาจไม่เจอปัญหานี้ แต่ถ้าเจอ ผมหา workaround semi-reasonable ช่วยได้จนกว่า bridged networking issues บน build VirtualBox ใดๆ จะ resolved
วิธีแก้ (Solution)
มี bridged networking แต่ clients ไม่ได้ IP addresses Static IP ก็ไม่ช่วย ในกรณีผม สาเหตุดูเหมือน conflict ระหว่าง MAC address สุ่มของ virtual network adapter และ MAC ของ physical bridged card ในอดีตไม่ affect functionality ดังนั้นดูเหมือน bug แต่วันนี้มี workaround: ตั้ง MAC address ของ virtual adapter ให้ match physical card แบบ manual
ทำได้ที่ Settings VM > Network > Advanced ตั้ง MAC Address field เป็นของ host adapter start VM ไป per business
(ภาพประกอบ MAC address setting)
ข้อแตกต่าง/ข้อควรระวัง (Caveats)
นี่คือ workaround ไม่ใช่ full solution ด้วยการเปลี่ยนนี้ VM จะได้ IP address เหมือน host หมายความว่า apps บางอย่างอาจทำงานไม่ถูกต้อง เพราะ network มี two identical hosts same shared address ควร manually assign IP address ต่างให้ VM เมื่อมัน up
สรุป (Conclusion)
ไม่มีความสุขเขียน tutorials less-than-perfect แต่บางครั้งรู้สึกให้ readers ช่วยเหลือบ้าง พร้อม disclaimers ดีกว่าแกะ David นานนצח วันนี้ตัวอย่างหนึ่ง ชัดเจนว่ามีปัญหาในซอฟต์แวร์ logical solution คือรอ official fix เคยเกิด ก็อาจเกิดอีก
ไม่ว่าจะเป็นอย่างไร หวังว่าข้อมูลข้างต้น useful ไม่สมบูรณ์แต่อาจช่วย脫離 lurch โดยเฉพาะปัญหานี้จะมาตอนที่ least need it: power on VM คาดหวังทุกอย่าง work แล้ว sudden ไม่ทำ network tasks ได้ หากมี ideas, suggestions, experiences ส่ง mail มาได้ จบแล้ว
Cheers.