Вопрос или проблема
Я хочу запустить DNS-сервер на VPS, но я не хочу выставлять его на всеобщее обозрение по соображениям безопасности (атаки DDoS), поэтому я хочу, чтобы он использовался только мной с двух устройств – ноутбука на Windows и телефона на Android. Я хочу сделать это без использования VPN на любом из моих устройств, я просто хочу добавить IP-адрес DNS на свои устройства и чтобы они подключались к моему DNS-серверу и блокировали любые другие устройства.
Я не могу понять, как это сделать. Моя первая мысль:
- Настроить фаервол для блокировки всего сетевого трафика
- Включить в белый список IP-адреса обоих моих устройств
Проблема здесь, очевидно, в том, что мои IP-адреса динамические. Есть ли способ обойти это? Несколько решений, которые приходят на ум (но я не уверен, возможно ли это):
- Найти способ аутентифицировать настройки фаервола через сертификаты, установленные на обоих моих устройствах.
- Периодически опрашивать и передавать публичный IP моих устройств на мой сервер через что-то вроде ssh.
- Использовать DoH для аутентификации клиентов, отправляя секрет, хотя я не уверен, как я могу сделать это с Android, так как у меня нет доступа к клиенту DNS.
- Настроить DDNS для моих клиентов (не уверен, возможно ли это на Android).
Интересно, возможно ли эти решения, и если да, то какие инструменты вы бы использовали? Я не очень хорошо учился на занятиях по сетям, было бы интересно понять простые и подробные объяснения на уровне ELI5, почему/почему нет 🙂
Я предполагаю, что вы рассматриваете это скорее как эксперимент илиProof of concept, потому что с практической точки зрения, как уже упоминалось в предыдущем комментарии, то, что вы пытаетесь сделать, является чрезмерным – слишком сложно и требует множества инструментов, каждый из которых может выйти из строя или быть неправильно настроен. Использование VPN значительно, значительно проще и предоставляет дополнительные преимущества помимо саморазмещенного DNS.
Тем не менее, я постараюсь поделиться своими мыслями по вашей ситуации:
Каждый серьезный DNS-сервер имеет функциональность белого/черного списка для отдельных IP-адресов, а также подсетей. Будь то вы настраиваете это на самом сервере имен или в фаерволе, который находится перед ним, особой разницы нет. Практические отличия следующие:
- фаервол значительно более защищен и эффективен в фильтрации трафика, поскольку это его единственная функция. Любое другое серверное программное обеспечение имеет это как побочный функционал
- если вы используете BIND в качестве сервера имен – очевидно, что нет способа заставить BIND тихо игнорировать (= не отвечать на) запросы, приходящие с черных списков IP. Вместо этого он отвечает кодом ошибки REFUSED, что отказывает в использовании самого DNS-сервиса, но выявляет существование такого сервера. Другое программное обеспечение DNS может иметь такую функцию, я не знаю.
- в зависимости от используемого вами фаервола, он может обучаться или распознавать шаблоны трафика и динамически блокировать IP-адреса на основе этого.
Что касается проблемы динамического IP – стоит подумать о том, “насколько динамичны” ваши IP-адреса. Есть вероятность, что вы используете несколько фиксированных поставщиков – одного дома, другого на работе и третьего на мобильных устройствах. Мобильные операторы работают с миллионами устройств, но они работают в частном IP-диапазоне (обычно 10./8) и находятся за NAT-ом за несколькими публичными IP-подсетями. Потребительские интернет-провайдеры также обычно имеют фиксированную IP-подсеть для данного города/района. Вы можете узнать, какие публичные IP-адреса используют ваши провайдеры, и внести их только в белый список. Да, вы будете включать в белый список все другие устройства от клиентов одного и того же оператора, но это все же лишь доля от всего интернета. Это может быть риск, на который вы готовы пойти. В любом случае, даже если вы внесете в белый список единственный IP-адрес, который в данный момент использует ваше конкретное устройство, поскольку это IP-адрес NAT, все другие клиенты за этим NAT также смогут получить доступ к вашему DNS.
Что касается аутентификации, DNS по своей природе и дизайну является публичной службой. Вот почему в протокол не встроена аутентификация клиента. Даже аутентификация на стороне сервера (ответа) через DNSSEC не используется широко, хотя доступна уже около 20 лет.
DNS через HTTP может быть обернут за любой HTTP-аутентификацией (базовая аутентификация, клиентский сертификат и т. д.), однако я не знаю ни одного клиента DNS, который на самом деле поддерживает аутентифицированный DoH. Это нужно настраивать на уровне операционной системы в Windows, iOS, Android.
Так что да, используйте VPN 🙂
Ответ или решение
Как настроить DNS-сервер с частной аутентификацией на VPS
Вопрос настройки DNS-сервера на виртуальном частном сервере (VPS) так, чтобы он был доступен только вам и защите от DDoS-атак, является достаточно сложным, но вполне осуществимым. В данной статье мы рассмотрим основные шаги для реализации вашей идеи, а также возможные решения проблемы динамических IP-адресов.
1. Фильтрация трафика с помощью файрвола
Первый шаг — это установка файрвола, который будет блокировать весь входящий трафик к вашему DNS-серверу, кроме трафика, поступающего с IP-адресов ваших устройств. Это подходит для защиты от несанкционированного доступа.
Рекомендуемые инструменты:
- iptables (в Linux) — мощный инструмент для управления правилами сетевого фильтрации.
- ufw — более простой в использовании интерфейс для iptables, подходящий для новичков.
Настройки:
- Установите файрвол, если он еще не установлен.
- Создайте правила, чтобы блокировать весь входящий трафик.
- Настройте правила для разрешения трафика только с IP-адресов вашего Windows-ноутбука и Android-устройства.
2. Проблема динамических IP-адресов
Как вы правильно заметили, динамические IP-адреса могут затруднить настройку доступа к вашему DNS-серверу. Ниже рассмотрим несколько подходов решения данной проблемы.
2.1 Установка DDNS (Динамическое DNS)
Динамическое DNS позволяет вам обновлять записи доменного имени, когда ваш IP-адрес меняется. Это может помочь в том числе и с Android-устройствами. Однако для этого необходимо, чтобы ваше Android-устройство поддерживало DDNS-клиент.
Рекомендуемые DDNS-сервисы:
- No-IP
- DynDNS
Плюсы:
- Простота использования, не требует значительных технических настроек.
- Обновление записей происходит автоматически, когда IP-адрес меняется.
2.2 Скрипт для обновления IP-адреса
Как альтернатива, вы можете создать скрипт, который будет периодически проверять ваш публичный IP-адрес и обновлять настройки файрвола на вашем сервере:
- Используйте команду
curl
для получения вашего IP-адреса:curl ifconfig.me
- Настройте Cron, чтобы запускать этот скрипт каждые 30 минут или час.
2.3 Чтение и передача IP через SSH
Можно использовать SSH для отправки вашего текущего IP-адреса на ваш сервер. Это может быть реализовано через простой скрипт, который будет выполнять ssh
с передачей команды обновления.
3. Аутентификация и безопасность
Требование аутентификации пользователей в DNS — это непростая задача, так как протокол изначально не проектировался для этого. Однако, существуют альтернативные подходы:
3.1 DNS через HTTPS (DoH)
DNS over HTTPS (DoH) позволяет отправлять DNS-запросы через зашифрованный канал, что затрудняет перехват. Тем не менее, для полной аутентификации потребуется доступ к DNS-клиенту на устройствах, что может быть не всегда возможно на Android.
3.2 Использование сертификатов
Вы можете экспериментировать с невидимыми частями программного обеспечения, такими как DNS-серверы, которые допускают аутентификацию на уровне приложений через сертификаты. Однако это тоже может потребовать значительных усилий и может быть сложным для реализации.
Заключение
Хотя у вас есть несколько путей достижения вашей цели, использование VPN будет наиболее простой и безопасной альтернативой. VPN не только шифрует ваш трафик, но и ограничивает доступ к вашему DNS-серверу. Если вы настроите VPN, вам не нужно будет беспокоиться о динамических IP, а также о сложности управления безопасностью DNS-запросов.
Исходя из вышеизложенного, стоит оценить затраты времени и ресурсов на настройку сложной системы аутентификации и фильтрации доступа. Возможно, простота решения в виде VPN будет лучшим выбором для ваших нужд.