Red de conocimiento informático - Conocimiento informático - ¿Cómo acceder a un servidor Linux detrás de NAT a través de un túnel SSH inverso? Además del reenvío de puertos SSH, otro método es el túnel inverso SSH. El concepto de túnel inverso SSH es realmente muy simple. Para hacer esto, necesita tener otro host fuera de su red doméstica restringida, un llamado "host de retransmisión" al que pueda conectarse mediante SSH desde su ubicación. Puede utilizar una instancia de servidor privado virtual (VPS) con una dirección IP pública para configurar un host de retransmisión. Luego, todo lo que necesita hacer es configurar un túnel SSH persistente desde un servidor en su red doméstica hasta un host de retransmisión público. A través de este túnel puede conectarse "de regreso" desde el host de retransmisión al servidor doméstico (por eso se llama túnel "inverso"). No importa dónde se encuentre ni cuán restrictivo sea el NAT o el firewall en su red doméstica, siempre que pueda conectarse al host de retransmisión, podrá conectarse al servidor doméstico. \x0d\ Configurando un túnel inverso SSH en Linux \x0d\ Veamos cómo configurar y usar un túnel inverso SSH. Suponemos la siguiente configuración. Construiremos un túnel inverso SSH desde el servidor doméstico al servidor de retransmisión para que podamos enviar SSH al servidor doméstico desde otra computadora llamada computadora cliente a través del servidor de retransmisión. La dirección IP pública del servidor de retransmisión es 1.1.1.1. \x0d\En el servidor doméstico, abra una conexión SSH al servidor de retransmisión como se muestra a continuación. \x0d\homeserver ~$ ssh-fn-r 10022:localhost:22 Relayserver_user@1.1.1\x0d\El puerto aquí es 10022. Sólo asegúrese de que el puerto no esté siendo utilizado por otros programas en el servidor de retransmisión. \ x0d \ La opción "-r 10022:localhost:22 " define un túnel inverso. Reenvía el tráfico a través del puerto 1022 del servidor de retransmisión al puerto 22 del servidor doméstico. \x0d\ Si usa la opción "-fN", SSH pasará directamente a segundo plano una vez que se haya autenticado exitosamente e haya iniciado sesión en el servidor SSH. Esta opción es útil si no desea ejecutar ningún comando en el servidor SSH remoto y solo desea reenviar el puerto, como en el ejemplo de este artículo. \x0d\Después de ejecutar el comando anterior, regresará directamente al símbolo del sistema del servidor doméstico. \x0d\ Inicie sesión en el servidor de retransmisión y verifique que 127.0.0.1:10022 esté vinculado a sshd. En caso afirmativo, significa que el túnel inverso se ha establecido correctamente. \x0d\relayserver~ $ sudonestat-nap | grep 10022 \x0d\TCP 00127. 0. 0. 1:10022 0. 0. 0:* escucha 8448. Luego acceda al servidor doméstico como se muestra a continuación. \x0d\relay server ~$ SSH -p 10022 homeserver _ user @ localhost \x0d \Una cosa a tener en cuenta es que la información de inicio de sesión SSH/contraseña que ingrese para localhost debe ser apropiada para el servidor doméstico, no para el servidor de retransmisión, ya que Estás iniciando sesión en el servidor doméstico a través del punto final local del túnel. Por lo tanto, no ingrese la información de inicio de sesión/contraseña del servidor de retransmisión. Después de iniciar sesión correctamente, estará conectado a su servidor doméstico. \x0d\Conéctese directamente al servidor detrás de NAT a través del túnel inverso SSH\x0d\Aunque el método anterior puede conectarse al servidor doméstico detrás de NAT, requiere dos inicios de sesión, primero en el servidor de retransmisión y luego en el servidor doméstico. Esto se debe a que el punto final del túnel SSH en el servidor de retransmisión está vinculado a la dirección de loopback (127.0.0.1). \x0d\Pero, de hecho, siempre que inicie sesión en el servidor de retransmisión una vez, puede conectarse directamente al servidor doméstico detrás de NAT. Para hacer esto, necesita tener sshd en los puertos de reenvío del servidor de retransmisión no solo desde la dirección de loopback, sino también desde el host externo. Esto se puede lograr especificando la opción GatewayPorts en sshd que se ejecuta en el servidor de retransmisión. \x0d\Abra el /etc/ssh/sshd_conf del servidor de retransmisión y agregue las siguientes líneas.

¿Cómo acceder a un servidor Linux detrás de NAT a través de un túnel SSH inverso? Además del reenvío de puertos SSH, otro método es el túnel inverso SSH. El concepto de túnel inverso SSH es realmente muy simple. Para hacer esto, necesita tener otro host fuera de su red doméstica restringida, un llamado "host de retransmisión" al que pueda conectarse mediante SSH desde su ubicación. Puede utilizar una instancia de servidor privado virtual (VPS) con una dirección IP pública para configurar un host de retransmisión. Luego, todo lo que necesita hacer es configurar un túnel SSH persistente desde un servidor en su red doméstica hasta un host de retransmisión público. A través de este túnel puede conectarse "de regreso" desde el host de retransmisión al servidor doméstico (por eso se llama túnel "inverso"). No importa dónde se encuentre ni cuán restrictivo sea el NAT o el firewall en su red doméstica, siempre que pueda conectarse al host de retransmisión, podrá conectarse al servidor doméstico. \x0d\ Configurando un túnel inverso SSH en Linux \x0d\ Veamos cómo configurar y usar un túnel inverso SSH. Suponemos la siguiente configuración. Construiremos un túnel inverso SSH desde el servidor doméstico al servidor de retransmisión para que podamos enviar SSH al servidor doméstico desde otra computadora llamada computadora cliente a través del servidor de retransmisión. La dirección IP pública del servidor de retransmisión es 1.1.1.1. \x0d\En el servidor doméstico, abra una conexión SSH al servidor de retransmisión como se muestra a continuación. \x0d\homeserver ~$ ssh-fn-r 10022:localhost:22 Relayserver_user@1.1.1\x0d\El puerto aquí es 10022. Sólo asegúrese de que el puerto no esté siendo utilizado por otros programas en el servidor de retransmisión. \ x0d \ La opción "-r 10022:localhost:22 " define un túnel inverso. Reenvía el tráfico a través del puerto 1022 del servidor de retransmisión al puerto 22 del servidor doméstico. \x0d\ Si usa la opción "-fN", SSH pasará directamente a segundo plano una vez que se haya autenticado exitosamente e haya iniciado sesión en el servidor SSH. Esta opción es útil si no desea ejecutar ningún comando en el servidor SSH remoto y solo desea reenviar el puerto, como en el ejemplo de este artículo. \x0d\Después de ejecutar el comando anterior, regresará directamente al símbolo del sistema del servidor doméstico. \x0d\ Inicie sesión en el servidor de retransmisión y verifique que 127.0.0.1:10022 esté vinculado a sshd. En caso afirmativo, significa que el túnel inverso se ha establecido correctamente. \x0d\relayserver~ $ sudonestat-nap | grep 10022 \x0d\TCP 00127. 0. 0. 1:10022 0. 0. 0:* escucha 8448. Luego acceda al servidor doméstico como se muestra a continuación. \x0d\relay server ~$ SSH -p 10022 homeserver _ user @ localhost \x0d \Una cosa a tener en cuenta es que la información de inicio de sesión SSH/contraseña que ingrese para localhost debe ser apropiada para el servidor doméstico, no para el servidor de retransmisión, ya que Estás iniciando sesión en el servidor doméstico a través del punto final local del túnel. Por lo tanto, no ingrese la información de inicio de sesión/contraseña del servidor de retransmisión. Después de iniciar sesión correctamente, estará conectado a su servidor doméstico. \x0d\Conéctese directamente al servidor detrás de NAT a través del túnel inverso SSH\x0d\Aunque el método anterior puede conectarse al servidor doméstico detrás de NAT, requiere dos inicios de sesión, primero en el servidor de retransmisión y luego en el servidor doméstico. Esto se debe a que el punto final del túnel SSH en el servidor de retransmisión está vinculado a la dirección de loopback (127.0.0.1). \x0d\Pero, de hecho, siempre que inicie sesión en el servidor de retransmisión una vez, puede conectarse directamente al servidor doméstico detrás de NAT. Para hacer esto, necesita tener sshd en los puertos de reenvío del servidor de retransmisión no solo desde la dirección de loopback, sino también desde el host externo. Esto se puede lograr especificando la opción GatewayPorts en sshd que se ejecuta en el servidor de retransmisión. \x0d\Abra el /etc/ssh/sshd_conf del servidor de retransmisión y agregue las siguientes líneas.

\x0d\relayserver~$vi/etc/ssh/sshd_conf\x0d\gateway port client-specific\x0d\restart sshd. \x0d\ Sistemas basados ​​en Debian: \ x0d \ server de retransmisión ~ $ sudo/etc/init . d/SSH restart \ x0d \ Sistemas basados ​​en Red Hat: \ Es mejor establecer un túnel inverso SSH desde el servidor doméstico, ya que se muestra en la siguiente figura. \x0d\homeserver ~$ SSH-fn -r 1.1.1:10022:localhost:22 reléserver_user@1.1.65438. \ x0d \ Relay Server ~ $ sudo netstat-nap | grep 10022 \ x0d \ TCP 0 0 1.1.1:10022 0.0:* listening 1538/sshd:dev \ x0d \ A diferencia de antes, el punto final del túnel ahora es 1. Esto significa que puede conectarse al punto final del túnel desde un host externo. \x0d\ Ahora puede acceder a su servidor doméstico detrás de NAT ingresando el siguiente comando desde cualquier otra computadora, como la computadora cliente. \x0d\Computadora cliente~$ ssh-p 65438+homeserver_user@1.1\x0d\En el comando anterior, aunque 1.1.65438 esto se debe a que el host en el que realmente inició sesión es el servidor doméstico, no el servidor de retransmisión. Este último simplemente transmite su tráfico SSH a su servidor doméstico. \x0d\Estableciendo un túnel inverso SSH persistente en Linux\x0d\ Creo que ya sabes cómo establecer un túnel inverso SSH. Ahora también puede hacer que el túnel sea "persistente" para que esté activo y funcionando en cualquier momento (sin importar qué: congestión temporal de la red, tiempo de espera de SSH o reinicio del host de retransmisión, etc., después de todo, si el túnel no). No siempre te levantas, no puedes conectarte de manera confiable al servidor doméstico. \x0d\Para establecer un túnel persistente, quiero usar una herramienta llamada autossh. Como sugiere el nombre, este programa le permite reiniciar automáticamente su sesión SSH si se desconecta por algún motivo. Por lo tanto, es útil mantener persistente el túnel inverso SSH. \x0d\El primer paso es establecer un mecanismo de inicio de sesión SSH sin contraseña para iniciar sesión desde el servidor doméstico al servidor de retransmisión. En este caso, autossh puede reiniciar el túnel inverso ssh roto sin la intervención del usuario. \x0d\A continuación, instale autossh en el servidor doméstico donde está habilitado el túnel. \x0d\ Ejecute autossh desde el servidor maestro con las siguientes variables para establecer un túnel ssh permanente al servidor de retransmisión. \x0d\homeserver ~ $ auto shh-M 10900-fN-o " autenticación de clave pública = yes "-o " StrictHostKeyChecking = false "-o " autenticación de contraseña = no "-o " servidor activo Intervalo 60 "-o " ServerAliveCountMax 3 " -R 1.1.1.1:10022:localhost:22 servidor de retransmisión Este puerto no debe ser utilizado por ningún programa en el servidor de retransmisión. La opción \x0d \"-fn\" se pasa al comando ssh para que el túnel SSH pueda ejecutarse en segundo plano. \x0d\ La opción "-oxxxxx " le indica a ssh que haga lo siguiente:\x0d\? Utilice autenticación de clave en lugar de autenticación de contraseña. \x0d\? Acepte automáticamente claves de host SSH (desconocidas). \x0d\? Los mensajes de mantenimiento se intercambian cada 60 segundos. \x0d\? Envía hasta 3 mensajes de conexión persistentes y no acepta ninguna respuesta.