ปรับแต่ง virtualbox บน Ubuntu ให้ใช้ Guest ซึ่งต่อ Host-Only Networking ใช้ Internet ได้

จาก Wiki Opensource

โดย KX

สภาพแวดล้อม : Ubuntu Desktop 9.04, VirtualBox 3.0.2, Guest OS (2 Ubuntu Servers 8.04)


การต่อ Network ใน VirtualBox นั้นมีหลายแบบ

- NAT

- Bridge

- Internal Network

- Host-Only


ซึ่งหากต้องการทำการทดสอบ Server ต่างๆ ก่อนจะติดตั้งในระบบจริง การใช้ VirtualBox ให้ความสะดวกมาก

ระบบที่ต้องการคือ

1. มี Private IP ไม่เกี่ยวข้องกับภายนอก เช่นเล่นกับ ADSL ที่บ้าน หรือ ทดสอบใน Network ของที่ทำงานซึ่งจำกัดการใช้งาน IP Address

2. ต้องการให้เครื่อง Guest (เครื่องที่เป็น Virtual Machine) สามารถต่อ Internet เพื่อ Update ได้ด้วย

3. ไม่ต้องการให้ Network ภายนอกเข้าถึงเครื่องเหล่านี้ แต่ต้องการให้เฉพาะเครื่องที่เป็น Host OS สามารถติดต่อกับเครื่องภายในได้


ในการนี้ NAT ก็ไม่เหมาะ เพราะเมื่อมี Guest หลายๆเครื่อง มันจะมองไม่เห็นกัน

Bridge ก็ไม่เหมาะเพราะ แม้เครื่อง Guest จะสามารถใช้งาน Internet ได้ แต่หากติดตั้งแบบพื้นฐาน Guest จะได้ IP จริง (ใน Network เดียวกับ Host) และทำให้เครื่องภายนอก เข้าถึงเครื่องทดสอบได้

การติดตั้งให้ Bridge Network ทำงานได้ตามประสงค์ จะต้องแก้ไข Network Interface ของ Host OS ให้มี 2 IP Address ซึ่งค่อยข้างซับซ้อน


VirtualBox ใน Version ใหม่ๆ อย่าง 3.0.2 จึงมี Network แบบ Host-Only มาช่วยให้สามรถใช้งานตามต้องการได้ง่ายๆ ดังนี้

1.  ที่ Host OS (ในที่นี้ใช้ Ubuntu Desktop 9.04) ใช้คำสั่งต่อไปนี้

           sudo sysctl net.ipv4.ip_forward=1

           sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

      หากต้องการให้ทำทุกครั้งที่ boot เครื่อง ให้เขียนไว้ใน /etc/rc.local ก่อนบรรทัดที่เขียนว่า exit 0

           iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

       และเขียนใน /etc/sysctl.conf ที่บรรทัดล่างสุด

           net.ipv4.ip_forward = 1
      

2. ติดตั้ง dnsmasq เพื่อช่วยในการทำ DHCP และ DNS ง่ายๆ

           sudo apt-get install dnsmasq

           sudo /etc/init.d/dnsmasq stop

    2.1 แก้ไขไฟล์ /etc/dnsmasq.conf โดยแก้ interface ที่เครื่อง Guest จะถาม DHCP ในที่นี้คือ vboxnet0

          และแก้ไข  dhcp-range เพื่อกำหนดช่วยที่จะปล่อย ip address ในที่นี้ให้เป็นช่วย 10.0.2.130 - 10.0.2.140

            interface = vboxnet0

            dhcp-range = 10.0.2.130, 10.0.2.140,12h

          จากนั้น start dnsmasq ด้วยคำสั่ง

            sudo /etc/init.d/dnsmasq start

    2.3 การกำหนด Name ให้กับ IP Address ต่างๆที่แจกไปจาก DHCP ของ dnsmasq

          สามารถกำหนดที่ /etc/hosts ของเครื่อง Host ได้เลย เช่น
             10.0.2.131    u1.mydomain.com
             10.0.2.132    u2.mydomain.com
             10.0.2.133    u3.mydomain.com

          จากนั้น start dnsmasq ด้วยคำสั่ง

            sudo /etc/init.d/dnsmasq start

     2.4 หากต้องการกำหนด MX Record สำหรับระบบ E-Mail ภายใน ให้กำหนดค่า mx-host ใน /etc/dnsmasq.con ด้วย เช่น

           ต้องการให้ gw1.mydomain.com ทำหน้าที่เป็น MX ของ Domain mydomain.com ซึ่งอาจทำหน้าที่เป็น Spam Filtering

           หมายความว่า หากมี E-Mail ส่งให้ @mydomain.com ระบบจะส่งให้ gw1.mydomain.com เป็นต้น  โดยให้กำหนดค่าดังนี้

               mx-host=gw1.mydomain.com, mydomain.com, 10

           หากต้องการมี Failover ก็สามารถกำหนด Server ที่ทำหน้าที่รับช่วงต่อ หาก gw1.mydomain.com เสีย สมมุติให้ชื่อ gw2.mydomain.com

           โดยกำหนดตัวเลข หลังสุด เป็นมีค่ามากกว่า อันดับแรก เช่น 20 เป็นต้น

           ให้กำหนดดังนี้

               mx-host=gw1.mydomain.com, mydomain.com, 10

               mx-host=gw2.mydomain.com, mydomain.com, 20


3. ที่ VirtualBox GUI ให้ตั้งค่าใน

     เมนู File -> Preferences -> Network

     คลิกที่ Virtual Interface ซึ่งอาจจะชื่อว่า vboxnet0 แล้วกด Space Bar

     ในที่นี้ ต้องการให้ Network Adapter มี IP Address เป็น 10.0.2.128

 

     ที่สำคัญ ห้ามใช้ DHCP ของ VirtualBox ที่ให้มา เพราะทำอะไรหลายๆอย่างไม่ได้

 

4. สร้าง/ตั้งค่า Guest OS ในส่วนของ Network -> Adapter 1

    ค่า Attached to: ตั้งค่าเป็น Host-Only Adapter


5. เมื่อ Run Guest OS ขึ้นมา ให้ตั้งค่า Network แบบเรียกข้อมูลจาก DHCP ทั้งหมดได้เลย

    หรือจะกำหนด IP Address เองก็ได้ หากต้องการทำเป็น Server ทดสอบ แต่ต้องอยู่ใน Subnet ที่กำหนดไว้