চিট শিট

Linux নেটওয়ার্ক কমান্ড: ip, ss, ping, traceroute, dig ও curl দিয়ে নেটওয়ার্ক ডায়াগনস্টিক

হালনাগাদ: · Skillaria.Top

Linux-এর প্রধান নেটওয়ার্ক কমান্ড — ip (ঠিকানা, ইন্টারফেস ও রুট), ss (খোলা পোর্ট ও সংযোগ), ping ও traceroute (নোডের প্রাপ্যতা ও পথ), dig (DNS যাচাই) এবং curl (HTTP সেবার উত্তর)। নেটওয়ার্ক সমস্যা খুঁজতে স্তর ধরে এগোন: ইন্টারফেস ও ঠিকানা, রুট, DNS, পোর্ট, অ্যাপ্লিকেশন।

Linux-এর নেটওয়ার্ক কমান্ড প্রায় সব দৈনন্দিন ডায়াগনস্টিক কভার করে: ip ঠিকানা ও রুট দেখায়, ss খোলা পোর্ট ও সংযোগ, ping ও traceroute নোডের প্রাপ্যতা যাচাই করে, dig DNS দেখে, আর curl দেখে ওয়েব সেবা কী উত্তর দিচ্ছে। নিচে ফ্ল্যাগসহ একটি চিট-শিট এবং ধাপে ধাপে পদ্ধতি দেওয়া হলো, যা দিয়ে «নেটওয়ার্ক কাজ করছে না» সমস্যার কারণ খুঁজে পাওয়া সহজ হয়।

চিট-শিট: এক টেবিলে Linux নেটওয়ার্ক কমান্ড

কাজকমান্ড
সব ইন্টারফেসের IP ঠিকানাip -br addr
ইন্টারফেসের অবস্থা (UP/DOWN)ip -br link
রুটিং টেবিলip route
কোন গেটওয়ে দিয়ে ঠিকানায় প্যাকেট যাবেip route get 8.8.8.8
প্রতিবেশী নোড (ARP টেবিল)ip neigh
শোনা হচ্ছে এমন পোর্ট ও প্রসেসsudo ss -tulpn
স্থাপিত TCP সংযোগss -tn state established
নোডের প্রাপ্যতা যাচাইping -c 4 example.com
নোড পর্যন্ত প্যাকেটের পথtraceroute example.com, mtr example.com
নাম থেকে ঠিকানা বের করাdig +short example.com
নির্দিষ্ট DNS সার্ভারকে জিজ্ঞেস করাdig @1.1.1.1 example.com
HTTP উত্তর যাচাইcurl -I https://example.com
সংযোগ ও TLS-এর বিস্তারিতcurl -v https://example.com
TCP পোর্ট খোলা আছে কিনাnc -zv host 443
হোস্টের নামhostnamectl, hostname -I

ip: ঠিকানা, ইন্টারফেস ও রুট

iproute2 প্যাকেজের ip কমান্ড পুরোনো ifconfig ও route-এর জায়গা নিয়েছে। সাব-কমান্ড ছোট করা যায়: ip a = ip addr, ip r = ip route। -br ফ্ল্যাগ সংক্ষিপ্ত আউটপুট দেয়, -c তাতে রং যোগ করে।

$ ip -br addr
lo               UNKNOWN        127.0.0.1/8 ::1/128
eth0             UP             192.168.1.25/24 fe80::a00:27ff:fe4e:66a1/64
docker0          DOWN           172.17.0.1/16

ইন্টারফেসে প্রয়োজনীয় নেটওয়ার্কের ঠিকানা না থাকলে বা অবস্থা DOWN হলে আর এগোনোর দরকার নেই — সমস্যা এই স্তরেই।

IP ঠিকানা যোগ ও ইন্টারফেস চালু করা

sudo ip link set eth0 up
sudo ip addr add 192.168.1.50/24 dev eth0
sudo ip addr del 192.168.1.50/24 dev eth0

ip দিয়ে করা পরিবর্তন রিবুট পর্যন্ত থাকে। স্থায়ী সেটিং থাকে সিস্টেম কনফিগারেশনে: Ubuntu-তে netplan, Fedora ও RHEL-এ NetworkManager (nmcli), সার্ভারে systemd-networkd।

রুট ও ডিফল্ট গেটওয়ে

$ ip route
default via 192.168.1.1 dev eth0 proto dhcp metric 100
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.25

$ ip route get 10.20.0.5
10.20.0.5 via 192.168.1.1 dev eth0 src 192.168.1.25 uid 1000

default via লাইন হলো গেটওয়ে, যেখানে যায় সেই সব কিছু যা আরও নির্দিষ্ট কোনো রুটে পড়ে না। এই লাইন না থাকলে স্থানীয় নেটওয়ার্ক কাজ করলেও ইন্টারনেট থাকবে না। রুট যোগ করতে: sudo ip route add 10.20.0.0/16 via 192.168.1.254।

ss: কোন পোর্ট খোলা আর কে শুনছে

ss netstat-এর জায়গা নিয়েছে এবং দ্রুত কাজ করে। সবচেয়ে বেশি ব্যবহৃত সমন্বয় হলো ss -tulpn:

ফ্ল্যাগমান
-t / -uTCP / UDP
-lশুধু শোনা (listening) সকেট
-pপ্রসেস দেখানো (অন্যের প্রসেসের জন্য sudo লাগে)
-nপোর্ট ও ঠিকানাকে নামে রূপান্তর না করা
-aসব সকেট, স্থাপিত সংযোগসহ
-sসারসংক্ষেপ পরিসংখ্যান
$ sudo ss -tulpn
Netid State  Recv-Q Send-Q Local Address:Port  Peer Address:Port Process
tcp   LISTEN 0      511          0.0.0.0:80         0.0.0.0:*     users:(("nginx",pid=812,fd=6))
tcp   LISTEN 0      128          0.0.0.0:22         0.0.0.0:*     users:(("sshd",pid=640,fd=3))
tcp   LISTEN 0      151        127.0.0.1:3306       0.0.0.0:*     users:(("mysqld",pid=901,fd=21))

ঠিকানাটি লক্ষ করুন: 0.0.0.0 মানে সেবা সব ইন্টারফেস থেকে সংযোগ নেয়, 127.0.0.1 মানে শুধু স্থানীয়ভাবে। অন্য মেশিন থেকে ডেটাবেস «সাড়া দিচ্ছে না» — এর একটি সাধারণ কারণ এটাই।

কে পোর্ট দখল করেছে

sudo ss -ltnp 'sport = :8080'
sudo ss -tn dst 10.0.0.7          # নির্দিষ্ট ঠিকানার সংযোগ
ss -tan state time-wait | wc -l   # TIME-WAIT অবস্থায় কতগুলো সকেট

ping: নোড কি পৌঁছানো যাচ্ছে

ping ICMP echo-অনুরোধ পাঠায় এবং উত্তরের সময় ও প্যাকেট হারানো দেখায়। Linux-এ এটি অনন্তকাল চলে, তাই -c ফ্ল্যাগে প্যাকেটের সংখ্যা বেঁধে দিন।

$ ping -c 4 8.8.8.8
64 bytes from 8.8.8.8: icmp_seq=1 ttl=117 time=12.4 ms
...
--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 12.1/12.5/13.0/0.3 ms

উপযোগী ফ্ল্যাগ: -i 0.2 — ব্যবধান, -W 2 — উত্তরের টাইমআউট, -4/-6 — প্রটোকলের সংস্করণ, -s 1472 -M do — ফ্র্যাগমেন্টেশন ছাড়া MTU যাচাই। মনে রাখুন, অনেক সার্ভার ও ক্লাউড ICMP ব্লক করে: ping-এর উত্তর না আসা মানেই নোড অপ্রাপ্য নয়।

traceroute ও mtr: কোথায় প্যাকেট হারাচ্ছে

traceroute গন্তব্যের পথে থাকা নোডগুলো দেখায়। কিছু হপে তারকাচিহ্ন (*) স্বাভাবিক — মাঝের রাউটার উত্তর নাও দিতে পারে। সতর্ক সংকেত হলো, কোনো হপের পর থেকে শেষ পর্যন্ত শুধু তারকা আসতে থাকলে।

traceroute -n example.com        # DNS নাম ছাড়া, দ্রুত
sudo traceroute -T -p 443 example.com   # UDP-এর বদলে TCP, ফায়ারওয়ালের মধ্য দিয়ে যায়
tracepath example.com            # root ছাড়া, সঙ্গে MTU-ও দেখায়

mtr ping ও traceroute একত্র করে এবং প্রতিটি হপের প্যাকেট-হারানোর পরিসংখ্যান সরাসরি আপডেট করে। রিপোর্টের জন্য: mtr -rwc 50 example.com।

dig: DNS যাচাই

dig (dnsutils প্যাকেজ, RHEL-এ bind-utils) DNS যাচাইয়ের প্রধান টুল। ছোট রূপে শুধু উত্তরটি আসে:

$ dig +short example.com
93.184.215.14

$ dig example.com MX +short
$ dig @8.8.8.8 example.com A       # নির্দিষ্ট সার্ভারকে জিজ্ঞেস করা
$ dig -x 8.8.8.8 +short            # উল্টো রেকর্ড (PTR)
$ dig +trace example.com           # root সার্ভার থেকে পুরো চেইন দেখা

পূর্ণ আউটপুটে status দেখুন: NOERROR — রেকর্ড পাওয়া গেছে, NXDOMAIN — ডোমেইন নেই, SERVFAIL — সার্ভার উত্তর দিতে পারেনি (প্রায়ই DNSSEC সমস্যা বা অপ্রাপ্য কর্তৃপক্ষীয় সার্ভার)। dig @8.8.8.8 উত্তর দিলে কিন্তু সাধারণ dig না দিলে দোষ স্থানীয় রিজলভারের: /etc/resolv.conf ও resolvectl status দেখুন।

মনে রাখবেন, dig /etc/hosts পড়ে না। অ্যাপ্লিকেশন যেভাবে নাম রিজলভ করে ঠিক সেভাবে যাচাই করতে getent hosts example.com ব্যবহার করুন।

curl: HTTP ও API যাচাই

curl শেষ প্রশ্নের উত্তর দেয়: সেবা কি সাড়া দিচ্ছে এবং ঠিক কী ফেরত দিচ্ছে।

কমান্ডকী করে
curl -I URLশুধু হেডার (HEAD-অনুরোধ)
curl -v URLবিস্তারিত: DNS, সংযোগ, TLS, হেডার
curl -L URLরিডাইরেক্ট অনুসরণ
curl -o file URLফাইলে সংরক্ষণ
curl -X POST -H 'Content-Type: application/json' -d '{"a":1}' URLJSON পাঠানো
curl -k URLসার্টিফিকেট যাচাই না করা (শুধু ডিবাগের জন্য)
curl --resolve site.ru:443:10.0.0.5 https://site.ruDNS বাইপাস করে নির্দিষ্ট সার্ভারে যাওয়া
curl -s -o /dev/null -w '%{http_code} %{time_total}\n' URLউত্তর কোড ও সময়
$ curl -s -o /dev/null -w '%{http_code} %{time_connect} %{time_total}\n' https://example.com
200 0.041 0.187

curl-এর ত্রুটি বার্তা কোন স্তরে সমস্যা তা ভালোভাবে বলে দেয়: Could not resolve host — DNS, Connection refused — পোর্ট বন্ধ বা কেউ শুনছে না, Connection timed out — ফায়ারওয়াল প্যাকেট আটকাচ্ছে বা রুট নেই, SSL certificate problem — সার্টিফিকেটে সমস্যা।

সমস্যা সমাধানের ক্রম: «নেটওয়ার্ক কাজ করছে না» হলে

  1. ইন্টারফেস ও ঠিকানা: ip -br addr — ইন্টারফেস UP, ঠিকানা আছে।
  2. গেটওয়ে: ip route — default via আছে; ping -c 3 <গেটওয়ে>।
  3. বাইরের নেটওয়ার্ক IP দিয়ে: ping -c 3 1.1.1.1। কাজ করলে রাউটিং ঠিক আছে।
  4. DNS: dig +short example.com। IP দিয়ে ping কাজ করছে কিন্তু এটি খালি বা ত্রুটি দিলে সমস্যা রিজলভারে।
  5. পোর্ট: nc -zv host 443 বা curl -v। সার্ভারে — ss -tulpn, সেবা শুনছে কিনা এবং কোন ঠিকানায়।
  6. ফায়ারওয়াল: sudo nft list ruleset, sudo iptables -L -n, sudo ufw status।
  7. অ্যাপ্লিকেশন: curl -I ও সেবার লগ (journalctl -u nginx)।

নিচ থেকে ওপরে এগোন এবং ধাপ এড়িয়ে যাবেন না: কয়েক মিনিটেই বোঝা যাবে সমস্যা কোন স্তরে, আর বিনা কারণে সবকিছু রিস্টার্ট করতে হবে না।

পুরোনো ও নতুন কমান্ড

পুরোনো (net-tools)আধুনিক বিকল্প
ifconfigip addr, ip link
route -nip route
arp -nip neigh
netstat -tulpnss -tulpn
nslookupdig

নতুন distribution-এ net-tools প্রায়ই একেবারেই ইনস্টল থাকে না, তাই নতুন কমান্ডে অভ্যস্ত হয়ে যাওয়াই ভালো।

সারসংক্ষেপ

দৈনন্দিন ডায়াগনস্টিকের জন্য ছয়টি Linux নেটওয়ার্ক কমান্ডই যথেষ্ট: ip, ss, ping, traceroute, dig ও curl। স্তর ধরে যাচাই করুন — ঠিকানা, রুট, DNS, পোর্ট, অ্যাপ্লিকেশন — তাহলে ত্রুটি দ্রুত ধরা পড়বে। নেটওয়ার্ক কমান্ড ও সাধারণ সমস্যার বিশ্লেষণ হাতে-কলমে দেখানো হয় Linux কোর্সে।

সাধারণ প্রশ্ন

কেন সিস্টেমে ifconfig কমান্ড নেই?

এটি পুরোনো net-tools প্যাকেজের অংশ, যা আধুনিক distribution-এ ডিফল্টভাবে ইনস্টল হয় না। ip addr ব্যবহার করুন, অথবা net-tools আলাদাভাবে ইনস্টল করুন।

কনসোল থেকে আমার বাইরের IP ঠিকানা কীভাবে জানব?

curl ifconfig.me অথবা curl -4 icanhazip.com চালান: বাইরের একটি সেবা সেই ঠিকানা ফেরত দেবে, যা দিয়ে আপনি ইন্টারনেটে বের হচ্ছেন। ip addr শুধু ইন্টারফেসের ঠিকানা দেখায়, যা সাধারণত ভেতরের (internal) ঠিকানা।

ping ও পোর্ট যাচাইয়ের মধ্যে পার্থক্য কী?

ping ICMP দিয়ে নোডের প্রাপ্যতা যাচাই করে, কিন্তু নির্দিষ্ট সেবা সম্পর্কে কিছু বলে না। সার্ভার কোনো পোর্টে সংযোগ নিচ্ছে কিনা জানতে nc -zv host port বা curl ব্যবহার করুন।

নেটওয়ার্ক ইন্টারফেসের গতি ও লোড কীভাবে দেখব?

বাইট ও ত্রুটির গণনা দেখায় ip -s link, আর রিয়েল-টাইম লোড দেখতে iftop, nload বা bmon ব্যবহার করুন। দুটি মেশিনের মধ্যে থ্রুপুট মাপা হয় iperf3 দিয়ে।

DNS সার্ভার সাময়িকভাবে কীভাবে বদলাব?

systemd-resolved ব্যবহারকারী সিস্টেমে sudo resolvectl dns eth0 1.1.1.1 চালান। একবারের যাচাইয়ের জন্য সহজ উপায় হলো অনুরোধেই সার্ভার উল্লেখ করা: dig @1.1.1.1 example.com।

ভিডিওতে বিষয়টি শিখুন

“Linux: с нуля до уверенного администрирования” কোর্সে বিষয়টি অনুশীলনসহ বিস্তারিত শেখানো হয়েছে।

কোর্সে যান