Client server su reti differenti

di il
7 risposte

Client server su reti differenti

Salve ragazzi! Vi pongo subito il mio problema. Ho creato due applicazioni client e server java e funziona tutto bene fin quando client e server vengono eseguiti su pc che si trovano nella stessa rete. Ora la mia domanda è:
Come faccio a mettere il server "online", cioè a fare in modo che sia accessibile anche da client che non sono sulla stessa rete? Ho spulciato su google ed ho trovato solo tante spiegazioni "a parole" ma nulla di concreto che indicasse una procedura da seguire. Qualcuno saprebbe indicarmi precisamente i passi da fare? Chiaramente poi posso informarmi da me su ogni singolo passo in dettaglio ma sinceramente vorrei una scaletta da seguire. Grazie mille

7 Risposte

  • Re: Client server su reti differenti

    Nessuna scaletta... Devi ragionare sulla situazione degli apparati presenti nell'area server che sono sempre diversi. Non so quale router userai lato server ma lo devi configurare in modo che il flusso sulla porta scelta per la comunicazione sia nattato verso l'ip interno del tuo server. La pagina di configurazione e come il router ti permetterà di farlo dipendono da marca e modello.

    Il client dovrà puntare all'ip pubblico del server e tutti gli eventuali firewall dovranno essere aperti.

    Nulla di più.
  • Re: Client server su reti differenti

    oregon ha scritto:


    Nessuna scaletta... Devi ragionare sulla situazione degli apparati presenti nell'area server che sono sempre diversi. Non so quale router userai lato server ma lo devi configurare in modo che il flusso sulla porta scelta per la comunicazione sia nattato verso l'ip interno del tuo server. La pagina di configurazione e come il router ti permetterà di farlo dipendono da marca e modello.

    Il client dovrà puntare all'ip pubblico del server e tutti gli eventuali firewall dovranno essere aperti.

    Nulla di più.
    Ciao oregon e grazie della risposta. Potresti dirmi se quindi è sufficiente fare quanto segue?

    Supponiamo che l'ip del mio pc(server) sia 192.168.1.200 e che l'ip pubblico della rete sia 92.45.255.235
    Nelle impostazioni del modem vado nella schermata del port forwarding ed imposto che il traffico su una porta, diciamo la 328, venga indirizzato verso l'ip 192.168.1.200 (cioè il mio pc che funge da server).
    Per la parte java, invece, nel server ci metto questa riga:
    
    Server = new ServerSocket(328);
    
    mentre nel client questa:
    
    socket = new Socket("92.45.255.235",328);
    
    chiaramente il codice completo è più esteso, ma credo sia questa la parte "critica".
    So anche dell'ip dinamico che cambia continuamente ma credo che per fare almeno una prova in tempo reale non sia necessario avere un ip statico, sbaglio?
    Grazie dell'attenzione
  • Re: Client server su reti differenti

    spx ha scritto:


    Nelle impostazioni del modem vado nella schermata del port forwarding ed imposto che il traffico su una porta, diciamo la 328, venga indirizzato verso l'ip 192.168.1.200 (cioè il mio pc che funge da server).
    Sì, va aggiunta una regola (dove/come dipende appunti dal prodotto hardware che si ha) che in pratica dice "tutto quello che arriva dalla WAN sulla porta x "giralo" sulla LAN all'indirizzo Y".
    (WAN è il termine usato nei router per indicare la porta fisica verso internet)

    Ma non basta, ci sono altre 2 questioni.

    1) sulla macchina dove gira il server ci potrebbe essere un firewall software, che può essere quello eventualmente già integrato nel S.O. oppure un prodotto di terze parti. Anche qui devi averne il "controllo" ed andare ad "aprire" la porta che usa il server.

    2) client e server sono connessi ad internet tramite un certo provider, potrebbe essere lo stesso oppure no. I provider potrebbero avere politiche di sicurezza più o meno restrittive per cui bloccano solo certe porte, oppure tutte tranne alcune.
    Se è il provider che blocca una certa porta, c'è ben poco, anzi praticamente nulla da fare ... devi scegliere tu un'altra porta che sia usabile.

    spx ha scritto:


    Per la parte java, invece, nel server ci metto questa riga:
    
    Server = new ServerSocket(328);
    
    mentre nel client questa:
    
    socket = new Socket("92.45.255.235",328);
    
    chiaramente il codice completo è più esteso, ma credo sia questa la parte "critica".
    Sostanzialmente sì. Nel client chiaramente non è bene "cablare" l'indirizzo nel sorgente. Lo si può passare/parametrare in altri modi.

    spx ha scritto:


    So anche dell'ip dinamico che cambia continuamente ma credo che per fare almeno una prova in tempo reale non sia necessario avere un ip statico, sbaglio?
    Sì, per prove va anche bene un ip dinamico, finché sei tu che conosci il IP "pubblico" o qualcun'altro a cui lo puoi comunicare. Tieni comunque presente che l'indirizzo cambia solo ad ogni connessione che il router fa verso il provider. Se tieni il router accesso 24/24h e non ci sono disconnessioni casuali o esplicite, il router può tenere un IP dinamico anche per giorni se non addirittura settimane/mesi.

    L'ideale sarebbe un IP "statico" ma ovviamente è un servizio specifico e che costa.
    L'alternativa è usare un servizio di "Dynamic DNS" (DDNS) ma dovrebbe essere il router ad avere il supporto per quel certo servizio.
    I router moderni tipicamente hanno supporto almeno per il servizio http://www.dyndns.or (che però mi pare non sia più "gratis") e magari anche qualcun'altro.
  • Re: Client server su reti differenti

    andbin ha scritto:


    spx ha scritto:


    Nelle impostazioni del modem vado nella schermata del port forwarding ed imposto che il traffico su una porta, diciamo la 328, venga indirizzato verso l'ip 192.168.1.200 (cioè il mio pc che funge da server).
    Sì, va aggiunta una regola (dove/come dipende appunti dal prodotto hardware che si ha) che in pratica dice "tutto quello che arriva dalla WAN sulla porta x "giralo" sulla LAN all'indirizzo Y".
    (WAN è il termine usato nei router per indicare la porta fisica verso internet)

    Ma non basta, ci sono altre 2 questioni.

    1) sulla macchina dove gira il server ci potrebbe essere un firewall software, che può essere quello eventualmente già integrato nel S.O. oppure un prodotto di terze parti. Anche qui devi averne il "controllo" ed andare ad "aprire" la porta che usa il server.

    2) client e server sono connessi ad internet tramite un certo provider, potrebbe essere lo stesso oppure no. I provider potrebbero avere politiche di sicurezza più o meno restrittive per cui bloccano solo certe porte, oppure tutte tranne alcune.
    Se è il provider che blocca una certa porta, c'è ben poco, anzi praticamente nulla da fare ... devi scegliere tu un'altra porta che sia usabile.

    spx ha scritto:


    Per la parte java, invece, nel server ci metto questa riga:
    
    Server = new ServerSocket(328);
    
    mentre nel client questa:
    
    socket = new Socket("92.45.255.235",328);
    
    chiaramente il codice completo è più esteso, ma credo sia questa la parte "critica".
    Sostanzialmente sì. Nel client chiaramente non è bene "cablare" l'indirizzo nel sorgente. Lo si può passare/parametrare in altri modi.

    spx ha scritto:


    So anche dell'ip dinamico che cambia continuamente ma credo che per fare almeno una prova in tempo reale non sia necessario avere un ip statico, sbaglio?
    Sì, per prove va anche bene un ip dinamico, finché sei tu che conosci il IP "pubblico" o qualcun'altro a cui lo puoi comunicare. Tieni comunque presente che l'indirizzo cambia solo ad ogni connessione che il router fa verso il provider. Se tieni il router accesso 24/24h e non ci sono disconnessioni casuali o esplicite, il router può tenere un IP dinamico anche per giorni se non addirittura settimane/mesi.

    L'ideale sarebbe un IP "statico" ma ovviamente è un servizio specifico e che costa.
    L'alternativa è usare un servizio di "Dynamic DNS" (DDNS) ma dovrebbe essere il router ad avere il supporto per quel certo servizio.
    I router moderni tipicamente hanno supporto almeno per il servizio http://www.dyndns.or (che però mi pare non sia più "gratis") e magari anche qualcun'altro.
    Innanzitutto grazie mille per la risposta!
    Scusami se rispondo soltanto adesso ma non ho avuto modo di provare fino ad oggi. Sicuramente sbaglierò io qualcosa ma continua a non funzionare
    Ho provato a far comunicare due pc su due reti differenti (la mia e quella di mio zio che abita accanto). Giusto per fare la prova ho applicato la DMZ (che credo dovrbbe garantire la libertà massima???) ad entrambi i pc (chiaramente ad ognuno tramite il pannello del router al quale era connesso). Purtroppo continuano a non comunicare.
    Brevemente ecco cosa ho fatto:
    Ho due reti distinte con due router (chiamiamole RETE1 e RETE2) e due pc (chiamiamoli PC1 e PC2). PC1 è connesso a RETE1 e PC2 è connesso a RETE2. Nel router di RETE1 ho assegnato la DMZ a PC1 e analogamente nel router di RETE2 ho assegnato la DMZ a PC2. Ho messo il server in ascolto sulla porta 3097 e nel client ho messo l'ip pubblico del server e la porta 3097.
    Ribadisco che in locale funziona tutto, quindi l'inghippo è necessariamente su questa cosa delle reti differenti. Suggerimenti???
  • Re: Client server su reti differenti

    Ma che DMZ!
    Sai almeno cos'è?
  • Re: Client server su reti differenti

    +m2+ ha scritto:


    Ma che DMZ!
    Sai almeno cos'è?
    Onestamente non me ne intendo particolarmente... Avevo aggiunto una regola di port forwarding ma non andava. Poi ho letto nel pannello stesso del router che assegnando la dmz ad un dispositivo era possibile connettersi in remoto a tale dispositivo. Poi se dovessi dirti che so cosa sia la dmz ti direi una bugia. Ad ogni modo dopo aver visto che non andava l'ho disattivata nuovamente.
    Dunque, senza dilungarci su questa dmz (che da come mi pare intendere dal tuo commento non c'entri una mazza), sapresti darmi qualche suggerimento per risolvere il mio problema? Hai bisogno di qualche informazione aggiuntiva? Grazie
  • Re: Client server su reti differenti

    Sì, la DMZ è esattamente il contrario di quello che vuoi fare.
    Si tratta di una zona logica che è inibita alla connessione con le altre reti (logiche).

    Essenzialmente sulla DMZ colleghi "qualcosa" che vuoi che acceda a internet, ma NON vuoi che acceda alla tua rete (ad esempio un telefonino, un PC portatile o quello che vuoi).
    ---
    Quello che non mi è chiarissimo è se hai impostato il NAT (o port forwarding).

    Troverai un miliardo di guide, comunque...
    1) niente DMZ
    2) attenzione a eventuali firewall software (disattivali, sono inutili se hai un router)
    3) supponiamo di avere due router e due reti.

    Avrai la RETE1, supponiamo IP pubblico (WAN) del router 7.7.7.7, IP locale LAN del router supponiamo 192.168.1.1, IP locale LAN (del PC1) poniamo 192.168.1.2


    Avrai la RETE2 , supponiamo IP pubblico (WAN) del router 6.6.6.6, IP locale LAN del router supponiamo 192.168.0.1, IP locale LAN (del PC2) poniamo 192.168.0.2

    Ora supponiamo che il server funzioni sul PC2.
    Allora dovrai
    1) nel router 2 attivare una regola di port forwarding (o NAT) che instrada la porta 3097 sull'IP LAN 192.168.0.2
    2) togli eventuali firewall software sul PC2 (o crea le relative regole. puoi disattivarlo tranquillamente)

    3) nel CLIENT software (che gira sul PC1 nel nostro esempio) dirai di connettersi a 6.6.6.6 porta 3097

    In questo esempio l'IP WAN della RETE1 (il client) è irrilevante; è irrilevante l'IP del PC client1, irrilevante l'IP WAN del router1
Devi accedere o registrarti per scrivere nel forum
7 risposte