Доступ к сайту локально

Вопрос или проблема

ubuntu 24.04 сервер, apache2 и firefox. Я могу открыть локальный сайт с “localhost”, “127.0.0.1” и IP-адресом машины “192.168.0.20”, но не с shock.pics или IP, назначенным провайдером. Я могу получить доступ к “shock.pics” или IP, назначенному провайдером, вне локальной сети. Роутер Actiontec перенаправляет IP, назначенный провайдером, на “192.168.0.20”, который назначен серверу на роутере. У меня есть 3 вебсайта в файле виртуального хоста, все из которых можно загрузить вне сети, и HTTPS работает. Я пробовал bind9, но в итоге пришлось восстанавливать всё, так как он всё перепутал. Спасибо Timeshift. У меня также есть запущенный Nextcloud под одним вебсайтом, к которому можно получить доступ только из сети. Даже используя Nemo для перехода к файлу и щелчка правой кнопкой мыши, чтобы открыть файл в Firefox, я получаю File not found "file:///var/www/html/shock.pics/index.html".

dnsmasq, это то, что мне нужно??

Я переустановил bind9, но он всё равно не работал. По крайней мере, я всё еще могу получить доступ к сети. Я уверен, что перепутал файлы зон и разрешений. Что-то выделяется?

# /etc/bind/named.conf.local
//
// Проводите любую локальную конфигурацию здесь
//

// Рассмотрите возможность добавления зон 1918, если они не используются в вашей
// организации
//include "/etc/bind/zones.rfc1918";

# Это определение зоны. замените example.com на ваше доменное имя
zone "shocktography.pics" {
        type master;
        file "/etc/bind/zones/shocktography.pics.db";
        };

# Это определение зоны для обратного DNS. замените 0.168.192 на ваш сетевой адрес>
zone "192.168.0.20.in-addr.arpa" {
     type master;
     file "/etc/bind/zones/rev.192.168.0.20.in-addr.arpa";
};


# /etc/bind/named.conf.options
options {
        directory "/var/cache/bind";

        // Если между вами и именевыми серверами есть брандмауэр, с которым вы хотите
        // связаться, вам, возможно, нужно будет настроить брандмауэр, чтобы разрешить
        // доступ к нескольким портам.  Смотрите http://www.kb.cert.org/vuls/id/800113

        // Если ваш провайдер предоставил один или несколько IP-адресов для стабильных
        // именевых серверов, вы, вероятно, захотите использовать их в качестве пересылателей.
        // Раскомментируйте следующий блок, и вставьте адреса, заменив
        // все 0.

        forwarders {
                8.8.8.8;
        };

        //========================================================================
        // Если BIND выводит сообщения об ошибках о том, что корневой ключ истек,
        // вам нужно будет обновить ваши ключи.  Смотрите https://www.isc.org/bind-keys
        //========================================================================
        dnssec-validation auto;

        listen-on-v6 { any; };
};


$ sudo mkdir /etc/bind/zones
$ sudo nano /etc/bind/zones/shocktography.pics.db
// замените example.com на ваше доменное имя. не забудьте точку после доменного имени!
// Также замените ns1 именем вашего DNS сервера
example.com.      IN      SOA     ns1.example.com. admin.example.com. (
// Не изменяйте следующие строки!
                                                        2006081401
                                                        28800
                                                        3600
                                                        604800
                                                        38400
 )

// Замените следующую строку при необходимости:
// ns1 = имя DNS-сервера
// mta = имя почтового сервера
// example.com = доменное имя
shocktography.pics.      IN      NS              dns1.registrar-servers.com .
shocktography.pics.      IN      MX     10       mta.shocktography.pics.

// Замените IP-адрес на правильные IP-адреса.
www              IN      A       192.168.0.20
mta              IN      A       192.168.0.20
ns1              IN      A       192.168.0.20

$ sudo systemctl restart bind9




sudo nano /etc/resolv.conf
nameserver 192.168.0.20
options edns0 trust-ad
search shocktography.pics

dig shocktography.pics
; <<>> DiG 9.18.28-0ubuntu0.24.04.1-Ubuntu <<>> shocktography.pics
;; глобальные параметры: +cmd
;; Получен ответ:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 6277
;; флаги: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: версия: 0, флаги:; udp: 1232
; COOKIE: 69b43c0dcd0e060d010000006734e115d3a0718d491680c2 (хорошо)
;; ВОПРОС БЛОК:
;shocktography.pics.        IN  A

;; Время запроса: 0 мс
;; СЕРВЕР: 192.168.0.20#53(192.168.0.20) (UDP)
;; КОГДА: Ср Ноя 13 12:25:41 EST 2024
;; РАЗМЕР MSG: получено: 75

Эффект, который вы описываете, совершенно обычный и ожидаемый.

Я не знаю детальную спецификацию вашего роутера, но с большинством потребительских роутеров внешний IP-адрес, назначенный вашему роутеру вашим провайдером (который затем пробрасывается на ваш веб-сервер), должен быть доступен только из внешнего (интернет-ориентированного) интерфейса роутера и не из внутреннего. Внутри вашей локальной сети вы должны использовать внутренние IP-адреса.

Чтобы достичь того, что вы хотите, ваш роутер должен поддерживать функцию, которая обычно называется “маршрутизация на палке”. Почему “на палке”? Потому что вам нужно пройти через роутер, за пределы вашей локальной сети, чтобы получить доступ к внешнему IP-адресу роутера, и затем роутер должен быть достаточно умным (а большинство роутеров не такие), чтобы “развернуть” этот запрос “на 180 градусов” обратно в вашу локальную сеть. Если вы попытаетесь нарисовать маршрут, по которому должен пройти пакет, вы увидите “палку”, выходящую немного из вашего роутера и затем обратно.

Если ваш роутер не поддерживает это, то вам, по сути, не повезло. Настройки DNS здесь не имеют значения. Тем не менее, что вы можете достичь с помощью DNS, так это установить внутренний DNS-сервер, который будет отвечать на запросы только из вашей локальной сети и будет возвращать внутренний IP-адрес вашего сервера, т.е. 192.168.0.20 для shock.pics. Таким образом, вы сможете использовать доменное имя shock.pics внутри вашей локальной сети, но все равно не сможете использовать внешний IP-адрес.

Я вижу, что вы пытались это сделать. У меня сейчас нет возможности проанализировать вашу конфигурацию bind или предоставить вам конфигурацию, которую вы нуждаетесь для вышеописанного. Возможно, другие сделают это. Однако существует еще одна возможность, которая не требует DNS-сервера.

Если у вас всего несколько компьютеров в сети, добавьте имя shock.pics с IP-адресом 192.168.0.200 в файл hosts каждого компьютера, с которого вы хотите получить доступ к вашему вебсайту (в Linux этот файл /etc/hosts, в Windows это что-то вроде C:\Windows\system32\drivers\etc\hosts, если я правильно помню). Если вы добавите имя с IP-адресом в этот файл, оно будет локально распознано соответствующим компьютером без необходимости разрешения DNS.

Здесь две проблемы:

  1. Вы хотите предоставить сайт внутри и вне сети.
  2. Ваш роутер и т.д. не имеют правильного отражения NAT, что означает, что он автоматически не переводит запрос на публичный адрес и ‘отражает’ его обратно на внутреннюю систему. Это очень распространено для обычных роутеров.

Поскольку у вас есть проблема номер 2, вам нужно сделать то, что называется раздельным DNS, что будет иметь другую запись DNS, обслуживаемую внутри сети, чем снаружи. Для этого вам нужен полностью настроенный DNS-сервер, независимый от любой системы, которая будет “блуждать” за пределами вашей сети.

Предполагая, что вы это правильно настроили, и правильно указали вашу систему использовать DNS-сервер (НЕ редактируйте сам сервер, чтобы использовать DNS-сервер, только системы, получающие доступ к сайту изнутри), у вас всё будет функционировать. Я также включаю быстрые инструкции для этого на Ubuntu 22.04/24.04.


Конфигурация BIND9 – DNS именевой сервер

Эта часть предполагает, что вы работаете с Ubuntu 22.04 или 24.04 на системе, которая будет ‘полным DNS-сервером’ в вашей сети.

Что вам нужно настроить, это авторитетный DNS-сервер для вашего сайта shock.pics, но затем нормально перенаправлять весь трафик на другие назначения.

На самом деле это несложно настроить, и вы были на правильном пути, кроме некоторых вещей, которые вам нужно будет сделать в дальнейшем.

  1. Установите именевой сервер BIND. sudo apt install bind9
  2. Настройте зоны. Они должны находиться в директории данных bind, которая по умолчанию находится в /var/cache/bind. Вам понадобится один файл зоны для зоны shock.pics. На самом деле вам не нужно настраивать обратную DNS-зону, как вы пытались, поэтому создайте конфигурацию в /var/cache/bind/shock.pics.db и поместите в него следующее содержимое:
$ORIGIN shock.pics.
$TTL 3000

@ IN SOA ns.shock.pics. noreply.shock.pics. (
    1        ; серийный номер зоны
    28800    ; период обновления (секунды)
    7200     ; период повторной попытки (секунды)
    864000   ; время истечения записи зоны (секунды)
    86400    ; минимальное время кэширования (секунды)
    )

@ IN NS ns.shock.pics.

ns  IN A  192.168.0.20
mta IN A  192.168.0.20
www IN A  192.168.0.20

@ IN MX 10 mta.shock.pics.
  1. Настройте BIND9 как авторитетный. Добавьте это в конец /etc/bind/named.conf.local:
zone "shock.pics." {
    type master;
    file "/var/cache/bind/shock.pics.db";
};
  1. Теперь настройте другие параметры на DNS-сервере, чтобы правильно работать и перенаправлять ДРУГИЕ DNS-запросы за пределы вашей сети. Отредактируйте /etc/bind/named.conf.options, чтобы он выглядел так:
options {
    directory "/var/cache/bind";
    
    forwarders {
        8.8.8.8;
        8.8.4.4;
    };

    minimal-responses yes;

    auth-nxdomain no;  # Соответствует RFC1035
    listen-on { any; };
    
    allow-query { 127.0.0.0/8; 192.168.0.0/24; };
    allow-recursion { 127.0.0.0/8; 192.168.0.0/24; };
};

Это настроит так, чтобы запросы на другие домены перенаправлялись на серверы Google DNS, и затем эти ответы выдавались запрашивающей внутренней системе с именевого сервера BIND9. Кроме того, это заставляет систему ДОЛЖНА находиться внутри вашей сети, чтобы делать DNS-запросы к серверу и получать DNS-разрешения снаружи настроенных зон. Таким образом, предотвращая неправильное использование.

  1. Перезапустите BIND9 – sudo systemctl restart bind9.service

  2. Проверьте, работает ли это – dig @localhost SOA shock.pics. – это должно вернуть результат DNS, а не запись/ошибку NXDOMAIN или SERVFAIL.

Если всё остальное работает, то отлично, пора настроить ваши реальные компьютеры на использование этой системы.


Настройте конечные компьютеры на именевой сервер

Это будет зависеть от используемой ОС, но вы можете отредактировать вашу сетевую конфигурацию на конечных машинах, чтобы использовать пользовательские DNS-серверы. Поскольку предполагается, что DNS-сервер имеет статический IP-адрес, вы будете использовать его в своей конфигурации.

На Ubuntu 22.04 и 24.04, если вы запустите nm-connection-editor, вы сможете увидеть ваши Ethernet и wifi соединения, которые настроены.

Network Connection Editor Network List Window

Для сетей, которые вам важны (Архангельск — это одна из wifi сетей, которую я имею, например), отредактируйте её параметры на вкладке IPv4 Settings и установите их подобно этому (красные стрелки в рукописном виде указывают на параметры, о которых стоит беспокоиться, вкладка IPv4 Settings такая же для Ethernet или Wifi сетей):

IPv4 Settings tab inside Network Editor for a selected Network

Нажмите Сохранить, затем перезагрузите ваше wifi-соединение (или перезагрузите компьютер). Как только вы подключитесь к своей сети и удалите запись, которую вы добавили в файл /etc/hosts, как вы указали, вы можете попробовать зайти на ваш сайт, и он должен автоматически заработать.

У меня нет инструкций для Windows или Mac по этому поводу, поэтому вы можете поискать “Изменить DNS-сервер на Windows” или “Изменить DNS-сервер на Mac”, если у вас есть эти системы (или то же самое для Android или iOS и т.д.).

Ответ или решение

Локальный доступ к веб-сайту с использованием BIND9 на Ubuntu 24.04

Иногда пользователи сталкиваются с проблемой доступа к локальному веб-сайту через доменное имя, особенно когда в сети настроены различные DNS-серверы и маршрутизаторы. В вашем случае, доступ к сайту shock.pics осуществляется без проблем из внешней сети, но не из вашей локальной сети. Основной причиной этого является отсутствие правильной настройки локального DNS.

Проблемы, с которыми вы столкнулись

  1. Недостаток NAT отражения на маршрутизаторе: Многие маршрутизаторы, особенно в сегменте домашнего использования, не поддерживают NAT отражение (или loopback NAT). Это означает, что когда вы пытаетесь обратиться к публичному IP-адресу своего маршрутизатора, он не может "вернуться" обратно во внутреннюю сеть.

  2. Конфигурация BIND: Настройка вашего локального DNS-сервера с использованием BIND9 кажется сложной, однако она необходима для корректного функционирования в вашей локальной сети.

Решение через Split DNS

Для решения ваших проблем необходимо настроить локальный DNS-сервер, который будет обслуживать запросы на ваше доменное имя, возвращая внутренний IP-адрес вашего сервера (192.168.0.20) вместо внешнего IP-адреса.

Шаги по настройке локального DNS с помощью BIND9

  1. Установка BIND9:

    sudo apt install bind9
  2. Создание зоны: Убедитесь, что зона настроена правильно. Проверьте, что файл /var/cache/bind/shock.tography.pics.db содержит:

    $ORIGIN shock.pics.
    $TTL 3000
    
    @ IN SOA ns.shock.pics. noreply.shock.pics. (
       1        ; Serial number
       28800    ; Refresh
       7200     ; Retry
       864000   ; Expire
       86400    ; Minimum
    )
    
    @ IN NS ns.shock.pics.
    
    ns  IN A  192.168.0.20
    www IN A  192.168.0.20
  3. Настройка конфигурации BIND:
    Добавьте следующую строку в файл /etc/bind/named.conf.local:

    zone "shock.pics." {
       type master;
       file "/var/cache/bind/shock.pics.db";
    };
  4. Настройка параметров BIND:
    Отредактируйте файл /etc/bind/named.conf.options, добавив следующие строки:

    options {
       directory "/var/cache/bind";
    
       forwarders {
           8.8.8.8; // Google DNS
           8.8.4.4; // Google DNS
       };
    
       listen-on { any; };
       allow-query { localhost; 192.168.0.0/24; };
    };
  5. Перезапуск BIND:
    После внесения изменений в конфигурацию вам нужно перезапустить службу BIND9:

    sudo systemctl restart bind9
  6. Тестирование конфигурации:
    Проверьте, что сервер отвечает корректно. Используйте команду:

    dig @localhost shock.pics

    Убедитесь, что ответ включает правильный A-запись для вашего домена.

  7. Настройка клиентов: Убедитесь, что устройства в вашем локальном окружении настроены на использование вашего DNS-сервера (IP-адрес 192.168.0.20). Это можно сделать через конфигурацию сети или ручное изменение файлов hosts на каждом устройстве.

Альтернативное решение: редактирование файла hosts

Если настройка BIND9 вам не подходит, или ваше окружение слишком маленькое, можно просто отредактировать файл hosts на каждом компьютере в сети:

  • В Linux: /etc/hosts
  • В Windows: C:\Windows\System32\drivers\etc\hosts

Добавьте следующую строку:

192.168.0.20 shock.pics

Сейчас, когда вы попытаетесь открыть shock.pics в браузере, он должен обращаться к локальному серверу, минуя проблему с NAT.

Заключение

Создание локального DNS-сервера или редактирование файла hosts — это эффективные методы, позволяющие получить доступ к вашей веб-странице в локальной сети по доменному имени. Правильная конфигурация вашего сетевого окружения значительно упростит доступ и управление вашими веб-ресурсами.

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

Капча загружается...