9

У меня странная проблема с переадресацией портов. Я попытался открыть свой порт 22 для внешней сети. Я был в состоянии получить к нему доступ, пока я не в локальной сети. Я могу получить к нему доступ из своего офиса, например. Но из локальной сети я могу получить доступ к порту с помощью локального IP-адреса, но не могу получить доступ к порту с помощью внешнего IP-адреса. Это как если бы маршрутизатор блокировал обратную связь. Я проверил все настройки роутера, отключил все, что связано с брандмауэром / фильтрацией. Есть идеи?

4 ответа4

10

Учитывая, что вы упомянули переадресацию портов, я предполагаю, что ваш домашний шлюз действует как NAT - или, точнее, NAPT - шлюз. То, что вы пытаетесь сделать, называется "шпилька NAT" или "шпилька NAT", в связи с тем, как буквальная шпилька для волос удваивается обратно на себя (тот же намек используется термином "поворот шпильки" для резкого изгиба, где дорога удваивается сама по себе).

Некоторые шлюзы NAT являются дерьмом и не поддерживают закрепление. Возможно, настало время изучить ваши варианты обновления.

4

Предполагая, что Spiff верен, и ваш маршрутизатор не может обрабатывать переадресацию портов на внешний ip изнутри сети, существует небольшая работа (и это действительно так);

Вы можете редактировать файл hosts, который можно найти в /etc /hosts в большинстве unix-систем и в C:\Windows\system32\drivers\etc\ в Windows.

если вы добавите

192.168.0.15  example.com

в этом файле ваш компьютер будет переходить на ip, указанный при попытке доступа к example.com. Конечно, вам придется делать это на каждом компьютере, который вы хотите использовать в сети.

Вы можете проверить статью в Википедии для более подробной информации о том, где ее найти:https://en.wikipedia.org/wiki/Hosts_file

3

Существует очень простой ответ на этот вопрос. NAT мешает.

  1. Ваш компьютер открывает соединение с [ExternalIP]
  2. Ваш маршрутизатор перенаправляет это соединение на [SSHInternalIP]. Ваш SSH-сервер видит соединение от [YourInternalIP].
  3. Ваш SSH-сервер отправляет свои пакеты на [YourInternalIP].
  4. Ваш компьютер видит странный пакет, исходящий с IP-адреса, с которым он никогда не общался, и отбрасывает его.
  5. Ваше подключение к TCP/22 не удается, потому что трехстороннее рукопожатие TCP никогда не завершается.

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

2

Из того, что я понимаю из запуска маршрутизатора OpenBSD с NAT, Спифф прав в своем ответе: проблема, которую вы испытываете, вызвана тем, что шлюз NAT не поддерживает то, что вы пытаетесь сделать.

Ваша рабочая станция отправляет пакеты с исходным IP-адресом внутреннего адреса (скажем, 10.0.0.2), но адрес назначения является вашим внешним IP-адресом. Когда пакеты поступят на ваш (SSH?) сервер на порту 22, сервер отвечает на вашу рабочую станцию напрямую, и NAT не происходит; теперь, когда ваша рабочая станция получает ответ от 10.0.0.3, когда она ожидала ответа от вашего внешнего адреса, она отбрасывает пакеты.

Это кажется тривиальной проблемой, но ее можно решить путем обновления файла HOSTS на вашей рабочей станции, добавления внутреннего DNS-сервера (или редактирования записей DNS-сервера) или создания правила NAT для обработки внутренних -> внешних -> внутренних движение.

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