- Вопрос или проблема
- Конфигурация BIND9 – DNS-сервер имен
- Укажите ваши конечные компьютеры на сервер имен
- Ответ или решение
- Проблемы, которые нужно решить
- Настройка BIND9 для внутреннего DNS-сервера
- 1. Установка BIND9
- 2. Настройка зон для вашего домена
- 3. Конфигурация BIND9 как авторитетного сервера
- 4. Настройка дополнительных параметров
- 5. Перезапуск BIND9
- 6. Проверка работы DNS-сервера
- Проблемы с BIND9
- Тестирование локального доступа
- Вывод
Вопрос или проблема
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:///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-адресов для стабильных
// серверов имен, вы, вероятно, захотите использовать их в качестве переадресаторов.
// Удалите комментарий из следующего блока и вставьте адреса, заменяя
// место для всех нулей.
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, статус: SERVFAIL, id: 6277
;; флаги: qr rd ra; ЗАПРОС: 1, ОТВЕТ: 0, АВТОРИТЕТ: 0, ДОПОЛНИТЕЛЬНО: 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
;; РАЗМЕР СООБЩЕНИЯ получен: 75
Здесь две проблемы:
- Вы хотите обслуживать сайт как внутри, так и вне сети
- Ваш роутер и т.д. не имеют правильного отражения NAT, что означает, что он автоматически не переводит запрос на публичный адрес и не ‘отражает’ его обратно на внутреннюю систему. Это очень распространено среди настольных роутеров.
Поскольку у вас есть проблема под номером 2, вам нужно сделать то, что называется раздельным DNS, что будет иметь разные записи DNS, обслуживаемые внутри сети и снаружи. Для этого вам нужен полноценный DNS-сервер, настроенный независимо от любой системы, которая будет ‘бродить’ вне вашей сети.
Предполагая, что вы правильно это настроили и правильно указали вашей системе ИСПОЛЬЗОВАТЬ DNS-сервер (НЕ редактируйте сам сервер, чтобы использовать DNS-сервер, только системы, ДОСТУПАЮЩИЕ к сайту изнутри), у вас всё будет работать. Я также включаю краткие инструкции по этому на Ubuntu 22.04/24.04.
Конфигурация BIND9 – DNS-сервер имен
Эта часть предполагает, что вы работаете с Ubuntu 22.04 или 24.04 на системе, которая будет ‘полноценным DNS-сервером’ в вашей сети
Что вам нужно настроить, так это авторитетный DNS-сервер для вашего сайта shock.pics
, но затем нормально переадресовывать всё трафик на другие назначения.
Это на самом деле не трудно настроить, и вы были на правильном пути, за исключением того, что вам нужно было сделать несколько вещей в дальнейшем.
- Установите сервер имен BIND.
sudo apt install bind9
- Настройте зоны. Они должны находиться в каталоге данных 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.
- Настройте BIND9 как авторитетный. Добавьте это в конец
/etc/bind/named.conf.local
:
zone "shock.pics." {
type master;
file "/var/cache/bind/shock.pics.db";
};
- Теперь установите другие параметры на 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; };
};
Это настроит так, чтобы запросы для других доменов перенаправлялись к DNS-резолверам Google, а затем эти ответы передавались запрашивающей внутренней системе от сервера имен BIND9. Кроме того, это обеспечивает, что система ДОЛЖНА находиться внутри вашей сети, чтобы делать DNS-запросы к серверу и получать DNS-ответы извне настроенных зон. Таким образом, предотвращая неправильное использование.
-
Перезапустите BIND9 –
sudo systemctl restart bind9.service
-
Проверьте, работает ли это –
dig @localhost SOA shock.pics.
– это должно вернуть результат DNS и не должен бытьNXDOMAIN
илиSERVFAIL
ошибка/ответ.
Если всё работает, тогда отлично, пришло время настроить ваши фактические компьютеры на этот сервер.
Укажите ваши конечные компьютеры на сервер имен
Это будет зависеть от используемой ОС, но вы можете отредактировать вашу сетевую конфигурацию на конечных машинах, чтобы использовать пользовательские DNS-серверы. Поскольку предполагается, что DNS-сервер имеет статический IP-адрес, вы будете использовать его в вашей конфигурации.
На Ubuntu 22.04 и 24.04, если вы запустите nm-connection-editor
, вы увидите ваши Ethernet и wifi соединения, которые настроены.
Для ваших сетей, которые вас волнуют (Archangel – одна из wifi сетей, которую я имею, например), измените её настройки на вкладке IPv4 Settings и установите их примерно так (свободные красные стрелки указывают на настройки, которые нужно учитывать, вкладка IPv4 Settings такая же для Ethernet или Wifi сетей):
Нажмите “Сохранить”, затем перезагрузите ваше wifi-соединение (или перезагрузите компьютер). Как только вы подключитесь к вашей сети и удалите ручную запись, которую вы указали, что сделали в вашем /etc/hosts
файле, вы можете попробовать зайти на ваш сайт, и он должен автоматически работать.
У меня нет инструкций для Windows или Mac по этому вопросу, поэтому вы можете сделать поиск “Изменить DNS-сервер на Windows” или “Изменить DNS-сервер на Mac”, если у вас есть эти системы (или также для Android или iOS и т.д.).
Эффект, который вы описываете, вполне обычен и ожидаем.
Я не знаю детальной спецификации вашего роутера, но на большинстве потребительских маршрутизаторов внешний 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.
@ThomasWard
Спасибо за вашу помощь.
Вот мой результат после перезапуска bind9, я даже перезагрузил компьютер.
ken@federation:~$ sudo systemctl restart bind9.service
[sudo] пароль для ken:
Задание для named.service не выполнено, так как контрольный процесс завершился с кодом ошибки.
Смотрите “systemctl status named.service” и “journalctl -xeu named.service” для получения дополнительных сведений.
ken@federation:~$ systemctl status named.service
× named.service – Сервер имен BIND
Загружено: загружено (/usr/lib/systemd/system/named.service; включено; предустановка: включено)
Активно: неудачно (Результат: exit-code) с Вск 2024-11-17 07:46:01 EST; 10с назад
Документы: man:named(8)
Процесс: 5173 ExecStart=/usr/sbin/named -f $OPTIONS (код=выход, статус=1/НЕУДАЧА)
Основной PID: 5173 (код=выход, статус=1/НЕУДАЧА)
ЦП: 27мс
Ноя 17 07:46:01 federation systemd[1]: named.service: Запланирована работа по перезапуску, счётчик перезапусков стоит на 5.
Ноя 17 07:46:01 federation systemd[1]: named.service: Запрос на запуск повторяется слишком быстро.
Ноя 17 07:46:01 federation systemd[1]: named.service: Не удалось запустить с результатом ‘exit-code’.
Ноя 17 07:46:01 federation systemd[1]: Не удалось запустить named.service – Сервер имен BIND.
Ответ или решение
Для доступа к вашему веб-сайту с помощью доменного имени, такого как shock.pics
, из локальной сети, необходимо правильно настроить DNS-сервер BIND9 с функцией "разделенного DNS" (Split DNS). Это позволит внутренним клиентам разрешать доменные имена вашего веб-сервера на его локальный IP-адрес, в то время как внешние запросы будут обрабатываться с использованием вашего публичного IP-адреса. В данной статье мы рассмотрим подробные шаги для достижения этой цели.
Проблемы, которые нужно решить
- Доступ к сайту как из локальной сети, так и из Интернета.
- Отсутствие поддержки NAT-рефлексии на вашем роутере, что делает невозможным доступ к публичному IP из локальной сети.
Настройка BIND9 для внутреннего DNS-сервера
Следуйте этим инструкциям для установки и настройки BIND9 в качестве внутреннего DNS-сервера.
1. Установка BIND9
Запустите следующую команду в терминале:
sudo apt install bind9
2. Настройка зон для вашего домена
Создайте файл зоны для shock.pics
. Для этого выполните следующие команды:
sudo mkdir -p /var/cache/bind
sudo nano /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
www IN A 192.168.0.20
3. Конфигурация BIND9 как авторитетного сервера
Добавьте следующую строку в конец файла /etc/bind/named.conf.local
:
zone "shock.pics." {
type master;
file "/var/cache/bind/shock.pics.db";
};
4. Настройка дополнительных параметров
Обновите файл /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; };
};
5. Перезапуск BIND9
Перезапустите BIND9 для применения изменений:
sudo systemctl restart bind9.service
6. Проверка работы DNS-сервера
После перезапуска проверьте, работает ли ваш DNS-сервер корректно:
dig @localhost SOA shock.pics.
Если команда возвращает данные, это значит, что DNS-сервер настроен правильно.
Проблемы с BIND9
Если после перезапуска BIND9 сервер не запускается, выполните следующие команды для диагностики ошибок:
sudo systemctl status bind9.service
journalctl -xeu bind9.service
Эти команды помогут вам понять причину сбоя. Общие ошибки могут быть связаны с синтаксическими ошибками в файлах конфигурации или некорректными путями к файлам зоны.
Тестирование локального доступа
Теперь настройте клиенты в вашей локальной сети, чтобы они использовали ваш новый DNS-сервер. Замените настройки DNS на каждом клиенте для использования 192.168.0.20
как основного DNS-сервера. В системе Ubuntu это можно сделать через nm-connection-editor
, как указано в предыдущем ответе.
Вывод
После выполнения всех вышеперечисленных шагов ваши клиенты в локальной сети смогут обращаться к shock.pics
и получать доступ к вашему серверу на 192.168.0.20
. Если проблема с доступом из локальной сети по внешнему IP-адресу сохраняется, это может быть связано с особенностями вашего роутера, которые требуют более сложной настройки NAT.
Для получения помощи или уточнений, не стесняйтесь задавать вопросы.