2

У меня есть домашняя сеть с маршрутизатором, который служит шлюзом для доступа в Интернет. В этой сети у меня есть сервер со многими службами, все из которых отображаются внутри маршрутизатора с помощью DNAT.

Когда я получаю доступ к общедоступному IP-адресу своего дома из-за пределов сети, маршрутизатор правильно перенаправляет запросы на внутренний сервер; однако, когда я получаю доступ изнутри дома, маршрутизатор интерпретирует соединения, как если бы они были для него, например, если я спрашиваю службу http на порту 80 общедоступного IP-адреса, отображается страница конфигурации маршрутизатора.

Что происходит?

1 ответ1

4

Вы пытаетесь решить проблему, которой не существует. Просто используйте свой внутренний IP, это приведет к тому, что пакеты никогда не попадут на ваш маршрутизатор (возможно, коммутатор на вашем маршрутизаторе, но не сам маршрутизатор). Лучше всячески так делать. Вот несколько преимуществ:

  • Вы будете иметь доступ к любым портам, которые вам нравятся (не только к тем, которые вы настроили в своем маршрутизаторе).
  • Вы не будете тратить память маршрутизатора на записи NAT для служб, которые вы используете только для внутреннего использования.
  • Вам будет гораздо проще запомнить внутренний IP, и он никогда не изменится, если вы не скажете это.
  • Каждый пакет будет делать меньше прыжков, и каждый переход будет на коммутаторе, поэтому он будет очень быстрым.
  • Пакеты не будут мешать работе вашего роутера, пока он будет анализировать ваши пакеты. Даже если в вашей сети будет медленный день, это будет намного быстрее для вас.
  • Ваши серверы будут видеть ваш компьютер как отдельное устройство; Если вы решите использовать внешний прокси-сервер, чтобы исправить это, вы всегда будете рассматриваться как происходящие из этого прокси.
  • Если ваш сервис поддерживает его, он может использовать целую палитру протоколов, которые недоступны для внешних устройств. DHCP, WINS, реальные UDP-трансляции ... и это лишь некоторые из них.
  • Вся дополнительная безопасность, которая сопровождается подчинением.

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

Обновить

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

Если вы захотите запустить крошечный скрипт после подключения к другой сети, я могу дать простой ответ, который будет достаточно надежным.

Сначала создайте небольшой пакетный скрипт:

ping -n 1 some.local.ip.addy
if errorlevel 1 goto :isremote
cp /Y %WINDIR%\System32\Drivers\etc\hosts.local %WINDIR%\System32\Drivers\etc\hosts
goto :eof
:isremote
cp /Y %WINDIR%\System32\Drivers\etc\hosts.remote %WINDIR%\System32\Drivers\etc\hosts

Измените some.local.ip.addy на фактический IP-адрес в вашей локальной сети. Убедитесь, что это то, что всегда доступно (ваш маршрутизатор IP будет работать хорошо, пока он отвечает на запрос PING).

Затем создайте локальный файл hosts (%WINDIR%\System32\Drivers\etc\hosts.local) и поместите в него:

192.168.0.2 my-service.mynet.dyndns.org
192.168.0.3 my-service2.mynet.dyndns.org

Используя ваш реальный IP-адрес сервера. Это упрощено, я бы добавил записи, которые работают только внутри сети.

Затем создайте файл удаленных хостов (%WINDIR%\System32\Drivers\etc\hosts.remote). Оставьте это поле пустым, оно нам сейчас не понадобится, но вы можете найти его позже.

Затем настройте учетную запись dyndns.org с именем mynet.dyndns.org и обязательно укажите ее в качестве шаблона. Конечно, DynDNS - это всего лишь одна из сотен опций для динамического DNS-хоста.

Теперь, после перемещения между сетями, просто запустите скрипт и вуаля, все работает снаружи так же, как и внутри, и (если вы правильно перенаправляете свои порты и используете правильные имена хостов), вам просто нужно использовать my-service.mynet.dyndns.org или my-service2.mynet.dyndns.org или mynet.dyndns.org:24829 для получения различных услуг. Если этот сервис поддерживает виртуальные хосты, он будет знать, как обращаться с my-service. часть. Ваш маршрутизатор, скорее всего, просто передаст его, поэтому вам нужно будет предоставить порт и для тех служб, которые не знают, как обрабатывать vhost-часть (конечно, большинство из них имеют порт по умолчанию в клиенте, поэтому вы быть в состоянии просто войти в mynet.dyndns.org обычно).

То же самое может быть достигнуто без сценария, если у вас есть DNS-сервер в локальной сети, но если вы это сделаете, вы, вероятно, уже знаете, как это сделать. Если нет, то это определенно заслуживает отдельного вопроса.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .