Túnel SSH para área de trabalho remota via servidor intermediário, parte II

10

Eu perguntei anteriormente como configurar 2 túneis SSH usando um servidor intermediário para executar Remote Desktop através deles e eu consegui fazê-lo funcionar. Agora, estou tentando fazer o mesmo, usando as mesmas máquinas, mas na ordem inversa. Aqui está a configuração:

  1. PC com Windows 7 em uma rede privada, sentado atrás de um firewall.
  2. Servidor Linux de acesso público, que tem acesso ao PC.
  3. Laptop Windows 7, em casa, no qual desejo executar a Área de trabalho remota a partir do PC.

Eu uso Putty no laptop para criar um túnel reverso a partir dele para o servidor Linux: R60666 localhost:3389.

Eu uso Putty no PC para criar um túnel regular a partir para o servidor Linux: L60666 localhost:60666.

Eu SSH para o servidor Linux e executo telnet localhost 60666 e parece produzir a saída esperada, conforme descrito nas dicas de depuração que recebi aqui .

Eu tento ligar o Remote Desktop do PC para o laptop: localhost:60666. Ele pede meu nome de usuário e senha, clico em OK e bloqueia minha sessão atual no laptop (para que eu veja a tela de boas-vindas no laptop em vez da área de trabalho), mostra a mensagem "Bem-vindo" na tela da Área de Trabalho Remota e depois apenas fica preto. Ele não é desconectado, não fornece nenhum erro e não consigo executar nenhuma ação na tela da Área de trabalho remota. Tentei a mesma configuração com um laptop com Windows XP e estou com os mesmos sintomas. Também tentei usar portas diferentes das 60666, mas nada mudou. Alguém tem alguma idéia do que estou fazendo de errado?


Atualização : Como apontado por @jwinders, não consigo executar telnet PC 3389diretamente do servidor Linux. Como o Firewall do Windows possui uma regra para permitir todas as conexões na porta 3389, não faço ideia do que está bloqueando. Felizmente, sou capaz de criar um túnel SSH da máquina Linux para o PC ssh 3389:localhost:3389 'domain\user'@PC.

Mihai Todor
fonte
Eu seriamente apenas usava o GoToMyPC nesse ponto.
ewwhite
1
@whwhite Não vejo nenhuma razão para não poder usar a configuração que descrevi. Mesmo que haja soluções mais simples (que exijam a participação de terceiros), considero que este é um desafio interessante.
21312 Mihai Todor
1
Este é um post muito antigo, mas o problema ainda existe, e é bastante frustrante que todas as respostas pareçam entender o assunto. A conexão pode ser iniciada, mas é interrompida um segundo após o início. O comentário de que "o login via rdp interromperá a conexão" parece coerente com o que é observado, mas não responde por que nem sugere uma solução.
rhermans

Respostas:

3

Encontrei o mesmo problema de tela preta + desconexão hoje, usando a massa como meu cliente. Eu encontrei uma solução eventualmente.

Eu mudei de putty para bitvise tunnelier e configurei uma S2Cconexão com as seguintes configurações:

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

Por acaso, estou usando o servidor bitvise ssh no meu servidor, portanto essa pode ser apenas uma combinação feliz para dois produtos fabricados pelo mesmo fornecedor. Seria ótimo se isso resolver os problemas para os outros.

Para o registro, eu não sou afiliado a esses caras de forma alguma.

jaspe
fonte
2

Não vejo nada de errado com seus túneis SSH. A conexão ao localhost: 60666 no PC deve terminar em localhost: 3389 no laptop. E o fato de você estar recebendo uma tela de login confirma essa avaliação.

Um pouco de pesquisa na tela em branco me leva a este artigo da base de conhecimento da Microsoft: http://support.microsoft.com/kb/555840 . Ele afirma que uma tela em branco pode devido a possíveis incompatibilidades de tamanho da MTU:

Verifique se o servidor, o cliente e o equipamento de rede usando o tamanho "MTU".

Dadas as quantidades razoáveis ​​de saltos de rede, firewalls e o que você tem, é bem provável que a fragmentação de pacotes :) A maioria das máquinas Windows usa uma MTU de 1300 por padrão, enquanto a maioria das caixas Linux tem 1500 (o valor máximo permitido para a LAN, sem considerar os jumbo-frames) ) Você pode tentar reduzi-los para reduzir a fragmentação.

Veja também:

basvdlei
fonte
1
Obrigado pela dica, mas, infelizmente, não funciona. O MTU no meu laptop e no PC está definido como 1500 ( netsh interface ipv4 show subinterfaces) e ping linux_server -f -l 1472é bem-sucedido nas duas máquinas. Apenas como teste, tentei configurar o MTU no PC para 1300, mas não ajudou. Eu também tentei mudar isso no laptop, bem como, mas sem sucesso :( Eu estou querendo saber se há alguma maneira "mais inteligente" para depurar este problema ...
Mihai Todor
1

Uma VPN não seria mais apropriada? O OpenVPN é super simples de configurar. Aqui está um exemplo de configuração e alguns links para guiá-lo através do processo de criação do certificado.

Basta configurar o intermediário para ser o host, e os convidados podem discar e ainda se comunicar.

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

Em seguida, crie um novo arquivo /etc/openvpn/client_server.confe coloque o seguinte, alterando o SERVER_IP_ADDRESSconforme apropriado

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

Em seguida, crie uma chave por usuário que irá se conectar e crie o arquivo de configuração no diretório ccd

./build-key-pkcs12 [email protected]
echo "ifconfig-push 192.168.100.2 255.255.255.0" > /etc/openvpn/ccd/client_server/[email protected]

O endereço IP DEVE ser adequado para uma sub-rede / 30 (consulte http://www.subnet-calculator.com/cidr.php ), pois há apenas 2 endereços disponíveis (servidor e cliente) por conexão. Portanto, seu próximo IP do cliente disponível seria 192.168.100.6 e assim por diante.

Agora você tem IPs estáticos por usuário conectado.

Em seguida, forneça o the [email protected]arquivo ao usuário final e use o seguinte arquivo de configuração

client
dev tun
proto udp
remote SERVER_IP_ADDRESS 8443
pkcs12 [email protected]
resolv-retry infinite
nobind
ns-cert-type server
comp-lzo
verb 3
reneg-sec 0
Ben Lessani - Sonassi
fonte
1
Bem, sim, isso pode funcionar, mas eu não tenho o acesso necessário na caixa Linux para instalar coisas :( Ainda assim, acho tudo extremamente frustrante, porque funciona em uma direção e falha na outra.
18712 Mihai Todor
1

Se você estiver executando a sessão ssh na conta do usuário (usando um programa como o putty.exe), ao tentar fazer login via rdp, isso interromperá a conexão, causando a interrupção da sessão rdp. O que você precisa fazer é executar o túnel ssh como um serviço que não será interrompido.

Marca
fonte
1
Interessante. Como não tenho mais acesso a essa configuração, não poderei testar sua teoria, mas seria bom obter alguns detalhes extras sobre isso para outras pessoas que estão enfrentando o mesmo problema. Você tem alguma referência para suas reivindicações? O que você quer dizer com a conexão ser interrompida por Putty?
Mihai Todor
0

Eu acho que você pode fazer todo o conf do seu laptop

configure uma conexão de massa para a caixa linux no seu laptop. em 'conexão'> 'SSH'> 'túneis', coloque 60666 no campo 'porta de origem' e verifique se o botão de opção Local está selecionado. no 'destino', digite win7-box-name-or-ip: 3389.

salve tudo isso e deverá permitir que você abra uma sessão de massa para linux-box que cria automaticamente um tráfego de encaminhamento de túnel para o host local (seu laptop): 60666 para win7: 3389

se você estiver fazendo isso na linha de comando, deve ser algo como

ssh -L60666:win7:3389 linux-box
jwinders
fonte
1
Então, vamos ver ... Essa configuração deve encaminhar a porta 3389 do PC para a porta 60666 no laptop. Porém, não vejo como isso funcionará e, de qualquer forma, não permitirá que eu trabalhe com a área de trabalho remota no laptop ... Até onde eu não sei dizer, é preciso fazer isso usando 2 túneis.
Mihai Todor
com este conf, você não pode rdp para localhost: 60666 no seu laptop?
jwinders
Não, não funciona.
21312 Mihai Todor
1
Isso não funciona. A única maneira de fazer isso é primeiro estabelecer um túnel da caixa do linux para o PC ssh 3389:localhost:3389 'domain\user'@PCe depois fazer telnet localhost 3389na caixa do Linux.
21312 Mihai Todor
1
Esse é um ponto interessante, mas não sei ao certo o que está impedindo. O Firewall do Windows possui uma regra que permite explicitamente todas as conexões na porta 3389 do domínio.
21712 Mihai Todor
0

Descobri que, a menos que todos os usuários estivessem desconectados completamente da máquina, eu obteria uma tela em branco após inserir credenciais. Portanto, sempre faça logoff.

Jonathan Lloyd
fonte
2
Boa tentativa, mas ainda sem sorte :( #
213 Mihai Todor