Компьютерные сети

7.1 DNS

Проблема: как запомнить IP-адреса?

Людям сложно запоминать IP-адреса (например, 93.184.216.34). Гораздо проще запомнить доменное имя (например, example.com). DNS (Domain Name System) — это "телефонная книга интернета", которая переводит доменные имена в IP-адреса.

Аналогия: DNS — это как телефонный справочник: вы знаете имя (доменное имя), а система находит номер (IP-адрес).

Как работает DNS?

Процесс разрешения имени (DNS lookup):

  1. Запрос: Браузер хочет открыть сайт "example.com"
  2. Локальный кэш: Проверяется локальный кэш DNS (на компьютере)
  3. Рекурсивный резолвер: Если не найдено, запрос идет к DNS-серверу провайдера (рекурсивный резолвер)
  4. Корневой сервер: Резолвер спрашивает корневой DNS-сервер: "Где находится .com?"
  5. TLD-сервер: Корневой сервер направляет к серверу домена .com
  6. Авторитативный сервер: Сервер .com направляет к авторитативному серверу example.com
  7. Ответ: Авторитативный сервер возвращает IP-адрес example.com
  8. Кэширование: Ответ сохраняется в кэше для ускорения следующих запросов

Иерархия DNS

Структура доменных имен:

  • Корневая зона (.) — верхний уровень иерархии
  • TLD (Top-Level Domain) — домены верхнего уровня (.com, .org, .ru, .net)
  • Домены второго уровня — example.com, google.com
  • Поддомены — www.example.com, mail.example.com

Пример: В имени "www.example.com" — "com" это TLD, "example" это домен второго уровня, "www" это поддомен.

Типы DNS-записей

Основные типы записей:

  • A — IPv4-адрес домена (например, example.com → 93.184.216.34)
  • AAAA — IPv6-адрес домена
  • CNAME — алиас (каноническое имя), указывает на другое доменное имя (например, www → example.com)
  • MX — почтовый сервер для домена (для email)
  • NS — серверы имен, которые отвечают за домен
  • TXT — произвольный текст (используется для SPF, DKIM и других целей)
  • SRV — информация о службах (например, для VoIP, XMPP)

TTL: время жизни записей

TTL (Time To Live) — время, в течение которого DNS-запись считается действительной и хранится в кэше. После истечения TTL запрос повторяется.

Пример: Если TTL = 3600 секунд (1 час), то DNS-резолвер будет использовать кэшированное значение в течение часа, затем запросит обновление.

Безопасность DNS

Методы защиты:

  • DNSSEC — криптографическая подпись записей, защищает от подмены (spoofing)
  • DoT (DNS over TLS) — шифрование DNS-запросов через TLS
  • DoH (DNS over HTTPS) — DNS-запросы через HTTPS, скрывает их от провайдера
# Диагностика DNS
# Windows
nslookup example.com
nslookup -type=MX example.com

# Linux/macOS
dig example.com
dig example.com MX
dig example.com ANY

# Быстрый запрос
dig example.com +short

Резюме

Ключевые моменты:

  • DNS — система перевода доменных имен в IP-адреса
  • Иерархия: Корневая зона → TLD → домены второго уровня → поддомены
  • Процесс: Локальный кэш → рекурсивный резолвер → корневой сервер → TLD → авторитативный сервер
  • Записи: A/AAAA (IP-адреса), CNAME (алиасы), MX (почта), NS (серверы имен)
  • TTL — время жизни записей в кэше
  • Безопасность: DNSSEC, DoT, DoH для защиты от подмены

Цель: Обеспечить удобный способ доступа к ресурсам интернета по понятным именам вместо числовых IP-адресов.

7.2 HTTP/HTTPS

HTTP — протокол прикладного уровня с моделью запрос/ответ. HTTPS добавляет шифрование и аутентификацию через TLS. Базовые методы: GET/POST/PUT/PATCH/DELETE; коды статуса: 1xx–5xx.

Ключевые аспекты HTTPS/TLS

  • TLS рукопожатие: выбор параметров, обмен ключами, проверка сертификата.
  • Сертификаты X.509: цепочка доверия, CA/Intermediate, проверки CN/SAN, OCSP/CRL.
  • HTTP/2 и HTTP/3: мультиплексирование потоков, сжатие заголовков (HPACK/QPACK), на базе TLS/QUIC.
  • Идемпотентность: GET/PUT/DELETE — идемпотентны; POST — нет. Это влияет на ретраи и прокси.
  • Кэширование: Cache‑Control/ETag/Last‑Modified управляют валидностью; Vary влияет на ключи кэша.

7.3 DHCP

Проблема: ручная настройка IP-адресов

В больших сетях настраивать IP-адреса вручную на каждом устройстве неэффективно и подвержено ошибкам. DHCP (Dynamic Host Configuration Protocol) автоматически выдает IP-адреса и другие параметры сети устройствам.

Аналогия: DHCP — это как "автоматическая выдача номеров" в гостинице. Вы приезжаете, и вам автоматически выдают номер (IP-адрес) и ключ (параметры сети).

Как работает DHCP?

Процесс получения IP-адреса называется DORA (по первым буквам этапов):

Процесс DORA:

  1. Discover — устройство отправляет broadcast-запрос: "Есть ли DHCP-сервер?"
  2. Offer — DHCP-сервер отвечает: "Да, вот тебе IP-адрес и параметры"
  3. Request — устройство подтверждает: "Хорошо, я принимаю этот адрес"
  4. Acknowledge — сервер подтверждает: "Адрес зарезервирован за тобой"

Что выдает DHCP?

Параметры, выдаваемые DHCP:

  • IP-адрес — уникальный адрес устройства
  • Маска подсети — определяет размер сети
  • Шлюз по умолчанию — маршрутизатор для выхода в другие сети
  • DNS-серверы — адреса серверов для разрешения имен
  • Дополнительные опции — домен поиска, время аренды и т.д.

Аренда адресов

DHCP выдает адреса не навсегда, а на определенное время — аренду (lease). Это позволяет эффективно использовать ограниченное количество адресов.

Процесс аренды:

  • Выдача: Сервер выдает адрес на определенное время (например, 24 часа)
  • Обновление: За 50% времени аренды устройство запрашивает продление
  • Освобождение: Если устройство отключается, адрес возвращается в пул
  • Преимущество: Адреса не "застревают" у отключенных устройств

Резервирование адресов

Для важных устройств (серверы, принтеры) можно зарезервировать постоянный IP-адрес на основе их MAC-адреса.

Пример: Сервер с MAC-адресом AA:BB:CC:DD:EE:FF всегда получит IP 192.168.1.100, даже если перезагрузится.

DHCP-опции

Стандартные опции:

  • Опция 3 — шлюз по умолчанию (Router)
  • Опция 6 — DNS-серверы
  • Опция 15 — домен поиска
  • Опция 51 — время аренды адреса

APIPA: автоматический IP без DHCP

APIPA (Automatic Private IP Addressing) — это механизм, который позволяет устройству автоматически назначить себе IP-адрес, если DHCP-сервер недоступен. Это часть стандарта Microsoft (начиная с Windows 98) и используется в Windows, macOS и некоторых других системах.

Как работает APIPA:

  1. Попытка получить адрес через DHCP: Устройство отправляет DHCP Discover и ждет ответа
  2. Таймаут: Если DHCP-сервер не отвечает в течение определенного времени, запускается APIPA
  3. Генерация адреса: Устройство случайным образом выбирает адрес из диапазона 169.254.0.0/16 (169.254.1.0 — 169.254.254.255)
  4. Проверка уникальности: Устройство отправляет ARP-запрос для проверки, не используется ли этот адрес другим устройством
  5. Назначение: Если адрес свободен, устройство назначает его себе
  6. Повторные попытки: Устройство продолжает периодически искать DHCP-сервер в фоновом режиме

Характеристики APIPA:

  • Диапазон адресов: 169.254.0.0/16 (169.254.1.0 — 169.254.254.255)
  • Маска подсети: 255.255.0.0 (/16)
  • Шлюз по умолчанию: Не назначается (нет выхода за пределы локальной сети)
  • DNS-серверы: Не назначаются
  • Использование: Только для связи внутри локальной сети (link-local)

Когда появляется APIPA: Если вы видите адрес 169.254.x.x на вашем устройстве, это значит, что DHCP-сервер недоступен. Возможные причины: сервер не работает, сетевой кабель не подключен, проблемы с коммутатором или настройками сети.

Отличия от приватных адресов:

  • 169.254.0.0/16 (APIPA) — автоматически назначается при отсутствии DHCP, только для локальной связи
  • 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12 — приватные адреса для внутренних сетей, могут маршрутизироваться через NAT

Диагностика: Если устройство получило APIPA-адрес, проверьте:

  • Работает ли DHCP-сервер?
  • Подключен ли сетевой кабель?
  • Правильно ли настроен порт коммутатора (VLAN)?
  • Достаточно ли адресов в пуле DHCP?
# Проверка APIPA-адреса
# Windows
ipconfig /all
# Если видите адрес 169.254.x.x — это APIPA

# Освобождение и обновление DHCP
ipconfig /release
ipconfig /renew

# Linux/macOS
ip addr show
# Если видите адрес 169.254.x.x — это APIPA (или link-local в IPv6)

# Освобождение и обновление DHCP
sudo dhclient -r    # release
sudo dhclient       # renew

IPv6 эквивалент: В IPv6 существует аналогичный механизм — Link-Local адреса (fe80::/10). Они автоматически назначаются всем устройствам и используются для связи внутри локального сегмента сети.

Резюме

Ключевые моменты:

  • DHCP — автоматическая выдача IP-адресов и параметров сети
  • Процесс DORA: Discover → Offer → Request → Acknowledge
  • Выдает: IP-адрес, маску, шлюз, DNS-серверы
  • Аренда: Адреса выдаются на время, затем обновляются или освобождаются
  • Резервирование: Постоянные адреса для важных устройств

Цель: Упростить настройку сетей, автоматизировать выдачу адресов и уменьшить количество ошибок конфигурации.

7.4 Почтовые протоколы

Отправка — SMTP; получение — IMAP/POP3. Для защиты транспорта используются STARTTLS/TLS. Аутентикация домена и защита от подмены — через SPF/DKIM/DMARC.

Практические моменты почты

  • SMTP submission порт 587 с аутентификацией; MTA‑to‑MTA — 25 порт.
  • IMAPS/POP3S: 993/995; IMAP предпочтителен благодаря синхронизации состояния.
  • SPF/DKIM/DMARC: публикация записей, выравнивание доменов, политика reject/quarantine.

7.5 VoIP и SIP

VoIP переносит голос по IP. SIP управляет сигнализацией (создание/изменение/завершение сессии), а медиа передаются по RTP/SRTP.

Базовые элементы

  • Регистрация: UA регистрируется на SIP‑сервере (Registrar/Proxy).
  • Сессия: INVITE/200 OK/ACK, параметры медиа в SDP (кодеки, порты).
  • NAT‑траверс: STUN/TURN/ICE для установления медиапути через NAT.

Качество и кодеки

  • Кодеки: G.711 (простой, высокая полоса), Opus (адаптивный), G.729 (низкая полоса).
  • Буфер джиттера: сглаживает вариации задержки, компромисс с задержкой.
  • MOS: метрика субъективного качества; важны задержка/джиттер/потери.

Безопасность: используйте TLS для SIP и SRTP для медиа; сегментация голосового трафика (VLAN/QoS) снижает взаимное влияние.

7.6 Протоколы удаленного доступа

Зачем нужен удаленный доступ?

Администраторам и пользователям часто нужно управлять удаленными системами: настраивать серверы, управлять сетевым оборудованием, работать на удаленных компьютерах. Для этого используются протоколы удаленного доступа.

Задачи протоколов удаленного доступа:

  • Управление сетевым оборудованием (коммутаторы, маршрутизаторы)
  • Администрирование серверов
  • Удаленная работа на рабочих станциях
  • Техническая поддержка пользователей

SSH — защищенный протокол управления

SSH (Secure Shell) — криптографический сетевой протокол для безопасного удаленного управления системами и передачи данных. SSH шифрует весь трафик, включая пароли, что делает его стандартом для удаленного администрирования.

Ключевые особенности SSH:

  • Шифрование: Все данные передаются в зашифрованном виде
  • Аутентификация: Поддержка паролей и ключей (публичный/приватный)
  • Порт: 22 (TCP)
  • Целостность: Защита от подмены данных через HMAC
  • Туннелирование: Возможность создавать защищенные туннели для других протоколов (port forwarding)

Процесс установления SSH-соединения:

  1. Рукопожатие: Клиент и сервер договариваются об алгоритмах шифрования
  2. Обмен ключами: Генерируется общий сеансовый ключ (Diffie-Hellman)
  3. Проверка хоста: Клиент проверяет fingerprint сервера
  4. Аутентификация: Пользователь вводит пароль или использует SSH-ключ
  5. Сессия: Устанавливается защищенное соединение для команд
# Подключение к удаленному хосту
ssh username@192.168.1.10
ssh username@server.example.com

# Подключение на нестандартный порт
ssh -p 2222 username@192.168.1.10

# Подключение с использованием приватного ключа
ssh -i ~/.ssh/id_rsa username@192.168.1.10

# Копирование файлов через SSH (SCP)
scp file.txt username@192.168.1.10:/home/username/
scp username@192.168.1.10:/var/log/app.log ./

# SFTP — защищенная передача файлов
sftp username@192.168.1.10

# Port Forwarding (туннелирование)
# Локальное: локальный порт 8080 → удаленный 80
ssh -L 8080:localhost:80 username@192.168.1.10

# Удаленное: удаленный порт 8080 → локальный 80
ssh -R 8080:localhost:80 username@192.168.1.10

# Динамическое (SOCKS-прокси)
ssh -D 1080 username@192.168.1.10

SSH-ключи vs пароли:

  • Пароли: Просто, но уязвимы к перебору и фишингу
  • SSH-ключи: Пара ключей (публичный/приватный), намного безопаснее
    • Публичный ключ размещается на сервере (~/.ssh/authorized_keys)
    • Приватный ключ хранится на клиенте (никогда не передается по сети)
    • Опционально защищен паролем (passphrase)
    • Невозможно подобрать или перехватить
# Генерация SSH-ключей
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
ssh-keygen -t ed25519 -C "your_email@example.com"  # Современный алгоритм

# Копирование публичного ключа на сервер
ssh-copy-id username@192.168.1.10

# Настройка SSH-сервера (файл /etc/ssh/sshd_config)
Port 22                              # Порт SSH
PermitRootLogin no                   # Запретить вход под root
PasswordAuthentication no            # Отключить аутентификацию по паролю (только ключи)
PubkeyAuthentication yes             # Разрешить аутентификацию по ключам
MaxAuthTries 3                       # Максимум попыток входа
ClientAliveInterval 300              # Таймаут неактивности
ClientAliveCountMax 2                # Количество проверок перед отключением

Telnet — незащищенный предшественник SSH

Telnet — протокол для удаленного управления, который передает данные в открытом виде, включая пароли. Исторический протокол, сейчас считается небезопасным.

Характеристики Telnet:

  • Порт: 23 (TCP)
  • Шифрование: Отсутствует — все данные передаются открытым текстом
  • Аутентификация: Простая (логин/пароль в открытом виде)
  • Безопасность: Крайне низкая — легко перехватить пароли
  • Применение сегодня: Только для тестирования или в изолированных сетях
# Подключение через Telnet
telnet 192.168.1.10
telnet 192.168.1.10 23

# Telnet для проверки доступности порта (диагностика)
telnet google.com 80
telnet smtp.example.com 25

# Пример использования Telnet для проверки HTTP
telnet google.com 80
GET / HTTP/1.1
Host: google.com
# (Enter дважды)

Важно: Telnet НЕ следует использовать для управления в продакшене! Используйте SSH. Telnet можно применять только для диагностики (проверка доступности порта) в доверенных сетях.

RDP — удаленный рабочий стол Windows

RDP (Remote Desktop Protocol) — протокол Microsoft для удаленного доступа к графическому рабочему столу Windows. Позволяет полностью управлять удаленным компьютером как будто вы сидите за ним.

Характеристики RDP:

  • Порт: 3389 (TCP/UDP)
  • Шифрование: TLS 1.2+ (в современных версиях)
  • Графический интерфейс: Полная передача рабочего стола
  • Функции: Буфер обмена, принтеры, диски, аудио, USB-устройства
  • Оптимизация: Сжатие данных, кэширование, адаптация к пропускной способности
  • Multi-session: Поддержка одновременных сессий (Windows Server)
# Подключение через RDP
# Windows: встроенный клиент
mstsc.exe                            # Графический интерфейс
mstsc /v:192.168.1.10                # Прямое подключение
mstsc /v:192.168.1.10:3390           # Нестандартный порт

# Linux: клиент rdesktop или freerdp
rdesktop 192.168.1.10
xfreerdp /v:192.168.1.10 /u:username /p:password /cert:ignore

# macOS: Microsoft Remote Desktop (из App Store)

# Настройка RDP на Windows (PowerShell)
Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server' -Name "fDenyTSConnections" -Value 0
Enable-NetFirewallRule -DisplayGroup "Remote Desktop"

# Проверка доступности RDP
Test-NetConnection -ComputerName 192.168.1.10 -Port 3389

Безопасность RDP:

  • NLA (Network Level Authentication): Аутентификация до установки сессии
  • Сильные пароли: Обязательны для защиты от перебора
  • Ограничение доступа: Firewall, белые списки IP
  • VPN: Используйте RDP только через VPN, не из интернета напрямую
  • Multi-factor: Двухфакторная аутентификация
  • Обновления: Регулярные патчи (уязвимости типа BlueKeep)

VNC — кроссплатформенный удаленный рабочий стол

VNC (Virtual Network Computing) — открытый протокол для удаленного доступа к графическому интерфейсу. Работает на всех платформах (Windows, Linux, macOS).

Характеристики VNC:

  • Порт: 5900+ (5900, 5901, 5902... для разных дисплеев)
  • Протокол: RFB (Remote Frame Buffer)
  • Шифрование: По умолчанию нет (нужно через SSH-туннель или VNC + TLS)
  • Кроссплатформенность: Работает везде
  • Легковесность: Меньше функций, чем RDP, но проще
  • Варианты: TightVNC, RealVNC, TigerVNC, UltraVNC
# Запуск VNC-сервера (Linux)
vncserver :1                         # Запуск на дисплее :1 (порт 5901)
vncserver -kill :1                   # Остановка

# Подключение к VNC-серверу
vncviewer 192.168.1.10:1             # Дисплей :1 (порт 5901)
vncviewer 192.168.1.10:5901          # Прямое указание порта

# VNC через SSH-туннель (безопасно!)
ssh -L 5901:localhost:5901 username@192.168.1.10
vncviewer localhost:1

# Настройка VNC с паролем
vncpasswd                            # Установка пароля VNC

# Windows: UltraVNC, TightVNC
# macOS: встроенный "Screen Sharing" или клиенты VNC

Безопасность VNC: Базовый VNC не шифрует трафик! Обязательно используйте SSH-туннель или VNC с TLS для защиты. Никогда не открывайте VNC напрямую в интернет.

Сравнение протоколов

ПротоколПортШифрованиеПрименениеБезопасность
SSH22✅ Да (обязательно)Управление CLI, передача файлов🟢 Высокая
Telnet23❌ НетУстаревший, только для тестов🔴 Крайне низкая
RDP3389✅ TLS (современный)Удаленный рабочий стол Windows🟡 Средняя (с NLA)
VNC5900+⚠️ Опционально (через SSH)Кроссплатформенный рабочий стол🟡 Средняя (с туннелем)

Лучшие практики безопасности

Общие рекомендации:

  • SSH-ключи вместо паролей: Для SSH всегда используйте ключи
  • Отключить Telnet: Никогда не используйте в продакшене
  • VPN для графических протоколов: RDP и VNC только через VPN
  • Нестандартные порты: Измените порты по умолчанию (security through obscurity — не основная защита, но помогает)
  • Firewall: Ограничьте доступ по IP-адресам
  • Fail2Ban: Автоматическая блокировка после неудачных попыток входа
  • Мониторинг: Логируйте все попытки доступа
  • Multi-factor: Двухфакторная аутентификация где возможно
  • Обновления: Своевременные патчи безопасности
# Настройка Fail2Ban для SSH (Linux)
# /etc/fail2ban/jail.local
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3                         # Максимум попыток
bantime = 3600                       # Время блокировки (секунды)
findtime = 600                       # Окно для подсчета попыток

# Проверка заблокированных IP
fail2ban-client status sshd

# Firewall: разрешить SSH только с определенной подсети
# iptables (Linux)
iptables -A INPUT -p tcp --dport 22 -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP

# Windows Firewall
New-NetFirewallRule -DisplayName "RDP from LAN only" -Direction Inbound -LocalPort 3389 -Protocol TCP -RemoteAddress 192.168.1.0/24 -Action Allow

Практические сценарии

Когда использовать:

  • SSH: Управление Linux/Unix серверами, сетевым оборудованием, автоматизация через скрипты
  • Telnet: Только для диагностики портов (telnet host port) в доверенных сетях
  • RDP: Администрирование Windows серверов, удаленная работа на Windows
  • VNC: Управление Linux GUI, кроссплатформенный доступ, техподдержка

Jump Host (Bastion): В продакшене часто используется архитектура с "прыжковым хостом" — специальный защищенный сервер, через который проходит весь удаленный доступ. Это добавляет дополнительный уровень безопасности и централизованный аудит.

Резюме

Ключевые моменты:

  • SSH (порт 22) — защищенное управление через командную строку, стандарт для администрирования
  • Telnet (порт 23) — незащищенный, устаревший, только для диагностики
  • RDP (порт 3389) — удаленный рабочий стол Windows с шифрованием
  • VNC (порт 5900+) — кроссплатформенный графический доступ, требует SSH-туннель
  • SSH-ключи — предпочтительный метод аутентификации вместо паролей
  • VPN — обязателен для графических протоколов из интернета
  • Firewall + Fail2Ban — защита от атак перебора
  • Jump Host — дополнительный уровень безопасности для критичных систем

Цель: Обеспечить безопасный и эффективный удаленный доступ для администрирования систем и удаленной работы.

Настройки

Цветовая схема

Тема