DNS для новичков: как заставить домен работать с сайтом на виртуалке у себя дома — без магии, только наука


Если вы когда-нибудь пытались поднять свой сайт на виртуальной машине, сидя за домашним компьютером, и столкнулись с тем, что он открывается из интернета, но не открывается с вашего же телефона или другого компьютера в той же комнате — вы не одиноки. Более того, вы попали в ту самую ловушку, в которую попадают 9 из 10 новичков. И виноват во всём не Apache, не WordPress, не ваш провайдер и даже не роутер. Виноват — DNS. Да, тот самый, который вы, возможно, считали чем-то далёким, абстрактным и непонятным. Но именно он решает, куда пойдёт ваш запрос, когда вы печатаете в браузере мойсайт.ру.

Эта статья — не сухая лекция из учебника. Это путеводитель по джунглям DNS, написанный человеком, который сам прошёл этот путь, наступал на все грабли и теперь готов показать вам короткую тропинку. Мы разберём всё: от того, что такое DNS на пальцах, до того, как настроить его так, чтобы ваш сайт работал везде — и на смартфоне, и на ноутбуке, и даже на тостере (если бы тот умел открывать браузер). И да, мы решим ту самую проблему, которая сводит с ума всех, кто пытается хостить сайт дома.


Глава 1: Что такое DNS? Объясняю, как своему младшему брату

Представьте, что интернет — это огромный город. У каждого дома (сервера) есть свой точный адрес: улица, номер дома, квартира. В цифровом мире это выглядит как 93.123.163.105 — публичный IP-адрес. Но запоминать такие цифры — адски неудобно. Кто захочет каждый раз вводить 172.217.17.46, чтобы попасть на Google?

Вот здесь и появляется DNS — Domain Name System, Система Доменных Имен. Это как гигантская телефонная книга, которая знает: если вы спросите «Где Google?», она ответит: «Вот его адрес — 172.217.17.46». Вы говорите имя — она даёт номер. Просто, как два пальца об асфальт.

Когда вы вводите gerdlezhv.ru в браузере, первое, что делает ваш компьютер — он спрашивает DNS-сервер: «Эй, а какой IP у gerdlezhv.ru?». DNS-сервер отвечает: «Да вот же, 93.123.163.105». И только после этого браузер отправляет запрос на этот IP-адрес.

Вот и вся магия. Никаких сложных протоколов, никаких квантовых вычислений. Просто справочник.

Но здесь начинается самое интересное.


Глава 2: Почему сайт работает из интернета, но не работает дома? Загадка, которая мучает новичков

Вы сделали всё правильно:

  • Подняли виртуальную машину с Ubuntu.
  • Установили WordPress.
  • Настроили Apache.
  • Получили SSL-сертификат.
  • Пробросили порты на роутере.
  • Проверили — сайт открывается с телефона, подключённого к мобильному интернету. Ура!

А теперь берёте тот же телефон, подключаете его к домашнему Wi-Fi — и… ничего. Браузер пишет: «Не удалось найти IP-адрес сервера». Или: «Не удаётся установить соединение».

Вы в панике. Вы перезагружаете роутер, виртуалку, компьютер. Вы гуглите, вы ругаетесь. Вы думаете, что сломали интернет.

Но на самом деле — вы столкнулись с классической проблемой DNS в локальной сети.

Почему так происходит?

Вот что происходит, когда вы заходите на сайт из интернета:

  1. Ваш телефон (через мобильный интернет) спрашивает публичный DNS (например, Google): «Какой IP у gerdlezhv.ru
  2. DNS отвечает: 93.123.163.105.
  3. Телефон отправляет запрос на этот публичный IP.
  4. Ваш роутер получает запрос, видит, что порт 80 или 443 проброшен на виртуальную машину 192.168.1.51, и перенаправляет туда трафик.
  5. Сайт открывается. Все счастливы.

А вот что происходит, когда вы заходите на сайт из домашней сети:

  1. Ваш телефон (подключённый к Wi-Fi) спрашивает DNS (тот же Google или DNS вашего провайдера): «Какой IP у gerdlezhv.ru
  2. DNS отвечает: 93.123.163.105.
  3. Телефон отправляет запрос на 93.123.163.105.
  4. Запрос приходит на ваш роутер.
  5. Роутер смотрит на этот запрос и думает: «Стоп. Этот IP — мой собственный внешний адрес. Зачем я должен отправлять запрос куда-то наружу, если он предназначен мне?»
  6. Но! Роутер не знает, что делать с этим запросом дальше. Он не понимает, что 93.123.163.105 — это на самом деле 192.168.1.51 внутри сети.
  7. Роутер молчит. Телефон ждёт ответа. Ответа нет.
  8. Браузер выдаёт ошибку: ERR_ADDRESS_UNREACHABLE или ERR_NAME_NOT_RESOLVED.

Это явление называется NAT Loopback или Hairpin NAT. И большинство бытовых роутеров его не поддерживают. Или поддерживают, но очень криво.


Глава 3: Три способа победить проблему (и один из них — волшебный)

Есть три основных способа решить эту проблему. Два из них — для тех, кто хочет сделать всё правильно. Третий — для тех, кто хочет сделать всё прямо сейчас.

Способ 1: Редактируем файл hosts (для компьютера)

Это самый простой способ, если вам нужно, чтобы сайт работал только на вашем компьютере.

Файл hosts — это локальная телефонная книга, которая находится на вашем компьютере. Она имеет приоритет над любым DNS в мире. Если вы скажете ей: «gerdlezhv.ru — это 192.168.1.51», так и будет.

Как это сделать на Windows:

  1. Откройте Блокнот от имени администратора.
  2. Откройте файл: C:\Windows\System32\drivers\etc\hosts
  3. В конец файла добавьте строку:
   192.168.1.51    gerdlezhev.ru www.gerdlezhev.ru
  1. Сохраните файл.

Как это сделать на Linux или macOS:

  1. Откройте терминал.
  2. Выполните:
   sudo nano /etc/hosts
  1. Добавьте строку:
   192.168.1.51    gerdlezhev.ru www.gerdlezhev.ru
  1. Сохраните: Ctrl+O, затем Enter, затем Ctrl+X.

Теперь, когда вы введёте gerdlezhv.ru в браузере — компьютер сначала заглянет в файл hosts, увидит там 192.168.1.51, и отправит запрос прямо туда. Обходя DNS, обходя роутер, обходя весь интернет.

Плюсы:

  • Быстро, бесплатно, работает.
  • Не нужно трогать роутер.

Минусы:

  • Работает только на том компьютере, где вы правили hosts.
  • На смартфоне, планшете, ноутбуке жены — не работает.
  • Если вы переустановите систему — нужно делать заново.

Способ 2: Настройка Split DNS на роутере (для всей сети)

Это профессиональный способ. Он заставляет ваш роутер стать локальным DNS-сервером, который для всех устройств в домашней сети будет отвечать: «gerdlezhv.ru — это 192.168.1.51».

Но есть нюанс: не все роутеры это умеют. Keenetic, ASUS, MikroTik — умеют. Рoутеры от провайдера — обычно не умеют.

Если у вас роутер, который поддерживает статические DNS-записи — заходите в его веб-интерфейс, ищите раздел «DNS», «Статические записи», «Локальный DNS» и добавляете там:

  • Имя: gerdlezhv.ru
  • Тип: A
  • Значение: 192.168.1.51

После этого все устройства в сети, получившие настройки DNS от роутера, будут знать правду.

Плюсы:

  • Работает на всех устройствах: телефоны, ноутбуки, телевизоры.
  • Настройка делается один раз.

Минусы:

  • Не все роутеры поддерживают.
  • Может потребоваться обновление прошивки.
  • Если роутер сбросится — настройки пропадут.

Способ 3: Поднимаем свой DNS-сервер на Debian (для гиков и перфекционистов)

Если ваш роутер не умеет в Split DNS — не беда. У вас есть компьютер с Debian, на котором крутится виртуалка? Отлично. Сделаем из него DNS-сервер.

Устанавливаем dnsmasq — легковесный DNS- и DHCP-сервер.

sudo apt update && sudo apt install dnsmasq -y

Редактируем конфиг:

sudo nano /etc/dnsmasq.conf

Добавляем:

address=/gerdlezhv.ru/192.168.1.51
address=/www.gerdlezhev.ru/192.168.1.51
server=8.8.8.8
interface=br0
listen-address=192.168.1.62

Перезапускаем:

sudo systemctl restart dnsmasq

Теперь идём в настройки роутера и говорим ему: «Раздавай всем в сети DNS-сервер с IP 192.168.1.62».

Готово. Теперь весь ваш дом — под властью вашего собственного DNS-сервера.

Плюсы:

  • Работает на всех устройствах.
  • Полный контроль.
  • Можно добавлять любые домены.
  • Учитесь администрированию.

Минусы:

  • Нужно немного поковыряться в консоли.
  • Если выключить компьютер с Debian — DNS перестанет работать.

Глава 4: Почему HTTPS перечёркнут? И как с этим жить

Когда вы заходите на https://gerdlezhv.ru из локальной сети, браузер часто показывает перечёркнутый замок. Почему?

Потому что SSL-сертификат, который вы получили (скорее всего, от Let’s Encrypt), выдан для домена gerdlezhv.ru. Но когда вы заходите по 192.168.1.51, браузер видит: «Сертификат выдан для gerdlezhv.ru, а я подключаюсь к 192.168.1.51. Это несоответствие!».

И он ругается.

Можно ли это исправить?

Теоретически — да. Можно выпустить сертификат, включающий IP-адрес. Но Let’s Encrypt не подписывает сертификаты для приватных IP-адресов (типа 192.168.x.x). Это запрещено стандартами.

Можно создать самоподписанный сертификат — но тогда браузер будет ругаться ещё сильнее.

Что делать?

Ничего. Жить с этим.

Для локального доступа — это абсолютно безопасно. Трафик не выходит за пределы вашей сети. Перечёркнутый замок — это просто предупреждение, а не угроза.

Если вы хотите красоты — заходите по доменному имени, настроенного через hosts или Split DNS. Тогда сертификат будет соответствовать, и замок станет зелёным.


Глава 5: Чек-лист для новичка — пошаговая инструкция

Вот ваш план действий, если вы только начинаете:

  1. Убедитесь, что сайт работает по IP. Откройте браузер и введите http://192.168.1.51. Если сайт открылся — Apache работает.
  2. Проверьте, что сайт работает из интернета. Подключитесь к мобильному интернету и откройте https://gerdlezhv.ru. Если работает — проброс портов настроен.
  3. Добавьте запись в файл hosts на вашем компьютере. Это решит проблему для вас.
  4. Проверьте, поддерживает ли ваш роутер Split DNS. Если да — настройте его.
  5. Если роутер не поддерживает — поднимите dnsmasq на Debian.
  6. Не парьтесь из-за перечёркнутого HTTPS в локальной сети. Это нормально.
  7. Переподключайте устройства к Wi-Fi после настройки DNS. Иначе они не получат новые настройки.

Эпилог: DNS — это не страшно

DNS — это не чёрная магия. Это просто справочник. И как любой справочник, его можно дополнить, исправить, обмануть. Когда вы понимаете, как он работает — вы перестаёте бояться ошибок вроде ERR_NAME_NOT_RESOLVED. Вы начинаете видеть, где именно сломалась цепочка: DNS не знает адреса, роутер не умеет в loopback, браузер использует DoH.

И вы исправляете это. Не гугля по 100 форумам. А потому что вы понимаете суть.

Ваш сайт на виртуалке дома — это не игрушка. Это полноценный сервер. И он заслуживает того, чтобы работать везде — и из интернета, и из вашей гостиной.

Теперь вы знаете, как этого добиться.

Удачи вам. И пусть ваш DNS всегда резолвится правильно.


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *