Если вы когда-нибудь пытались поднять свой сайт на виртуальной машине, сидя за домашним компьютером, и столкнулись с тем, что он открывается из интернета, но не открывается с вашего же телефона или другого компьютера в той же комнате — вы не одиноки. Более того, вы попали в ту самую ловушку, в которую попадают 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 в локальной сети.
Почему так происходит?
Вот что происходит, когда вы заходите на сайт из интернета:
- Ваш телефон (через мобильный интернет) спрашивает публичный DNS (например, Google): «Какой IP у
gerdlezhv.ru
?» - DNS отвечает:
93.123.163.105
. - Телефон отправляет запрос на этот публичный IP.
- Ваш роутер получает запрос, видит, что порт 80 или 443 проброшен на виртуальную машину
192.168.1.51
, и перенаправляет туда трафик. - Сайт открывается. Все счастливы.
А вот что происходит, когда вы заходите на сайт из домашней сети:
- Ваш телефон (подключённый к Wi-Fi) спрашивает DNS (тот же Google или DNS вашего провайдера): «Какой IP у
gerdlezhv.ru
?» - DNS отвечает:
93.123.163.105
. - Телефон отправляет запрос на
93.123.163.105
. - Запрос приходит на ваш роутер.
- Роутер смотрит на этот запрос и думает: «Стоп. Этот IP — мой собственный внешний адрес. Зачем я должен отправлять запрос куда-то наружу, если он предназначен мне?»
- Но! Роутер не знает, что делать с этим запросом дальше. Он не понимает, что
93.123.163.105
— это на самом деле192.168.1.51
внутри сети. - Роутер молчит. Телефон ждёт ответа. Ответа нет.
- Браузер выдаёт ошибку:
ERR_ADDRESS_UNREACHABLE
илиERR_NAME_NOT_RESOLVED
.
Это явление называется NAT Loopback или Hairpin NAT. И большинство бытовых роутеров его не поддерживают. Или поддерживают, но очень криво.
Глава 3: Три способа победить проблему (и один из них — волшебный)
Есть три основных способа решить эту проблему. Два из них — для тех, кто хочет сделать всё правильно. Третий — для тех, кто хочет сделать всё прямо сейчас.
Способ 1: Редактируем файл hosts (для компьютера)
Это самый простой способ, если вам нужно, чтобы сайт работал только на вашем компьютере.
Файл hosts
— это локальная телефонная книга, которая находится на вашем компьютере. Она имеет приоритет над любым DNS в мире. Если вы скажете ей: «gerdlezhv.ru
— это 192.168.1.51
», так и будет.
Как это сделать на Windows:
- Откройте Блокнот от имени администратора.
- Откройте файл:
C:\Windows\System32\drivers\etc\hosts
- В конец файла добавьте строку:
192.168.1.51 gerdlezhev.ru www.gerdlezhev.ru
- Сохраните файл.
Как это сделать на Linux или macOS:
- Откройте терминал.
- Выполните:
sudo nano /etc/hosts
- Добавьте строку:
192.168.1.51 gerdlezhev.ru www.gerdlezhev.ru
- Сохраните:
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: Чек-лист для новичка — пошаговая инструкция
Вот ваш план действий, если вы только начинаете:
- Убедитесь, что сайт работает по IP. Откройте браузер и введите
http://192.168.1.51
. Если сайт открылся — Apache работает. - Проверьте, что сайт работает из интернета. Подключитесь к мобильному интернету и откройте
https://gerdlezhv.ru
. Если работает — проброс портов настроен. - Добавьте запись в файл
hosts
на вашем компьютере. Это решит проблему для вас. - Проверьте, поддерживает ли ваш роутер Split DNS. Если да — настройте его.
- Если роутер не поддерживает — поднимите
dnsmasq
на Debian. - Не парьтесь из-за перечёркнутого HTTPS в локальной сети. Это нормально.
- Переподключайте устройства к Wi-Fi после настройки DNS. Иначе они не получат новые настройки.
Эпилог: DNS — это не страшно
DNS — это не чёрная магия. Это просто справочник. И как любой справочник, его можно дополнить, исправить, обмануть. Когда вы понимаете, как он работает — вы перестаёте бояться ошибок вроде ERR_NAME_NOT_RESOLVED
. Вы начинаете видеть, где именно сломалась цепочка: DNS не знает адреса, роутер не умеет в loopback, браузер использует DoH.
И вы исправляете это. Не гугля по 100 форумам. А потому что вы понимаете суть.
Ваш сайт на виртуалке дома — это не игрушка. Это полноценный сервер. И он заслуживает того, чтобы работать везде — и из интернета, и из вашей гостиной.
Теперь вы знаете, как этого добиться.
Удачи вам. И пусть ваш DNS всегда резолвится правильно.
Добавить комментарий