Kategorie szkoleń | Egzaminy | Kontakt
  • 6
  • 13
  • 300

Hej.

Może zarysuję sytuację:

1. Mam serwer w firmie z zewnętrznym IP.
2. Mam serwer w domu bez zewnętrznego IP

Chciałbym się łączyć z internetu bezpośrednio do serwera w domu z wykorzystaniem serwera w pracy. To co teraz mi się udało, to otworzenie tunelu w taki sposób:

ssh -f -NT -R 2022:localhost:22 użytkownik@adres_serwera_w_pracy

dzięki temu mogę się połączyć do serwera w domu, ale pośrednio to znaczy:

1. ssh użytkownik@adres_serwera_w_pracy
2. ssh -p 2022 użytkownik@localhost

Natomiast chciałbym się łączyć bezpośredio np. w taki sposób:

ssh użytkownik@adres_serwera_w_pracy -p 2022

Próbowałem kombinować z opcją -L, ale coś mi nie wychodzi ... Czy ktoś wie jak wykonać taki tunel (tunele)?

Michal_Podgorski
  • Zapytał
  • @ Michal_Podgorski | 08.04.2014
    • 8
    • 10
    • 13

Odpowiedzi (6)

  • 9

Musisz w firmie ustawić w /etc/ssh/sshd_conf GatewayPorts na "yes", albo "clientspecified". W tym drugim przypadku łączysz się z opcją -R *:2022:127.0.0.1:22. Zamaist * możę być ip konkretnego interface'u na którym sshd ma nasłuchiwać połączeń.

Piotr_Stygar
  • Odpowiedział
  • @ Piotr_Stygar | 08.04.2014
    • 6
    • 12
    • 7
  • 6

pierwsza moja wątpliwość dotyczy "bez zewnętrzengo ip" jeżeli ip przyznawane jest dynamicznie to przy zmianie twojego IP, którym wychodzisz do internetu (w domu) tunel się złoży i nie będzie komunikacji. 

Nie jestem pewien, ale powinno zadziałać

wykonujesz to na serverze w pracy

 

ssh  -N -L 1055:<localhost>:22 <zdalny host>

 

Po tym poleceniu będzie on nasłuchiwał na porcie 1055 i przekaże połączenie do zdalnego hosta na port 22 

logując się 

 

ssh użytkownik@adres_serwera_w_pracy -p 1055

Powinieneś dotrzeć do serwera w domu . 

 

Michał_Zaborowicz
  • Odpowiedział
  • @ Michał_Zaborowicz | 08.04.2014
    • lider
    • laureat
    • 13
    • 16
    • 71
Komentarze
<zdalny host>, czyli niewiadomoco, bo ip zmienne - pomysł Michała (P) jest dorby bo w domu nie musi mieć nawet publicznego IP - zadziała zza NAT'a
Skomentował : @ Piotr_Stygar ,08.04.2014
  • 6
  • 12
  • 7
  • 13

Michał (P) ma dobrze zestawiony tunel, tylko sshd domyślnie nie pozwala na bindownie do innych interfejsów niż loopback. Zmiana opcji GatewayPorts w sshd_conf pozwoli na zbindowanie do dowolnego interfejsu, a tym samym połączenie bezpośrednie.

Natomiast jeżeli chodzi o odnawianie połączenia to inna para kaloszy i należałoby zadbać o jakiś skrypt który podniesie tunel po zerwaniu połączenia. Inne pytanie które się nasuwa - czy nie lepiej postawić OpenVPN'a :-)

Piotr_Stygar
  • Odpowiedział
  • @ Piotr_Stygar | 08.04.2014
    • 6
    • 12
    • 7
Komentarze
ok , ale skąd będziesz wiedział jaki IP został przyznany po drugiej stronie ?
Skomentował : @ Michał_Zaborowicz ,08.04.2014
  • 13
  • 16
  • 71
Co masz na myśli? W pracy jest stały IP, tunel zestawiasz do localhost:22 na serwerze z domu do 2022 na serwerze firmowym ze stałym ip - dlatego musisz użyć remote forwording (-R) na kompie w domu a nie local forwarding (-L) na kompie w pracy. Nie musisz w tym wypadku znać zmiennego ip komputera domowego.
Skomentował : @ Piotr_Stygar ,08.04.2014
  • 6
  • 12
  • 7
fakt, cały czas o -L myślałem .
Skomentował : @ Michał_Zaborowicz ,08.04.2014
  • 13
  • 16
  • 71
  • 6

Hej

Dobra tochę uściślę. Serwer w pracy to router z openwr. Za serwer ssh odpowiada dropbear i konfiguracja jest następująca:

config dropbear 'global'
	option PasswordAuth 'on'
	option Port '22'
	option max_remote_attempts '10'
	option GatewayPorts '1'

Serwer w domu to CentOS 6.5, a co do zmiennego IP to nie problem zgodnie z inną stroną można stworzyć skrypt:

    #!/bin/sh
    T="ssh -f -NT -R 2022:localhost:22 użytkownik@adres_serwera_w_pracy"
    pgrep -f "$T" > /dev/null 2>&1 || $T

I dodać go do crona co np. 5min

Co do:

1 ssh  -N -L 1055:<localhost>:22 <zdalny host>

To próbowałem otwierać tunel po tunel (wsteczny po już istniejącym) ale to też nie zadziałało ...

Michal_Podgorski
  • Odpowiedział
  • @ Michal_Podgorski | 08.04.2014
    • 8
    • 10
    • 13
  • 9

Spróbuj zestawić tunel -R 0.0.0.0:2022:127.0.0.1:22  - powinno słuchać na wszystkich interfejsach. Jesteś pewien, że GatewayPorts może mieć wartość "1" w Dropbearz'e? W sshd może mieć wartość 'no', 'yes', 'clientspecified'.

Piotr_Stygar
  • Odpowiedział
  • @ Piotr_Stygar | 08.04.2014
    • 6
    • 12
    • 7
Komentarze
dzięki.
Skomentował : @ Michal_Podgorski ,08.04.2014
  • 8
  • 10
  • 13
  • 6

Piotr wielkie dzięki :) tereaz wszystko działa :D

ssh -f -NT -R 0.0.0.0:2022:localhost:22 użytkownik@adres_serwera_w_pracy

Co do GatewayPorts na dropbear: http://wiki.openwrt.org/doc/uci/dropbear

Do tego trzeba pamiętać o odblokowaniu portu w firewall'u :D

Teraz mogę się łączyć do serwera w domu bezpośrednio dzięki raz jeszcze:)

Michal_Podgorski
  • Odpowiedział
  • @ Michal_Podgorski | 08.04.2014
    • 8
    • 10
    • 13
Komentarze