Как заставить имя хоста разрешать локальный адрес вместо публичного?
У меня есть сервер Linux в моей домашней сети, который использует динамический DNS, предоставленный https://noip.com/, и соответствующее имя хоста "xxxx.hopto.org". Из-за пределов моей сети, скажем, в кафе, я могу использовать это имя хоста для проверки связи или SSH на моем сервере. Однако, когда я нахожусь в моей локальной сети, я не могу пропинговать или SSH на свой сервер, используя имя хоста. Бег host
показывает, что имя хоста моего сервера преобразуется в его общедоступный IP-адрес, который совпадает с общедоступным IP-адресом моей машины:
MacBook-Air:~ user$ host xxxx.hopto.org
xxxx.hopto.org has address 47.6.24.149
MacBook-Air:~ user$ curl ipinfo.io/ip
47.6.24.149
Мой опыт не включает в себя сетевые концепции, но я вижу два возможных решения этой проблемы:
- Принудительно разрешить имя хоста в локальный (статический) IP-адрес, когда я нахожусь в той же сети, что и сервер.
- Как-то дать моему серверу свой публичный IP-адрес.
Как бы я сделал один (или оба) из них? Есть ли другое решение, которое было бы легче / лучше? Спасибо за вашу помощь.
2 ответа
Во-первых, как AFH упомянул в комментарии, вам, возможно, вообще не понадобится делать это, если вы просто хотите получить доступ к своим собственным службам, используя ваш публичный IP-адрес. Все, что вам нужно, - это включить NAT на вашем маршрутизаторе (или петлю NAT), чтобы ваш собственный общедоступный IP-адрес был доступен из вашей сети. Это лучшее решение, если ваша сетевая инфраструктура может обрабатывать / настраивать его (все, что не относится к категории потребителей, должно легко это делать).
Теперь, если вы все еще хотите использовать DNS-подход, техническим термином является DNS с разделенным горизонтом, где вы хотите получить другой DNS-ответ, основанный на исходном адресе запроса. К сожалению, большинство динамических DNS-серверов не предлагают этого, и у вас нет необходимого уровня контроля. Таким образом, вы получите две возможности:
- Настройте собственный полномочный DNS-сервер для своего домена на общедоступном сервере (например, VPS), или
- Настройте DNS-сервер пересылки исключительно в вашей локальной сети (так же, как встроенный в большинство пользовательских маршрутизаторов)
Второй подход, вероятно, более подходит для вас, но он требует настройки вашего DHCP-сервера (возможно, на вашем маршрутизаторе), чтобы установить DNS-сервер пересылки в качестве распознавателя.
В принципе:
- Установите dnsmasq (метод зависит от ОС вашего сервера)
- Настройте DHCP так, чтобы он указывал на сервер dnsmasq в качестве распознавателя.
- Сконфигурируйте сервер, на котором установлен dnsmasq, для внутреннего разрешения адреса, например
/etc/hosts
на сервере
Этот подход означает:
- Внешние клиенты получают общедоступный IP-адрес напрямую от поставщика динамического DNS
- Внутренние клиенты попали в dnsmasq
- Если они запрашивают обычный общедоступный хост, они, как обычно, перенаправляются на вышестоящий сервер (например, DNS-сервер ISP)
- Если они запрашивают один из настроенных вами внутренних хостов, они получают локальный ответ - это происходит только тогда, когда клиент находится в вашей локальной сети.
В качестве альтернативы, вы можете использовать более полнофункциональный DNS-сервер (например, bind9), который может изначально работать с разделением горизонта.
Вы можете добавить его в /etc/hosts
файл, но я бы предложил псевдоним, чтобы вы не испортили разрешение за пределами вашей сети. Так что-то вроде следующего в /etc/hosts
:
#internal IP of server #nickname
192.168.0.24 hopto.local
Сейчас hopto.local
разрешит к локальному адресу сервера.
Для получения дополнительной информации о /etc/hosts
проверить эту справочную страницу
Удачи!