¿Cómo puedo especificar un puerto local al establecer conexiones SSH?

13

Tengo dos servidores alojados en IDC. Solo puedo usar los puertos 20/21/22/23/3389 / 33101-33109 para establecer conexiones entre dos servidores. El dispositivo de red IDC bloqueará cualquier otro paquete cuyo puerto de origen o destino no esté en la lista / rango 20/21/22/23/80/3389 / 33101-33109. Pero el puerto de origen de SSH es aleatorio.

Usando el comando uno puede especificar fácilmente un puerto remoto.ssh username@server -p remote_port

Entonces, ¿hay un sshparámetro de comando o alguna otra forma de especificar un puerto de origen local para que pueda usar, por ejemplo, el puerto 33101 para establecer la conexión SSH?

Mi topología de red es así:
topología de la red

fajin yu
fuente

Respuestas:

2

Para situaciones puntuales u ocasionales, el enfoque ProxyCommand es fácilmente muy conveniente.

Por otro lado, si necesita varias conexiones simultáneas, o cuando tal vez necesite usar ese comando con frecuencia para el trabajo diario, también puede considerar establecer una regla de traducción de direcciones de red (NAT) en su servidor.

Esto requiere rootacceso de superusuario (normalmente ) en su servidor para aplicar primero la única regla NAT. Tenga en cuenta que podría no estar permitido (o efectivo) aplicar la regla NAT, incluso cuando tenga acceso de superusuario, si su "servidor" es en realidad un contenedor (como un Docker) en lugar de una máquina.

Hablando de un sistema Linux típico con la iptablessuite, la regla NAT que se aplica en su servidor1 para su caso de muestra podría ser:

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

Ese comando indica al kernel de Linux que realice cualquier conexión hacia el puerto server2-port de server2-ip-address para salir utilizando un puerto de origen elegido dentro del rango 33101-33109 que está disponible en ese momento.

Una vez que esa regla está en su lugar, se conecta a su servidor2 solo con su habitual:

ssh username@server2 -p remote_port

y puede usar este mismo sshcomando también simultáneamente todas las veces que lo necesite, siempre que haya puertos disponibles en el rango especificado en la regla NAT.

Sin embargo, netstattenga en cuenta que un (o comando equivalente) ejecutado en su servidor informa que la dirección local de la conexión es el número de puerto de origen no modificado , elegido aleatoriamente, aunque el tráfico real que se entrega a su servidor2 lleva el modificado número de puerto de origen .

Para deshacer la regla NAT, el comando es el mismo, excepto por una -Dopción en lugar de -I.

Tener la regla NAT aplicada automáticamente en el arranque depende de la distribución de Linux que tenga en su servidor y de si ya tiene alguna configuración de firewall implementada o no.

No tengo experiencia con sistemas similares a BSD, pero confío en que haya un equivalente.

LL3
fuente