Portál AbcLinuxu, 4. května 2024 06:13

SSH Tunneling za NATem...

15.2.2006 20:05 | Přečteno: 2771× | Linux a IT

Takové howto nebo spíš pokus o 'úvod do problematiky psaný poloamatérem'...

Tento zápisek jsem původně psal jenom jako odpověď do diskuze na builderu, nicméně vzhledem k rozsahu, kterého to celé náhle nabobtnalo, byla by škoda to neroztroubit dál. Prosím o případné doplnění, ať z toho třeba někdo něco má...

ANO, JDE TO provozovat prakticky libovolné služby za NATem - jak webový, tak ftp nebo jiný server a JSOU možnosti, kterými se na ně připojí lidi zvenku (za NATem = routerem).

1) Port forwarding na routeru
Obvykle se to dělá tak, že na routeru (=bráně, zařízení provádějící NAT) se nastaví, že třeba příchozí porty 4900-5000/tcp se VŽDY automaticky nasměrují na ten jeden počítač. Tyto porty už ale tím pádem nemůže využívat nikdo jiný z celé podsítě. Toto se dělá třeba ve firmě, kdy máš přístup k routeru a můžeš si to nastavit.

Jiná situace je, pokud je router u provozovatele(ISP). Ten by totiž, pokud by tento port forwarding (přesměrování portů) udělal, omezil ostatní uživatele, že by jim komunikace na těchto portech nefungovala vůbec. S některým poskytovatelem se možná dohodneš, že ti pár portů pevně přesměruje, ale obvykle ne; namísto toho ti nabídne (za příplatek) zřízení vlastní veřejné IP.

Příklad: Počítač s NEveřejnou IP adresou 192.168.0.2, ukrytý za routerem s NATem s VNITŘNÍ IP adresou 192.168.0.1 a VNĚJŠÍ veřejnou IP třeba 1.2.3.4 (=>společnou pro všechny počítače) chce provozovat webový server (na portu 80), připojitelný zvenčí.

Na routeru se nastaví přesměrování, že třeba komunikace z portu 10080 se bude automaticky posílat na počítač s IP 192.168.0.2 na port 80. Potom už kdokoliv zvenčí může zadat http://1.2.3.4:10080 a připojí se na webserver počítače 192.168.0.2:80.

2) SSH Tunneling
Pokud to prostě nejde přesměrovat porty na routeru, dá se použít SSH tunneling. Pro toto je zapotřebí, aby člověk za routerem (192.168.0.2) měl někde v internetu přístup k serveru s veřejnou IP adresou A puštěným ssh daemonem. (což má většina *nixových serverů). Kromě toho musí mít ten server povolená určitá nastavení, ale to už odbočuji.

SSH (Secure Shell) umí totiž mnohem víc věcí než jen šifrovaný remote shell. Jednou z takovýchto věcí je možnost vytvořit mezi serverem a klientem datový tunel schopný přenášet libovolná data (známý je termín VPN-Virtual private network -- tímto se dá také vytvořit). Takže:

Klient (192.168.0.2) se připojí na SSH server (třeba s IP 5.6.7.8), to normálně funguje. Přitom zároveň otevře i další port, který spojí s portem serveru. Takže, kromě shellové komunikace na portu 22 (výchozí pro SSH) se otevře třeba tunel na portech 10000. Výsledek toho všeho by měl být ten, že "remote port forwarding" zajistí, aby při zadání adresy serveru http://5.6.7.8:10000 se data přeposlaly tunelem (trvale otevřeným!) na tentýž port cíle-192.168.0.2.

Pokud u klienta běží Windows, dá se připojení k SSH serveru zařídit buď
- přes PuTTY
- nebo přímo pomocí OpenSSH, a to z CygWinu:

ssh -R 10000:127.0.0.1:10000 -g -n -N username_na_serveru@5.6.7.8

Tento příkaz otevře tunel z 5.6.7.8:10000 na localhost(127.0.0.1), taktéž na 10000/tcp. Webserver ale obvykle běží na portu 80, takže je lepší

ssh -R 10000:127.0.0.1:80 -g -n -N username_na_serveru@5.6.7.8

Stačí zadat heslo k loginu na serveru 5.6.7.8 a tunel běží. Pak by se už mělo dát připojit na webserver zadáním http://5.6.7.8:10000

Problémy vzniknou s těmi "náhodně generovanými" porty ODPOVĚDÍ, ty je třeba taky dobře nastavit (omezit možný rozsah 'náhodnosti', blablabla atd.). Stejná anabáze je u ftp. Prostě to je dost hrůza to všechno zprovoznit. Veřejná IP je prostě lepší...

Pro jakékoliv hraní, pokud je někdo za NATem, doporučuji použít Hamachi. Většinou to FUNGUJE a to není potřeba nic nastavovat. Vytvoří se tím VPN a dá se hrát cokoliv jako přes normální LAN.

       

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

15.2.2006 21:27 yerabine
Rozbalit Rozbalit vše Juj,
Odpovědět | Sbalit | Link | Blokovat | Admin
tohle je skoro na článek;-) oproti ostatním blogpostům tohle vypadá úplně odborně a sofistikovaně...

Moc se v tomto nevyznám, takže kvalitu "návodu" moc nezhodnotím, ale přesto - jen tak dál :e)
Conyx avatar 15.2.2006 21:46 Conyx | skóre: 5 | blog: c-blog
Rozbalit Rozbalit vše Re: SSH Tunneling za NATem...
Odpovědět | Sbalit | Link | Blokovat | Admin
ja to chapal az do toho SSH Tunneling :-), ale dobry, poucne
brozkeff avatar 15.2.2006 22:05 brozkeff | skóre: 13 | blog: Zpátky po 10 letech | Žďár nad Sázavou
Rozbalit Rozbalit vše Asi jsem to s těma všema zkratkama a pojmama přehnal, co? ;-)
Takže takový menší glossary:

- NAT

- SSH

- Port forwarding

- Router

- TCP

Další pojmy viz en.wikipedia.org/wiki/POJEM, nebo na googlu define:POJEM ...

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.