Túnel SSH para escritorio remoto a través del servidor intermedio Parte II


10

Me pregunté previamente cómo configurar 2 túneles SSH usando un servidor intermediario con el fin de ejecutar de escritorio remoto a través de ellos y me las arreglé para hacer que funcione. Ahora, estoy tratando de hacer lo mismo, usando las mismas máquinas, pero en orden inverso. Aquí está la configuración:

  1. PC con Windows 7 en una red privada, sentado detrás de un firewall.
  2. Servidor Linux de acceso público, que tiene acceso a la PC.
  3. Computadora portátil con Windows 7, en casa, en la que deseo hacer Escritorio remoto desde la PC.

Yo uso masilla en la computadora portátil para crear un túnel inverso de ella al servidor Linux: R60666 localhost:3389.

Yo uso masilla en el PC para crear un túnel normal de la misma para el servidor Linux: L60666 localhost:60666.

I SSH al servidor Linux y ejecuto telnet localhost 60666 y parece producir el resultado esperado, como se describe en los consejos de depuración que recibí aquí .

Trato de conectar a Escritorio remoto desde el PC a la computadora portátil: localhost:60666. Pide mi nombre de usuario y contraseña, hago clic en Aceptar y bloquea mi sesión actual en la computadora portátil (así que veo la pantalla de bienvenida en la computadora portátil en lugar de mi escritorio), muestra el mensaje "Bienvenido" en la pantalla del Escritorio remoto y luego solo se pone negro. No se desconecta, no proporciona ningún error y no puedo realizar ninguna acción en la pantalla de Escritorio remoto. Intenté la misma configuración con una computadora portátil con Windows XP y estoy experimentando los mismos síntomas. También intenté usar puertos diferentes a 60666, pero nada cambió. ¿Alguien tiene alguna idea de lo que estoy haciendo mal?


Actualización : como señaló @jwinders, no puedo ejecutarlo telnet PC 3389directamente desde el servidor Linux. Dado que Windows Firewall tiene una regla para permitir todas las conexiones en el puerto 3389, no tengo idea de qué lo está bloqueando. Afortunadamente, puedo crear un túnel SSH desde la máquina Linux a la PC ssh 3389:localhost:3389 'domain\user'@PC.


En serio, solo usaría GoToMyPC en ese punto.
ewwhite

1
@ewwhite No veo ninguna razón por la que no pueda usar la configuración que describí. Incluso si hay soluciones más simples (que requieren la participación de otro tercero), considero que este es un desafío interesante.
Mihai Todor

1
Esta es una publicación muy variada, pero el problema aún existe, y es bastante frustrante que todas las respuestas parecen perder el punto. La conexión se puede iniciar, pero se interrumpe un segundo después de comenzar. El comentario de que "iniciar sesión a través de rdp interrumpirá esa conexión" parece coherente con lo que se observa, pero no responde por qué ni sugiere una solución.
rhermans

Respuestas:


3

Hoy mismo me encontré con el mismo problema de pantalla negra + desconexión, usando masilla como cliente. Finalmente encontré una solución .

Cambié de masilla a bitvise tunnelier y configuré una S2Cconexión con la siguiente configuración:

listen if:0.0.0.0
listen port:13389
destination host:localhost
dest port:3389

Por casualidad, estoy usando el servidor bitvise ssh en mi servidor, por lo que esta puede ser una combinación feliz para dos productos fabricados por el mismo proveedor. Sería genial si esto resuelve los problemas de los demás.

Para el registro, no estoy afiliado con estos tipos de ninguna manera.


2

No veo nada malo con sus túneles SSH. Conectando a localhost: 60666 en la PC debería terminar en localhost: 3389 en la computadora portátil. Y el hecho de que obtenga una pantalla de inicio de sesión confirma esta evaluación.

Un poco de google en la pantalla en blanco me lleva a este artículo de la base de conocimiento de Microsoft: http://support.microsoft.com/kb/555840 . Indica que una pantalla en blanco podría deberse a posibles desajustes de tamaño de MTU:

Verifique que el servidor, el cliente y el equipo de red utilicen el tamaño "MTU".

Dada la cantidad justa de saltos de red, firewalls y lo que tiene, es muy probable que la fragmentación de paquetes :) La mayoría de las máquinas Windows usan una MTU de 1300 por defecto, mientras que la mayoría de las cajas de Linux tienen 1500 (el valor máximo permitido para LAN, sin tener en cuenta las tramas gigantes) ) Puede intentar reducirlos para reducir la fragmentación.

Ver también:


1
Gracias por el consejo, pero, desafortunadamente, no funciona. La MTU tanto en mi computadora portátil como en la PC está configurada en 1500 ( netsh interface ipv4 show subinterfaces) y ping linux_server -f -l 1472tiene éxito en ambas máquinas. Solo como prueba, traté de configurar la MTU en la PC a 1300, pero no me ayudó. También intenté cambiarlo en la computadora portátil, pero fue en vano :( Me pregunto si hay alguna forma "más inteligente" de depurar este problema ...
Mihai Todor

1

¿No sería una VPN más apropiada? OpenVPN es muy simple de configurar. Aquí hay una configuración de muestra y algunos enlaces para guiarlo a través del proceso de creación del certificado.

Simplemente configure el intermediario para que sea el host, y los invitados pueden marcar y comunicarse entre sí.

apt-get install openvpn
mkdir /etc/openvpn/easy-rsa
mkdir -p /etc/openvpn/ccd/client_server
touch /etc/openvpn/ipp.txt
cp /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa
cd /etc/openvpn/easy-rsa
source ./vars
./clean-all
./build-ca 
./build-key-server server
./build-dh
cd /etc/openvpn/easy-rsa/keys
openssl pkcs12 -export -out server.p12 -inkey server.key -in server.crt -certfile ca.crt

Luego cree un nuevo archivo /etc/openvpn/client_server.confy coloque lo siguiente en él, cambiando el SERVER_IP_ADDRESSque corresponda

local SERVER_IP_ADDRESS
port 8443
proto udp
dev tun
ca /etc/openvpn/easy-rsa/keys/ca.crt
pkcs12 /etc/openvpn/easy-rsa/keys/server.p12
dh /etc/openvpn/easy-rsa/keys/dh2048.pem
ifconfig-pool-persist /etc/openvpn/ipp.txt
server 192.168.100.0 255.255.255.0
client-config-dir /etc/openvpn/ccd/client_server
ccd-exclusive
keepalive 10 120
comp-lzo
persist-key
persist-tun
status /var/log/openvpn-status.log
verb 3
reneg-sec 0
client-to-client

Luego, cree una clave por usuario que se va a conectar y cree el archivo de configuración en el directorio ccd

./build-key-pkcs12 user1@domain.com
echo "ifconfig-push 192.168.100.2 255.255.255.0" > /etc/openvpn/ccd/client_server/user1@domain.com

La dirección IP DEBE ser adecuada para una subred / 30 (consulte http://www.subnet-calculator.com/cidr.php ), ya que solo hay 2 direcciones disponibles (servidor y cliente) por conexión. Entonces su próxima IP de cliente disponible sería 192.168.100.6 y así sucesivamente.

Entonces ahora tiene IP estáticas por usuario conectado.

Luego proporcione el the user1@domain.com.p12archivo al usuario final y use el siguiente archivo de configuración

client
dev tun
proto udp
remote SERVER_IP_ADDRESS 8443
pkcs12 user1@domain.com.p12
resolv-retry infinite
nobind
ns-cert-type server
comp-lzo
verb 3
reneg-sec 0

1
Bueno, sí, esto podría funcionar, pero no tengo el acceso requerido en la caja de Linux para instalar cosas :( Aún así, encuentro todo extremadamente frustrante, porque funciona en una dirección y falla en la opuesta.
Mihai Todor

1

Si está ejecutando la sesión ssh dentro de la cuenta de usuario (usando un programa como putty.exe), cuando intenta iniciar sesión a través de rdp, se interrumpirá esa conexión y se interrumpirá la sesión de rdp. Lo que debe hacer es ejecutar el túnel ssh como un servicio que no se interrumpirá.


1
Interesante. Ya no tengo acceso a esa configuración, por lo que no podré probar su teoría, pero sería bueno obtener algunos detalles adicionales sobre esto para otras personas que enfrentan el mismo problema. ¿Tiene alguna referencia para sus reclamos? ¿Qué quieres decir con la conexión interrumpida por Putty?
Mihai Todor

0

Creo que puedes hacer todas las configuraciones desde tu laptop

configurar una conexión de masilla a la caja de Linux en su computadora portátil. luego en 'conexión'> 'SSH'> 'túneles' coloque 60666 en el campo 'puerto de origen' y asegúrese de que esté seleccionado el botón de radio Local. en el 'destino' ingrese win7-box-name-or-ip: 3389.

guarde todo eso y debería permitirle abrir una sesión de masilla en linux-box que crea automáticamente un túnel que reenvía el tráfico a localhost (su computadora portátil): 60666 a win7: 3389

si está haciendo esto en la línea de comando, debería ser algo como

ssh -L60666:win7:3389 linux-box

1
Entonces, veamos ... Esta configuración debe reenviar el puerto 3389 de la PC al puerto 60666 en la computadora portátil. Sin embargo, no veo cómo funcionará esto y, en cualquier caso, no me permitirá hacer un escritorio remoto en la computadora portátil ... Por lo que no puedo decir, debe hacerse usando 2 túneles
Mihai Todor

con este conf, no puedes rdp a localhost: 60666 en tu computadora portátil?
jwinders

No, no funciona.
Mihai Todor

1
Eso no funciona La única forma en que puedo hacer eso es establecer primero un túnel desde la caja de Linux a la PC ssh 3389:localhost:3389 'domain\user'@PCy luego hacerlo telnet localhost 3389en la caja de Linux.
Mihai Todor

1
Ese es un punto interesante, pero no estoy seguro de entender lo que lo está bloqueando. El Firewall de Windows tiene una regla que permite explícitamente todas las conexiones en el puerto 3389 desde el dominio.
Mihai Todor

0

Descubrí que a menos que todos los usuarios se desconectaran por completo de la máquina, obtendría una pantalla en blanco después de ingresar las credenciales. Por lo tanto, asegúrese de cerrar sesión siempre.


2
Buen intento, pero aún sin suerte :(
Mihai Todor
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.