Как получить унифицированный доступ к хосту локально и удаленно?

Как получить унифицированный доступ к хосту локально и удаленно?

У меня есть SSH-сервер, работающий в моей локальной сети, которая открыта для публичного интернета через переадресацию портов моего маршрутизатора. Я также настроил имя для хоста локально на моей машине (через etc/hosts) и удаленно (через динамический DNS), скажем:

            ip            name
locally     192.168.0.5   myhost
remotely    11.22.33.44   myhost.example.com

Из своей локальной сети я могу получить доступ к серверу через ssh 192.168.0.5/ ssh myhost, а извне своей сети я могу получить к нему доступ через ssh 11.22.33.44/ ssh myhost.example.com.

До этого момента все работало нормально. Однако использование двух разных имен хостов для одного сервера немного обременительно. Я хотел бы получить доступ к серверу вединый путь, т. е. использование только одного IP-адреса/имени хоста, которое работает как локально, так и удаленно.

Есть ли простое решение этой проблемы? У меня macOS, если это имеет значение.

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

решение1

Поскольку у вас настроен динамический DNS, вам не нужно вносить изменения в файл /etc/hosts.

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

Большинство маршрутизаторов поддерживают DNS-инъекцию. Вам нужно проверить конфигурацию маршрутизатора и назначить IP-адрес 192.168.0.5, чтобы он соответствовал тому же динамическому имени хоста DNS, как если бы он был из внешней сети. Затем, когда вы находитесь во внутренней сети и используете маршрутизатор в качестве DNS-сервера, маршрутизатор преобразует myhost.example.com в локальный адрес. А когда вы выходите и пытаетесь получить внешний доступ, то динамический DNS в свою очередь преобразует его во внешний IP.

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

решение2

Если у вас нет возможности настроить DNS, вы можете поиграть в некоторые игры с конфигурацией SSH на вашем компьютере, сделать что-то подобное. Сначала вам понадобится способ определить, находитесь ли вы в своем «домашнем» или нет. В зависимости от того, куда вы идете и как вы подключаетесь, это может быть проще всего сделать, опросив ваш SSID Wi-Fi, но BSSID или сетевые конфигурации могут быть более надежными/возможными для вас. Вот пример:

MY_SSID="local ssid name"
ssid=`/System/Library/PrivateFrameworks/Apple80211.framework/Resources/airport -I | grep " SSID" | cut -d " " -f 2-`
if [ "$ssid" == "$MY_SSID" ]
  then
  exit 0
else
  exit 1
fi

Назовите это "at_home" и поместите в свой путь. Затем, предполагая, myserverчто нормально разрешается внешний адрес, добавьте в свой configфайл ssh строфу, похожую на эту, чтобы переопределить внутренний адрес:

Match host myserver exec at_home
    Hostname myserver.localname # or "local IP"

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