Сценарий
У меня есть небольшой веб-сайт на ПК с Windows 10 Pro N с (например) публичным IP-адресом: 123.456.78
если я ввожу этот IP-адрес откуда угодно, веб-сайт открывается нормально.
Теперь я также купил 2 доменных имени, например, www.somewebsiteOne.com
и www.somewebsiteTwo.org
у 2 разных продавцов доменов. И зависим от службы DNS, которая перенаправляет www.somewebsiteTwo.ddns.net
на 123.456.78
. В продавцах доменов я могу затем перенаправить www.somewebsiteTwo.org
на www.somewebsiteTwo.ddns.net
. Мое намерение состоит в том, чтобы заменить зависимость от DNS-сервера моим собственным DNS-сервером с открытым исходным кодом, использующим Technitium.
Чтобы проверить работу моего DNS-сервера, я:
- Откройте PowerShell на другом компьютере в другой сети.
- введите: nslookup www.somewebsiteTwo.org 123.456.78
- Что действительно возвращает IP-адрес 123.456.78
Проблема
Теперь, если я попытаюсь ввести IP-адрес этого DNS-сервера в любом из двух продавцов доменов, мне потребуется ввести:
- Имя хоста
- IP адрес
Где для имени хоста я могу ввести что-то вроде www.somewebsiteTwo.ddns.net
(что является DNS-сервером, который перенаправляет www.somewebsiteTwo.org
на 123.456.78
IP-адрес и для него) 123.456.78
. После звонка в один из двух отделов мне объяснили, что они используют имя хоста, а не IP-адрес, чтобы найти мой личный публичный DNS-сервер, а не IP-адрес.
По сути это означает, что мне нужен DNS-сервер для пересылки некоторого имени хоста для моего личного публичного DNS-сервера на IP-адрес моего DNS-сервера. Что противоречит моим намерениям. Поэтому у меня есть следующее:
Вопрос
Как я могу определить и использовать работающее имя хоста, которое ссылается на мой личный публичный DNS-сервер по адресу 123.456.78
?
Попытки
- Я попытался ввести имя хоста моего ПК, например то, что возвращается в cmd при команде
hostname
. Но это не считается допустимым именем хоста. - Я попытался ввести имя
123.456.78
, но оно не считается допустимым именем хоста. - Я пытался войти
http://123.456.78/
, но ничего не вышло. - IP-адреса не работают в качестве имени хоста, ссылающегося на DNS-сервер, потому что:
Имя хоста, используемое для DNS-сервера, а также при регистрации и использовании DNS (под-)домена, должно быть действительным полностью определенным именем хоста DNS, например, ns1.example.com. или customer-5363.dsl-users.isp.example.net. Протокол не допускает IP-адрес. Если вы хотите использовать запись DNS, например, ns1.example.com, для регистрации домена example.com, вашему регистратору сначала необходимо настроить правильную связующую запись.
решение1
После звонка в один из этих двух отделов мне объяснили, что для поиска моего личного публичного DNS-сервера они используют имя хоста, а не IP-адрес, а не IP-адрес.
По сути это означает, что мне нужен DNS-сервер для пересылки некоторого имени хоста для моего личного публичного DNS-сервера на IP-адрес моего DNS-сервера. Что противоречит моим намерениям.
Это не совсем верно.
Верно, что записи NS, используемые для делегирования доменов,толькобрать имена хостов, а не сырые адреса.
Однако на самом деле вам разрешено указать имя хоста, которое находится в вашем собственном домене, и именно поэтому рядом есть поля IP-адреса: они позволяют вамопределятьимя хоста и использовать его одновременно. Это то, о чем на самом деле говорится в сообщении поддержки, когда они упоминают «склеивающие записи», которые допускают такой «цикл».
(Обратите внимание, что вам также необходимо добавить точно такие же определения имен хостов на свой собственный DNS-сервер — связующие записи у регистратора считаются копией, а те, что находятся на вашем сервере, — официальной версией.)
Например, когда вы вводите сервер имен ns1.somewebsite.com
, регистратор публикует следующую запись DNS:
somewebsite.com. NS ns1.somewebsite.com.
Поскольку имя хоста сервера имен находится в домене, который он размещает, это явно не будет работать как есть, поскольку это создаст цикл. Поэтому вытакженеобходимо ввести IP-адрес сервера в соответствующее поле, и это позволит регистратору опубликовать вторую DNS-запись («связующую» запись):
somewebsite.com. NS ns1.somewebsite.com.
ns1.somewebsite.com. A 12.34.56.78
Всякий раз, когда резолвер пытается запросить серверы имен для вашего домена, их IP-адреса из связующих записей всегда будут прикреплены к одному и тому же ответу, что позволяет избежать проблемы зацикливания.
решение2
В моем вопросе имя хоста было просто произвольным набором символов, обычно ns1
и ns2
за которым следовал, <website without the http://www.>
например, если ваш веб-сайт swag.org
вы можете создать ns1.swag.org
в своих собственных настройках сервера DNS, а затем ввести «имя хоста» ns1.swag.org
в вашем регистраторе. Вам (обычно) нужно 2 сервера DNS, поэтому вы создаете еще одно «имя хоста» с ns2.swag.org
и также вводите его. Затем в поле IP вы просто вводите публичный IP-адрес вашего ПК, на котором размещен сервер DNS (который вы также ввели при ns1.swag.org
входе в настройки Technitium/DNS.
Ниже приведен пример того, как все это сделать с помощью изображений.
Проверенные настройки для размещения собственного DNS-сервера:
- Короче говоря, вы вводите эти настройки в панель настроек Technitium (замените `
your ip
на публичный IP-адрес вашего компьютера/хоста/устройства, на котором вы размещаете свой веб-сайт). (A
ns1.<yourwebsite>
` - это связующая запись, которая сообщает компьютеру, который связывает людей с вашим веб-сайтом, «когда вы ищете это имя хоста/веб-сайт, вы можете посмотреть этот IP-адрес, чтобы найти имя хоста/веб-сайт». (Но тогда это попадет в бесконечный цикл, поэтому вы говорите ему: «ОК, остановитесь здесь, вы нашли веб-сайт по этому IP-адресу».)
- Затем создайте пользовательскую запись DNS в вашем регистраторе домена, это делается по-разному для каждого продавца домена. Это пример для namecheap. Короче говоря, вам нужно ввести имя хоста вашего сервера DNS (если вы ввели
ns1.<yourwebsite adres>
technitium, введите его вместе с публичным IP-адресом вашего компьютера).
- Вы можете проверить запись DNS-сервера/связующего IP-адреса, чтобы убедиться, что он введен правильно, выполнив поиск:
ns1
илиns2
(если вы ввелиns1.<yourwebsite>
:
- Не забудьте также выбрать свой собственный пользовательский DNS в настройках сайта, в противном случае вы все правильно настроили на своем локальном DNS-сервере и сказали регистратору: «Эй, пользовательский DNS, посмотри на этот IP-адрес моего собственного DNS-сервера», но в итоге регистратор все равно будет искать на своем собственном DNS-сервере по умолчанию (где он не найдет ваш IP-адрес, за это нужно платить).
Примечания
- Эти настройки пока не позволяют
https://www.yourwebsite.something
. Для этого вам нужен сертификат ssl, вы можете получить его бесплатно на openssl, а Technitium действительно поддерживает https. Однако я пока не реализовал это. - Более подробный и развернутый набор инструкций можно найти по адресу:https://github.com/at-0/DnsServerвместе с открытым исходным кодом DNS-сервера Technitium, созданного кем-то другим, я просто сделал его ответвление и добавил инструкции.