Considere la siguiente situación:
En mi casa, tengo un enrutador (que está conectado a Internet), un servidor (S) y mi máquina principal (M). Se puede acceder a S desde Internet (tiene IP estática), y está activo las 24 horas, los 7 días de la semana, mientras que M no.
A veces, quiero que alguna aplicación (que escucha en algún puerto en M, por ejemplo 8888) sea accesible desde Internet externo.
Para eso, quería configurar algún puerto en S (2222) para reenviarlo al puerto 8888 de M, para que cualquiera que acceda a S: 2222 sienta que está accediendo a M: 8888.
Traté de usar el reenvío de puertos ssh, mi mejor intento fue el siguiente:
ssh -L 2222:M:8888 -N M
Pero eso solo me permite acceder al puerto 2222 desde el servidor mismo, no desde otras máquinas.
¿Hay alguna forma de hacerlo correctamente? Preferiblemente, me gustaría que fuera un comando simple, que podría iniciar y cerrar con ^ C cuando ya no necesite ese reenvío.
fuente
Respuestas:
Sí, esto se llama
GatewayPorts
en SSH. Un extracto dessh_config(5)
:Y puede usarlo en
localhost
lugar deM
en el reenvío, ya que reenvía a la misma máquina a la que está enviando SSH, si entiendo su pregunta correctamente.Entonces, el comando se convertirá en esto:
y se verá así en
netstat -nltp
:Ahora, cualquiera que acceda a esta máquina en el puerto 2222 TCP en realidad hablará con localhost: 8888 como se ve en la máquina M. Tenga en cuenta que esto no es lo mismo que el reenvío simple al puerto 8888 de M.
fuente
netstat
comando para averiguar exactamente qué. Probablemente otro SSH similar todavía se ejecuta en segundo plano y lo mata usando el PID netstat te dice.Hay otra manera Puede configurar el reenvío de puertos de S: 2222 a W: 8888 con iptables. Comando único:
donde 1.2.3.4 es la dirección IP de M. Se llama NAT (traducción de direcciones de red).
fuente
Más alternativas:
netcat
(tradicional) osocat
En el servidor (S):
o
Ver detalles en: ¿Una forma sencilla de crear un túnel de un puerto local a otro?
fuente