ssh via un routeur sans redirection de port

11

J'ai un serveur Linux et je veux le mettre dans un réseau domestique derrière un routeur. J'ai besoin de ssh vers ce serveur à un moment donné de l'extérieur, mais je ne veux pas configurer la redirection de port car je n'ai pas accès au routeur et je ne connais pas non plus l'ip du routeur.

Ce que je peux faire, c'est de mettre un programme sur le serveur Linux, donc quand il est connecté à Internet, il enverra constamment des données à mon autre serveur en ligne, donc je connais son adresse IP. Mais existe-t-il un moyen de ssh vers le serveur derrière le routeur de l'extérieur? quelque chose comme NAT ou socket qui maintient la connexion réseau?

Merci beaucoup

Jiechao Li
la source

Réponses:

24

Ce que vous voudriez faire, c'est ssh DEPUIS votre "serveur linux" VERS quelque chose à l'extérieur, tel que "my_other_server" ou quelque chose d'autre que les deux serveurs peuvent obtenir.

Vous utiliseriez la redirection de port à distance ssh.
[user@linux_server]$ ssh -R8022:localhost:22 my_other_server.com
Explication: Connectez-vous à my_other_server et ouvrez-y le port 8022 qui me sera renvoyé sur le port 22.

Depuis my_other_server.com, vous pourrez ssh vers localhost sur le port 8022, et faire transférer votre trafic vers linux_server sur le linux_server -> tunnel [user@linux_server]$ ssh -p8022 localhost
my_other_server Explication: Connectez-vous à moi-même sur le port 8022 qui est transmis à linux_server

Si vous rencontrez des problèmes avec le tunnel linux_server -> my_other_server initial, vous pouvez créer un script pour le garder ouvert, ajuster les paramètres keepalive ou utiliser autossh.

MattPark
la source
1
Merci, ça marche super! Je veux utiliser un script pour le garder ouvert. L'autre question est la suivante: si j'ai 1000 tels 'serveurs linux' et un seul 'mon_autre_serveur', puis-je les envoyer à l'un d'eux de cette façon? Je suppose qu'ils ont tous besoin d'un port différent et existe-t-il une meilleure façon de le faire?
Jiechao Li
Ça dépend. Maintenant que vous êtes sur linux_server, pourriez-vous simplement passer à linux_server2 et linux_server3 à partir de là? Ce serait le plus simple. Donc, oui, vous pouvez le faire plusieurs fois, au lieu d'utiliser 8022, vous utiliseriez 8023, 8024. Si vous suivez cette voie, créez un fichier ~ / .ssh / config sur "mon_autre_serveur" qui contient tous les numéros de port, donc vous venez de ssh [alias] au lieu de ssh [port] localhost. Cela deviendra lourd.
MattPark
1
Est-il possible de configurer cela avec seulement deux machines? Connecter B à A, le A à B à travers lui-même?
adamyonk
1
Je viens de le faire. Peut confirmer que cela fonctionne. \ o /
adamyonk
Ouais mec --- évidemment tu l'as compris. Vous pouvez utiliser quelque chose comme autosshpour le garder ouvert.
MattPark
3

Vous pouvez utiliser un VPN de toutes sortes pour que cela fonctionne, mais cela nécessiterait d'avoir un serveur auquel le serveur inaccessible peut accéder. Ensuite, vous pouvez configurer OpenVPN sur le serveur, votre PC et le serveur pare-feu, l'activer client-to-clientet vous avez terminé. http://openvpn.net/howto.html

Nathan C
la source
Merci. J'examine cela, mais cela semble un peu compliqué. Si je comprends bien, je dois installer OpenVPN sur les deux serveurs afin qu'ils puissent communiquer sans configurer le routeur, non?
Jiechao Li
Exactement. Vous configurez un serveur en tant que «serveur», puis les deux clients que vous souhaitez connecter ensemble en tant que «clients» dans la configuration. Le SSH inversé mentionné ci-dessus semble cependant être plus facile pour vous.
Nathan C
2

Cette réponse est basée sur celle acceptée, mais en ajoutant les détails qui m'ont permis de le faire. Je m'excuse pour l'explication piétonne, car ce n'est pas du tout mon expertise.

Supposons que vous ayez deux ordinateurs, Aet B. Vous voulez sshde Aà Bet vous ne pouvez pas faire de redirection de port dans les routeurs qui leur sont connectés.

Comme l'indique la réponse acceptée, vous avez besoin d'un serveur Spour cela: dans l'ordinateur B, vous autoriserez les sshconnexions provenant de S; et de l'ordinateur A, vous accéderez à ce tunnel à Satteindre B.

Mais comment obtenez-vous ce serveur S? J'ai trouvé serveo(lien: https://serveo.net/ ). Il est d'une utilité très simple. Vous n'avez rien à installer ni à vous inscrire et c'est gratuit. Selon le site Web, les étapes à suivre sont les suivantes:

  1. Pensez à un alias pour ordinateur B. Par exemple computer_B_alias,.

  2. Dans l'ordinateur B, exécutez ssh -R computer_B_alias:22:localhost:22 serveo.net.

  3. Maintenant, vous pouvez accéder à l'ordinateur à Bpartir de l'ordinateur Aen exécutant ce qui suit dans l'ordinateur A:, ssh -J serveo.net user@computer_B_aliasoù vous devez remplacer userpar le nom de l'utilisateur sur l'ordinateur B.

PS: Bien sûr, vous faites du point 2 une tâche automatique lors du démarrage de votre ordinateur B.

PSS: avant d'essayer, assurez-vous qu'il sshest installé sur les deux ordinateurs. Pour Ubuntu, sudo apt-get install sshferait le travail.

Godoy
la source
1

Beaucoup de temps pour répondre. L'espoir pourrait aider quelqu'un qui le recherche maintenant.

Si vous souhaitez accéder à un serveur derrière NAT et que vous ne voulez pas écrire de code, vous pouvez probablement opter pour un outil parmi ceux ci-dessous et utiliser ce qui convient à vos besoins.

Les deux outils ci-dessus supposent que vous avez accès à la machine Linux pour installer leur client Certains de leurs avantages sont:

  • Les deux vous donnent accès au terminal à l'aide de l'interface Web
  • Vous n'avez pas besoin de votre propre hôte ssh inverse inverse.
  • Très facile à installer
  • Les deux sont open source

Personnellement, je préfère tmate plus car vous pouvez héberger le serveur tmate sur votre propre serveur intermédiaire (pour reverse ssh) tandis que la téléconsole ne peut se connecter à leurs propres serveurs que pour reverse ssh.

Ankit Kulkarni
la source