Archivio

Posts Tagged ‘ip’

Come funziona internet simplified

maggio 6, 2012 1 commento

Questo post vuole spiegare come funziona la rete internet e cosa sono le varie porte di connessione.

Internet è una rete a pacchetto, ciò significa che in internet si trasferiscono sempre e solo pacchetti. Esistono essenzialmente due protocolli TCP UDP. TCP sta per Transmission Control Protocol e UDP significa User Datagram Protocol. Il protocollo TCP è orientato alla connessione, ovvero è in grado di capire se la rete è congestionata o sono stati persi dei pacchetti e li ritrasmette. Il protocollo UDP è orientato allo streaming e alle comunicazioni che devono essere veloci e non si cura se alcuni pacchetti vengono persi. La maggior parte di tutti i servizi su internet lavorano su protocollo TCP perchè fin dagli albori di internet si è fatto più attenzione all’integrità delle comunicazioni e non alla loro rapidità. Negli ultimi anni, ivece, si sta assistendo ad una evoluzione dei servizi che usano il protocollo UDP.

Connessione TCP

La figura riporta una connessione TCP con l’instaurazione della connessione, il trasferimento dei dati e la chiusura della connessione stessa. Ogni servizio, ovvero ogni funzionalità, di internet è veicolata da una tupla composta da (protocollo, porta) che identifica il servizio stesso. Per esempio le pagine web sono solitamente servite dalla porta 80 del protocollo TCP, ovvero (TCP,80), la risoluzione DNS dalla porta 53 UDP ovvero (UDP, 53), la posta elettronica IMAP dalla tupla (TCP,143) o (TCP,993) se la comunicazione è criptata, l’ftp dalla tupla (TCP, 21), ssh dalla tupla (TPC, 22). Potete consultare la lista di porte standard per i protocolli TCP e UDP su wikiepdia.

Si dice che un servizio è esposto o pubblico su internet se da un qualsiasi nodo della rete internet è possibile accedere al servizio considerato di un determinato host. Se quindi decido di pubblicare o esporre un server web la porta 80 del protocollo TCP dovrà essere raggiungibile da un qualsisi host della rete internet. Il concetto di raggingibilità è molto semplice. Un host x raggiunge un servizio y di un server z se una connessione di x a z alla porta specificata per il servizio y permette la comunicazione. In generale si può testare la connessione ad un servizio ed ad un host tramite il programma nc sotto linux aprendo un terminale e digitando:


nc host porta

Se il comando termina immediatamente allora non è possibile accedere alla porta specificata ed il servizio identificato dalla porta non è raggiungibile. Se si vuole usare il protocollo UDP basta aggiungere l’opzione -u alla riga di comando.

Il problema principale che deriva dal pubblicare un servizio su internet è la raggiungibilità a causa del NAT. NAT sta per network address translation e si occupa di “moltiplicare” gli indirizzi ip e di “separare” la rete LAN (ovvero la rete interna di un ufficio o di una casa) dalla rete Internet. La maggior parte dei router e hag fastweb fanno NAT in automatico. Per capire come funziona il NAT bisogna capire anche come si suddividono le reti. La seguente tabella come sono suddivisi gli indirizzi ip della rete internet:

Indirizzi CIDR Funzione RFC Classe Totale # indirizzi
0.0.0.0 – 0.255.255.255 0.0.0.0/8 Indirizzi zero RFC 1700 A 16.777.216
10.0.0.0 – 10.255.255.255 10.0.0.0/8 IP privati RFC 1918 A 16.777.216
127.0.0.0 – 127.255.255.255 127.0.0.0/8 Localhost Loopback Address RFC 1700 A 16.777.216
169.254.0.0 – 169.254.255.255 169.254.0.0/16 Zeroconf RFC 3330 B 65.536
172.16.0.0 – 172.31.255.255 172.16.0.0/12 IP privati RFC 1918 B 1.048.576
192.0.2.0 – 192.0.2.255 192.0.2.0/24 Documentation and Examples RFC 3330 C 256
192.88.99.0 – 192.88.99.255 192.88.99.0/24 IPv6 to IPv4 relay Anycast RFC 3068 C 256
192.168.0.0 – 192.168.255.255 192.168.0.0/16 IP privati RFC 1918 C 65.536
198.18.0.0 – 198.19.255.255 198.18.0.0/15 Network Device Benchmark RFC 2544 C 131.072
224.0.0.0 – 239.255.255.255 224.0.0.0/4 Multicast RFC 3171 D 268.435.456
240.0.0.0 – 255.255.255.255 240.0.0.0/4 Riservato RFC 1700 E 268.435.456

Gli indirizzi che appartengono alle reti private o LAN sono quelli che hanno funzionalità “ip privati”. Un router o un hag fastweb prendono un ip pubblico o di rete fastweb e assegnano indirizzi di rete privata, di solito 192.168.x.x o 1010.x.x ai dispositivi della rete locale.

Ora come potete immaginarvi, succede che se un host della rete internet prova a collegarsi al vostro ip pubblico (ovvero l’ip che il router o l’hag fastweb ha ottenuto) la richiesta andrà perduta perchè il router non sa a priori a chi indirizzare o  forwardare i pacchetti che gli arrivano. E’ proprio da questa considerazione che nasce il port forwarding, ovvero una impostazione del router che data una tupla (protocollo, porta) reindirizzano i pacchetti ad un’altra tupla (protocollo, porta) di un indirizzo interno alla rete che gestisce il router. Solo con un corretto port forwarding è possibile pubblicare un servizio su internet. Configurare il port forwarding dipende da router a router ma qualsiasi configurazione ha sempre le seguenti variabili: protocollo di ingresso (o wan), porta di ingresso (o wan), indirizzo ip di rete locale, porta locale, protocollo locale. Una volta configurato, ogni pacchetto che arriverà al router (che detiene indirizzo ip pubblico) ad una determinata porta, verrà reindirizzato al host della rete interna alla determinata porta. Per esempio se vogliamo pubblicare il servizio web e sftp imposteremo:

protocollo wan: TCP, porta wan: 80, indirizzo ip: 192.168.x.y, protocollo lan: TCP, porta lan: 80 (per web)

protocollo wan:TCP, porta wan: 22, indirizzo ip: 192.168.x.y, protocollo lan: TCP, prota lan:22 (per sftp)

Ovviamente bisogna cambiare x e y con i valori dell’indirizzo di rete interna a cui vogliamo redirigere il traffico. E’ da notare il fatto che la porta wan e la porta lan possono essere diverse. Posso quandi fare il forwarding di tutti i pacchetti che arrivano alla porta 8080 del router alla porta 80 del server. Il tutto è a nostra discrezione. Questa cosa è molto utile soprattutto se si vogliono pubblicare più servizi simili. Posso infatti pubblicare un server web nella porta 8080 e uno nella porta 80, ad esempio.

I NAS che solitamente si vendono sul mercato utilizzano solitamente la porta web (TCP,80) quindi basta configurare il port forwarding  come se fosse un server web cambiando l’indirizzo ip della rete locale con l’indirizzo ip del NAS. Nel caso il NAS non usa la porta web bisogna prima capire quale porta il NAS utilizza e poi fare la giusta configurazione di port forwarding.

Spero di aver dato una spiegazione esaustiva di funzionamento dei servizi di rete della rete internet e come pubblicare un servizio dietro ad un NAT. Per qualsiasi domanda o chiarimento usate i commenti.

%d blogger hanno fatto clic su Mi Piace per questo: