Skip to content

PavelMartinelli/DNS_Server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Кэширующий DNS-сервер

Описание

Реализация рекурсивного кэширующего DNS-сервера с поддержкой основных типов записей. Сервер:

  • Принимает DNS-запросы через UDP (nslookup, dig и др.)
  • Выполняет рекурсивное разрешение через вышестоящий сервер (1.1.1.1 по умолчанию)
  • Кэширует записи из всех секций ответа (Answer, Authority, Additional)
  • Автоматически управляет TTL записей. Автоматическая очистка просроченных записей
  • Сериализация/десериализация кэша:
    • Автосохранение при выходе
    • Загрузка при старте
  • Поддерживает типы записей: A, AAAA, NS, PTR

Порт по умолчанию: 1053
Адрес привязки: 127.0.0.1 (настраивается)

Структура проекта

Классы

  1. ConfigHandler - управление конфигурацией

    • Загрузка параметров из JSON-файла
    • Значения по умолчанию
    • Валидация настроек
  2. StorageManager - управление кэшем

    • Сериализация/десериализация
    • Автоматическая очистка
  3. DNSParser - парсинг DNS-пакетов

    • Парсинг вопросов и ответов
    • Извлечение записей из всех секций
  4. NetworkManager - управление соединением

    • Сетевое взаимодействие
    • Обработка запросов
  5. DNSServer - ядро сервера

    • Интеграция компонентов

Конфигурация (config.json)

{
    "data_store": "dns_cache.db",
    "listen_port": 1053,
    "primary_dns": ["1.1.1.1", 53],
    "valid_records": {
        "0001": "A",
        "001c": "AAAA",
        "0002": "NS",
        "000c": "PTR"
    },
    "cleanup_interval": 60,
    "default_ttl": 300,
    "bind_address": "0.0.0.0",
    "max_jumps": 5,
    "socket_timeout": 1
}

Алгоритм работы

  1. Сервер запускается на указанном адресе/порту

  2. Для каждого входящего запроса:

    • Извлекаются вопросы (Questions)
    • Проверка кэша для каждого вопроса
    • При наличии актуальной A-записи - немедленный ответ
    • При отсутствии - рекурсивный запрос к upstream DNS
  3. Ответ upstream DNS:

    • Парсится для извлечения всех записей
    • Валидируются и сохраняются в кэш
    • Отправляется клиенту
  4. Фоновая задача каждые 60(по умолчанию) сек:

    • Удаляет записи с истекшим TTL
  5. При завершении работы:

    • Сохраняет актуальный кэш на диск

Примеры работы

1 Запуск сервера

python run_server.py

img_1.png


2. Работа с различными запросами:

Тип A


img_2.png


Тип AAAA


img_3.png


Тип NS


img_4.png


Тип PTR


img_5.png


3. Корректное завершение работы


img.png


About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages