Как заставить имя хоста разрешать локальный адрес вместо публичного?

У меня есть сервер 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

Мой опыт не включает в себя сетевые концепции, но я вижу два возможных решения этой проблемы:

  1. Принудительно разрешить имя хоста в локальный (статический) IP-адрес, когда я нахожусь в той же сети, что и сервер.
  2. Как-то дать моему серверу свой публичный IP-адрес.

Как бы я сделал один (или оба) из них? Есть ли другое решение, которое было бы легче / лучше? Спасибо за вашу помощь.

2 ответа

Решение

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

Теперь, если вы все еще хотите использовать DNS-подход, техническим термином является DNS с разделенным горизонтом, где вы хотите получить другой DNS-ответ, основанный на исходном адресе запроса. К сожалению, большинство динамических DNS-серверов не предлагают этого, и у вас нет необходимого уровня контроля. Таким образом, вы получите две возможности:

  • Настройте собственный полномочный DNS-сервер для своего домена на общедоступном сервере (например, VPS), или
  • Настройте DNS-сервер пересылки исключительно в вашей локальной сети (так же, как встроенный в большинство пользовательских маршрутизаторов)

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

В принципе:

  1. Установите dnsmasq (метод зависит от ОС вашего сервера)
  2. Настройте DHCP так, чтобы он указывал на сервер dnsmasq в качестве распознавателя.
  3. Сконфигурируйте сервер, на котором установлен 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 проверить эту справочную страницу

Удачи!

Другие вопросы по тегам