Tarmoq asoslari — ip, ping, DNS, portlar, ss

~15 daq · Linux · Tarmoq

Muammodan boshlaylik

"Sayt ochilmayapti." Bu bitta jumla ortida o'nlab sabab bo'lishi mumkin:

  • Server o'chganmi?
  • Domen noto'g'ri IP ga ko'rsatyaptimi?
  • Firewall portni yopib qo'yganmi?
  • Nginx ishlayaptimi, lekin noto'g'ri portda?
  • Ilova faqat localhost ni tinglayaptimi?

Har biri uchun — o'z buyrug'i. Bu dars — tarmoq muammolarini qatlam-baqatlam tekshirish vositalari.


Asosiy tushunchalar

Tushuncha Misol Nima
IP manzil 45.12.34.56 Kompyuterning tarmoqdagi manzili
Port 80, 443, 3000 Bitta kompyuterdagi "eshik" — qaysi dasturga
Domen dokon.uz IP ning inson uchun nomi
DNS Domenni IP ga aylantiradigan tizim
localhost 127.0.0.1 "Shu kompyuterning o'zi"

Analogiya: IP — bino manzili, port — xonadon raqami, DNS — telefon kitobi.

Tipik portlar

Port Xizmat
22 SSH
80 HTTP
443 HTTPS
3306 MySQL
5432 PostgreSQL
6379 Redis
3000, 5173, 8080 Ishlab chiqish serverlari

ip — mening manzilim

ip a              # ip address — barcha tarmoq interfeyslari
1: lo: <LOOPBACK,UP> ...
    inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP> ...
    inet 45.12.34.56/24 brd 45.12.34.255 scope global eth0
  • lo — loopback, 127.0.0.1 — o'zi bilan gaplashish uchun
  • eth0 (yoki ens3, enp0s3) — haqiqiy tarmoq kartasi
ip -br a          # qisqa ko'rinish
ip r              # marshrutlar; "default via" — internet shlyuzi
hostname -I       # faqat IP lar
curl ifconfig.me  # internetdan ko'rinadigan tashqi IP

[!INFO] Eski qo'llanmalarda ifconfig va netstat ni ko'rasiz. Zamonaviy Linux da ular o'rnida — ip va ss. Ko'pincha eski buyruqlar umuman o'rnatilmagan.


ping — server tirikmi?

ping -c 4 google.com
PING google.com (142.250.185.78) 56(84) bytes of data.
64 bytes from 142.250.185.78: icmp_seq=1 ttl=117 time=12.4 ms
64 bytes from 142.250.185.78: icmp_seq=2 ttl=117 time=11.9 ms
...
4 packets transmitted, 4 received, 0% packet loss
  • time — javob vaqti (kechikish)
  • packet loss — yo'qolgan paketlar; 0% dan ko'p bo'lsa — tarmoq muammosi
  • -c 4 — 4 marta (busiz Ctrl+C gacha davom etadi)

[!INFO] ping javob bermasligi — server o'chganini anglatmaydi: ko'p serverlar va bulut provayderlari ICMP (ping) ni firewall da yopadi. Keyingi qadam — port bo'yicha tekshirish (curl, nc).


DNS — domen qaysi IP ga ko'rsatyapti?

dig dokon.uz +short
45.12.34.56
dig dokon.uz                     # batafsil
dig dokon.uz A +short            # IPv4
dig dokon.uz MX +short           # pochta serverlari
dig @8.8.8.8 dokon.uz +short     # Google DNS orqali tekshirish
nslookup dokon.uz                # muqobil
host dokon.uz                    # yana bir muqobil

dig yo'q bo'lsa: sudo apt install dnsutils.

DNS yozuvlari

Tur Nima Misol
A Domen → IPv4 dokon.uz → 45.12.34.56
AAAA Domen → IPv6
CNAME Domen → boshqa domen www.dokon.uz → dokon.uz
MX Pochta serveri
TXT Matn (tasdiqlash, SPF)

Domenni yangi serverga yo'naltirganda: DNS o'zgarishi butun dunyoga tarqalishi uchun bir necha daqiqadan bir necha soatgacha vaqt ketadi. dig @8.8.8.8 va dig @1.1.1.1 bilan tekshirib turing.

/etc/hosts — lokal "DNS"

cat /etc/hosts
127.0.0.1   localhost
127.0.0.1   dokon.local

Bu fayl DNS dan oldin tekshiriladi. Lokal sinov uchun qulay: echo "127.0.0.1 dokon.local" | sudo tee -a /etc/hosts (19-dars).


ss — qaysi portlar ochiq?

ss (socket statistics) — qaysi dastur qaysi portni tinglayotganini ko'rsatadi:

sudo ss -tlnp
State   Recv-Q  Send-Q  Local Address:Port   Peer Address:Port  Process
LISTEN  0       511     0.0.0.0:80           0.0.0.0:*          users:(("nginx",pid=1102,fd=6))
LISTEN  0       128     0.0.0.0:22           0.0.0.0:*          users:(("sshd",pid=845,fd=3))
LISTEN  0       151     127.0.0.1:3306       0.0.0.0:*          users:(("mysqld",pid=812,fd=21))
LISTEN  0       511     127.0.0.1:3000       0.0.0.0:*          users:(("node",pid=2214,fd=19))

Bayroqlar: t — TCP, l — tinglayotganlar (listen), n — raqamlar (nomlar emas), p — jarayon.

Eng muhim ustun: Local Address

Manzil Ma'nosi
0.0.0.0:80 Barcha interfeyslardan — tashqaridan ham ochiq
127.0.0.1:3306 Faqat shu kompyuterdan — tashqaridan yopiq
[::]:80 IPv6 da barchasidan

Yuqoridagi misolda MySQL va Node faqat 127.0.0.1 da — internetdan yetib bo'lmaydi (bu to'g'ri: ularga Nginx orqali murojaat qilinadi).

[!WARNING] Klassik muammo: ilova serverda ishlayapti, curl localhost:3000 javob beradi, lekin tashqaridan — yo'q. Sabab: ilova 127.0.0.1 ni tinglayapti. Yechim: ilovani 0.0.0.0 da ishga tushirish (yoki — yaxshiroq — Nginx reverse proxy orqali, 43-dars).

sudo ss -tlnp | grep :3000         # 3000-portni kim egallagan
sudo ss -tnp                       # faol ulanishlar
ss -s                              # umumiy statistika

"Port already in use" (EADDRINUSE) — sudo ss -tlnp | grep :PORT bilan jarayonni toping, keyin kill (23-dars).


Port ochiqligini tekshirish

nc -zv dokon.uz 443            # netcat
nc -zv 45.12.34.56 22
curl -I https://dokon.uz       # HTTP darajasida (keyingi dars)
Connection to dokon.uz 443 port [tcp/https] succeeded!

Tarmoq yo'lini kuzatish

traceroute google.com         # yoki: tracepath
mtr google.com                # interaktiv, ping + traceroute

Paket qaysi routerlar orqali o'tishini va qayerda kechikish yoki yo'qotish borligini ko'rsatadi.


Tashxis tartibi: "sayt ochilmayapti"

Pastdan yuqoriga, qatlam-baqatlam:

# 1. DNS: domen to'g'ri IP ga ko'rsatyaptimi?
dig dokon.uz +short

# 2. Server: tarmoqda bormi?
ping -c 3 45.12.34.56            # (ICMP yopiq bo'lishi mumkin)

# 3. Port: ochiqmi? (tashqaridan)
nc -zv 45.12.34.56 443

# --- serverning ichida ---
# 4. Xizmat ishlayaptimi?
systemctl status nginx

# 5. To'g'ri portni, to'g'ri manzilda tinglayaptimi?
sudo ss -tlnp | grep -E ':80|:443'

# 6. Firewall?
sudo ufw status                   # (36-dars)

# 7. Ilovaning o'zi javob beryaptimi?
curl -I localhost:3000

Qaysi qadamda muvaffaqiyatsizlik bo'lsa — muammo shu qatlamda.


Nima uchun shunday?

Nima uchun ilovalar standart holatda 127.0.0.1 ni tinglaydi va bu nima uchun yaxshi?

Xavfsizlik uchun. 127.0.0.1 — faqat shu kompyuter ichidagi "ichki telefon": tashqi dunyo unga umuman yetib bora olmaydi, firewall bo'lmasa ham. Baza, kesh, ichki API lar aynan shunday bo'lishi kerak — ularga faqat yonidagi ilova murojaat qiladi. Tashqi dunyo bilan faqat bitta "darvoza" — Nginx (80/443) gaplashadi. Agar MySQL 0.0.0.0 da tinglab, firewall unutilgan bo'lsa — butun internet sizning bazangizga parol tanlashni boshlaydi. Shuning uchun ss -tlnp da 0.0.0.0 ni ko'rganingizda doim so'rang: "bu haqiqatan tashqaridan ochiq bo'lishi kerakmi?"


Xulosa

Eslab qoling:

  • IP — manzil, port — eshik, DNS — domen → IP
  • ip a — manzillar; curl ifconfig.me — tashqi IP
  • ping -c 4 — bog'lanish; javobsizlik ≠ o'chgan
  • dig domen +short — DNS; /etc/hosts — lokal
  • sudo ss -tlnp — kim qaysi portni tinglayapti
  • 0.0.0.0 — hammaga ochiq; 127.0.0.1 — faqat lokal
  • nc -zv host port — port ochiqmi
  • Tashxis: DNS → server → port → xizmat → tinglash manzili → firewall → ilova

Keyingi dars

33-dars: curl va wget — HTTP so'rovlar va yuklab olish