شبکه سیستمعامل
در بیشتر موارد برای اینکه ابرکتان به اینترنت یا شبکهای متصل باشد، نیازی به تنظیمات خاصی بعد از ساخت ابرک نیست، چون پس از ساخت و بوت شدن ابرک، سیستم عامل با استفاده از DHCP و تنظیماتی که با Cloud-init انجام شده، اطلاعات درست و لازم را دارد. اما گاهی پیش میآید که میخواهیم چند اینترفیس داشته باشیم و یا IP را بهشکل دستی روی اینترفیسها قرار دهیم، یا تغییراتی را بسته به محیطی که میخواهیم، داشته باشیم. در این راهنما تنظیمات شبکهی سیستمعامل را بررسی خواهیم کرد.
تنظیم Interface و شبکه توزیعهای لینوکس
روش تنظیم اینترفیس و تنظیمات شبکه در توزیعهای مختلف لینوکس میتواند کمی متفاوت باشد. در این مقاله سعی میکنیم تنظیمات اولیهی شبکه را در اکثر توزیعهای لینوکس توضیح دهیم.
در فرآیند آمادهشدن ایمیجها در آروان یا Cloud Ready کردن سیستم عاملها، بستهای (package) به اسم cloud-init روی سیستم عامل نصب شده که بهطورکلی وظیفهی فراهمکردن مجموعهای از متادیتا برای ابرک را دارد. این بسته میتواند ssh key شما، اسم ابرک و بسیاری دادهی دیگر را هنگام بوت به ابرک تزریق کند. نکتهای که باید به آن توجه کنید، هنگام پیکربندی دستی برخی کامپوننتهای سیستم عاملتان است، که این بسته میتواند کانفیگهای استاندارد شبکه را هم علاوهبر بسیاری موارد دیگر، تنظیم کند. اگر قرار است اینترفیس ابرک یا تنظیمات شبکهی ابرک را دستی تنظیم کنید و بعد از ریبوت، این تنظیمات دایمی باشند، حتمن با دستورهای زیر فایل 99-custom-networking.cfg را ایجاد و آن را با cloud-init کانفیگ کنید:
sudo nano /etc/cloud/cloud.cfg.d/99-custom-networking.cfg
و محتوای فایل را برابر فرمان زیر قرار دهید:
network: {config: disabled}
تنظیم DNS
اگر قرار است ابرکتان بهعنوان یک کلاینت DNS باشد، لازم است سوالهای DNS از یک سرور پرسیده شود. برای تنظیم اینکه از چه سروری سوال شود، در همهی توزیعها به فایل etc/resolv.conf/ مراجعه میشود. در برخی توزیعهای جدیدتر ممکن است این فایل خود یک لینک به فایلی دیگر باشد و محتوای این فایل از ابزارهای جانبی مدیریت شبکه کم یا زیاد شود. برای مثال ممکن است در نسخههای جدید Debian و Ubuntu این فایل بهطور غیرم ستقیم با system-resolved مدیریت شود، یا گاه با initscripts، یا NetworkManager. در چنین حالتی تغییر دستی فایل بعد از ریبوت ماندگار نیست.
نکته: دقت کنید حتا اگر موارد بالا در توزیعی وجود نداشته باشد، ممکن است سیستم عاملتان اطلاعات DNS را از DHCP دریافت کند و باعث overwrite شدن تنظیم قبلی شود. یک راه حل ساده برای اکثر توزیعها میتواند جایگزینکردن symbolic link با یک فایل جدید باشد؛ با محتوای مورد نظرمان و در آخر read-only کردن آن فایل. برای این کار میتوانید از دستور زیر استفاده کنید:
sudo rm -f /etc/resolv.conf
sudo nano /etc/resolv.conf
در این مرحله باید محتوای فایل را با nameserver های موردنظر پر کنید، مثلن:
nameserver 8.8.8.8
nameserver 8.8.4.4
سپس فایل را با دستور زیر Read-Only کنید:
sudo chattr +i /etc/resolv.conf
در آینده برای اعمال تغییرات حتمن ابتدا با دستور زیر فایل را از حالت read-only خارج کنید:
sudo chattr -i /etc/resolv.conf
Ubuntu و Debian
در اوبونتو و دبیان افزون بر راهحلی که ابتدا گفتیم، میتوانید از بستهی resolvconf نیز برای تنظیم استفاده کنید. اگر این بسته در سیستمعاملتان نصب نبود میتوانید با دستور های زیر، آن را نصب کنید:
sudo apt update
sudo apt install resolvconf
اگر در مرحلهی نصب نیز با خطای name resolution روبهرو شدید، میتوانید موقتن فایل را به یک nameserver درست که پاسخگوست ویرایش کنید و سپس بسته را نصب کنید.
برای تنظیم nameserverهای خود میتوانید فایل زیر را ویرایش کنید:
sudo nano /etc/resolvconf/resolv.conf.d/head
و این خطوط را به آن اضافه کنید:
nameserver 8.8.8.8
nameserver 8.8.4.4
فایل را ذخیره کرده و سپس سرویس را با دستورهای زیر دوباره راهاندازی کنید:
sudo systemctl restart resolvconf.service
sudo systemctl restart systemd-resolved.service
حال میتوانید وضعیت سرویس را بررسی کنید تا مطمین شوید فعال است:
sudo systemctl status resolvconf.service
پس از این با مشاهدهی فایل etc/resolv.conf/
باید تغییرات را مشاهده کنید.
CentOS و RHEL
در توزیعهای مبتنی بر ردهت، با هر بار ریبوت یا ریاستارت سرویسِ network ممکن است محتوای فایل resolv.conf از طریق NetworkManager وDHCP با اجرای اسکریپتهای زیر overwrite شود.
/etc/sysconfig/network-scripts/ifup-post
/etc/sysconfig/network-scripts/ifdown-post
راه حل اول میتواند مشکلتان را حل کند، اما اگر میخواهید NetworkManager این فایل را overwrite نکند، میتوانید مراحل زیر را انجام دهید:
sudo nano /etc/NetworkManager/conf.d/90-dns-none.conf
محتوای فایل را با مقادیر زیر پر کنید:
[main]
dns=none
در ادامه NetworkManager را reload کنید:
sudo systemctl reload NetworkManager
دقت کنید ممکن است از طریق cloud-init، این فایل یا فایلی با محتوای مشابه از پیش در دایرکتوری یادشده وجود داشته باشد که برای اطمینان میتوانید ابتدا این مورد را بررسی کنید و بعد آن فایل را بسازید. در پایان میتوانید فایل resolv.conf را ویرایش کنید و برای اطمینان بیشتر، با دستور chattr که بالاتر گفته شد، آن را read-only کنید.
بررسی و تنظیم شبکه با IPROUTE2
در توز یعهای مختلف لینوکس با استفاده از بستهی پیشفرض iproute2 میتوانید تنظیمات مربوط به اینترفیسها را بررسی کنید و حتا تغییراتی در آنها ایجاد کنید، اما تغییرات ایجادشده دایمی نیستند و بعد از هر بار ریبوت، پاک میشوند.
۱. بررسی وضعیت کلی اینترفیسها
ip addr show
۲. اضافه و پاککردن IP اینترفیس
sudo ip addr add 192.168.50.5/24 dev eth0
به جای eth0 اسم اینترفیس مورد نظر و به جای IP و subnet هم اطلاعات مورد نظر خودتان را وارد کنید. دقت کنید که این دستور اطلاعات IP قبلی را پاک نمیکند و بهعنوان IP دوم به اینترفیس مورد نظر اضافه میشود. برای حذف آن، دستور زیر را میتوان استفاده کرد:
sudo ip addr del 192.168.50.5/24 dev eth0
sudo ip addr flush dev eth0
۳. نمایش وضعیت اینترفیسها
ip link show
۴. غیرفعال یا فعالکردن لینکها
ip link set eth0 down
ip link set eth0 up
۵. نمایش جدول روت پیشفرض سیستم عامل
ip route show
۶. اضافه یا کمکردن روت
برای مثال ما برای شبکهی 10.10.20.0/24 از اینترفیس eth0 استفاده میکنیم و next-hop یا اینترفیسی که ترافیک قرار است به آن تحویل داده شود، آدرس 192.168.50.100 را دارد. برای حذفش کافی است range را وارد کنید. اگر برای یک range چند روت ثبت شده، میتوانید با دادن جزییات بیشتر، مثل اسم اینترفیس، فقط همان را پاک کنید.
sudo ip route add 10.10.20.0/24 via 192.168.50.100 dev eth0
sudo ip route del 10.10.20.0/24
sudo ip route del 10.10.20.0/24 dev eth0
گرفتن اطلاعات از DHCP در زمان اجرا
گاه در زمان اجرای سیستم عامل، نیاز داریم اطلاعات مربوط به IP و GATEWAY و ... را از طریقDHCP دریافت کنیم. سادهترین کار استفاده از ابزار dhclient است. پیش از استفاده از این ابزار باید مطمین شویم اینترفیسی که مورد نظرمان است وضعیت فعال دارد. روش بررسی این مورد را پیشتر خواندیم. میتوانیم از ابزاری که معرفی کردیم بهشکل زیر استفاده کنیم:
sudo ip link set dev ethX up
sudo ip addr flush dev ethX
sudo ip route flush dev ethX
sudo dhclient ethX -v
دقت کنید که به جای ethX باید اسم اینترفیس مورد نظر را قرار دهید.
تنظیم اینترفیسهای ابرک در لینوکس
در هر توزیعی، پیکربندی فایلهای مربوط به اینترفیس میتواند در جای متفاوتی از سیستم عامل قرار داشته باشد.
اگر قرار است کانفیگ اینترفیس عمومی را از حالتDHCP به حالت Static یا Manual تغییر دهید، حتمن ابتدا اطلاعات دریافتشدهیDHCP را برای استفادهی مجدد جایی ذخیره کنید.
RHEL/Centos
برای ابرکهای با سیستم عامل مبتنی بر ردهت، میتوانید این فایلها را ویرایش کنید:
- تنظیمات Global
/etc/sysconfig/network
- تنظیمات هر اینترفیس
/etc/sysconfig/network-scripts/ifcfg-[interfacename]
- تنظیمات روت تیبل و روت مربوط به هر اینترفیس
/etc/sysconfig/network-scripts/route-[interface-name]
فایل اول تعدادی تنظیمات global دارد که بهطور پیشفرض دارای مقادیر زیر است:
همانطور که در تصویر میبینید، پس از آنکه cloud-init ابرک این فایلها را ساخت، تغییر آنها بدون غیرفعالکردن تنظیمات cloud-init در خصوص شبکه بیفایده است و بعد از ریبوت پاک میشود. مطمین شوید اگر قرار است تنظیمات را دستی انجام دهید cloud-init برای این بخش غیرفعال باشد. مطمین شوید در این فایل مقدارهای زیر وجود داشته باشد.
NETWORKING=yes
NETWORKING_IPV6=no
IPV6INIT=no
NOZEROCONF=yes
عبارت NETWORKING فعال یا غیرفعال بودن شبکه را مشخص میکند و میتواند مقدارهای Yes یا No را داشته باشد. دو عبارت بعدی برای غیرفعال کردن ipv6 است و عبارت nozeroconf برای فعالکردن تکنیکی است که بهشکل خودکار یک روت 169.254.0.0/255.255.0.0 در روت سیستم ایجاد میکند.
فایل بعدی برای تنظیم هر اینترفیس روی ابرک است.
/etc/sysconfig/network-scripts/ifcfg-[interfacename]
در این فایل نام اینترفیس در انتهای هر فایل قرار دارد. برای مثال اگر اینترفیس دومی برای شبکهی خصوصی به ابرک اضافه شده، میتوانید فایل جداگانهای برایش بسازید و تنظیماتش را در آن قرار دهید.
این فایل هم برای مثال روی یک ابرک بهطور پیشفرض دارای مقادیر بالا است. هر یک از عبارتها موارد مختلفی را کنترل میکنند. برای مثال:
- عبارت BOOTPRO میتواند حاوی مقادیر dhcp ،bootp ،none باشد.
- عبارت DEVICE مشخصکنندهی اینترفیسی است که قرار است پیکربندی شود.
- عبارت HWADDR مشخصکنندهی مکآدرس اینترفیسی است که قرار است تنظیم شود.
- عبارت MTU هم دارای مقداری عددی است که برای اینترفیسهای پابلیک، 1500 و برای اینترفیسهای شبکهی خصوصی، مقدار 1450 مناسبند.
- عبارت ONBOOT باعث فعالشدن یا نشدن اینترفیس هنگام بوت است.
- عبارت TYPE نوع اینترفیس را مشخص میکند.
- عبارت USERCTL مشخص میکند آیا یوزرهای غیر روت اجازهی تغییر این اینترفیس را دارند یا خیر .
- عبارت GATEWAY مشخص میکند که قرار است روی این اینترفیس gateway داشته باشیم و مقدارهایش برابر با IP default gateway است.
- عبارت IPADDR آدرس IP اینترفیس را مشخص میکند.
- عبارت NETMASK برای مشخصکردن subnetmask شبکه است.
لزومن نیازی به داشتن همهی عبارتهای بالا در کانفیگ فایل نیست اما بهطور پیشفرض میتوانید برای ا ینترفیسی که قرار است بهشکل دستی پیکربندی شود، موارد بالا را در نظر بگیرید. مقادیر بیشتر را میتوانید از مستندات مربوط به توزیع مربوطه مطالعه کنید. برای مثال، فرض میکنیم ابرک ما دو اینترفیس خصوصی و عمومی (Public) دارد و میخواهیم اینترفیس پابلیک از DHCP و زیرساخت آروان، مشخصات را دریافت کند، اما اینترفیس خصوصی بهشکل دستی کانفیگ شده باشد. نکته: دقت کنید اگر نیاز داشتید، اول فایل مربوط به اینترفیس را بسازید و حتمن اگر اسم اینترفیسی را نمیدانید، ابتدا با دستوری مثل IP link اسم اینترفیس را به دست آورید و بعد برای ساخت فایل مطابق با آن اسم اقدام کنید.
اینترفیس پابلیک:
sudo nano /etc/sysconfig/network-scripts/ifcfg-eth0
محتوای فایل اینترفیس پابلیک
BOOTPROTO=dhcp
DEVICE=eth0
MTU=1500
ONBOOT=yes
TYPE=Ethernet
USERCTL=no
اینترفیس پرایوت:
sudo nano /etc/sysconfig/network-scripts/ifcfg-eth1
محتوای فایل اینترفیس پرایوت
BOOTPROTO="none"
DEVICE=eth1
MTU=1450
IPADDR="192.68.0.100"
NETMASK="255.255.255.0"
ONBOOT=yes
TYPE=Ethernet
USERCTL=no
نکته: اگر ابرک float ip ندارد و برای اینترنت از اینترفیس پابلیک استفاده میکنید، لزومی به کانفیگ GATEWAY نیست.
در نهایت میتوانیم بعد از تعریف کانفیگ با دستورهای زیر، اینترفیس را با تنظیمات جدید فعال کنیم:
sudo ifdown eth0
sudo ifup eth0
یا سرویس Network را ریاستارت کنیم:
sudo systemctl restart network
Debian و Ubuntu
برای کانفیگ Static اینترفیس توزیعهای مبتنی بر دبیان کافی است فایل زیر را ویرایش کنید:
/etc/network/interfaces
روی ابرک بهطور پیشفرض ممکن است این فایل حاوی محتوای خاصی نباشد و فایلهای کانفیگ اینترفیس، بهشکل جداگانه از دایرکتوری زیر خوانده شود:
/etc/network/interfaces.d
برای تنظیم دستی، این مرحله را میتوانید انجام دهید:
sudo rm -f /etc/network/interfaces.d/*
sudo nano /etc/network/interfaces
و برای تنظیم روی حالت DHCP محتوای فایل را برابر مقادیر زیر قرار دهید:
auto ens3
iface ens3 inet dhcp
یا:
auto ens3
iface ens3 inet static
address 194.5.193.25
netmask 255.255.254.0
gateway 194.5.192.1
برای مثال، ابرکی با دو اینترفیس عمومی و خصوصی داریم که کانفیگ شبکهی خصوصی بهشکل STATIC است و محتوای تنظیمات بهشکل زیر است:
در نهایت بعد از تنظیم میتوانید با ریبوتکردن یا ifdown و ifup اینترفیس را با کانفیگی که انجام شد فعال کنید.
sudo ifdown ens3
sudo ifup ens3
Ubuntu 18.04 / Netplan configuration
اوبونتو از نسخهی 18.04 شروع به استفاده از netplan برای پیکربندی کارت شبکه و تنظیمات مربوط به آن کرد. درnetplan تنظیمات در قالب یک فایل yaml نوشته میشود. با نوشتن تنظیمات در این فایل netplan با استفاده از یکrenderer، تنظیمات مناسب را با توجه به اینکه سیستمعامل از چه سیستمی برای تنظیمات شبکه استفاده میکند، تولید میکند. فایلهای کانفیگ netplan در دایرکتوری etc/netplan/*.yml/ قرار دارند. در ابرکهای ubuntu که از آروان تهیه میکنید، همانطور که قبلتر گفتیم، تنظیمات پیشفرض وجود دارد، اما ب رای تنظیم دستی میتوانید بهشکل زیر اقدام کنید:
دقت کنید اول باید cloud-init را تنظیم کنید که تنظیمات شبکه در آن تغییری ایجاد نکند و تنظیمات بعد از ریبوت ثابت بماند.
فایل yaml ساختاری آبشاری دارد و ارتباط بین پارامترها با space مشخص میشود. پس در نوشتن این فایل دقت کنید که از tab برای جدا کردن پارامترها استفاده نکنید، زیرا با خطا مواجه خواهید شد.
وارد دایرکتوری etc/netplan/ شوید و فایلی را که وجود دارد برای تنظیم شخصی با یک ادیتور باز کنید، یا فایل قبلی را پاک کنید و فایلی جدید بسازید:
sudo nano /etc/netplan/*.yml
فایل ساختاری شبیه به زیر دارد:
network:
version: 2
renderer: networkd
ethernets:
DEVICE_NAME:
dhcp4: yes/no
addresses: [IP_ADDRESS/NETMASK]
gateway4: GATEWAY
کانفیگ بالا یک نمونه قالب ساده از تنظیم کارت شبکه را نشان میدهد، که به توضیح برخی موارد و پارامترها میپردازیم.
دقت کنید DEVICE_NAME اسم اینترفیسی است که قرار است تنظیم شود. این اسم را میتوانید با دستور ip link پیدا کنید.
- پارامتر dhcp4 باعث فعالبودن یا نبودن dhcp ورژن ۴ برای اینترفیس میشود.
- پارامتر address برای تنظیم IP روی اینترفیس است، که میتوان یک یا چند IP اینجا وارد کرد.
- پارامتر gateway برای تنظیم یک gateway روی این اینترفیس است که برای اینترفیسهای پابلیک ابرکها ضروری است.
- پارامتر renderer مشخصکنندهی backend شماست که در سرور اوبونتو systemd-networkd است.
نمونهی تنظیم یک ابرک متصل به شبکهی پابلیک و یک شبکهی خصوصی بهشکل زیر است:
پارامتر mtu برای تنظیم mtu لینک است که حتمن باید همراه با پارامتر macaddress تنظیم شود. پارامتر macaddress ، مکآدرس deviceای است که قرار است تنظیم شود و اگر مکآدرس اشتباه باشد، تنظیمات روی device اعمال نخواهد شد؛ در واقع پارامتری برای مشخصکردن دقیق اینترفیس در حال تنظیم است.
پس از وارد کردن، برای اعمال تنظیمات کافی است دستور:
sudo netplan apply -d
را وارد کنید. با وجود خطا در syntax ساختار yaml به دلیل وجود سوییچ d- توضیحی خواهید دید. اگر فایل درست باشد، تنظیمات بدون خطا اعمال میشوند. در پایان، میتوانید سرویس network را ریاستارت کنید:
sudo systemctl restart systemd-networkd.service
تنظیم Interface و شبکه ویندوز
برای بررسی و اعمال تغییرات در تنظیمات شبکهی ویندوز سرور، ابتدا دستور ncpa.cpl را در پنجرهی Run وارد میکنیم تا وارد صفحهی Network Connections شویم. سپس روی کارت شبکه کلیک راست میکنیم و گزینهی Properties را میزنیم.
در صفحهی بعد ابتدا گزینهی Internet Protocol Version 4 را انتخاب کرده و دوباره روی Properties کلیک میکنیم.
در صفحهی باز شده میتوانید اطلاعاتی از قبیل ip ,subnet mask ,gateway را تغییر داده و در آخر تنظیمات را ذخیره کنید .
برای بررسی تنظیمات کارت شبکه، بعد از دو بار کلیک کردن روی کارت شبکه، Details را انتخاب میکنیم و در صفحهی بعد تنظیمات شبکه نمایش داده میشود.