Mon problème est de trouver un moyen de SSH dans un serveur Linux (Ubuntu 18.04) dont l'adresse IP change quotidiennement.
J'ai un client que j'aide occasionnellement pour les tâches d'administration. J'ai besoin de ssh dans la machine quand ils ont besoin d'aide, mais ils n'ont pas d'IP statique, donc l'IP publique du serveur change constamment. J'ai créé un petit script pour signaler l'adresse IP de la machine Linux et je constate qu'elle change une fois par jour vers midi.
Je suis capable de configurer SSH, et cela fonctionne à la fois localement et à distance ... jusqu'à ce que l'adresse IP change. Une fois que cela se produit, je ne peux plus me connecter à distance, même en utilisant la nouvelle adresse IP.
- Dois-je redémarrer le service SSH chaque fois que l'adresse IP change?
- Si oui, pourquoi?
- Y a-t-il une autre action que je dois entreprendre lorsque l'adresse IP change afin de permettre l'accès SSH?
MISE À JOUR
Pour être clair, mon problème n'est PAS de trouver la nouvelle adresse IP. J'ai déjà un script pour le faire. Le problème est que le serveur cesse de répondre une fois que l'IP change, même si j'essaie de me connecter en utilisant la nouvelle adresse IP.
Si je redémarre le service SSH sur la machine cible, j'ai à nouveau un accès à distance. Mais je ne comprends pas pourquoi je devrais faire ça. Je voudrais connaître la cause profonde dans l'espoir de trouver une meilleure solution.
La plupart des gens semblent penser que SSH devrait fonctionner tant que nous connaissons la nouvelle IP, est-ce donc quelque chose d'unique au 18.04? J'ai récemment installé ce serveur pour le client, donc tous les paramètres de configuration sont toujours par défaut. (Ils ne sauraient pas comment le changer.)
la source
ListenAddress <dynamic host name>
dans le fichier de configuration sshd, peut-être parce que quelqu'un ne voulait pas que les utilisateurs internes puissent ssh dans le serveur. Cela nécessiterait en fait de redémarrer le serveur ssh chaque fois que l'IP change.Réponses:
Les autres réponses semblent avoir oublié une chose dans votre question:
DDNS vous aidera à trouver la nouvelle adresse IP, mais cela ne semble pas être le problème ici.
Malheureusement, le serveur obtenant une nouvelle adresse IP ne devrait pas être un problème dans la configuration standard où le FAI fournit un routeur, le serveur a une adresse interne derrière le routeur et le routeur fait la redirection de port. Vous devrez peut-être fournir plus d'informations sur la topologie du réseau pour obtenir une bonne réponse.
Ce que je pourrais imaginer, c'est que le serveur n'est pas derrière un routeur et qu'il fait sa propre connexion PPPoE, et a) que le serveur ssh se lie à l'adresse d'interface spécifique au point de redémarrage du serveur, b) un pare-feu sur la machine qui permet aux ssh entrants de juste l'IP du serveur avec le pare-feu qui ne se met pas à jour lorsque l'IP change.
Pour vérifier le premier cas, procédez comme suit
netstat -nta | grep -w 22 | grep LISTEN
. S'il indique 0.0.0.0:22, c'est ok; si elle énumère une adresse IP spécifique, puis vérifier le fichier de configuration de sshd (/etc/sshd.conf
) pourListenAddress
.Pour vérifier le deuxième cas, faites
iptables -L -n
et vérifiez si l'une des règles de laINCOMING
chaîne correspond à l'IP et au port 22 de votre serveur.Si l'un d'eux a l'adresse du serveur actuelle, vous devrez soit la changer en 0.0.0.0 (assurez-vous que vous connaissez les implications pour la sécurité), soit mettre à jour la règle / configuration chaque fois que l'IP change.
Éditer
Comme le serveur est derrière un routeur, les idées ci-dessus ne s'appliquent probablement pas (*). Dans cette configuration, le routeur a une adresse IP externe (qui change quotidiennement) et vos périphériques internes doivent avoir des adresses 10.xyz ou 192.168.xy qui ne devraient pas changer. Vous vous connectez à l'adresse externe et le routeur doit appliquer une règle de transfert de port à l'adresse interne.
Cette redirection de port ne doit pas se rompre lorsque l'IP externe change (les connexions ssh existantes seront cependant abandonnées), mais c'est peut-être une règle qui n'a pas été configurée par vous, mais par un peu de magie UPNP, le routeur abandonnant UPNP vers l'avant lorsqu'il obtient une nouvelle adresse, et sshd n'appelle la règle qu'au redémarrage. Avez-vous configuré vous-même un redirecteur de port dans le routeur?
Ou, c'est l' IP interne du serveur qui change - dans ce cas, quelque chose est gravement cassé avec votre DHCP. Donnez à votre serveur une adresse interne fixe.
Ou utilisez-vous IPV6? Il existe certaines configurations où un appareil change constamment son IP pour le rendre moins facile à suivre. Voir, par exemple, https://www.internetsociety.org/blog/2014/12/ipv6-privacy-addresses-provide-protection-against-surveillance-and-tracking/ - mais dans ce cas, honte à vous de ne pas en le mentionnant dans votre message d'origine. Cela pourrait signifier que votre routeur ne fait pas du tout de NAT, et mes idées originales sont toujours valables même derrière un routeur.
la source
Le DNS dynamique est une option, une autre consiste à recevoir le courrier du serveur ou à vous envoyer son adresse IP. Un simple appel HTTP ferait l'affaire (vers un point de terminaison que vous contrôlez et connectez les demandes).
Il est également possible de résoudre l'ensemble du réseau public dans l'autre sens; vous pouvez demander au serveur de configurer un tunnel inverse ou une connexion VPN, qui ne seront pas affectés par le changement d'adresse IP.
Concernant les services ne répondant pas sur la nouvelle adresse: cela dépend complètement de la configuration de votre réseau. Par exemple: IP WAN sur une interface interne via DHCP et un serveur SSH configuré pour écouter uniquement l'IP sur votre interface connue au démarrage signifierait que sshd doit être redémarré lors des changements d'interface.
la source
Vous devriez vraiment regarder dans les services ddns. En ce qui concerne la possibilité de se connecter à distance à une certaine machine avec une adresse IP dynamique; ddns est la solution la plus utilisée.
rendez-vous sur https://noip.com et inscrivez-vous pour un compte (c'est, errr ... supposément..coff..cof .. Gratuit pour 1-3 machines fonctionnant sur le même réseau (si je ne me trompe pas, ne citez pas moi ici: ça fait un moment que ive ne fait confiance à aucun de ces services "gratuits" ...) Il existe aussi d'autres alternatives comme Afraid DNS ( https://freedns.afraid.org/ Et même, Cisco, Open DNS: pourrait également être utilisé (à condition que ce ne soit pas seulement votre client, je vous suggère de vous inscrire à un essai de compte parapluie, de le prendre pour un tour et de vous inscrire plus tard pour le vrai >>> ils ont même obtenu l'une d'entre elles comme des extensions téléchargeables de type GUI qui renouvelleraient automatiquement le nom d'hôte ddns chaque fois que l'IP de vos clients changerait. au cas où vous devez appeler un de vos clients et me demander de télécharger l'interface graphique plutôt ....])
la source
Parfois, il faut du temps pour que les modifications DHCP prennent effet. Essayez de recycler le client DHCP sur la machine cible
Non. Vous n'avez besoin de recycler votre service ssh que lorsque la configuration change (
/etc/ssh/sshd_conf
).Non.
J'ai une solution qui suppose que vous avez configuré sendmail sur votre machine cible.
Ce script envoie un e-mail qui montre l'adresse IP que le monde pense que nous avons (merci ipify.org). L'email aura toujours l'adresse IP la plus récente.
Mettez le script dans
/etc/dhcp/dhclient-exit-hooks.d
Si cela ne fonctionne pas, vous pouvez toujours configurer un cron pour vous envoyer l'adresse IP actuelle (perdre l'instruction case).
la source
Sortir des sentiers battus - pourriez-vous organiser une adresse IPv6 fixe? Ce ne sont généralement que les adresses IPv4 qui doivent changer, en raison de leur rareté.
la source
Ce que je fais depuis presque un an. J'ai rencontré votre problème en janvier de cette année en prononçant un discours dans mon université locale.
Ce script fonctionne depuis sur ma machine depuis lors: // Plutôt explicite //
Python 3.x devrait fonctionner sans problème Peut-être pas la meilleure solution, mais cela fonctionne.
Vous recevrez un e-mail dans votre boîte de réception chaque fois que l'adresse IP publique de la machine change.
Maintenant, concernant vos questions:
Dois-je redémarrer le service chaque fois que l'adresse IP change? Si en redémarrant le service, vous entendez rétablir la connexion ssh, oui.
Si oui, pourquoi? Parce que si l'adresse avec laquelle vous essayez de communiquer ne fournit plus le service que vous recherchez. Ce n'est plus votre machine.
Y a-t-il une autre action que je dois entreprendre lorsque l'adresse IP change afin de permettre l'accès SSH? Juste SSH à la nouvelle adresse.
À votre santé! JSR
la source
Cela vaut la peine de voir cela d'un autre côté: généralement, il est beaucoup plus simple de créer une connexion sortante à partir de la machine qui nécessite votre attention (DNS, NAT et autres paramètres de pare-feu n'ont pas d'importance du tout ou sont beaucoup plus simples).
Vous pouvez l'utiliser pour établir une solution à l'épreuve des balles et simple pour accéder à une machine distante
R
. La seule condition est que vous puissiez fournir unssh
accès public à l'une de vos propres machines locales (appelons-laS
). Procédez ensuite comme suit:Créez une
ssh
connexion extérieure deR
àS
, en établissant un tunnel inverse dansR
:ssh -L 22:<address-of-S>:22000
Activé
S
, utilisez le tunnel inverse pour accéder àssh
la machine distanteR
:ssh -p 22000 127.0.0.1
L'étape 1 peut être déclenchée manuellement et à la demande par le côté distant chaque fois que votre assistance est nécessaire. Alternativement, vous pouvez créer un service
R
qui maintiendra en permanence un tel tunnel inverse versS
.J'ai utilisé une telle configuration pour me connecter à des systèmes distants (mobiles) qui étaient derrière des pare-feu / NAT et qui n'avaient aucune entrée DNS du tout.
la source
Si vous avez juste besoin d'une connexion à distance, utilisez mosh . En plus d'être en mesure de faire face parfaitement aux changements IP (avec presque aucune latence pendant le commutateur), il présente également d'autres avantages par rapport à la simplicité
ssh
, comme l'écho local prédictif, une faible latence, une récupération beaucoup plus rapide à partir de liens rompus.Si vous avez spécifiquement besoin
ssh
(par exemple, vous avez besoin du transfert X11 ou quelque chose), je suggère de configurer un VPN (par exemple OpenVPN), de préférence sur UDP, avec une courte durée de vie. Les connexions TCP (c'est-à-dire votre ssh) sur VPN guérissent et restent connectées après le changement d'IP, cela prendra juste plus de temps (jusqu'à une minute environ), mais vous pouvez jouer avec les/proc/sys/net/ipv4/tcp_*
entrées pour le rendre plus acceptable.Éditer:
ssh
d'authentification, mais une fois authentifiée, la connexion reste jusqu'à ce que vous vous déconnectiez (ou redémarrez), et vous pouvez enquêter sur l'échecssh
à votre guise (par exemple strace -f -p pid_of_sshd )mosh
sansssh
, réponse adaptée d' ici :Sur le serveur, exécutez:
vous obtenez un résultat comme
QzdRHbAWzL7eRobi75DCrz
Sur le client exécutez:
Notez que cela
$serverip
doit être une adresse IP, pas de résolution de nom d'hôte.La façon dont vous obtenez la clé d'un côté à l'autre dépend de vous. Je suggérerais de chiffrer avec une clé pré-partagée et de messagerie instantanée, de mailing ou de faire en sorte qu'un utilisateur local le dicte par appel téléphonique.
ssh
, installezinetd
et exécutez ssh à partir de là, pas en tant que démon autonome, par exemple par cette ligne de configuration pour inetd.conf "classique", cela lancera un nouveau démon à chaque connexion (notez que tous les fourches inetd gèrent ipv6):ssh stream tcp6 nowait root /usr/sbin/sshd sshd -i
la source