Thursday, June 20, 2013

Windows 2012 Hyper-V 3.0 Network Virtualization (ตอนที่ 2)

 

แท่นแท๊น กลับมาแล้วครับ Network Virtualization บน Hyper-V 3.0 ตอนที่ 2 ที่จากตอนเดิมที่แล้วผมได้เกิ่นไว้คราวๆ ว่า network virtualization คืออะไร ไอเดียและ concept เป็นแบบไหน ที่นี้ลองมาดูตัวอย่างที่อธิบายการทำงานทางด้านเทคนิคกันบ้างครับ

ข้อมูลจาก Technet

“A new feature in Hyper-v 3.0 is network virtualization which allow hosting providers to host VMs from different customer that can have the same IP address schema without the need to change their IP address or facing any IP conflict errors. Hyper-v provide two method to achieve this :

    • IP packet encapsulation protocol Generic Routing Encapsulation (GRE), that encapsulate VM traffic into hyper-v traffic and use the host IP to deliver the encapsulated traffic to its destination hosting hyper-v.
    • IP Rewrite : is Kind of Static Nat configuration where each VM IP address get rewritten using physical  IP address before it is transferred on the physical network.

วิธีการทดสอบที่จะเห็นต่อไปนี้ผมเลือกใช้วิธีการ GRE มานำเสนอให้ดูก่อนครับว่าวิธีการทำงานเป็นอย่างไร ok งั้นมาเริ่มกันเลยดีกว่าครับ ใครคันไม้คันมืออยากจะลองทำดูก็ลองๆ หา resource ตาม diagram ที่ผมเตรียมมาลองดูนะครับ

รูป diagram ที่เตรียมทำ LAB ในครั้งนี้

LAB Diagram(3)

โดย LAB ที่ทางผมจัดเตรียมขึ้นมาก็ไม่มีอะไรมากครับ หาเครื่อง Host (Physical) สองเครื่องโดยเครื่อง Host มี card lan แค่ใบเดียวครับจากนั้นติดตั้ง Windows Server 2012 + Enable Hyper-V Role ไว้ครับ

 

รูป physical card lan จริงมี 1 port ก่อนเริ่มสร้าง virtual switch

1_pNIC

จากนั้นบน Hyper-V ให้เราทำการสร้าง Virtual Switch (Type: External network: binding เข้ากับ card lan เครื่อง และติ๊ก option: allow management operating system to share this network adapter) ขึ้นมาหนึ่ง virtual switch

 

รูป การสร้าง External virtual switch สำหรับ VM และ Host ใช้งานแชร์ร่วมกัน

2_CreateVS

หลังจากสร้าง virtual switch แล้วเมื่อเรากลับไปดูใน network and sharing center เราจะเห็น card lan เพิ่มมาอีก 1 ใบครับ

3_VS

 

และทำการเตรียมเครื่อง VM ขึ้นมาสองเครื่อง โดยจำลองว่า VM สองเครื่องนี้เป็นของลูกค้าเราคนละเจ้า ที่เข้ามาใช้บริการ Host ของเรา (ไม่ต้องไปสนใจ 3 VM ข้างล่างนะครับอันนั้นเตรียมไว้เขียน blog เรื่อง SQL 2012 Always On)

4_PrepVM

 

ที่นี้เราได้ environment ที่พร้อมจะทดสอบการทำงานของ Network Virtualization บน Windows 2012 hyper-V 3.0 แล้ว ถัดมาครับ ผมตั้งสถานะการณ์จำลองว่า VM ของลูกค้าทั้งสองเจ้านี้ fix ip เป็นเบอร์เดียวกันครับ

ลองคิดตามนะครับ ปกติเครื่องที่เชื่อมต่ออยู่บน switch ตัวเดียวกันไม่ได้แบ่ง VLAN ถ้าคุณใช้ ip address เบอร์เดียวกันจะเกิดอะไรขึ้นครับ……

แน่นอนครับ ip conflict กัน…..แล้ววิธีป้องกันหรือแก้ไขเพื่อไม่ให้ ip ของสองเครื่องนี้ชนกันทำอย่างไร? ก็กำหนดให้สองเครื่องอยู่กันคนละ VLAN สิ ip address เหมือนกันก็จะไม่ชนกันแล้ว !!! ถูกครับไม่ชนกัน แต่จะทำแบบนั้นได้ switch เองก็ต้องรองรับการแบ่ง VLAN

แล้วถ้า switch ไม่ support VLAN จะทำอย่างไรดีครับ? (คงไม่มีใครตอบว่าให้ถอดสายแลนเครื่องใดเครื่องหนึ่งออกก็สิ้นเรื่องนะครับ 555) ละไว้ในฐานที่เข้าใจของ network admin ที่หาทางออกได้ส่วนใครหาทางออกไม่ได้ลองดู idea network virtualize ดูก่อนไหมครับ เผื่อว่าจะคิดอะไรออกบ้าง

 

มาเข้าเรื่องของ LAB กันดีกว่า

CustomerA-VM1 ผมกำหนดให้ ip address 192.168.1.50/24

ลองดู ip address ของ CustomerA-VM1 ก่อนจะ fix ip จะเห็นว่า ip เป็น APIPA ip อยู่

5_beforefixIP

5_1beforefixIP

 

หลังจาก fix ip

6_FixIP

เช็ค ip address ด้วย powershell

6_1FixIP

 

เครื่องแรกผ่านไป มาที่เครื่องที่สองบ้างครับ

CustomerB-VM1 ผมกำหนดให้ ip address 192.168.1.50/24 เหมือนกันจะเกิดอะไรขึ้น!

ก่อน fix ip

7_beforeFix

หลังจาก fix ip แล้ว (powershell ยังไม่บ่งบอกว่า ip conflict)

8_FixIP

แต่ถ้าเราไปรัน ipconfig /all ที่เครื่อง CustomerB-VM1 จะเห็นฟ้องว่า ip duplicate!!

9_Duplicate

สาเหตุที่ CustomerB-VM1 ip conflict กันเพราะว่าต่ออยู่บน virtual switch เดียวกัน (มองเหมือนต่ออยู่บน physical switch เดียวกัน) เมื่อ fix ip เหมือนกับตัวแรกทำให้เครื่อง CustomerB-VM1 โชว์ข้อความว่า duplicate

แต่ถ้าเราลองเข้าไปดูข้อมูลลึกลงไปอีกจะเห็นว่า VM ทั้งสองเครื่องต่ออยู่บน virtual switch เดียวกันถ้าอยากให้ใช้งานได้โดยเสมือนว่าเราแบ่ง VLAN ให้กับ VM ทั้งสองก็สามารถทำได้ครับ ( default ก็เหมือนกับ switch ทั่วไปที่ VLAN ID = 0 หรือ 1)

10_defaultVLAN

ที่นี้เราพอรู้แล้วว่าบน virtual switch ของ Hyper-V เราสามารถทำการแบ่ง VLAN (Private VLAN บน Hyper-V หรือเขียนย่อๆ ว่า PVLAN) ให้กับ VM ที่เชื่อมต่ออยู่บน virtual switch เดียวกันเพื่อให้ VM ที่มี ip address เดียวกันสามารถที่จะทำงานภายใต้ Host เดียวกัน และ virtual switch เดียวกันได้

มาดูวิธีทำกันดีกว่า

ที่เครื่อง CustomerB-VM1 ผมจะกำหนดให้อยู่ VLAN คนละ ID กับ CustomerA-VM1 โดยใช้ powershell command กำหนดค่า VirtualSubnetId ลงไป

11_AssignVLAN

เพียงเท่านี้ VM สองเครื่องก็จะสามารถทำงานอยู่บน Host เดียวกัน virtual switch เดียวกันโดยที่ใช้ ip address เหมือนกันด้วยครับ  (ขาดอะไรที่ยังไม่เหมือนกันอีกไหม)

ก็ขอจบบทความนี้ไว้เพียงเท่านี้ก่อนนะครับ เดียวมีตอนที่ 3 ต่อนะครับผม ในเวลาอันเร็วไวนี้แน่นอนครับ เพราะที่ผมแสดงให้เห็นข้างบนที่ผ่านมายังไม่ได้เข้าถึงเรื่อง GRE เลยสักกะติ๊ดเดียวครับ อันนี้แค่น้ำจิ้มๆ เรื่อง Private VLAN แค่นั้นเองครับ

ไว้ติดตามตอนที่ 3 ต่อไปนะครับ ขอไปหาเครื่องมาเทสก่อนครับผมมมม…

No comments:

Post a Comment