<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <HTML> <HEAD> <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9"> <TITLE>Linux PPP HOWTO: Configurare un server PPP</TITLE> <LINK HREF="PPP-HOWTO-27.html" REL=next> <LINK HREF="PPP-HOWTO-25.html" REL=previous> <LINK HREF="PPP-HOWTO.html#toc26" REL=contents> </HEAD> <BODY> <A HREF="PPP-HOWTO-27.html">Avanti</A> <A HREF="PPP-HOWTO-25.html">Indietro</A> <A HREF="PPP-HOWTO.html#toc26">Indice</A> <HR> <H2><A NAME="ppp-server"></A> <A NAME="s26">26. Configurare un server PPP</A></H2> <P>Come già detto, ci sono molti modi per farlo. Quel che presento è il modo nel quale io lo faccio (usando una scheda seriale multiporta della Cyclades) e un insieme di linee telefoniche a selezione rotativa. <P> <P>Se non vi piace il metodo qui presentato, sentitevi liberi di farlo a modo vostro. Avrei comunque piacere di includere altri metodi nelle versioni future di questo HOWTO. Quindi, vi invito ad inviarmi i vostri commenti e metodi! <P> <P>Si noti, che questa sezione tratta solamente la configurazione di Linux come server PPP. Non ho intenzione di includere (mai) informazioni sulla configurazione di terminal servers speciali o altro. <P> <P>Inoltre, devo ancora fare esperimenti con le shadow password (ma lo farò prima o poi). Le informazioni qui presentate quindi NON comprendono tutti gli ammenicoli che sono richiesti dalla shadow suite. <P> <H2><A NAME="ss26.1">26.1 Compilazione del kernel</A> </H2> <P>Si applicano ancora tutte le considerazioni precedenti sulla compilazione del kernel e sulla relazione tra la versione del kernel e quella di pppd. Questa sezione assume che si siano già lette le sezioni precedenti di questo documento! <P> <P>Per un server PPP, si <B>DEVE</B> includere l'IP forwarding nel proprio kernel. Si possono voler includere anche altre caratteristiche (come IP firewall, accounting ecc ecc). <P> <P>Se si usa una scheda seriale multiporta, ovviamente si devono anche includere nel kernel i driver necessari! <P> <H2><A NAME="ss26.2">26.2 Panoramica del sistema server</A> </H2> <P>Noi offriamo account in PPP (e SLIP) e account shell usando la stessa coppia nome utente/password. Ciò ha il vantaggio (per noi) che gli utenti necessitano solo di un account e lo possono usare per tutti i tipi di connettività. <P> <P>Poiché siamo un'organizzazione educativa, non facciamo pagare il nostro staff e gli studenti per l'accesso, e quindi non dobbiamo preoccuparci di problematiche di accredito e messa in conto (accounting e charging). <P> <P>Abbiamo un firewall tra il nostro sito ed Internet, e ciò restringe alcuni accessi agli utenti in quanto le linee di dial up sono dentro il nostro firewall (di Internet) (per ragioni abbastanza ovvie, i dettagli degli altri firewall interni non sono qui presentati, e sono comunque irrilevanti). <P> <P>Il processo che un utente deve seguire per stabilire una connessione PPP nel nostro sito (una volta che sia in possesso di un account valido naturalmente) è: <UL> <LI>chiamare il dialer rotativo (ovvero un unico numero telefonico connesso ad un banco di modem, dei quali verrà usato il primo libero);</LI> <LI>fare il login usando un nome utente e password validi;</LI> <LI>al prompt della shell, lanciare il comando <CODE>ppp</CODE> per avviare il PPP sul server;</LI> <LI>avviare il PPP sul proprio PC (il fatto che questi funzioni in Windows, DOS, Linux MAC OS o quant'altro è un suo problema).</LI> </UL> <P> <P>Il server usa un file <CODE>/etc/ppp/options.ttyXX</CODE> per ognuna delle porte d'ingresso che imposta il numero IP remoto per l'allocazione degli IP dinamici. Il server usa instradamenti proxyarp per i client remoti (impostati tramite l'apposita opzione di pppd). Ciò ovvia la necessità di far girare routed o gated. <P> <P>Quando gli utenti riappendono dalla loro parte, il pppd se ne accorge e dice al modem di riattaccare, portando giù, nello stesso tempo, la connessione PPP. <P> <H2><A NAME="ss26.3">26.3 Procurarsi il software che serve</A> </H2> <P>Sarà necessario il software seguente: <UL> <LI>Linux, propriamente compilato per includere le opzioni necessarie;</LI> <LI>la giusta versione di pppd per il proprio kernel;</LI> <LI>un programma 'getty' che gestisca in modo intelligente le comunicazioni via modem.<BR> Noi usiamo getty_ps2.0.7h, ma anche mgetty è altamente considerato. Da quel che ho capito mgetty riesce a riconoscere una chiamata che sta usando pap/chap (pap è lo standard per Windows95) e a chiamare automaticamente pppd, ma non ho ancora avuto il tempo di provarlo;</LI> <LI>un domain name server (DNS) funzionante ed accessibile agli utenti in dial up.<BR> Si dovrebbe veramente far girare un proprio DNS se possibile...</LI> </UL> <P> <H2><A NAME="ss26.4">26.4 Configurare un accesso standard (accesso shell)</A> </H2> <P>Prima di poter configurare il proprio server PPP, la propria macchina Linux dev'essere in grado di gestire accessi standard di dial up. <P> <P><B>Questo HOWTO NON tratta la configurazione di questo. Si veda la documentazione del getty scelto e il Serial HOWTO per informazioni in proposito.</B> <P> <H2><A NAME="ss26.5">26.5 Impostare i file delle opzioni di PPP</A> </H2> <P>Bisognerà impostare un <CODE>/etc/ppp/options</CODE> generico con le opzioni comuni per tutte le porte di dial up. Le opzioni da noi usate sono: <P> <HR> <PRE> asyncmap 0 netmask 255.255.254.0 proxyarp lock crtscts modem </PRE> <HR> <P> <P>Nota: noi NON usiamo nessun instradamento (ovvio) ed in particolare non c'è l'opzione defaultroute. La ragione di ciò è che tutto quello che è richiesto di fare (come server PPP) è di instradare i pacchetti <B>dal</B> client PPP verso la propria LAN/Internet e di instradare i pacchetti dalla propria LAN ed oltre <B>verso</B> il client. <P> <P>Tutto ciò che serve per far questo è un instradamento di tipo host verso la macchina client e l'uso dell'opzione 'proxyarp' di pppd. <P> <P>L'opzione 'proxyarp' imposta (sorpresa) una voce di proxy ARP nelle tabella ARP del server PPP che in pratica dice 'spedisci a me tutti i pacchetti destinati al client PPP'. Questo è il modo più semplice per impostare un instradamento ad un unico client PPP, ma non la si può usare se si fa l'instradamento tra due LAN: si devono usare gli appositi instradamenti di rete i quali non possono usare proxy ARP. <P> <P>Quasi certamente si vorrà fornire un'allocazione dinamica di numeri IP agli utenti in dial up. Ciò lo si può fare allocando un numero IP per ognuna delle porte di dial up. Ora si crei un <CODE>/etc/ppp/options.ttyXX</CODE> per ognuna delle porte. <P> <P>In questo si metta semplicemente il numero IP locale (server) ed il numero IP che viene usato per quella porta. Per esempio: <P> <HR> <PRE> kepler:slip01 </PRE> <HR> <P>In particolare, si noti che si possono usare nomi host validi in questo file (ho scoperto che ricordo solamente i numeri IP delle macchine e dei dispositivi critici nella mia rete, i nomi sono molto più significativi!). <P> <H2><A NAME="ss26.6">26.6 Impostare pppd per permettere agli utenti di eseguirlo (con successo)</A> </H2> <P>Poiché l'avvio di una connessione PPP implica la configurazione di un dispositivo del kernel (un'interfaccia di rete) e la manipolazione della tabella di instradamento del kernel, sono richiesti privilegi particolari, in pratica i pieni privilegi di root. <P> <P>Fortunatamente, pppd è stato progettato per essere eseguito in modo sicuro in setuid a root. Quindi bisognerà fare <HR> <PRE> chmod u+s /usr/sbin/pppd </PRE> <HR> <P> <P>Se si vanno a vedere i permessi del file, dovrebbero apparire come <HR> <PRE> -rwsr-xr-x 1 root root 74224 Apr 28 07:17 /usr/sbin/pppd </PRE> <HR> <P> <P>Se non lo si fa, gli utenti non saranno in grado di attivare la loro connessione ppp. <P> <H2><A NAME="ss26.7">26.7 Impostare un alias globale per pppd</A> </H2> <P>Per poter semplificare le cose ai nostri utenti PPP, abbiamo creato un alias globale (in /etc/bashrc) cosicché con un semplice comando possano lanciare ppp sul server una volta fatto il login. <P> <P>Questi può essere una cosa del tipo <HR> <PRE> alias ppp="exec /usr/sbin/pppd -detach" </PRE> <HR> <P> <P>Quello che fa è: <UL> <LI>exec : questo implica il rimpiazzo del programma in esecuzione (in questo caso la shell) con il programma che è eseguito;</LI> <LI>pppd -detach : avvia pppd e NON fa il fork in background. Ciò assicura che quando il pppd esce non ci sono ancora processi in giro.</LI> </UL> <P>Quando un utente fa il login in questo modo, apparirà nell'output del comando 'w' come <HR> <PRE> 6:24pm up 3 days, 7:00, 4 users, load average: 0.05, 0.03, 0.00 User tty login@ idle JCPU PCPU what hartr ttyC0 3:05am 9:14 - </PRE> <HR> <P> <P>E questo è quanto...vi avevo detto che questo era un semplice sistema server PPP! <P> <HR> <A HREF="PPP-HOWTO-27.html">Avanti</A> <A HREF="PPP-HOWTO-25.html">Indietro</A> <A HREF="PPP-HOWTO.html#toc26">Indice</A> </BODY> </HTML>