Bueno, refiriéndome a esta pregunta, estoy ejecutando el comando
ssh -R 8080:localhost:80 -N [email protected]
en una Mac Sin embargo, el puerto que se está tunelizando no funciona públicamente. Estoy ejecutando dicho comando para que se pueda abrir el puerto local en la computadora remota. Y funciona al abrir el puerto en localhost en la computadora remota, pero cuando intento acceder a la dirección IP pública de la computadora remota desde mi computadora local, el puerto no parece estar abierto. ¿Cómo haría público el túnel en la IP para que cualquiera pueda acceder?
EDITAR: Parece que el lado remoto se une solo en localhost en lugar de a todas las interfaces.
EDIT 2: el cliente es Mac OS X 10.6 y el servidor es Linux Mint, pero ambos son OpenSSH.
ssh
ip
openssh
ssh-tunnel
Trevor Rudolph
fuente
fuente
Respuestas:
Si revisa la página de manual para ssh, encontrará que la sintaxis de
-R
lee:Cuando
bind_address
se omite (como en su ejemplo), el puerto está vinculado únicamente a la interfaz de bucle invertido. Para que se una a todas las interfaces, useo
o
La primera versión se une a todas las interfaces individualmente. La segunda versión crea un enlace general solo IPv4, lo que significa que el puerto es accesible en todas las interfaces a través de IPv4. La tercera versión es probablemente técnicamente equivalente a la primera, pero de nuevo solo crea un enlace
::
, lo que significa que el puerto es accesible a través de IPv6 de forma nativa y a través de IPv4 a través de direcciones IPv6 asignadas por IPv4 (no funciona en Windows, OpenBSD) . (Necesita las comillas porque de[::]
lo contrario podría interpretarse como un globo).Tenga en cuenta que si usa el
sshd
servidor OpenSSH , laGatewayPorts
opción del servidor debe estar habilitada (establecida enyes
oclientspecified
) para que esto funcione (verifique el archivo/etc/ssh/sshd_config
en el servidor). De lo contrario (el valor predeterminado para esta opción esno
), el servidor siempre forzará al puerto a vincularse solo en la interfaz de bucle invertido.fuente
*
en bash dará archivos y lo necesitaba\*
0.0.0.0
: es solo IPv4, pero lo hará la mayor parte del tiempo :)Editar:
-g
funciona para puertos reenviados locales, pero lo que desea es un puerto reenviado inverso / remoto, que es diferente.Lo que quieres es esto .
En esencia, el
example.com
, ajusteGatewayPorts=clientspecified
en/etc/ssh/sshd_config
.--- respuesta anterior (incorrecta) ---
Use la opción -g. Desde la página de manual de ssh:
fuente
netstat -elnpt
desde un tty separado para averiguar qué puertos están vinculados a qué dirección. Sin-g
un puerto debería estar vinculado127.0.0.1:PORT
. Con-g
, debe estar vinculado a0.0.0.0:PORT
, lo que lo hace accesible de forma remota.GatewayPorts=clientspecified
oGatewayPorts clientspecified
Aquí está mi respuesta para completar:
Terminé usando
ssh -R ...
para hacer túneles, ysocat
además para redirigir el tráfico de red a127.0.0.1
:túnel unido a 127.0.0.1:
ssh -R mitm:9999:<my.ip>:8084 me@mitm
socat:
mitm$ socat TCP-LISTEN:9090,fork TCP:127.0.0.1:9999
Otra opción es hacer un túnel solo local además de eso, pero me parece mucho más lento
mitm$ ssh -L<mitm.ip.address>:9090:localhost:9999 localhost
fuente
socat
funcionó de maravilla. Súper útil, poner esto en mi bolsillo trasero;]También puede usar un reenvío doble si no puede o puede cambiar / etc / ssh / sshd_config.
Primero reenvíe al puerto temporal (por ejemplo, 10080) en el dispositivo de bucle invertido en la máquina remota, luego use el reenvío local allí para redirigir el puerto 10080 a 80 en todas las interfaces:
fuente
Use la opción "puertos de puerta de enlace".
ssh -g -R REMOTE_PORT:HOST:PORT ...
Para usar eso, probablemente necesite agregar "
GatewayPorts yes
" a su servidor/etc/ssh/sshd_config
.fuente
Los hosts de salto son una adición bastante reciente a OpenSSH. Esto requiere acceso SSH al intermedio, pero debería funcionar sin configuración adicional.
Este comando le indica a SSH que primero se conecte
[email protected]
y luego, desde esa máquina, inicie una conexión al puerto 8080 enlocalhost
(es decir, el puerto que se canaliza desde el host de salto al host remoto) bajo elremoteuser
nombre de usuario.fuente
Si desea poner la configuración en usted en
~/.ssh/config
lugar de usar parámetros de línea de comando, puede intentar algo comoHost REMOTE_HOST_NAME RemoteForward \*:8080 127.0.0.1:80
Recuerde que el firewall del host remoto permite conexiones al 8080 y asegúrese de que la
GatewayPorts
opción de su/etc/ssh/sshd
configuración no esté configurada enno
fuente