доступ к серверу из локальной сети и извне с тем же доменом

доступ к серверу из локальной сети и извне с тем же доменом

Ситуация

У меня в локальной сети есть сервер, на котором запущен LAMP-сервер, я использую его для TeamSpeak, NextCloud, персонального веб-хостинга и т. д.

Я владею доменом «через» Cloudflare, перенаправляющим на мой публичный IP-адрес.

Я имею доступ к серверу из локальной сети и извне.

моя проблема / что я хочу изменить

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

Итак, чтобы преодолеть эту проблему, я использую свой hosts-файл для перенаправления моего домена на локальный IP-адрес моего сервера. Но каждый раз, когда я меняю местоположение (почти каждый день), мне приходится редактировать этот файл.

И это также работает только на нескольких устройствах, на которых я могу редактировать этот файл. Так, например, на моем телефоне (android) я не могу получить доступ к своим веб-сайтам или чему-либо доменно-специфичному.

есть ли способ решить эту проблему?

У меня на самом деле есть некоторые идеи.

  • найти способ сделать так, чтобы мой публичный IP-адрес был «пингуемым» из моей локальной сети
  • настройка локального DNS-сервера
  • разные файлы зон DNS в зависимости от запрашиваемого IP-адреса, если это вообще возможно (возможно, Cloudflare предлагает такую ​​функцию). (если запрашиваемый IP-адрес тот же, на который перенаправляется домен, он отвечает моим локальным IP-адресом для сервера)

редактировать (17.03.17)

Я забыл упомянуть, что я также хочу использовать этот сервер для почты в будущем. Так что он должен быть готов к этому.

Теперь я установил на нем DNS-сервер, который преобразует мой домен в локальный IP-адрес сервера (используя bind9; также для обратного). Это работает отлично, но для этого мне пришлось вручную настроить свои DNS-серверы (те, которые запрашивает мой компьютер), что привело к более медленной загрузке (других веб-сайтов). Но это также не идеальное решение, потому что тогда кто-то, например, мои друзья, не сможет получить доступ к серверу, поскольку в их списке нет моего DNS-сервера. Решит ли эту проблему изменение DNS-серверов по умолчанию моего маршрутизатора?

К сожалению, у меня динамический публичный IP-адрес, он меняется примерно каждые три недели. До сих пор я вручную менял запись DNS, но это должно измениться (вот почему я перешел на Cloudflare, они предлагают API для этого).

Чтобы получить доступ к моему серверу извне, мне пришлось перенаправить/пробросить на него некоторые порты. Вот их скриншот:

введите описание изображения здесь

решение1

Ответ зависит от вашей утилиты. Если вы используете только http для связи с сервером во внутренней локальной сети (по публичному имени), то вы можете изменить поведение на основе порта. Вы также можете выполнить перенаправление с вашего локального lamp на основе исходного IP-адреса, например. (например, если у него исходный адрес в качестве внешнего шлюза, то он может перенаправить запрос на внутренний IP-адрес). Однако это не даст вам сопоставления имен.

Даже при этом, похоже, что в маршрутизаторе есть неверная конфигурация переадресации портов. Не говоря уже о привязке, которую мои маршрутизаторы также не поддерживают, но я использую переадресацию портов и могу подключаться к внутренним серверам изнутри или снаружи нашей локальной сети, маршрутизируя через внешний домен/интерфейс. Например, у меня есть запись DNS home.domain.com, которая указывает на интерфейс wan маршрутизатора. Независимо от того, нахожусь ли я внутри или снаружи, запросы к home.domain.com идут на интерфейс wan, а затем перенаправляются обратно на правильный сервер назначения. Это все еще косвенно в некотором роде, но это работает, так что это должно работать и для вас.

Также вопрос в том, сколько других серверов предоставляют порт/сервис внутри вашей локальной сети. Это только один?

Наконец, я тоже время от времени думаю об этой проблеме, так как мне нужна политика имен хостов, которая также зависит от сети, к которой я подключен. Возможно, простым вариантом будет { (a) написать скрипт планировщика (если вы используете Windows) или (b) добавить скрипт в ifup/ifcfg }, который пингует определенный хост Linux или другие известные ресурсы внутри локальной сети, а затем устанавливает значение хостов на его основе. Это не так элегантно, как запуск собственного DNS-сервера со своими внутренними правилами (с которыми, кстати, может быть так же легко справиться, поскольку dhcp может предоставить внутренний DNS-сервер локальной сети.

Возможно, это не работает у вас, потому что вы используете перенаправление IP для своего доменного имени, а не динамический DNS? Например, наш публичный IP является динамическим, поэтому мои внутренние серверы периодически обновляют мой под/домен dnsmadeeasy внешним/публичным IP-адресом. Затем поиск имени хоста идет прямо на нужный IP-адрес, он не перенаправляется туда.

решение2

Извините, что мне потребовалось так много времени, чтобы написать этот окончательный ответ.

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

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

О проблеме со сменой IP-адреса:
я написал себе небольшой скрипт, который каждые пять секунд проверяет, есть ли у меня новый IP-адрес, и если это так, то он автоматически меняет его через вышеупомянутый API cloudflare. Если кому-то нужно и лень писать самому, могу опубликовать.

Спасибо @Beracah за ответ :)

Связанный контент