Fórum Root.cz
Hlavní témata => Server => Téma založeno: Honza 19. 08. 2010, 08:27:41
-
Ahoj,
cíl: přistoupit k tomcatu přes veřejnou ip na portu 80
situace:
Mám domácím PC s pevnou lokální IP, na niž my ISP směruje provoz z veřejné IP (nejspíš je lokální IP nastavená v DMZ na routeru od ISP). Přes nmap-online.com je vidět otevřené porty spuštěných služeb na tomto PC, např. SSH na 22. Běží zde Linux Mint 9 (= ubuntu 10.04) a na něm tomcat6 na portu 8080. Tento port ale přes nmap-online.com vidět není.
Na localhostu se na tomcat dostanu (http://localhost:8080) - vše funguje, jak má.
Po spuštění příkazu:
sudo ssh -R 80:localhost:8080 honza@honza-desktop
funguje tomcat i na portu 80 (http://localhost) - opět vše OK.
problém: Nedostanu se tam z venku (testuju z mobilu a z práce) ani přes http://verejnaip:8080 ani pres http://verejnaip. Z venku se oba oprty tváří jako přístupné, ale bez běžící služby. Když jsem měl spuštěný apache na portu 80, z venku jsem se na něj dostal bez problémů.
zkoušel jsem:
nastavit tomcat, aby běžel na portu 80, ale pak nebyl přístupný ani na localhostu
Neumím, a žádám Vás o radu jak:
nastavit port forwarding
nebo
nakofigurovat tomcat
nebo obojí...
Díky, Honza
-
PS: z práce máme asi docela hustej firewall, takže odtud se ven dostanu jen na portu 80 a jen, když po něm teče http
-
nechte tomcat na portu 8080 a pres modul proxy ajp do apache si to hodte na standardni 80
<Location /examples/>
ProxyPass ajp://localhost:8009/examples/ smax=0 ttl=60 retry=5
</Location>
-
sudo ssh -R 80:localhost:8080 honza@honza-desktop
ssh defaultně poslouchá jen na localhost rozhraní :-)
-R [bind_address:]port:host:hostport
...
By default, the listening socket on the server will be bound to the loopback interface only. This may be overridden by specifying a bind_address. An empty bind_address, or the address ‘*’, indicates that the remote socket should listen on all interfaces. Specifying a remote bind_address will only succeed if the server’s GatewayPorts option is enabled (see sshd_config(5)).
asi bych použil spíš opačnou variantu tunelu
-L [bind_address:]port:host:hostport
kde se dá vynutit poslouchání na všech rozhraních o něco lépe
-g Allows remote hosts to connect to local forwarded ports.
-
Při ladění takových problémů je dobré dát:
netstat -tlpn
a hned vidíš, která aplikace na kterém portu naslouchá a hlavně jestli na všech rozhraních, nebo jen na localhostu. BTW: javovské servery se většinou na 80 nepouštějí, ale dává se před ně reverzní proxy (HTTP nebo AJP).
-
Skus v praci toto:
sudo ssh -L 80:127.0.0.1:8080 honza@tvoja_verejna_ip_doma
potom v browseri http://127.0.0.1/
Nechapem preco si to otvaral opacnou stranou...
Kebyze vsak mam takyto problem ja, riesil by som to asi tak ze by som installoval apache pocuvajuci na *:80 a *:443 ktory sa odvolava na tomcat pri .jsp.
Alebo aspon tomcat nastavit aby bol [okliestene] pristupny na HOST:80 [nie local a nie 127.0.0.1]
Kazdopadne SSH tunnel je bezpecny a -Lkovy by mal bezproblemov fungovat.
-
Aha... Pokial z prace nemas pristupne SSH a chces teda aby sa aj ostatni dostali na tvoj tomcat [a chces sa lavou rukou skrabat v pravo!]:
U teba doma na localhoste:
sudo ssh -R -N -f TVOJA_IP_ADRESA:80:localhost:8080 honza@localhost
[TVOJA_IP_ADRESA = nie ta verejna, ale ta ktoru mas od ISP... Cize napriklad 10.0.1.123]
Tymto otvoris reverzne tunnel ktory bude pocuvat na tvoja_ip:80 a preposielat na localhost:8080 s tym ze ho otvoris na localhoste logicky.
Verejna IP [ISP] -> Tvoja IP -> SSH:80 -> Localhost:8080 :)
-
VYŘEŠENO:
Nakonec jsem použil mod_proxy v apache. Dle toho, co jsem k tomu našel, se to tak celkem běžně řeší.
Děkuji za Vaše reakce. Tolik možností jsem nečekal.