Configurare linux come router per condividere connessione internet tra più pc

  • 27
  • 585 Views

Appena installato ubuntu-server 9.04 (o successivi) con i pachetti LAMP e LAN la prima cosa da fare è abilitare l’utente root, almeno finche la configurazione non sarà terminata, in questo modo risparmieremo tempo e eviteremo di usare in continuazione il comando sudo. Clicca qui se non sai come fare

una volta fatto, eseguire il comando su e inserire la password, cosi da poter eseguire comandi come root.

la nostra rete sarà molto semplice ecco lo schema:

net

Il server avrà bisogno di 2 schede di rete, una collegata direttamente all’accesso internet, l’altra collegata allo switch della rete interna.

Nel nostro caso la scheda eth0 è quella connessa alla rete interna mentre eth1 è quella connessa a internet.

inoltre faremo in modo che il nostro server abbia questo indirizzo 192.168.30.254.

Quindi come prima cosa dobbiamo tirare su la scheda di rete, per farlo è sufficiente scrivere:

ifconfig eth0 192.168.1.254 netmask 255.255.255.0

cosi facendo abbiamo tirato su la connessione alla rete locale, il nostro prossimo passo è configurare il dhcp, ma attenzione in questo modo al prossimo riavvio perderemo, la configurazione della scheda di rete, per evitare cio dobbiamo modificare il file /etc/network/interfaces (il nome del file e la posizione può variare anche di molto tra una distribuzione all’altra, ma non sarà comunque difficile da trovare cercando su internet).

All’interno del file aggiungiamo quanto segue:

auto eth0
iface eth0 inet static
address 192.168.1.254
netmask 255.255.255.0

fatto questo salviamo, e riavviamo la rete con:

/etc/init.d/networking restart

anche questo può cambiare da distribuzione a distribuzione, questo è valido per ubuntu server.

IL DHCP

Il dhcp è un servizio che si occupa all’assegnazione degli indirizzi ip all’interno di una rete, questo sitema offre vari vantaggi, il principale è che possiamo modificare la rete senza bisogno di modificare i singoli computer collegati, semplicemente modificando la configurazione del dhcp.

per prima cosa dobbiamo installare il server, per farlo è sufficiente scrivere:

apt-get install dhcp3-server

ricordiamo che prima di fare questo dobbiamo aggiornare i repository di apt-get se non lo abbiamo mai fatto, per farlo digitare:

apt-get update

rispondiamo si alle domande e non preoccupiamoci se fallirà l’avvio del server, succede perchè manca la configurazione.

per configurarlo dobbiamo modificare il file “/etc/dhcp3/dhcpd.conf” per farlo facciamo:

vim /etc/dhcp3/dhcpd.conf

oppure (dipende dalla versione di ubuntu):

vim /etc/dhcp/dhcpd.conf

premiamo i per entrare in modalità insert e aggiungiamo le seguenti righe:

subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.220;
option routers 192.168.1.254;
option domain-name-servers 208.67.222.222;
}

allora due paroline, in queste poche righe abbiamo:

  1. impostato a quale rete appartiene, in questo modo il server sa che deve operare sulla rete 192.168.1.0
  2. assegnato il range, con questa configurazione non capiterà mai che il server assegni l’ip 192.168.1.60, perchè può assegnare ip soltanto nel range 100-220
  3. impostiamo il router sul server stesso
  4. abbiamo assegnato un server dns, in questo caso si tratta di openDNS, il server dns serve per la risoluzione dei nomi, volendo potete inserire quello del vostro provider ma lo sconsiglio 😀

ora consiglierei di modificare anche l’opzione

option domain-name "qualcosa.locale"

per settare un dominio interno sostituendo qualcosa.locale

quando abbiamo finito digitiamo in sequenza

:wq

questo salverà e ci riporta alla shell.

bene ora dobbiamo creare il file leases (se avete una versione recente di ubuntu questi 2 passaggi non servono) altrimenti il server darà un fastidiosissimo errore all’avvio, scriviamo:

mkdir -p /var/state/dhcp/

e

touch /var/state/dhcp/dhcpd.leases

Le ultime versioni del server dhcp sono nominate com isc-dhcp-server su ubuntu è necessario andare a specificare nel file isc-dhcp-server su quale scheda di rete deve operare il server dhcp, in altre distribuzioni questo non serve perchè di default attivano la eth0, in ogni caso digitiamo:

vim /etc/default/isc-dhcp-server

e dentro andiamo a riempire il campo INTERFACES: con eth0:

INTERFACE: eth0

Il primo crea la directory se non esiste l’altro crea il file.

bene siamo pronti a testare, proviamo ad avviare il server dhcpd scrivendo:

service dhcp3-server start

oppure

service isc-dhcp-server start

se tutto è andato bene dobbiamo vedere l’ok.

e naturalmente collegando un computer allo switch questo deve ricevere un ip, il gateway, il router e il dns, ma naturalmente ancora non si naviga 😀

il motivo è semplice ancora non abbiamo configurato le rotte, quindi il server non sa a chi mandare i pacchetti e come far comunicare le 2 reti.

IL ROUTER

la prima cosa da fare è attivare l’ip forward ci sono 2 modi, il primo è:

echo 1 > /proc/sys/net/ipv4/ip_forward

questo però non resterà per sempre al prossimo riavvio tornerà disattivato

il secondo sistema più duraturo è modificare il file /etc/sysctl.conf decommentando:

net.ipv4.ip_forward=1

tuttavia noi utilizzeremo il primo sistema, poiche andiamo a creare uno script che imposterà il forwarding dell’ip e imposterà iptables per nattare e fare il forward.

Ecco il codice dello script:


#!/bin/sh
echo 1> /proc/sys/net/ipv4/ip_forward
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
iptables -A POSTROUTING -t nat -o eth1 -j MASQUERADE
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
iptables -A FORWARD -o eth1 -i eth0 -j ACCEPT

ora siamo quasi apposto salviamo il contenuto di quel file in una directory magari nella home di root, chiamiamo il file ip-forwarding.sh, poi diamo i permessi di esecuzione scrivendo questo:

chmod +x ip-forwarding.sh

ora digitiamo:

cp  ip-forwarding.sh /etc/init.d/

e poi scriviamo:

update-rc.d ip-forwarding.sh defaults

in questo modo sappiamo che ad ogni riavvio lo script sarà lanciato e ripristinerà le funzioni di iptables.

27 comments on “Configurare linux come router per condividere connessione internet tra più pc

  1. SALVE IO USO LUBUNTU, SONO AUTODIDATTA. MA MIA DOMANDA È QUESTA, UN AMICO MI CONCEDE IL SEGNALE WIFI INTERNET CON USERNAME E PASSO, CHE RICEVO CON CHIAVETTA WIFI, IO VOGLIO REDISTRUBUIRE INTERNET AD ALTRI UTENTI, TRAMITE UN ROUTER WIFI COLLEGATO ALLA LAN DIRETTAMENTE AL PC. VOGLIO ASSEGNARE UNA PASSO DIFFERENTE AD OGNI UTENTE, COME DEVO FARE. GRAZIE 1000.

  2. si ma che riga hai aggiunto alla tabella di routing?..

  3. hehe è sempre bello venire a capo di un problema da solo, grazie per averci reso partecipi anche della soluzione 😀

  4. Ok, risolto XD per quello che dovevo fare io non avevo nemmeno bisogno di effettuare il masquerade sul router con ubuntu XD è bastato aggiungere una riga alla tabella di routing del router0 e tutto funziona 😛 grazie lo stesso 🙂

  5. Ciao, complimenti per la quida 😀 vi ho trovato googolando un po perché sto impazzendo per risolvere il seguente problema:

    la mia rete è configurata così:

    internet
    |
    |
    router0
    |
    |— pc ubuntu (router1)
    |
    |— switch con altri host

    * router0 ha 2 interfacce:
    – ppp0 –> verso internet
    – br0 –> verso la rete locale (rete: 192.168.0.0/24, indirizzo host: 192.168.0.1)

    * router1 ha 2 interfacce:
    – wlan0 –> indirizzo host: 192.168.0.2, netmask: 255.255.255.0, gw: 192.168.0.1
    – eth0 –> verso lo switch, dove risiede una LAN sottorete della LAN 192.168.0.0/24, configurata in questo modo –> rete: 192.168.0.240/28 (con host che vanno da 241 a 254). L’indirizzo di eth0 è 192.168.0.241.

    Allo switch ci stanno quindi gli host che vanno da 242 a 254 (oltre al 241 del router ubuntu).

    Effettuando il masquerade tramite il nat di iptables, gli host della 192.168.0.240/28 riescono a comunicare perfettamente sia con tutti gli host della rete padre (192.168.0.0/24) che ovviamente con internet.

    Il mio problema comincia nel momento in cui, per esempio, su 192.168.0.242 (host di 192.168.0.240/28) avvio un server web, e questo non è raggiungibile da un host 192.168.0.3 (host di 192.168.0.0/24), lo stesso con un semplice ping da 192.168.0.3 verso 192.136.0.242. Qualcuno ha una soluzione? XD

    Scusate per la lunghezza del post; se sono stato poco chiaro nella descrizione del problema, cercherò di rispiegarlo XD

  6. Scusami,

    allora quello che non riesco a capire e’ come hai fatto a dare ad eth0 l’ip pubblico, per caso sul server c’e’ anche un modem? non riesco a capire, prima mi dicevi che avevi attaccato il router al server, ok ma il router comunque sia e’ sempre connesso al doppino telefonico, quindi si prende l’ ip pubblico nattato dal ISP, dando al server quello suo interno e non quello pubblico, mi sfugge questo passaggio.

    Grazie

    Symon

    1. Si come si vede dal disegno è un modem/router fornito dall’isp, e si ovviamente si prende l’ip nattato dall’isp e non c’è modo di modificare questa cosa senza comprare un ip pubblico poichè tu puoi fare soltanto sottoreti per allargare il numero di pc in grado di collegarsi. una cosa che puoi fare è usare Hamachi(https://secure.logmein.com/) che permette di creare reti virtuali ma l’utenti del tuo server devono avere Hamachi installato e devono aver aggiunto il tuo ip (fornito da Hamachi) sulla loro installazione.
      Altrimenti il server è disponibile solo agli utenti del tuo isp o ad alcuni di essi (dipende dall’isp).

  7. Scusami,

    ma da quanto ho capito tu al server dai come ip quello interno, che poi escira’ tramite router, ed anche il dhcp ha ip interni (intendo 192.168.x.x) o sbaglio?

    Perche’ se cosi fosse m’e’ venuta in mente na cosa da paura, solo per quelli che hanno ip pubblico nattato: si prende l’ ip pubblico nattato lo si imposta sul dhcp come “option routers” quindi come gateway, ci si iscrive al servizio dydns creando dominio di secondo livello, inseriamo nel file hosts una cosa del genere (ip_pubblico domain.dydns), si crea uno script (lo cronteremo successivamente) in sh che andra’ a pingare il domain.dydns, va a leggere l’ ip pubblico sul file hosts, li confronta e se questi non sono uguali sovrascrive quello sul file host con quell’ altro pingato, in questo modo avremmo un gateway con ip pubblico, e qualora dovesse sconnettersi entra in goco lo script. Se poi su “option router” e’ possibile inserire direttamente il nome host allora ancora piu’ facile. E’ possibile inserire direttamente il nome host su “option router”? Ditemi cosa ne pensate.

    Grazie

    Symon

    1. Il server del post ha 2 ip 1 pubblico su eth0 assegnato dall’isp e uno privato per la rete locale che è collegato allo switch inseme a tutte le macchine che devono collegarsi a internet.
      Dydns non ti risolve il problema dell’ip privato fornito dall’isp che va oltre il tuo controllo, se l’isp ti natta dydns non riuscirà mai a vedere l’ip del server poichè in realtà l’ip che prendi dall’isp è un ip privato.

  8. Scusa,

    mi e’ venuta in mente un altra cosa, come potrei in ubuntu server, creare un dhcp server, impostando l’ip pubblico del router come gateway sul server ubuntu, o meglio ancora dare come gateway ad Ubuntu server, il nome host del routr connesso ad internet?

    Grazie

    Symon

    1. Puoi usare lo switch il problema che alcuni isp se ne accorgono e ti bloccano, ma puoi sempre provare.
      Per quanto riguarda il gateway tramite dhcp devi configurare il server modificando il file /etc/dhcp3/dhcpd.conf se non ricordo male per impostare un gateway era option routers ; ma non ne sono sicurissimo.

  9. Salve,

    e scusa se forse sembraro’ ripetitivo, ma volevo chiederti se e’ possibile fare questo discorso senza collegare direttamente il router al server, ma collegare i due tramite switch, il pc server ce l’ho da una parte e la presa telefonica in cui e’ connesso il router/modem in un altra stanza.

    Grazie

    Saluti

    Symon

  10. Ciao,

    grazie della tempestiva risposta, vorrei dare ad eth0 l’ ip pubblico, sto seguendo una guida riguardo a Ubuntu server, in cui dice che eth0 deve avere come ip quello pubblico, e eth1 ip privato. Il router ce l’ho dentro casa e’ un Pirelli DRG A115.
    Diciamo che l’ ip pubblico mi servirebbe anche per gestire in futuro un server mail per farlo uscire esternamente, server web etc… ho visto varie guide on line a riguardo di porte WAN sui router, ma purtroppo il mio ha solo porte LAN. Forse non riesco a spiegarmi in termini esatti, ma vorrei che eth0 assumesse l’ ip che si prende il router e cioe’ quello pubblico fornito dall’ISP, e’ possibile fare cio’?

    Grazie

    Symon

    1. L’ip pubblico in genere lo assegna l’isp tramite dhcp (anche se essendo nattato non si può parlare proprio di ip pubblico). In ogni caso questa guida spiega proprio come fare una rete nattata quindi in realtà il server linux si prende l’ip esterno assegnato dall’isp (in genere ip nattato o pubblico). Collegando il router fornito dall’isp al server ubuntu farà si che il server ubuntu si colleghi a internet come fosse una macchna normale con ip pubblico. L’altra porta lan la puoi collegare direttamente a uno switch o a un router configurato come switch e su quello puoi metterci tutte le macchine/accesspoint che vuoi.
      Un server lo puoi mettere sul server ubuntu direttamente che in questo caso fa anche da router se vuoi aggiungere un altra macchina per farla diventare un server esterno (tenendo conto comunque che l’isp ti da ip nattato) se il contratto con l’isp ti permette di collegare più pc (in genere è cosi almeno 2 o 3 pc) puoi attaccare al router fornito dal isp un altro pc con server linux e sopra puoi metterci quello che vuoi.
      In genere gli isp usano soluzioni nattate per impedire ai clienti di usare il proprio pc come server web o server mail poichè offrono ip pubblico a pagamento.

  11. Salve,

    scusate,sto cercando di impostare eth0 con l’ip wan del router, ma purtroppo non mi e’ possibile attaccare direttamente il router al pc server (Ubuntu 10.04.1). Il mio router e’ un Pirelli DRG A115, e volevo sapere se e’ possibile fare questo discorso, i due, router e macchina server sono collegati su una rete tramite switch, al server ho impostato gli ip in maniera statici, quindi la mia domanda e’: Posso associare l’ip pubblico all’ eth0? Il server possiede due schede di rete eth0 ed eth1, possiedo volendo anche un secondo router, non so se mi puo’ essere utile, dimenticavo l’ ip pubblico e’ nattato. Grazie Symon

    1. @Symon: Non ci ho capito molto, sarebbe d’aiuto un disegnino della rete. Se il Pirelli è il router dell’isp potresti avere problemi nella configurazione comunque non capisco neanche perchè vuoi dare a eth0 l’ip pubblico.

  12. L’unica cosa che mi viene in mente guardando la configurazione del dlink e che anche lui ha un server dhcp, quindi in realtà l’ip lo assegna lui alle macchine collegate, quindi prova a disabilitare il dhcp sul dlink (il dlink deve avere solo il client dhcp non il server) e verifica che tutte le macchine collegate appaiono nel leases del server linux.
    Se tutti gli ip delle macchine sono nella stessa rete devono comunicare tra di loro a prescindere dal sistema operativo, sempre che il dlink si comporti da semplice hub e non da router.

    Per quanto riguarda ultima domanda si il dhcp è la scelta migliore altrimenti chiunque venga a casa tua deve riconfigurare l’ip a manina 😀

  13. il Dlink dap 1160 mi da la possibilità di entrare e gestire tt i parametri… a questo ieri ho assegnato come indirizzo di rete 10.194.83.159 e come gateway l’indirizzo del server cioè 10.194.83.161.
    in piu questo è collegato ad eth1.
    in eth0 ho inserito il cavo che arriva dall’hub.
    in ogni caso con cat /var/lib/dhcp3/dhcpd.leases sono riuscito a vedere chi è connesso ma non compare il Dlink…
    cmq ti posto la configurazione dello switch

    LAN CONNECTION TYPE : static ip
    IP Address : 10.194.83.159
    Subnet Mask : 255.255.255.0
    Gateway Address : 10.194.83.161
    Enable DHCP Server : spuntato
    DHCP IP Address Range : 10.194.83.162 to 10.194.83.255
    802.1d Spanning Tree : disabled

    nel wireless setup è impostato come access point
    con spuntato Enable Auto Channel Scan
    e una chiave di sicurezza

    la cosa assurda è che vista e seven non riescono ad accedere ad internet mentre windows xp naviga tranquillamente ma rimane cmq il problema della condivisione! i pc non riescono in ogni caso a collegarsi

    siccome gli altri pc durante questa operazione hanno bisogno della linea ho pensato di mettere gli ip tutti sullo stesso piano per evitare qualunque tipo di conflitto (10.194.83.XXX)

    sospetto che in qualche modo eth0 e eth1 non riescano a comunicare… forse è x questo che la linea fastweb e la sottolinea non riescono a comuinicare

    in piu voglio chiederti una cosa… x il tipo di configurazione che sto cercando di creare quella dhcp è la piu indicata?

  14. ah premetto che sono nuovo del mondo linux (ho solo 2 giorni di pratica) sono esperto x quanto riguarda tt il resto…. beh… a parte tt ciò che riguarda il server 😛 ma non vedo l’ora di imparare tt quel che serve sapere! quindi se vi va di spiegarmi io apprendo in fretta ^^

    1. Prova a digitare questo “cat /var/lib/dhcp3/dhcpd.leases” il path può cambiare in base alla distribuzione e al demone dhcp, se non lo trovi puoi fare updatedb e attendere che finisca e poi scrivere locate dhcpd.leases
      il cat ti da la lista di tutti gli ip assegnati.
      Prova a vedere che ip è stato assegnato allo switch, e controlla se lo switch non gestisce separatamente le reti wireless e quelle su cavo.
      Non sei tu che hai assegnato un nuovo ip allo switch ma in genere se collegato a un server dhcp può aver preso un nuovo ip dal server.

  15. si in pratica l’access point fa da switch in wireless x gli altri clients. essendo utente fastweb ho solo 3 ip a disposizione e quando vengono in casa i parenti (il che accade spesso) con il loro netbook è un delirio! pensavo di risolvere la cosa così… funziona… ma non riesco piu a vedere gli altri pc connessi alla rete… ah e altro piccolo particolare… prima riuscivo ad accedere al dlink dal browser.. ora non piu… ma non penso di avergli assegnato un altro ip

  16. con queste impostazioni sono riuscito a fare

    [hub fastweb]——–
    \
    [server]
    \
    [access point dlink]
    |
    / \
    / \
    [netbook] [windows]

    unico problema è che ora non riesco a configurare le condivisioni dei file nella rete e windows ha problemi a connettersi al dlink… qualcuno mi saprebbe aiutare?

    1. comunque se non ho capito male tu fai fare da switch direttamente all’access point solo che potrebbe essere che l’access point sia un router quindi un pò più intelligente di un semplice switch e abbia bisogno di una configurazione più dettagliata, in ogni se non riesci a collegarti all’access point è perchè essendo collegato al server tramite dhcp gli è stato assegnato un nuovo ip c’è un comando per farti dare la lista delle macchine connesse tramite dhcp, solo che sono le 4 di mattina e non ce la faccio a mettermi a cercare 😀

  17. ciao, sarebbe possibile rendere questo router anche un access point wireless?

    1. se hai un access point si, basta che lo colleghi allo switch con dhcp attivo (in genere è cosi di default) su linux non devi fare niente poichè vedrà l’access point come un semplice pc e quindi lo farà connettere.

  18. contento che ti sia stata utile 😀
    e grazie, ho corretto l’errore

  19. Bella guida, molto utile xD
    Gli ultimi due comandi però hanno un errore di battitura, al posto di forwarding hai messo forward.
    Ciao…

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.