Mi problema es encontrar una forma de SSH en un servidor Linux (Ubuntu 18.04) cuya dirección IP cambia a diario.
Tengo un cliente al que ocasionalmente ayudo con las tareas administrativas. Necesito ingresar en la máquina cuando necesitan ayuda, pero no tienen una IP estática, por lo que la IP pública del servidor cambia constantemente. Creé un pequeño script para informar la dirección IP de la máquina Linux, y descubrí que cambia una vez al día alrededor del mediodía.
Puedo configurar SSH, y funciona tanto local como remotamente ... hasta que cambie la dirección IP. Una vez que eso sucede, ya no puedo conectarme de forma remota, incluso usando la nueva dirección IP.
- ¿Necesito reiniciar el servicio SSH cada vez que cambia la dirección IP?
- Si es así, ¿por qué?
- ¿Hay alguna otra acción que deba tomar cuando cambie la dirección IP para permitir el acceso SSH?
ACTUALIZAR
Para que quede claro, mi problema NO es encontrar la nueva dirección IP. Ya tengo un guión para hacerlo. El problema es que el servidor deja de responder una vez que cambia la IP, aunque trato de conectarme usando la nueva dirección IP.
Si reinicio el servicio SSH en la máquina de destino, tengo acceso remoto nuevamente. Pero no entiendo por qué debería tener que hacer esto. Me gustaría conocer la causa raíz con la esperanza de encontrar una mejor solución.
La mayoría de la gente parece pensar que SSH debería funcionar siempre que conozcamos la nueva IP, entonces, ¿es algo exclusivo de 18.04? Instalé este servidor para el cliente recientemente, por lo que toda la configuración sigue siendo predeterminada. (El no sabría cómo cambiarlo).
fuente
ListenAddress <dynamic host name>
en el archivo de configuración sshd, tal vez porque alguien no quería que los usuarios internos pudieran ingresar al servidor. En realidad, esto requeriría reiniciar el servidor ssh cada vez que cambie la IP.Respuestas:
Las otras respuestas parecen haber pasado por alto una cosa en su pregunta:
DDNS lo ayudará a encontrar la nueva dirección IP, pero ese no parece ser el problema aquí.
Desafortunadamente, el servidor que obtiene una nueva IP no debería ser un problema en la configuración estándar donde el ISP proporciona un enrutador, el servidor tiene una dirección interna detrás del enrutador y el enrutador realiza el reenvío de puertos. Es posible que deba proporcionar más información sobre la topología de la red para obtener una buena respuesta.
Lo que podría imaginar es que el servidor no está detrás de un enrutador y está haciendo su propia conexión PPPoE, y a) el servidor ssh se vincula a la dirección de interfaz específica en el punto de reinicio del servidor, b) un firewall en la máquina que permite que ssh entrante solo la IP del servidor con el firewall que no se actualiza cuando cambia la IP.
Para verificar el primer caso, haga a
netstat -nta | grep -w 22 | grep LISTEN
. Si dice 0.0.0.0:22, está bien; si enumera una IP específica, verifique el archivo de configuración sshd (/etc/sshd.conf
) paraListenAddress
.Para verificar el segundo caso,
iptables -L -n
verifique si una de las reglas de laINCOMING
cadena coincide con la IP de su servidor y el puerto 22.Si uno de estos tiene la dirección del servidor actual, deberá cambiarlo a 0.0.0.0 (asegúrese de conocer las implicaciones de seguridad) o actualizar la regla / configuración cada vez que cambie la IP.
Editar
Como el servidor está detrás de un enrutador, las ideas anteriores probablemente no se apliquen (*). En esta configuración, el enrutador tiene una IP externa (que cambia diariamente), y sus dispositivos internos deben tener algunas direcciones 10.xyz o 192.168.xy que no deberían cambiar. Se conecta a la dirección externa y el enrutador debe tener una regla de reenvío de puertos a la dirección interna.
Este reenvío de puertos no debe romperse cuando cambia la IP externa (sin embargo, se eliminarán las conexiones ssh existentes), pero tal vez es una regla que no fue configurada por usted, sino por un poco de magia UPNP, con el enrutador soltando UPNP hacia adelante cuando llega una nueva dirección, y sshd solo invoca la regla cuando se reinicia. ¿Configuró usted mismo un reenviador de puertos dentro del enrutador?
O bien, es la IP interna del servidor la que cambia; en ese caso, algo se rompe gravemente con su DHCP. Dele a su servidor una dirección interna fija.
¿O estás usando IPV6? Hay algunas configuraciones en las que un dispositivo sigue cambiando su IP para que sea menos fácil de rastrear. Ver, por ejemplo, https://www.internetsociety.org/blog/2014/12/ipv6-privacy-addresses-provide-protection-against-surveillance-and-tracking/ - pero en ese caso, la culpa es tuya por no mencionándolo en tu publicación original. Esto podría significar que su enrutador no está haciendo NAT, y mis ideas originales siguen siendo válidas incluso detrás de un enrutador.
fuente
El DNS dinámico es una opción, otra es tener el correo del servidor o enviarle su IP. Una simple llamada HTTP lo haría (a un punto final que controle y registre solicitudes).
También es posible resolver toda la red pública al revés; puede hacer que el servidor configure un túnel inverso o una conexión VPN, que no se verá afectada por el cambio de IP.
Con respecto a los servicios que no responden en la nueva dirección: esto depende completamente de la configuración de su red. Por ejemplo: WAN IP en una interfaz interna a través de DHCP y un servidor SSH configurado para escuchar solo la IP en su interfaz conocida en el inicio significaría que sshd debe reiniciarse en los cambios de interfaz.
fuente
Realmente deberías buscar en los servicios de ddns. En cuanto a la posibilidad de conectarse de forma remota a una determinada máquina con una dirección IP dinámica; ddns es la solución más utilizada.
dirígete a https://noip.com y regístrate para obtener una cuenta (es, errr ... supuestamente ... café ... café ... Gratis para 1-3 máquinas que se ejecutan en la misma red (si no estoy equivocado, no cotices yo aquí: ha pasado un tiempo desde que he confiado en cualquiera de estos servicios 'gratuitos'). También hay otras alternativas como DNS asustado ( https://freedns.afraid.org/ E incluso, el DNS abierto de Cisco: también se podría utilizar (siempre que no se trate de su único cliente, le sugiero que se registre para una prueba de cuenta general, pruébelo y luego regístrese para el verdadero trato >>> incluso obtuvieron una de ellas extensiones descargables tipo GUI que renovarían automáticamente el nombre de host ddns cada vez que cambian los ip de sus clientes. Realmente es la forma más fácil y no tecnológica que conozco [solo en en caso de que tengas que llamar a uno de tus clientes y pedirme que descargue la GUI más bien ...
fuente
A veces, los cambios de DHCP tardan un tiempo en surtir efecto. Intente reciclar el cliente DHCP en la máquina de destino.
No. Solo necesita reciclar su servicio ssh cuando la configuración cambia (
/etc/ssh/sshd_conf
).No.
Tengo una solución que asume que tiene configurado sendmail en su máquina de destino.
Este script envía un correo electrónico que muestra la dirección IP que el mundo cree que tenemos (Gracias ipify.org). El correo electrónico siempre tendrá la dirección IP más actual.
Pon el guión en
/etc/dhcp/dhclient-exit-hooks.d
Si esto no funciona, siempre puede configurar un cron para que le envíe la dirección IP actual (pierda la declaración del caso).
fuente
Pensando fuera de la caja: ¿podría organizar una dirección IPv6 fija? Por lo general, solo las direcciones IPv4 deben cambiar debido a su escasez.
fuente
Lo que he estado haciendo durante casi un año. Me encontré con tu problema en enero de este año mientras daba un discurso en mi universidad local.
Este script se ha estado ejecutando en mi máquina desde entonces: // Se explica por sí mismo //
Python 3.x debería funcionar sin problemas Tal vez no sea la mejor solución, pero funciona.
Recibirá un correo electrónico en su Bandeja de entrada cada vez que cambie la IP pública de la máquina.
Ahora, con respecto a sus preguntas:
¿Necesito reiniciar el servicio cada vez que cambia la dirección IP? Si al reiniciar el servicio te refieres a restablecer la conexión ssh, sí.
Si es así, ¿por qué? Porque si la dirección con la que estás tratando de comunicarte ya no proporciona el servicio que estás buscando. Ya no es tu máquina.
¿Hay alguna otra acción que deba tomar cuando cambie la dirección IP para permitir el acceso SSH? Solo SSH a la nueva dirección.
¡Salud! JSR
fuente
Vale la pena ver esto desde un lado diferente: por lo general, es mucho más simple crear una conexión externa desde la máquina que requiera su atención (DNS, NAT y otras configuraciones de firewall no importan en absoluto o son mucho más simples).
Puede usar esto para establecer una solución simple y a prueba de balas para ingresar a una máquina remota
R
. El único requisito es que puede proporcionarssh
acceso público a una de sus propias máquinas locales (llamémoslaS
). Luego proceda de la siguiente manera:Cree una
ssh
conexión externa deR
aS
, estableciendo un túnel inverso enR
:ssh -L 22:<address-of-S>:22000
Encendido
S
, use el túnel inverso parassh
ingresar a la máquina remotaR
:ssh -p 22000 127.0.0.1
El paso 1 podría activarse manualmente y a pedido desde el lado remoto cada vez que necesite su ayuda. Alternativamente, puede crear un servicio en el
R
que mantendrá continuamente dicho túnel inversoS
.Utilicé tal configuración para iniciar sesión en sistemas remotos (móviles) que estaban detrás de firewalls / NAT y que no tenían entradas de DNS en absoluto.
fuente
Si solo necesita un inicio de sesión remoto, use mosh . Además de poder hacer frente de manera excelente a los cambios de IP (casi sin latencia durante el cambio) también tiene otras ventajas sobre el plano
ssh
, como el eco predictivo local, baja latencia, recuperación mucho más rápida de enlaces rotos.Si necesita específicamente
ssh
(por ejemplo, necesita reenvío X11 o algo así), sugiero configurar VPN (por ejemplo, OpenVPN), preferiblemente sobre UDP, con un breve keepalive. Las conexiones TCP (es decir, su ssh) sobre VPN sanarán y permanecerán conectadas después del cambio de IP, solo llevará más tiempo (hasta un minuto más o menos), pero puede jugar con/proc/sys/net/ipv4/tcp_*
entradas para que sea más aceptable.Editar:
ssh
autenticación, pero una vez autenticada, la conexión permanece hasta que cierre la sesión (o reinicie), y puede investigar la fallassh
en su tiempo libre (por ejemplo, strace -f -p pid_of_sshd )mosh
sinssh
, respuesta adaptada desde aquí :En el servidor ejecute:
obtienes un resultado como
QzdRHbAWzL7eRobi75DCrz
En el cliente ejecute:
Tenga en cuenta que
$serverip
tiene que ser una ip, sin resolución de nombre de host.La forma de obtener la llave de un lado a otro depende de usted. Sugeriría cifrar con una clave precompartida y mensajería instantánea, envío por correo o hacer que un usuario local lo dicte mediante una llamada telefónica.
ssh
, instaleinetd
y ejecute ssh desde allí, no como un demonio independiente, por ejemplo, mediante esta línea de configuración para inetd.conf "clásico", esto ejecutará un nuevo demonio cada vez que inicie sesión (tenga en cuenta que no todos Las horquillas inetd manejan ipv6):ssh stream tcp6 nowait root /usr/sbin/sshd sshd -i
fuente