خب این پست رو که نسبتاً کوتاه‌هم هست رو می‌نویسم تا بگم که چطور میشه یک شبکه پل (Network Bridge) ساخت در توزیع‌های مختلف تا بشه ماشین‌مجازی ها توی شبکه خودمون IP بگیرن و دسترسی بهشون راحت‌تر باشه بجای اینکه پورتشون رو به localhost فوروارد کنیم و به اون ssh بزنیم.

به این توجه داشته باشید که این روش معمولاً با اتصال سیمی بهتر کار می‌کنه و با کارت‌های شبکه بی‌سیم اغلب مشکلاتی پیش میاد.

خب بریم شروع کنیم....

ایجاد پل پایدار روی سیستم میزبان

اول از همه باید یک شبکه پل ایجاد کنیم که رابط فیزیکی شبکه بهش متصل بشه. نام رابط شبکه رو با دستور ip link show پیدا می‌کنیم. معمولاً نام‌هایی مثل enp0s3 یا eth0 رو می‌بینیم.

در توزیع‌های مبتنی بر اوبونتو و دبیان که از نت‌پلن استفاده می‌کنن، پرونده پیکربندی شبکه رو در مسیر /etc/netplan/01-netcfg.yaml ویرایش می‌کنیم. قبل از اینکه هر تغییری بدیم، یک نسخه پشتیبان ازش می‌سازیم. محتوای پرونده باید به این صورت تنظیم بشه:

network:
  version: 2
  ethernets:
    enp0s3:
      dhcp4: false
  bridges:
    br0:
      interfaces: [enp0s3]
      dhcp4: true

در این پیکربندی، رابط فیزیکی دیگه مستقیماً نشانی اینترنتی دریافت نمی‌کنه و تمام ترافیک از طریق پل br0 عبور می‌کنه. بعد از ذخیره تغییرات، با دستور sudo netplan apply اون‌ها رو اعمال می‌کنیم.

در توزیع‌هایی که از Network Manager استفاده می‌کنن مثل فدورا و آرچ لینوکس، می‌تونیم از ابزار nmcli استفاده کنیم:

sudo nmcli con add type bridge ifname br0
sudo nmcli con add type ethernet slave-type bridge con-name bridge-slave-enp0s3 ifname enp0s3 master br0
sudo nmcli con up br0

این دستورات یک پل ایجاد می‌کنن و رابط فیزیکی رو بهش متصل می‌کنن.

فعال‌سازی یاور پل در QEMU

برای اینکه کاربران غیر ریشه (root) بتونن از قابلیت پل استفاده کنن، باید ابزار یاور پل QEMU رو پیکربندی کنیم. ابتدا پرونده /etc/qemu/bridge.conf رو ایجاد می‌کنیم و پل مورد نظر رو توش مجاز اعلام می‌کنیم:

echo "allow br0" | sudo tee /etc/qemu/bridge.conf

بعد مجوزهای اجرایی لازم رو بهش می‌دیم:

sudo chmod u+s /usr/lib/qemu/qemu-bridge-helper

این تنظیمات فقط یک بار لازمه و در اجراهای بعدی ماشین مجازی دیگه نیازی نیست.

اجرای QEMU با شبکه پل

وقتی ماشین مجازی رو راه‌اندازی می‌کنیم، از پارامتر -nic bridge برای اتصال به پل استفاده می‌کنیم. یک نمونه از دستور اجرا به این صورته:

qemu-system-x86_64 \
  -enable-kvm \
  -m 4G \
  -cpu host \
  -drive file=vm-disk.qcow2,if=virtio \
  -nic bridge,br=br0,model=virtio-net-pci,mac=52:54:00:12:34:56

در این دستور، نشانی سخت‌افزاری باید برای هر ماشین مجازی یکتا باشه. استفاده از پیشوند 52:54:00 برای سازگاری با QEMU توصیه می‌شه. مدل virtio-net-pci بهترین عملکرد رو ارائه می‌ده. QEMU به صورت خودکار یک رابط اشتراکی موقت ایجاد می‌کنه و اون رو به پل متصل می‌کنه.

پیکربندی شبکه در ماشین مجازی

بعد از بارگذاری ماشین مجازی، رابط شبکه داخل اون رو پیکربندی می‌کنیم. می‌تونیم از dhcp استفاده کنیم تا ماشین مجازی به صورت خودکار نشانی اینترنتی دریافت کنه، یا یک نشانی ثابت در همون زیرشبکه میزبان تنظیم کنیم. برای مشاهده نشانی اینترنتی دریافت‌شده، از دستور ip addr در پایانه ماشین مجازی استفاده می‌کنیم.

دسترسی از طریق ssh

بعد از دریافت نشانی اینترنتی توسط ماشین مجازی، می‌تونیم از هر دستگاهی در شبکه محلی بهش متصل بشیم:

ssh user@guest-ip-address

در این حالت نیازی به هیچ‌گونه تنظیم هدایت درگاه نیست، چون ماشین مجازی مستقیماً در شبکه حضور داره.

رفع مشکلات رایج

اگه مشکلی در اتصال پیش اومد، اول وضعیت پل رو با دستور ip link show br0 بررسی می‌کنیم. اگه ماشین مجازی نمی‌تونه نشانی اینترنتی دریافت کنه، تنظیمات دی‌اچ‌سی‌پی مسیریاب و دیوار آتش سیستم رو کنترل می‌کنیم. در برخی موارد ممکنه لازم باشه ترافیک پل رو در دیوار آتش مجاز کنیم:

sudo iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT

اگه قصد اجرای چندین ماشین مجازی رو داریم، همه اون‌ها می‌تونن از همون پل استفاده کنن، به شرطی که هر کدوم نشانی سخت‌افزاری متفاوتی داشته باشن. با این پیکربندی، ماشین مجازی در لایه دوم شبکه عمل می‌کنه و از نظر شبکه تفاوتی با یک دستگاه فیزیکی نداره.

کامنت‌ها

نظر خودتان را بنویسید! با هر حساب متصل به فدیورس می‌توانید نظر خود را بنویسید (مانند ماستودون)