Модуль 23

Мережі в Linux: IP, DNS, ports

Ось готовий урок, створений спеціально для тебе у стилі David Malan. Вмикай уяву — ми починаємо!


🎓 CS50-style: Мережі в Linux (IP, DNS, порти)

Привіт усім! Це CS50 (умовно 😉), і сьогодні ми зазирнемо під капот того, що ви робите щодня сотні разів.

1. 🔥 Вступ: Магія, яка ламається

Уявіть ситуацію. Ви пишете код, запускаєте свій вебсервер, відкриваєте браузер, вводите адресу... і бачите "Site can't be reached". Або намагаєтесь підключитися до бази даних, а вона "мовчить".

Ви панікуєте? Ви перезавантажуєте роутер? Чи ви відкриваєте термінал і точно знаєте, як діагностувати проблему?

Давайте чесно: Інтернет — це не магія. Це набір труб, адрес і дверей. І якщо ви працюєте з Linux (а всі серйозні сервери працюють на Linux), ви мусите розуміти, як один процес знаходить інший у цьому цифровому хаосі.

Питання до вас: Коли ви відправляєте лист поштою, чи достатньо написати на конверті "Мамі"? Ні. Потрібна точна адреса. А чи достатньо адреси будинку, якщо це хмарочос на 500 квартир? Теж ні.

Сьогодні ми розберемо три кити мережі: 1. IP-адреса (Будинок). 2. DNS (Телефонна книга). 3. Port (Номер квартири).


2. 🧠 Теоретична база (Як це працює насправді)

Давайте відкинемо нудні підручники й подивимось на логіку.

📍 IP-адреса (Internet Protocol Address)

Це унікальний ідентифікатор комп'ютера в мережі. * IPv4: Виглядає як 192.168.1.1. Це як координати GPS. * Localhost (127.0.0.1): Це адреса "Я". Коли комп'ютер хоче поговорити сам із собою, він йде сюди. Запам'ятайте це число — це "дім" для будь-якого сервера.

Інтуїтивно: IP — це адреса будівлі. Без неї листоноша (пакет даних) не знайде отримувача.

📒 DNS (Domain Name System)

Люди погано запам'ятовують цифри. Нам легше запам'ятати google.com, ніж 142.250.74.46. DNS — це служба, яка перетворює зрозумілі нам слова на зрозумілі комп'ютеру IP-адреси.

Під капотом: Коли ви вводите google.com, ваш Linux спершу дивиться у свій маленький блокнотик (файл /etc/hosts), а якщо там пусто — питає у глобального довідника (DNS-сервера, наприклад, 8.8.8.8).

🚪 Порти (Ports)

Окей, пакет даних дійшов до сервера (будівлі) за IP-адресою. Але всередині працює вебсервер, база даних, пошта і ще купа всього. Кому віддати пакет? Тут вступають порти. Це віртуальні "двері" з номерами від 0 до 65535.

  • Порт 80/443: Зазвичай вебсервер (HTTP/HTTPS).
  • Порт 22: SSH (віддалене керування).
  • Порт 5432: PostgreSQL (база даних).

Головне: На одній IP-адресі може жити багато сервісів, але кожен має сидіти за своїм унікальним портом.


3. 🧪 Приклади (Дивимось у Термінал)

Відкривайте термінал. Давайте "помацаємо" мережу руками.

Приклад 1: Хто я? (IP)

Як дізнатися свою адресу в мережі?

Введіть команду:

ip addr

(Раніше використовували ifconfig, але ми ж сучасні люди, правда? ip — це новий стандарт).

Що ви бачите? Купу тексту. Знайдіть блок, де написано inet. * lo (loopback) — це ваш 127.0.0.1 (внутрішнє кільце). * eth0 або wlan0 — це ваш вихід у зовнішній світ. Там буде щось типу 192.168.x.x або 10.x.x.x.

Приклад 2: Де живе Google? (DNS + Ping)

Давайте перевіримо, чи живий Google, і дізнаємось його справжнє обличчя (IP).

ping -c 2 google.com

-c 2 означає "зроби це 2 рази й зупинись".

Результат:

PING google.com (142.250.185.78) 56(84) bytes of data.
64 bytes from ...

Бачите? Система сама сходила в DNS, дізналась, що google.com = 142.250.185.78, і відправила туди пакети.

Приклад 3: Хто слухає? (Ports)

Уявіть, що ви охоронець і перевіряєте, які двері в будівлі відчинені. Використовуємо команду ss (спадкоємець старого netstat).

ss -tulpn

Виглядає страшно? Давайте розберемо ключі: * -t (tcp) — надійні з'єднання. * -u (udp) — швидкі з'єднання. * -l (listening) — ті, хто чекає гостей. * -p (process) — покажи, яка програма відкрила двері. * -n (numeric) — покажи порти цифрами, не перетворюй їх на назви.

У колонці Local Address:Port ви побачите щось типу 0.0.0.0:22 або 127.0.0.1:5432. Це означає, що певний процес "слухає" цей порт.


4. 🛠 Практична частина

А тепер ваша черга. Не бійтеся, нічого не зламаєте (сподіваюсь 😉).

Завдання 1: "Детектив"

Використайте ip addr. Знайдіть IP-адресу вашого мережевого інтерфейсу (не lo, а реальну). Запишіть її.

Завдання 2: "Ручний DNS"

Є команда nslookup або dig. Спробуйте дізнатися IP-адресу сайту facebook.com.

dig facebook.com +short

Отримали IP? Тепер спробуйте вставити цей IP прямо в адресний рядок браузера. Що сталося? (Іноді спрацює, іноді ні — залежить від налаштувань сервера, але спробувати варто!).

Завдання 3: "Хакери в місті"

Запустіть простий вебсервер на Python (він є майже в кожному Linux). 1. Створіть папку mkdir test_site і зайдіть у неї cd test_site. 2. Виконайте: python3 -m http.server 8000 3. Термінал "зависне" — він слухає. 4. Відкрийте інший термінал і перевірте порти: ss -tulpn | grep 8000. 5. Відкрийте браузер і перейдіть за адресою http://localhost:8000. Результат: Ви бачите вміст папки. Ви тільки що створили сервер!

Завдання 4: "Localhost Trick" (Найцікавіше!)

Ми можемо обдурити систему. 1. Відкрийте файл hosts (потрібні права root): sudo nano /etc/hosts. 2. Додайте в кінець рядок: 127.0.0.1 mysuperwebsite.com 3. Збережіть (Ctrl+O, Enter) і вийдіть (Ctrl+X). 4. Тепер спробуйте пінгувати: ping mysuperwebsite.com. Питання: Куди йдуть пінг? Правильно, на ваш власний комп'ютер! Так розробники тестують сайти локально, даючи їм красиві імена.


5. 💡 Мислення як у розробника

Як відрізнити новачка від профі, коли щось не працює?

Новачок: * "Воно не працює". * Перезавантажує все підряд. * Пише код, не перевіривши, чи є зв'язок із базою.

Досвідчений інженер (думає шарами): 1. Чи є пінг? (Чи бачу я сервер взагалі? -> IP). 2. Чи правильне ім'я? (Чи резолвиться DNS? -> dig / nslookup). 3. Чи відкритий порт? (Чи запущений процес? Чи не блокує фаєрвол? -> ss, telnet або nc). 4. Чи слухає сервер "зовні"? (Часта помилка: сервер запущено на 127.0.0.1, а ви стукаєте з іншого комп'ютера. Треба запускати на 0.0.0.0, щоб пускати всіх).

Порада: Якщо ваша програма не бачить базу даних — на 90% це або неправильний хост/порт, або закритий порт фаєрволом. Перевіряйте це до того, як переписувати код!


6. 🧩 Підсумок

Сьогодні ви перестали сприймати мережу як магію. Ви тепер знаєте: * IP — щоб знайти будинок. * DNS — щоб не запам'ятовувати цифри. * Ports — щоб постукати у правильні двері. * Ви вмієте використовувати ip, ping, ss і навіть обманювати свій комп'ютер через /etc/hosts.

Ви більше не "користувач". Ви — інженер, який розуміє трафік.

Наступного разу: Ми поговоримо про те, як захистити ці двері. Готуйтеся до теми "Права доступу та безпека в Linux (chmod, chown)".

А поки що — закрийте той Python-сервер, не залишайте відкриті порти без нагляду! 😉

Happy coding!