Реализация рекурсивного кэширующего DNS-сервера с поддержкой основных типов записей. Сервер:
- Принимает DNS-запросы через UDP (nslookup, dig и др.)
- Выполняет рекурсивное разрешение через вышестоящий сервер (1.1.1.1 по умолчанию)
- Кэширует записи из всех секций ответа (Answer, Authority, Additional)
- Автоматически управляет TTL записей. Автоматическая очистка просроченных записей
- Сериализация/десериализация кэша:
- Автосохранение при выходе
- Загрузка при старте
- Поддерживает типы записей: A, AAAA, NS, PTR
Порт по умолчанию: 1053
Адрес привязки: 127.0.0.1 (настраивается)
-
ConfigHandler - управление конфигурацией
- Загрузка параметров из JSON-файла
- Значения по умолчанию
- Валидация настроек
-
StorageManager - управление кэшем
- Сериализация/десериализация
- Автоматическая очистка
-
DNSParser - парсинг DNS-пакетов
- Парсинг вопросов и ответов
- Извлечение записей из всех секций
-
NetworkManager - управление соединением
- Сетевое взаимодействие
- Обработка запросов
-
DNSServer - ядро сервера
- Интеграция компонентов
{
"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
}-
Сервер запускается на указанном адресе/порту
-
Для каждого входящего запроса:
- Извлекаются вопросы (Questions)
- Проверка кэша для каждого вопроса
- При наличии актуальной A-записи - немедленный ответ
- При отсутствии - рекурсивный запрос к upstream DNS
-
Ответ upstream DNS:
- Парсится для извлечения всех записей
- Валидируются и сохраняются в кэш
- Отправляется клиенту
-
Фоновая задача каждые 60(по умолчанию) сек:
- Удаляет записи с истекшим TTL
-
При завершении работы:
- Сохраняет актуальный кэш на диск
python run_server.py




