
Tengo un servidor SSH ejecutándose en mi red local que está expuesto a la Internet pública a través del reenvío de puertos de mi enrutador. También configuré un nombre para el host localmente en mi máquina (a través de etc/hosts
) y de forma remota (a través de DNS dinámico), digamos:
ip name
locally 192.168.0.5 myhost
remotely 11.22.33.44 myhost.example.com
Desde mi red local, puedo acceder al servidor a través de ssh 192.168.0.5
/ ssh myhost
y desde fuera de mi red puedo acceder a él a través de ssh 11.22.33.44
/ ssh myhost.example.com
.
Hasta ese punto, todo funciona bien. Sin embargo, utilizar dos nombres de host diferentes para el mismo servidor es un poco engorroso. Me gustaría acceder al servidor en unmanera unificada, es decir, utilizando solo una única IP/nombre de host que funcione tanto de forma local como remota.
¿Existe una solución fácil a este problema? Estoy en macOS si eso importa.
Por cierto: no puedo acceder a mi enrutador desde la red local usando su IP pública.
Respuesta1
Dado que tiene configurado DNS dinámico, no necesita realizar cambios en el archivo /etc/hosts.
Para el acceso externo, usaría DNS para la resolución de host a IP y desea lo mismo para la red local.
La mayoría de los enrutadores admiten la inyección de DNS. Debe verificar la configuración de su enrutador y asignar la dirección IP 192.168.0.5 para que corresponda al mismo nombre de host de DNS dinámico como si fuera de una red externa. Luego, cuando esté en la red interna y utilice su enrutador como servidor DNS, el enrutador resolverá myhost.example.com en la dirección local. Y cuando salga e intente acceder externamente, el DNS dinámico tomará su turno para resolverse en una IP externa.
Si tiene problemas para configurar su enrutador, publique la marca y el modelo para que podamos ver si admite las configuraciones requeridas.
Respuesta2
Si no tuvieras la capacidad de configurar el DNS, podrías jugar algunos juegos con la configuración SSH en tu caja y hacer algo similar. Primero necesitarías una forma de detectar si estás en tu "casa" o no. Dependiendo de dónde vaya y cómo se conecte, esto se puede hacer más fácilmente sondeando su SSID wifi, pero el BSSID o las configuraciones de red pueden ser más sólidos/posibles para usted. Aquí hay una muestra:
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
Llámalo "at_home" y ponlo en tu camino. Luego, suponiendo que myserver
normalmente se resuelve en la dirección externa, agregue una estrofa a su config
archivo ssh similar a esta para anular la dirección interna:
Match host myserver exec at_home
Hostname myserver.localname # or "local IP"