Amri za mtandao Linux: ip, ss, ping, traceroute, dig na curl kwa uchunguzi wa mtandao
Amri kuu za mtandao Linux ni ip (anwani, interfeisi na njia), ss (bandari zilizo wazi na miunganisho), ping na traceroute (kama nodi inapatikana na njia inayofika kwake), dig (ukaguzi wa DNS) na curl (maombi kwa huduma za HTTP). Uchunguzi ni rahisi zaidi ukifanywa kwa tabaka: interfeisi na anwani, njia, DNS, bandari, kisha jibu la programu.
Amri za mtandao Linux zinafunika karibu uchunguzi wote wa kila siku: ip inaonyesha anwani na njia, ss inaonyesha bandari zilizo wazi na miunganisho, ping na traceroute zinakagua kama nodi inapatikana, dig inakagua DNS, na curl inakagua jibu la huduma ya wavuti. Hapa chini kuna orodha ya amri zenye bendera, pamoja na mpangilio wa hatua unaokusaidia kutafuta chanzo cha tatizo pale "mtandao haufanyi kazi".
Orodha ya amri za mtandao kwa jedwali moja
| Kazi | Amri |
|---|---|
| Anwani za IP za interfeisi zote | ip -br addr |
| Hali ya interfeisi (UP/DOWN) | ip -br link |
| Jedwali la njia | ip route |
| Pakiti itapitia lango gani kufika anwani fulani | ip route get 8.8.8.8 |
| Majirani (jedwali la ARP) | ip neigh |
| Bandari zinazosikiliza na michakato yake | sudo ss -tulpn |
| Miunganisho ya TCP iliyoanzishwa | ss -tn state established |
| Kukagua kama nodi inapatikana | ping -c 4 example.com |
| Njia ya pakiti hadi kwenye nodi | traceroute example.com, mtr example.com |
| Kubadilisha jina kuwa anwani | dig +short example.com |
| Kuuliza seva fulani ya DNS | dig @1.1.1.1 example.com |
| Kukagua jibu la HTTP | curl -I https://example.com |
| Maelezo ya muunganisho na TLS | curl -v https://example.com |
| Kama bandari ya TCP iko wazi | nc -zv host 443 |
| Jina la kompyuta (host) | hostnamectl, hostname -I |
ip: anwani, interfeisi na njia
Amri ip kutoka kifurushi cha iproute2 imechukua nafasi ya ifconfig na route ya zamani. Amri ndogo zinaweza kufupishwa: ip a = ip addr, ip r = ip route. Bendera -br inatoa matokeo mafupi, na -c inaweka rangi.
$ 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
Kama interfeisi haina anwani ya mtandao unaohitajika au iko kwenye hali ya DOWN, hakuna haja ya kutafuta zaidi — tatizo liko katika ngazi hii.
Jinsi ya kuongeza anwani ya IP na kuwasha interfeisi
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
Mabadiliko yanayofanywa kwa ip yanadumu hadi kompyuta izimwe na kuwashwa upya. Mipangilio ya kudumu huwekwa kwenye usanidi wa mfumo: netplan katika Ubuntu, NetworkManager (nmcli) katika Fedora na RHEL, na systemd-networkd kwenye seva.
Njia na lango chaguo-msingi
$ 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
Mstari wa default via ni lango ambalo kila kitu kisichoingia kwenye njia sahihi zaidi hupelekwa. Usipoona mstari kama huu, hakutakuwa na intaneti, ingawa mtandao wa ndani unafanya kazi. Kuongeza njia: sudo ip route add 10.20.0.0/16 via 192.168.1.254.
ss: bandari zipi ziko wazi na nani anazisikiliza
ss imechukua nafasi ya netstat na inafanya kazi haraka zaidi. Mchanganyiko unaotumika zaidi ni ss -tulpn:
| Bendera | Maana |
|---|---|
-t / -u | TCP / UDP |
-l | soketi zinazosikiliza tu |
-p | onyesha mchakato (kwa michakato ya watumiaji wengine unahitaji sudo) |
-n | usibadilishe bandari na anwani kuwa majina |
-a | soketi zote, pamoja na miunganisho iliyoanzishwa |
-s | takwimu za jumla |
$ 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))
Angalia anwani: 0.0.0.0 inamaanisha huduma inapokea miunganisho kutoka kwa interfeisi zote, na 127.0.0.1 inamaanisha inapokea ndani ya kompyuta hiyo tu. Hii ni sababu ya kawaida kwa nini hifadhidata "haijibu" kutoka kwa kompyuta nyingine.
Jinsi ya kujua nani amechukua bandari
sudo ss -ltnp 'sport = :8080'
sudo ss -tn dst 10.0.0.7 # miunganisho kwa anwani fulani
ss -tan state time-wait | wc -l # soketi ngapi ziko kwenye TIME-WAIT
ping: je, nodi inapatikana
ping inatuma maombi ya ICMP echo na kuonyesha muda wa jibu na upotevu wa pakiti. Kwenye Linux inaendelea bila kikomo, kwa hiyo weka idadi ya pakiti kwa bendera -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
Bendera muhimu: -i 0.2 — muda kati ya pakiti, -W 2 — muda wa kusubiri jibu, -4/-6 — toleo la itifaki, -s 1472 -M do — kukagua MTU bila kugawanya pakiti. Kumbuka kwamba seva nyingi na huduma za wingu zinazuia ICMP, kwa hiyo kukosekana kwa jibu la ping hakumaanishi kwamba nodi haipatikani.
traceroute na mtr: pakiti zinapotea wapi
traceroute inaonyesha nodi zilizo njiani hadi lengo. Nyota (*) kwenye baadhi ya hops ni kawaida — kipanga-njia cha kati kinaweza kisijibu. Dalili ya hatari ni pale nyota zinapoendelea hadi mwisho baada ya hop fulani.
traceroute -n example.com # bila majina ya DNS, kwa kasi zaidi
sudo traceroute -T -p 443 example.com # TCP badala ya UDP, hupita firewall
tracepath example.com # bila root, pia inaonyesha MTU
mtr inachanganya ping na traceroute na kusasisha takwimu za upotevu kwa kila hop kwa wakati halisi. Kwa ripoti: mtr -rwc 50 example.com.
dig: ukaguzi wa DNS
dig kutoka kifurushi cha dnsutils (bind-utils kwenye RHEL) ndiyo zana kuu ya kukagua DNS. Umbo fupi linarudisha jibu pekee:
$ dig +short example.com
93.184.215.14
$ dig example.com MX +short
$ dig @8.8.8.8 example.com A # kuuliza seva fulani
$ dig -x 8.8.8.8 +short # rekodi ya kinyume (PTR)
$ dig +trace example.com # kufuata mnyororo kuanzia seva za mizizi
Katika matokeo kamili angalia status: NOERROR — rekodi imepatikana, NXDOMAIN — jina la kikoa halipo, SERVFAIL — seva haikuweza kujibu (mara nyingi ni tatizo la DNSSEC au seva ya mamlaka haipatikani). Ikiwa dig @8.8.8.8 inajibu lakini dig ya kawaida haijibu, tatizo liko kwenye resolver ya ndani: angalia /etc/resolv.conf na resolvectl status.
Kumbuka kwamba dig haisomi /etc/hosts. Ili kukagua utatuzi wa jina kama programu inavyoufanya, tumia getent hosts example.com.
curl: ukaguzi wa HTTP na API
curl inajibu swali la mwisho: je, huduma inajibu, na inarudisha nini hasa.
| Amri | Inafanya nini |
|---|---|
curl -I URL | vichwa vya jibu pekee (ombi la HEAD) |
curl -v URL | kwa undani: DNS, muunganisho, TLS, vichwa |
curl -L URL | fuata maelekezo ya kuelekezwa upya (redirect) |
curl -o file URL | hifadhi kwenye faili |
curl -X POST -H 'Content-Type: application/json' -d '{"a":1}' URL | tuma JSON |
curl -k URL | usikague cheti (kwa majaribio tu) |
curl --resolve site.ru:443:10.0.0.5 https://site.ru | fikia seva fulani bila kupitia DNS |
curl -s -o /dev/null -w '%{http_code} %{time_total}\n' URL | msimbo wa jibu na muda |
$ curl -s -o /dev/null -w '%{http_code} %{time_connect} %{time_total}\n' https://example.com
200 0.041 0.187
Ujumbe wa makosa wa curl unaonyesha kwa usahihi ni ngazi gani imeshindwa: Could not resolve host — DNS, Connection refused — bandari imefungwa au hakuna kinachosikiliza, Connection timed out — pakiti zinazuiwa na firewall au hakuna njia, SSL certificate problem — tatizo la cheti.
Mpangilio wa uchunguzi: wakati "mtandao haufanyi kazi"
- Interfeisi na anwani:
ip -br addr— interfeisi iko UP na anwani ipo. - Lango:
ip route— kunadefault via; kishaping -c 3 <lango>. - Mtandao wa nje kwa IP:
ping -c 3 1.1.1.1. Ikifanya kazi, uelekezaji uko sawa. - DNS:
dig +short example.com. Ikiwa jibu ni tupu au kuna hitilafu wakati ping kwa IP inafanya kazi, tatizo liko kwenye resolver. - Bandari:
nc -zv host 443aucurl -v. Kwenye seva —ss -tulpn, kuona kama huduma inasikiliza na kwenye anwani gani. - Firewall:
sudo nft list ruleset,sudo iptables -L -n,sudo ufw status. - Programu:
curl -Ina kumbukumbu za huduma (journalctl -u nginx).
Fanya kazi kutoka chini kwenda juu na usiruke hatua: kwa dakika chache utajua tatizo liko katika ngazi gani, badala ya kuanzisha upya kila kitu bila mpangilio.
Amri za zamani na mpya
| Ya zamani (net-tools) | Mbadala wa kisasa |
|---|---|
ifconfig | ip addr, ip link |
route -n | ip route |
arp -n | ip neigh |
netstat -tulpn | ss -tulpn |
nslookup | dig |
Katika matoleo mapya ya usambazaji, net-tools mara nyingi haijasakinishwa kabisa, kwa hiyo jizoeze amri mpya.
Hitimisho
Kwa uchunguzi wa kila siku zinatosha amri sita: ip, ss, ping, traceroute, dig na curl. Kagua kwa tabaka — anwani, njia, DNS, bandari, programu — na utapata hitilafu haraka. Amri za mtandao na jinsi ya kutatua matatizo ya kawaida zinaonyeshwa kwa mifano katika kozi ya Linux.
Maswali ya mara kwa mara
Kwa nini ifconfig haipo kwenye mfumo wangu?
Iko katika kifurushi cha zamani cha net-tools, ambacho haisakinishwi kwa chaguo-msingi kwenye usambazaji wa kisasa. Tumia ip addr, au sakinisha net-tools kwa mkono.
Ninawezaje kujua anwani yangu ya IP ya nje kutoka kwenye terminal?
Endesha curl ifconfig.me au curl -4 icanhazip.com: huduma ya nje itarudisha anwani unayotoka nayo kwenye intaneti. Amri ip addr inaonyesha anwani za interfeisi, kwa kawaida za ndani tu.
Ping inatofautiana vipi na kukagua bandari?
ping inakagua upatikanaji wa nodi kwa ICMP, lakini haisemi chochote kuhusu huduma fulani. Ili kuona kama seva inakubali miunganisho kwenye bandari, tumia nc -zv host bandari au curl.
Ninawezaje kuona kasi na mzigo wa interfeisi ya mtandao?
ip -s link inaonyesha takwimu za baiti na makosa, na mzigo wa wakati halisi unaonyeshwa na iftop, nload au bmon. Kasi kati ya mashine mbili hupimwa kwa iperf3.
Ninawezaje kubadilisha seva ya DNS kwa muda?
Kwenye mifumo yenye systemd-resolved tumia sudo resolvectl dns eth0 1.1.1.1. Kwa jaribio la mara moja ni rahisi zaidi kutaja seva moja kwa moja kwenye ombi: dig @1.1.1.1 example.com.
Mada hii inafundishwa kwa kina pamoja na mazoezi katika kozi “Linux: с нуля до уверенного администрирования”.
Nenda kwenye kozi