در این بخش با مفاهیم کلیدی شبکه و ابزارهای خط فرمان لینوکس برای عیبیابی مشکلات شبکه آشنا میشوید. عیبیابی شبکه فرایندی گامبهگام است و بهترین روش، شروع از لایههای پایینتر و حرکت به سمت بالا است .
مفاهیم بنیادین
Interface
یک رابط شبکه (Network Interface)، نقطهاتصال یک دستگاه (مانند کامپیوتر یا سرور) به شبکه است. این میتواند یک کارت فیزیکی (NIC)، یک رابط بیسیم، یا یک رابط مجازی مانند lo (حلقه داخلی یا loopback) باشد. برای مشاهده وضعیت و آدرسهای IP اختصاصیافته به تمام رابطها از دستور ip addr (یا ip a) استفاده میشود .
ip addr
نمونه خروجی:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 192.168.1.100/24 brd 192.168.1.255 scope global dynamic eth0
valid_lft 86393sec preferred_lft 86393sec
اگر یک آدرس IP با
169.254.x.xمشاهده کردید، این نشاندهنده آن است که سیستم نتوانسته است از یک سرور DHCP، یک آدرس IP معتبر دریافت کند و به یک آدرس خودپیکرده (APIPA) متکی شده است .
Port
یک پورت یک عدد ۱۶ بیتی (از ۰ تا ۶۵۵۳۵) است که برای تمایز چندین سرویس در حال اجرا روی یک آدرس IP استفاده میشود. پورتهای ۰ تا ۱۰۲۳ «پورتهای معروف» (Well-Known Ports) هستند و معمولاً به سرویسهای خاصی تعلق دارند (مثلاً پورت ۲۲ برای SSH، ۸۰ برای HTTP، ۴۴۳ برای HTTPS). پورتهای ۱۰۲۴ تا ۴۹۱۵۱ به عنوان «پورتهای ثبتشده» (Registered Ports) و ۴۹۱۵۲ تا ۶۵۵۳۵ به عنوان «پورتهای پویا یا خصوصی» (Dynamic/Private Ports) شناخته میشوند.
Socket
یک سوکت (Socket)، نقطهپایانی یک ارتباط دوطرفه بین دو برنامه در شبکه است. سوکت با ترکیب یک آدرس IP و یک پورت تعریف میشود (مثلاً 192.168.1.100:22). این به سیستمعامل اجازه میدهد تا بستههای داده ارسالی به یک پورت خاص را به فرایند صحیح هدایت کند.
بررسی پورتهای باز و سوکتها با ss
دستور ss (مخفف Socket Statistics) ابزاری مدرن و سریعتر برای نمایش اطلاعات مربوط به سوکتها و جایگزینی برای دستور قدیمی netstat است .
برای نمایش تمام پورتهای در حال شنود (Listening) به همراه نوع پروتکل (-t برای TCP، -u برای UDP) و بدون تبدیل آدرس به نام (-n):
ss -tuln
| گزینه | توضیح |
|---|---|
-t | نمایش سوکتهای TCP |
-u | نمایش سوکتهای UDP |
-l | نمایش تنها سوکتهای در حال شنود (Listening) |
-n | نمایش آدرسها و پورتها به صورت عددی (عدم تبدیل به نام) |
نمونه خروجی:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* tcp LISTEN 0 128 [::]:80 [::]:* udp LISTEN 0 0 0.0.0.0:68 0.0.0.0:*
0.0.0.0:22 یعنی سرویس SSH روی تمام رابطهای شبکه در پورت ۲۲ در حال شنود است. [::]:80 یعنی سرویس HTTP روی تمام رابطهای IPv6 در پورت ۸۰ در حال شنود است.
برای یافتن فرایندی که از یک پورت خاص استفاده میکند، گزینه -p را اضافه کنید (نیاز به دسترسی root یا sudo دارد) :
sudo ss -tulnp
نمونه خروجی:
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1123,fd=3))
این خروجی نشان میدهد که فرایند sshd با PID=1123 در پورت ۲۲ در حال شنود است .
DNS
سیستم نامدامنه (DNS) وظیفه ترجمه نامهای دامنه قابلدرک برای انسان (مثل example.com) به آدرسهای IP (مثل 93.184.216.34) را بر عهده دارد. مشکلات DNS زمانی رخ میدهند که این ترجمه به درستی انجام نشود.
بررسی پیکربندی DNS
فایل /etc/resolv.conf شامل آدرس سرورهای DNS است که سیستم برای حلیابی نامها از آنها استفاده میکند .
cat /etc/resolv.conf
نمونه خروجی:
nameserver 8.8.8.8 nameserver 1.1.1.1
ابزارهای عیبیابی DNS
-
dig(Domain Information Groper): ابزاری قدرتمند و دقیق برای پرسوجو از سرورهای DNS .dig example.comبرای پرسوجو از یک سرور DNS خاص به جای سرور پیشفرض:
dig @8.8.8.8 example.comبرای دریافت فقط آدرس IP:
dig +short example.com -
nslookup: ابزاری کلاسیکتر و سادهتر برای پرسوجوی DNS .nslookup example.com
نکتهی عیبیابی: اگر
pingبا آدرس IP کار کرد اما با نام دامنه失敗، مشکل از سرویسدهنده DNS یا پیکربندی آن است. اگرpingبا IP نیز شکست خورد، مشکل از اتصال شبکه است .
Routing
مسیریابی (Routing) فرایندی است که توسط آن بستههای داده در شبکه، مسیر خود را از مبدأ به مقصد پیدا میکنند. جدول مسیریابی (Routing Table) موجود در هسته لینوکس، تصمیمگیری درباره ارسال بستهها را انجام میدهد.
نمایش جدول مسیریابی
برای نمایش جدول مسیریابی اصلی از دستور ip route (یا ip r) استفاده میشود .
ip route show
نمونه خروجی:
default via 192.168.1.1 dev eth0 proto dhcp src 192.168.1.100 metric 100 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100
| فیلد | توضیح |
|---|---|
default | مسیر پیشفرض (Default Route) برای بستههایی که مقصد آنها در جدول مشخص نیست. |
via 192.168.1.1 | آدرس IP گیتوی بعدی (Next-Hop Gateway) که بسته باید به آن ارسال شود. |
dev eth0 | رابط شبکهای که بسته از آن ارسال میشود. |
proto dhcp | نشان میدهد که این مسیر توسط DHCP اضافه شده است. proto kernel یعنی توسط خود هسته برای شبکههای متصل مستقیم اضافه شده است. |
src 192.168.1.100 | آدرس IP مبدأ پیشفرض برای بستههای ارسالی از این مسیر. |
برای دیدن اینکه بستهای برای یک مقصد خاص از چه مسیری ارسال میشود، از ip route get استفاده کنید :
ip route get 8.8.8.8
نمونه خروجی:
8.8.8.8 via 192.168.1.1 dev eth0 src 192.168.1.100 uid 1000
عیبیابی مسیرها
-
اگر مسیر مشخصی در جدول وجود ندارد، دستور
ip route addرا برای افزودن آن بررسی کنید . -
در سیستمهای چندواسطی (Multi-homed) یا دارای VPN، ممکن است مشکلات مسیریابی متقارن (Asymmetric Routing) رخ دهد. برای رفع آن میتوان از جدولهای مسیریابی متعدد و قوانین (Policy Routing) با
ip ruleاستفاده کرد .
مشکلات رایج اتصال شبکه و ابزارهای عیبیابی
یک رویکرد سیستماتیک برای عیبیابی، از پایینترین لایه (اتصال فیزیکی) شروع و به سمت لایههای بالاتر (برنامهکاربردی) حرکت میکند.
۱. بررسی اتصال پایه با ping
دستور ping از پروتکل ICMP برای ارسال بستههای آزمون به یک میزبان مقصد استفاده میکند و سادهترین روش برای تأیید اتصال است .
ping -c 4 8.8.8.8
-
گزینه
-c 4تعداد بستههای ارسالی را به ۴ محدود میکند (در لینوکس،pingبه طور پیشفرض بینهایت اجرا میشود). -
با IP شروع کنید، سپس نام دامنه را امتحان کنید تا مشکل را به اتصال یا DNS محدود کنید .
۲. ردیابی مسیر با traceroute و tracepath
در حالی که ping به شما میگوید که آیا اتصال برقرار است یا خیر، این ابزارها نشان میدهند که بستهها از چه مسیری عبور کردهاند و مشکل در کدام گام (هاپ) رخ داده است .
traceroute 8.8.8.8
دستور tracepath مشابه است اما معمولاً نیازی به دسترسی root ندارد و علاوه بر مسیر، حداکثر اندازه واحد انتقال (MTU) را نیز اندازهگیری میکند .
۳. ارزیابی کیفیت مسیر با mtr
ابزار mtr (My TraceRoute) ترکیبی از ping و traceroute است و به صورت لحظهای آمار عملکرد مسیر (از جمله درصد افت بسته) را نمایش میدهد .
mtr 8.8.8.8
برای خروج از برنامه، کلید Ctrl+C را فشار دهید.
۴. تست پورتهای TCP با nc (Netcat)
برای بررسی اینکه آیا یک پورت خاص روی یک میزبان راهدور باز است و سرویس در حال گوشدادن است، از nc (Netcat) با گزینههای -z (Zero-I/O mode برای اسکن) و -v (Verbose) استفاده کنید .
nc -zv example.com 80
۵. اسکن پورتها با nmap
برای اسکن گستردهتر پورتهای باز روی یک میزبان، از nmap استفاده میشود .
nmap -p 80,443 192.168.1.1 # اسکن پورتهای خاص
جمعبندی مشکلات رایج
| مشکل | علائم و علل احتمالی | ابزارهای تشخیص |
|---|---|---|
| اتصال فیزیکی/لینک | ip link وضعیت DOWN را نشان میدهد. | ip link, ethtool |
| پیکربندی IP اشتباه | آدرس 169.254.x.x (APIPA). | ip addr, dhclient |
| مسیر دسترسی وجود ندارد | ping IP کار نمیکند؛ ip route get مسیر اشتباهی نشان میدهد. | ip route, traceroute |
| فایروال/فیلترینگ | اتصال به یک پورت خاص (مثلاً با nc) برقرار نمیشود. | ss -tuln, iptables -L |
| DNS کار نمیکند | ping 8.8.8.8 کار میکند اما ping google.com کار نمیکند. | dig, nslookup, /etc/resolv.conf |
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: منبع مستندات