DHCP در Gentoo — پیکربندی dhcpcd و دریافت خودکار IP
آموزش کامل DHCP در Gentoo: نصب dhcpcd، پیکربندی /etc/dhcpcd.conf، فعالسازی سرویس، گزینههای پیشرفته و DHCP با NetworkManager و systemd-networkd.
DHCP (Dynamic Host Configuration Protocol) پروتکلی است که بهطور خودکار آدرس IP، default gateway و سرور DNS را به دستگاه شما اختصاص میدهد. در اکثر شبکههای خانگی و شرکتی، DHCP توسط روتر فراهم میشود و کاربر نیازی به تنظیم دستی آدرس ندارد. در Gentoo، کلاینت پیشفرض و سبک DHCP بستهٔ net-misc/dhcpcd است که هم بهصورت مستقل و هم بهعنوان بخشی از netifrc کار میکند.
DHCP چیست؟
هنگامی که کارت شبکهٔ شما روشن میشود، هنوز آدرس IP ندارد. کلاینت DHCP یک درخواست broadcast به نشانی 255.255.255.255 میفرستد و میپرسد «آیا سرور DHCP هست؟». سرور DHCP (معمولاً روتر) با پیشنهاد یک آدرس IP بههمراه مدت اجاره (lease time)، gateway و DNS پاسخ میدهد. کلاینت تأیید میکند و آدرس را روی رابط اعمال میکند.
| عنصر | توضیح |
|---|---|
| Lease | مدت زمان اجاره IP (معمولاً ۲۴ ساعت) |
| Renewal | تمدید اجاره پیش از انقضا (معمولاً ۵۰٪ lease) |
| DORA | مراحل Discover, Offer, Request, Acknowledge |
| Client ID | شناسه کلاینت برای تشخیض توسط سرور |
نصب dhcpcd
# نصب بسته
emerge --ask net-misc/dhcpcd
# خروجی:
# [ebuild N ] net-misc/dhcpcd-10.0.8 USE="... "
# Would you like to merge these packages? [Yes/No]: yپس از نصب، فایل پیکربندی پیشفرض در /etc/dhcpcd.conf قرار دارد. این فایل کامنتگذاری شده و برای کاربرد معمولی نیازی به ویرایش ندارد.
فعالسازی سرویس
دو راه برای استفاده از dhcpcd وجود دارد: مستقل یا از طریق netifrc.
روش ۱: dhcpcd مستقل (سادهترین)
این روش همهٔ رابطهای شبکه را بهصورت خودکار مدیریت میکند:
# افزودن به runlevel پیشفرض
rc-update add dhcpcd default
# خروجی:
# * service dhcpcd added to runlevel default
# شروع سرویس
rc-service dhcpcd start
# خروجی:
# * Starting dhcpcd ...
# * dhcpcd on pid 1234
# بررسی دریافت IP
ip addr show enp3s0
# خروجی:
# inet 192.168.1.20/24 brd 192.168.1.255 scope global enp3s0روش ۲: dhcpcd از طریق netifrc
اگر از netifrc استفاده میکنید، در /etc/conf.d/net بنویسید config_enp3s0="dhcp":
# پیکربندی
nano /etc/conf.d/net
# config_enp3s0="dhcp"
# ساخت سرویس رابط
ln -s /etc/init.d/net.lo /etc/init.d/net.enp3s0
rc-update add net.enp3s0 default
rc-service net.enp3s0 startتفاوت دو روش
در روش مستقل، خود dhcpcd همهٔ رابطها را مدیریت میکند. در روش netifrc، سرویس net.enp3s0 با خواندن config_enp3s0="dhcp" درخواست میکند که dhcpcd برای این رابط اجرا شود. روش دوم به ازای هر رابط کنترل دقیقتری در اختیار شما میگذارد.
گزینههای پیشرفته در dhcpcd.conf
فایل /etc/dhcpcd.conf امکان تنظیم رفتار DHCP را فراهم میکند. چند نمونهٔ پرکاربرد:
# /etc/dhcpcd.conf
# تعیین رابط خاص (پیشفرض همه)
interface enp3s0
# درخواست hostname از سرور DHCP
hostname
# ارسال client_id مشخص (برخی سرورها نیاز دارند)
clientid "gentoo-server-01"
# مدت زمان درخواست اجاره (ثانیه)
leasetime 3600
# تایماوت درخواست اولیه
timeout 30
# تلاش مجدد نامحدود برای دریافت IP
reboot 5
waitip 4
# نپذیرفتن بهروزرسانی /etc/resolv.conf (اگر resolver محلی دارید)
nohook resolv.conf
# نپذیرفتن بهروزرسانی /etc/ntp.conf
nohook ntp.conf
# تخصیص IP استاتیک هنگام عدم موفقیت DHCP (fallback)
fallback 192.168.1.50/24بهروزرسانی /etc/resolv.conf بهصورت خودکار توسط hook resolv.conf انجام میشود. اگر میخواهید خودتان DNS را مدیریت کنید، nohook resolv.conf را اضافه کنید.
مشاهده هوکها
فهرست هوکهای فعال در /lib/dhcpcd/dhcpcd-hooks/ قرار دارد. با dhcpcd -d میتوانید حالت debug را ببینید و بفهمید کدام hook اجرا میشود.
DHCP در NetworkManager
اگر از NetworkManager استفاده میکنید، نیازی به dhcpcd مستقل نیست؛ NetworkManager کلاینت DHCP داخلی دارد (یا از dhcpcd استفاده میکند):
# بررسی پروفایل اتصال
nmcli connection show "Wired connection 1" | grep ipv4.method
# ipv4.method: auto
# اجبار به تمدید اجاره DHCP
nmcli connection up "Wired connection 1"DHCP در systemd-networkd
برای دریافت DHCP با systemd-networkd، فایل .network بسازید:
# /etc/systemd/network/20-wired.network
[Match]
Name=enp3s0
[Network]
DHCP=yes
[DHCPv4]
UseDNS=yes
UseNTP=yes
SendHostname=yessystemctl restart systemd-networkd
networkctl status enp3s0
# خروجی:
# State: routable (configured)خطاهای رایج
۱. dhcpcd IP نمیگیرد
dhcpcd[1234]: enp3s0:Carrier lost
dhcpcd[1234]: enp3s0: waiting for carrierدلیل: کابل شبکه وصل نیست، درایور کارت نصب نیست یا رابط down است. راهحل:
# بررسی وضعیت فیزیکی
ip link show enp3s0
# باید state UP و LOWER_UP را ببینید
# بالا آوردن دستی
ip link set enp3s0 up
# بررسی درایور
lspci -k | grep -i ether -A 3
# باید خط Kernel driver in use: را ببینید
# اجرای dhcpcd در حالت debug
dhcpcd -d enp3s0۲. خطای noipv6ll یا duplicate address
دلیل: تداخل IPv6 link-local یا دو دستگاه با همان MAC. راهحل: موقتاً IPv6 را غیرفعال کنید:
# /etc/dhcpcd.conf
noipv6۳. DNS کار نمیکند اما IP گرفتهاید
ping -c 3 8.8.8.8 # کار میکند
ping -c 3 gentoo.org # نامعتبردلیل: فایل /etc/resolv.conf بهروز نشده یا توسط /etc/conf.d/net بازنویسی شده. راهحل:
# بررسی resolv.conf
cat /etc/resolv.conf
# باید شامل nameserver باشد
# اگر خالی است، دستی بنویسید
echo "nameserver 8.8.8.8" > /etc/resolv.conf
# یا اعمال مجدد hook
dhcpcd -n enp3s0خلاصه و مرحله بعد
DHCP سادهترین راه برای دریافت آدرس شبکه است. در Gentoo، net-misc/dhcpcd کلاینت سبک و قابلاعتمادی است که هم میتواند مستقل اجرا شود و هم بهعنوان بخشی از netifrc. برای اکثر کاربردها، نصب و افزودن به runlevel default کافی است.
اگر به IP ثابت نیاز دارید، آموزش Static IP را ببینید. برای آشنایی با کلیات مدیریت شبکه در Gentoo، آموزش Networking را مطالعه کنید.
این صفحه در تاریخ ۱ تیر ۱۴۰۵ بهروزرسانی شده است.