#networking #dns #nat #hosts
#сеть #dns #nat #хосты
Вопрос:
Недавно я купил доменное имя на www.active-domain.com Я использую его для своей домашней сети, поэтому мы говорим о NAT и динамическом IP. Поскольку мой IP-адрес динамический, я не могу создать делегирование для использования моего собственного DNS-сервера. активный домен действует как DNS-сервер, поэтому я могу создавать только: A, CNAME, перенаправление URL, URL-фрейм и текстовые записи.
Тем не менее, вот мой вопрос: поскольку я использую NAT, возможно ли создать несколько хостов с одним и тем же IP?
Пример:
Я хочу, чтобы srv1.mydomain.com укажите на 192.168.0.101 в моей сети.
Я хочу, чтобы srv2.mydomain.com укажите на 192.168.0.102 в моей сети.
Но снаружи оба указывают на (пример)74.0.0.1
Вкратце:
srv1.mydomain.com -> 74.0.0.1 -> 192.168.0.101
srv2.mydomain.com -> 74.0.0.1 -> 192.168.0.102
Спасибо.
Ответ №1:
В любом случае внешний DNS для yourhost.example.com
и anotherhost.example.net
будет указывать на внешний адрес брандмауэра ( IN A 74.0.0.1
здесь) или на имя хоста брандмауэра (например, IN CNAME yourfirewall.example.org.
).
Однако обратите внимание, что DNS (преобразование доменного имени в IP-адрес) выполняется отдельно от обработки соединения и маршрутизации. Что это значит:
- клиентский компьютер, столкнувшись с именем DNS-хоста, попытается найти его — например, запрашивает свой локальный DNS-сервер: «кто yourhost.example.com «; DNS-сервер отвечает «74.0.0.1».
- что касается стека IP, это последний раз, когда используется имя хоста; с этого момента клиент работает только с адресом.
- клиент открывает соединение с адресом и портом; однако входящие пакеты помечены только «для компьютера с адресом 74.0.0.1», без какого-либо указания «какое DNS-имя использовалось для получения этого адреса, если таковое имелось».
Некоторые протоколы (такие как HTTP) могут использовать имя хоста в части данных пакета (с HTTP это Host:
заголовок), но не каждый протокол делает это. Это возможности:
-
Если у вас есть два сервера, которые будут работать на разных портах, на самом деле это не проблема: я отсылаю вас к вопросам и ответам по переадресации портов у суперпользователя.
-
Если вам нужно запустить два сервера на одном и том же порту, это становится затруднительным, если не невозможным: возможно, удастся выполнить обратный прокси-трафик (и отделить данные для одного сервера от данных для другого); если рассматриваемый протокол этого не делает (например, SMTP или SSH), вы в значительной степени SOL.
- В частности, если вы намерены направлять трафик на два разных HTTP-сервера (оба на порту 80), вам потребуется запустить какой-нибудь обратный прокси-сервер на вашем брандмауэре (
74.0.0.1
). В Apache простейшая конфигурация может выглядеть примерно так:
- В частности, если вы намерены направлять трафик на два разных HTTP-сервера (оба на порту 80), вам потребуется запустить какой-нибудь обратный прокси-сервер на вашем брандмауэре (
<VirtualHost *:80>
ServerName yourhost.example.com
ProxyPass / http://192.168.0.101/
ProxyPassReverse / http://192.168.0.101/
</VirtualHost>
<VirtualHost *:80>
ServerName anotherhost.example.net
ProxyPass / http://192.168.0.102/
ProxyPassReverse / http://192.168.0.102/
</VirtualHost>
Комментарии:
1. Нет, это не будет HTTP.
2. @Matthieu: В таком случае это может быть немного сложнее. Смотрите мою правку.
3. Итак, какой протокол это будет? Если протокол не содержит доменное имя, используемое для получения адреса для 74.0.0.1, у вас нет возможности узнать, какое доменное имя предназначалось.
4. В случае обратного прокси-сервера существует ли рекомендуемый шаблон для использования в AWS?