شروع کار با KVM (قسمت دوم) [Virtual Networking]

شاید برایتان این سؤال پیش آمده باشد که چرا در شماره قبل اینقدر سریع از آنچه گفتم گذشتم و خیلی از مسایل گفته نشد. KVM به عنوان یکی از اساسی‌ترین Hypervisor های زیر بار و مخصوصاً اینکه OpenStack در حال استفاده از آن می‌باشد، نیاز است بهتر از این گفته شود. هر چند شاید نتوانم آنقدر که نیاز خوانندگان سایتم است را برآورده کنم، اما سرنخی خوبی به آن‌ها بدهم.kvm
یکی از مهم‌ترین و اساسی‌ترین قسمت هر Hypervisor که بنا به نوع Hypervisor پیکربندی می‌شود قسمت Virtual Networking می‌باشد. پیکربندی آن برایم مهم نبود. اینکه خوانندگانم دید مناسبی روی آن پیدا کنند، بیشتر مد نظرم بود. هر چند به پیکربندی آن نیز کمی پرداخته‌ام.

نکته: اگر بر روی سیستم خود virt-manager را دارید درجا به دلایل زیر پاک کنید:

  • این یک سیستم GUI است و در سرور GUI معنی ندارد.
  • شاید بگویید برای آموزش خوب باشد، ولی این شما را از یادگیری پارامتر‌های virsh و سایر دستورات منحرف می‌کند.

نکته: برای بهتر یادگیری، bash_complete دستور virsh را دانلود کنید و از آن استفاده نمایید.(در صفحه اول گوگل پیدا می‌شود.) مطمئناً باید برای شل‌های دیگر نیز موجود باشد. به طوری که :

شروع کار با KVM (قسمت اول)
۱. پایه‌های Virtual Networking در KVM

اصولاً در چنین فضایی از یک Virtual Network Switch استفاده می‌شود. به شکل زیر توجه کنید:
Virtual Networking
نکته: با فرمان زیر می‌توان هر چه interface از نوع bridge موجود است را دید، (البته باید شبکه شما start خورده باشد):

KVM برای مجازی‌سازی شبکه، از سه سناریوی زیر استفاده می‌کند:

  • routed
  • isolated
  • nat

نکته: این ۳ سناریو در حالت عادی خام هستند و شما باید برای بهینه کردن آن‌ها توپولوژی خود را سوار بر این ۳ حالت کنید ولی در نهایت یکی از این ۳ حالت خواهد شد.
Isolated ترافیک ندارد و برای اهداف امنیتی طراحی گردیده است. اما چه nat ویا routed هر دو می‌توانند ترافیک به اشتراک بگذارند. این به نوع توپولوژی شما بستگی دارد.
نکته: از این به بعد، از کلمه Host که استفاده می‌شود برای کامپیوتری استفاده می‌شود که Hypervisor بر روی آن نصب است.

۱.۱ دستورات *-virsh net

قبل از انجام هر کاری باید یک شبکه را ایجاد نماییم. برای اینکار دو فرمان net-define و net-create وجود دارند.
نکته: net-create تازمانی از شبکه شما حمایت می‌کند که Daemon شما restart نشود. اما در عوض net-define به صورت Permanent یک شبکه ایجاد می‌کند.
فرمان net-list شبکه‌های شما را لیست می‌کند. به فرمان زیر دقت نمایید:

لیست کل شبکه‌ها اعم از فعال و غیر فعال را لیست می‌کند.
نکته: همه فایل‌های پیکربندی در KVM بر اساس XML می‌باشد.
قبل از هر کاری شما باید XML فایل برای شبکه خود در آدرس /etc/libvirt/qemu/networks/ ایجاد نمایید. بدین منظور می‌توانید از شبکه default استفاده نمایید:

حالا باید آن را بر مبنای شبکه خود ویرایش نماید. به متغیر‌های زیر در XML فایل خود توجه کنید:

  • تگ UUID
  • صفت mode در تگ forward
  • صفت name در تگbridge
  • تگ mac
  • تگ name

نکته: به هیچ عنوان فایلی را دستی تغییر ندهید. بلکه باید با انواع edit که virsh برایتان فراهم دیده کار کنید.
به عنوان مثال :

حتماً متغیر‌های بالا را قبل از start سفارشی کنید.
نکته: برای ایجاد یک UUID می‌توانید از دستور uuidgen استفاده نمایید.
نکته: تگ uuid ، تگ name ، تگ mac و صفت name در تگbridge باید یکتا باشند.
حال شبکه را تعریف می‌نماییم:

حال با فرمان virsh net-list –all می‌توان اسامی شبکه مورد نظر را دید.

قبل از تعریف شبکه با بکار بردن فرمان زیر چنین error ی دیده می‌شد:

اما حالا چنین دیده می‌شود:

با فرمان زیر میتوان یک شبکه را auto-start کرد:

و حالا خروجی فرمان net-info تغییر می‌کند:

برای stop کردن یک شبکه از فرمان زیر استفاده می‌کنیم:

باید مراحلی را با دقت پشت سر گذارید، بدین منظور با چند دستور باید آشنا گردید.

کمی توضیح در مورد فرمان‌های بالا :
دو خط اول یک interface شبکه را به صورت state down یا state up در می‌آورد. خط بعد فرمانی است که با Bridge ها کار می‌کند و پارامتر show کل bridge ها و مشخصات آن‌ها را نمایش می‌دهد. کاربرد خط بعد که در آن یک bridge را delete می‌کنید، یک پیش‌زمینه دارد، آنهم اینکه در ابتدا باید آن را با خطوط بالا down نمایید تا بتوانید آن را پاک کنید. ip l و ip a که در شماره ‌های پیشین برایشان مقاله نوشته‌ام.(رجوع شود به مقالات iproute2)
نکته: فرمان brctl در بسته bridge-utils قرار دارد.
باید خطوطی را در etc/network/interfaces/ اضافه نمایید که شامل مشخصاتIP address ها و bridge می‌باشد.
نکته: حتماً باید interface شما در این فایل با فایل داخل /etc/libvirt/qemu/networks/ مطابقت داشته باشد.

۲. شروع به کار

در ابتدا :

و مشخصات زیر را در etc/network/interfaces/ قرار می‌دهیم:

و سپس :
با virsh net-edit باید فایل xml شبکه خود را بدین صورت دربیاورید:

و سپس:

ممکن است با ایراد برخورد کنید ولی با ping امتحان کنید به جای تأسف بر ایرادات!
حال اگر با ip link ببینید اینترفیس bridge شما up شده است.
نکته: اگر اقدام به پیاده‌سازی هر سنازیویی مثل nat ، isolated و یا غیره کردید ، باید دو کار اساسی را انجام دهید:

  • virsh net-edit شبکه خود بر اساس سناریو
  • ویرایشetc/network/interfaces/ خود بر اساس سناریو

این سناریو است که همه چی را تعیین می‌کند.
نکته: هنوز یک مثال واقعی برای setup یک VM نزده‌ایم.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *