Tunel SSH do zdalnego pulpitu za pośrednictwem serwera pośredniczącego, część II

10

Ja zapytałem wcześniej jak skonfigurować 2 tuneli SSH przy użyciu serwera pośredniczącego w celu uruchomienia zdalnego pulpitu przez nich i udało mi się tego dokonać. Teraz próbuję zrobić to samo, używając tych samych maszyn, ale w odwrotnej kolejności. Oto konfiguracja:

  1. Komputer z systemem Windows 7 w sieci prywatnej, siedzący za zaporą ogniową.
  2. Publiczny dostęp do serwera Linux, który ma dostęp do komputera.
  3. Laptop z systemem Windows 7, w domu, na którym chcę robić Pulpit zdalny z komputera.

Używam Putty na laptopie, aby utworzyć z niej odwrotną tunel do serwera Linux: R60666 localhost:3389.

Używam Putty na komputerze, aby utworzyć z niego regularny tunel do serwera Linux: L60666 localhost:60666.

Włączam SSH do serwera Linux i uruchamiam telnet localhost 60666 i wydaje się, że generuje oczekiwany wynik, jak opisano w poradach dotyczących debugowania, które tutaj otrzymałem .

Staram się połączyć Pulpit zdalny z komputera do laptopa: localhost:60666. Pyta o moją nazwę użytkownika i hasło, klikam OK i blokuje moją bieżącą sesję na laptopie (więc widzę ekran powitalny na laptopie zamiast na pulpicie), wyświetla komunikat „Witamy” na ekranie Pulpitu zdalnego, a następnie po prostu robi się czarny. Nie rozłącza się, nie wyświetla żadnych błędów i nie jestem w stanie wykonywać żadnych czynności na ekranie Pulpitu zdalnego. Próbowałem tej samej konfiguracji na laptopie z systemem Windows XP i mam te same objawy. Próbowałem także użyć innych portów niż 60666, ale nic się nie zmieniło. Czy ktoś ma pojęcie, co robię źle?


Aktualizacja : Jak wskazał @jwinders, nie jestem w stanie uruchomić telnet PC 3389bezpośrednio z serwera Linux. Ponieważ Zapora systemu Windows ma regułę zezwalającą na wszystkie połączenia na porcie 3389, nie mam pojęcia, co ją blokuje. Na szczęście jestem w stanie utworzyć tunel SSH z komputera z systemem Linux na komputer ssh 3389:localhost:3389 'domain\user'@PC.

Mihai Todor
źródło
Poważnie po prostu użyłem GoToMyPC w tym momencie.
ewwhite
1
@ewwhite Nie widzę żadnego powodu, dla którego miałbym nie móc korzystać z opisanej przeze mnie konfiguracji. Nawet jeśli istnieją prostsze rozwiązania (wymagające zaangażowania innej strony trzeciej), uważam to za interesujące wyzwanie.
Mihai Todor
1
Jest to bardzo ciekawy post, ale problem nadal istnieje i jest dość frustrujące, że wszystkie odpowiedzi wydają się nie mieć sensu. Połączenie można zainicjować, ale zrywa ono sekundę po uruchomieniu. Komentarz, że „logowanie przez rdp spowoduje zakłócenie tego połączenia” wydaje się spójny z tym, co zostało zaobserwowane, ale nie odpowiada dlaczego ani nie sugeruje rozwiązania.
rhermans

Odpowiedzi:

3

Sam dzisiaj spotkałem ten sam problem z czarnym ekranem + rozłączanie, używając szpachli jak mojego klienta. W końcu znalazłem rozwiązanie .

Przełączyłem się z Kit na Bitvise Tunelier i skonfigurowałem S2Cpołączenie z następującymi ustawieniami:

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

Tak się składa, że ​​używam serwera bitvise ssh na moim serwerze, więc może to być po prostu szczęśliwa kombinacja dwóch produktów tego samego dostawcy. Byłoby wspaniale, gdyby rozwiązało to problemy dla innych.

Dla przypomnienia, nie jestem w żaden sposób związany z tymi facetami.

jaspis
źródło
2

Nie widzę nic złego w twoich tunelach SSH. Połączenie z localhost: 60666 na PC powinno kończyć się na localhost: 3389 na laptopie. Otrzymanie ekranu logowania potwierdza tę ocenę.

Trochę googlowania na pustym ekranie zabiera mnie do tego artykułu z bazy wiedzy Microsoft Knowledge Base: http://support.microsoft.com/kb/555840 . Stwierdza, że ​​pusty ekran może wynikać z możliwych niedopasowań rozmiaru MTU:

Sprawdź, czy serwer, klient i sprzęt sieciowy używają rozmiaru „MTU”.

Biorąc pod uwagę spore ilości przeskoków sieciowych, zapór ogniowych i tego, co masz, fragmentacja pakietów jest całkiem prawdopodobna :) Większość komputerów z systemem Windows domyślnie korzysta z MTU 1300, podczas gdy większość urządzeń Linux ma 1500 (maksymalna dozwolona wartość dla sieci LAN, nie biorąc pod uwagę dużych ramek) ). Możesz spróbować obniżyć je, aby zmniejszyć fragmentację.

Zobacz też:

basvdlei
źródło
1
Dzięki za wskazówkę, ale niestety to nie pomaga. MTU na moim laptopie i komputerze są ustawione na 1500 ( netsh interface ipv4 show subinterfaces) i odnoszą ping linux_server -f -l 1472sukcesy na obu komputerach. W ramach testu próbowałem ustawić MTU na PC na 1300, ale to nie pomogło. Próbowałem też to zmienić również na laptopie, ale bezskutecznie :( Zastanawiam się, czy jest jakiś „mądrzejszy” sposób na debugowanie tego problemu ...
Mihai Todor
1

Czy VPN nie byłby bardziej odpowiedni? OpenVPN jest bardzo prosty w konfiguracji. Oto przykładowa konfiguracja i kilka linków prowadzących przez proces tworzenia certyfikatu.

Wystarczy skonfigurować pośrednika, aby był gospodarzem, a goście mogą się nawiązywać i nadal się ze sobą komunikować.

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

Następnie utwórz nowy plik /etc/openvpn/client_server.confi umieść w nim następujące elementy, zmieniając SERVER_IP_ADDRESSodpowiednio

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

Następnie zbuduj klucz dla każdego użytkownika, który ma się połączyć, i utwórz plik konfiguracyjny w katalogu ccd

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

Adres IP MUSI być odpowiedni dla podsieci / 30 (patrz http://www.subnet-calculator.com/cidr.php ), ponieważ dostępne są tylko 2 adresy (serwer i klient) na połączenie. Twój następny dostępny adres IP klienta to 192.168.100.6 i tak dalej.

Następnie masz statyczne adresy IP na podłączającego użytkownika.

Następnie dostarcz the [email protected]plik do użytkownika końcowego i użyj następującego pliku konfiguracyjnego

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
źródło
1
Cóż, tak, to może działać, ale nie mam wymaganego dostępu do Linux-a, aby zainstalować rzeczy :( Mimo wszystko uważam, że jest to bardzo frustrujące, ponieważ działa w jednym kierunku, a nie w drugim.
Mihai Todor
1

Jeśli uruchamiasz sesję ssh na koncie użytkownika (używając programu takiego jak putty.exe), próba zalogowania się za pośrednictwem rdp spowoduje zakłócenie tego połączenia, powodując zerwanie sesji rdp. Co musisz zrobić, to uruchomić tunel ssh jako usługę, która nie zostanie przerwana.

znak
źródło
1
Ciekawy. Nie mam już dostępu do tej konfiguracji, więc nie będę w stanie przetestować twojej teorii, ale byłoby miło uzyskać dodatkowe informacje na ten temat dla innych osób, które borykają się z tym samym problemem. Czy masz jakieś odniesienia do swoich roszczeń? Co rozumiesz przez zakłócenie połączenia przez Putty?
Mihai Todor
0

myślę, że możesz wykonać wszystkie zadania z laptopa

skonfiguruj połączenie szpachlowe z linuksem na swoim laptopie. następnie w „połączenie”> „SSH”> „tunele” wpisz 60666 w polu „port źródłowy” i upewnij się, że jest zaznaczony lokalny przycisk opcji. w „miejscu docelowym” wpisujesz win7-box-name-or-ip: 3389.

zapisz to wszystko i powinno to pozwolić ci otworzyć sesję putty na Linux-boxie, która automatycznie tworzy ruch przekierowujący tunel do localhost (twój laptop): 60666 do win7: 3389

jeśli robisz to w linii poleceń, powinno to być coś w rodzaju

ssh -L60666:win7:3389 linux-box
jwinders
źródło
1
Zobaczmy więc ... Ta konfiguracja powinna przekierować port 3389 z komputera na port 60666 na laptopie. Nie wiem jednak, jak to będzie działać, a w każdym razie nie pozwoli mi to zrobić zdalnego pulpitu na laptopie ... O ile nie wiem, trzeba to zrobić za pomocą 2 tunele.
Mihai Todor
z tym confem nie możesz rdp na localhost: 60666 na swoim laptopie?
jwinders
Nie, to nie działa.
Mihai Todor,
1
To nie działa. Jedyny sposób, w jaki mogę to zrobić, to najpierw założyć tunel z pudełka z linuksem na PC, ssh 3389:localhost:3389 'domain\user'@PCa następnie zrobić to telnet localhost 3389na Linuxie.
Mihai Todor
1
To interesujący punkt, ale nie jestem pewien, czy rozumiem, co go blokuje. Zapora systemu Windows ma regułę, która wyraźnie zezwala na wszystkie połączenia na porcie 3389 z domeny.
Mihai Todor
0

Odkryłem, że jeśli wszyscy użytkownicy nie zostaną całkowicie wylogowani z komputera, po wprowadzeniu poświadczeń dostanę pusty ekran. Upewnij się, że zawsze się wylogowujesz.

Jonathan Lloyd
źródło
2
Niezła próba, ale wciąż bez powodzenia :(
Mihai Todor,