Comment puis-je spécifier un port local lors de l'établissement des connexions SSH?

13

J'ai deux serveurs hébergés dans IDC. Je ne peux utiliser que les ports 20/21/22/23/3389 / 33101-33109 pour établir des connexions entre deux serveurs. Le périphérique réseau IDC bloquera tous les autres paquets dont le port source ou de destination ne se trouve pas dans la liste / plage 20/21/22/23/80/3389 / 33101-33109. Mais le port source de SSH est aléatoire.

En utilisant la commande, on peut facilement spécifier un port distant.ssh username@server -p remote_port

Existe-t-il donc un sshparamètre de commande ou une autre manière de spécifier un port source local afin que je puisse utiliser, par exemple, le port 33101 pour établir la connexion SSH?

Ma topologie de réseau est comme ceci:
topologie de réseau

fajin yu
la source

Réponses:

2

Pour des situations ponctuelles, ou de toute façon occasionnelles, l'approche ProxyCommand est facilement très pratique.

D'un autre côté, si vous avez besoin de plusieurs connexions simultanées, ou lorsque vous devez peut-être utiliser fréquemment cette commande pour le travail quotidien, vous pouvez également envisager de définir une règle de traduction d'adresse réseau (NAT) sur votre serveur.

Cela nécessite (généralement root) un accès superutilisateur sur votre serveur pour appliquer d'abord une seule règle NAT. Notez qu'il peut ne pas être autorisé (ou efficace) d'appliquer la règle NAT, même lorsque vous disposez d'un accès superutilisateur, si votre "serveur" est en fait un conteneur (comme un Docker) au lieu d'une machine.

En parlant d'un système Linux typique avec la iptablessuite, la règle NAT à appliquer sur votre serveur1 pour votre exemple de cas pourrait être comme:

iptables -t nat -I POSTROUTING -d <server2-ip-address> -p tcp --dport <server2-port> -j SNAT --to :33101-33109

Cette commande demande au noyau Linux de se connecter au port server2-port de server2-ip-address pour sortir en utilisant un port source choisi dans la plage 33101-33109 qui est disponible à ce moment.

Une fois cette règle en place, vous vous connectez à votre serveur2 juste avec votre habitude:

ssh username@server2 -p remote_port

et vous pouvez également utiliser cette même sshcommande simultanément autant de fois que nécessaire, tant qu'il existe des ports disponibles dans la plage spécifiée dans la règle NAT.

Notez cependant qu'une netstat(ou une commande équivalente) exécutée sur votre serveur signale l'adresse locale de la connexion comme étant le numéro de port source non modifié , choisi au hasard, même si le trafic réel qui est délivré à votre serveur2 porte le numéro de port source modifié .

Pour annuler la règle NAT, la commande est la même sauf pour une -Doption à la place de -I.

Le fait que la règle NAT soit appliquée automatiquement au démarrage dépend de la distribution Linux que vous avez sur votre serveur et de la présence ou non d'une configuration de pare-feu.

Je n'ai aucune expérience avec les systèmes de type BSD, mais j'espère qu'il existe un équivalent.

LL3
la source