<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE guide SYSTEM "/dtd/guide.dtd">
<!-- $Header: /var/cvsroot/gentoo/xml/htdocs/doc/it/vpnc-howto.xml,v 1.7 2012/11/06 12:04:29 ago Exp $ -->

<guide lang="it">
<title>Guida all'uso di vpnc con Gentoo</title>

<author title="Autore">
  <mail link="dhaskew@earthlink.net">David H. Askew</mail>
</author>
<author title="Contributi">
  <mail link="swift@gentoo.org">Sven Vermeulen</mail>
</author>
<author title="Contributi">
  <mail link="fauli@gentoo.org">Christian Faulhammer</mail>
</author>
<author title="Contributi">
  <mail link="fischer@unix-ag.uni-kl.de">Thomas Fischer</mail>
</author>
<author title="Redazione">
  <mail link="nightmorph"/>
</author>
<author title="Traduzione">
  <mail link="dark.knight.ita@gmail.com">Marco Leogrande</mail>
</author>

<abstract>
Questo documento descrive come connettere la propria macchina ad un
concentratore VPN Cisco, utilizzando vpnc per gestire la connessione.
</abstract>

<!-- The content of this document is licensed under the CC-BY-SA license -->
<!-- See http://creativecommons.org/licenses/by-sa/2.5 -->
<license/>

<version>4</version>
<date>2012-04-22</date>

<chapter>
<title>Introduzione</title>
<section>
<body>

<p>
Se si sta leggendo questa guida, molto probabilmente è necessario collegarsi
alla propria rete aziendale da casa oppure in viaggio. Molte compagnie
utilizzano un concentratore VPN Cisco 3000 e probabilmente molti utenti di
Linux alle prime armi credono che sia possibile collegarsi ad esso soltanto
utilizzando Windows. Questo documento spiega come connettersi ad una VPN Cisco
e come creare un tunnel funzionante usando la propria workstation Gentoo.
</p>

</body>
</section>
<section>
<title>Questo documento contiene:</title>
<body>

<ul>
  <li>Una guida di base per <c>vpnc</c></li>
  <li>Una discussione sui problemi di DNS e routing in relazione alle VPN</li>
  <li>Esempi di gestione di sessioni VPN</li>
  <li>Suggerimenti (si spera) utili</li>
</ul>

</body>
</section>
<section>
<title>Questo documento non contiene:</title>
<body>

<ul>
  <li>Una guida dettagliata alle tecnologie di crittazione su VPN</li>
  <li>Una spiegazione dettagliata delle caratteristiche di <c>vpnc</c></li>
</ul>

</body>
</section>
<section>
<title>Assunzioni</title>
<body>

<p>
Prima di iniziare, si assume che:
</p>

<ul>
  <li>Gentoo sia installata</li>
  <li>Sia disponibile un accesso ad Internet</li>
  <li>Ci si voglia connettere ad un concentratore VPN Cisco 3000</li>
  <li>Si sappia come configurare, compilare ed installare un nuovo kernel</li>
</ul>

</body>
</section>
</chapter>

<chapter>
<title>Configurazione del kernel</title>
<section>
<body>

<p>
Per permettere a Linux di aprire una connessione VPN, nel kernel deve essere
stata abilitata la voce <e>Universal TUN/TAP device driver support</e>. Di cosa
si tratta e perché è necessaria? Segue una breve spiegazione, estratta dal menù
di configurazione del kernel:
</p>

<pre caption="CONFIG_TUN">
TUN/TAP fornisce a programmi che girano nello spazio utente la possibilità di
ricevere ed inviare pacchetti. Esso può essere visto come un semplice
dispositivo punto-punto o Ethernet, che riceve pacchetti da un programma
piuttosto che da una scheda fisica; in maniera simile funziona l'invio di dati.

Quando un programma apre /dev/net/tun, il driver crea e registra il dispositivo
di rete associato tunX o tapX. Una volta che il programma chiude il dispositivo,
il driver rimuove automaticamente il device tunXX o tapXX e tutte le voci di
instradamento corrispondenti.
</pre>

<p>
È possibile verificare se il supporto a TUN/TAP è abilitato nel kernel con il
seguente comando:
</p>

<pre caption="Controllare la configurazione del kernel">
# <i> grep "TUN" /usr/src/linux/.config</i>
CONFIG_INET_TUNNEL=m
# CONFIG_INET6_TUNNEL is not set
# CONFIG_IPV6_TUNNEL is not set
<comment>(TUN/TAP abilitato come modulo)</comment>
CONFIG_TUN=m
# CONFIG_8139TOO_TUNE_TWISTER is not set
</pre>

<p>
Come mostrato sopra, <c>CONFIG_TUN=m</c> è compilato come modulo. Se, invece,
questa voce è disabilitata nella propria configurazione, abilitarla nel proprio
kernel e procedere con ricompilazione, installazione e riavvio prima di
continuare con i passi successivi di questa guida.
</p>

<pre caption="Percorso dell'opzione nel menu di configurazione del kernel">
Device Drivers  ---&gt;
  Network device support  ---&gt;
    [*] Universal TUN/TAP device driver support
</pre>

<p>
Se il supporto a TUN/TAP è incluso direttamente nel kernel, dovrebbe essere
possibile trovare queste informazioni nell'output di <c>dmesg</c>:
</p>

<pre caption="Controllare l'output di dmesg">
# <i>dmesg | grep TUN</i>
Universal TUN/TAP device driver 1.5 (C)1999-2002 Maxim Krasnyansky
</pre>

<p>
Se il supporto a TUN/TAP è stato compilato come modulo, è necessario prima
caricare il modulo <c>tun</c>:
</p>

<pre caption="Caricare il modulo tun">
# <i>modprobe tun</i>
# <i>lsmod</i>
Module                  Size  Used by
tun                     7296  0
</pre>

<p>
Ora che il modulo <c>tun</c> è stato caricato, controllare l'output di
<c>dmesg</c>. Si dovrebbe ottenere un risultato simile al seguente:
</p>

<pre caption="Controllare l'output di dmesg">
# <i>dmesg | grep TUN</i>
Universal TUN/TAP device driver 1.5 (C)1999-2002 Maxim Krasnyansky
</pre>

</body>
</section>
</chapter>

<chapter>
<title>Installare il software necessario</title>
<section>
<body>

<p>
Adesso che si ha una configurazione funzionante del kernel, è necessario
installare <c>net-misc/vpnc</c>:
</p>

<pre caption="Installare vpnc">
# <i>emerge -av net-misc/vpnc</i>
</pre>

<p>
Assicurati di controllare che i set di USE supportati e vedere se 
la loro combinazione si applica al tuo ambiente. Se incontrerai problemi 
futuri con questo errore, dovrai abilitare la USE hybrid-auth.
</p>

<pre caption="vpnc si lamenta sulla modalita hybrid/cert">
vpnc è stato compilato senza il supporto openssl: non si può
usare la modalità hybrid/cert.
</pre>

</body>
</section>
</chapter>

<chapter>
<title>Configurazione d'esempio</title>
<section>
<body>

<p>
In modo da rendere le sezioni seguenti più chiare, è necessaria una
configurazione d'esempio sulla quale lavorare. Per gli scopi di questa guida,
si supponga di avere una rete casalinga composta da diversi computer. Tutti i
computer sono sulla rete 192.168.0.0 / 255.255.255.0 . La LAN in questione è
gestita da una macchina Gentoo che usa un firewall iptables, DHCP, DNS con
cache, ecc... e che nasconde la LAN dietro l'indirizzo IP pubblico ricevuto
dall'ISP. Si supponga di voler fare VPN da un computer della LAN con il computer
del proprio ufficio.
</p>

<p>
La macchina d'esempio per questa guida è configurata a questo modo:
</p>

<pre caption="Configurazione del proprio computer">
<comment>(Configurazione del server dei nomi)</comment>
# <i>cat /etc/resolv.conf</i>
nameserver      192.168.0.1

<comment>(Configurazione di rete)</comment>
# <i>cat /etc/hosts</i>
127.0.0.1       desktop localhost
192.168.0.1     router
192.168.2.2     mediacenter

<comment>(Configurazione dell'interfaccia)</comment>
# <i>ifconfig -a</i>
eth0      Link encap:Ethernet  HWaddr 00:11:2F:8D:08:08
          inet addr:192.168.0.2  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::211:2fff:fe8d:808/64 Scope:Link
          UP BROADCAST NOTRAILERS RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3657889 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2305893 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:2193722103 (2092.0 Mb)  TX bytes:1415104432 (1349.5 Mb)
          Interrupt:185 Memory:fac00000-0

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:35510 errors:0 dropped:0 overruns:0 frame:0
          TX packets:35510 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:16023838 (15.2 Mb)  TX bytes:16023838 (15.2 Mb)

<comment>(Informazioni di instradamento)</comment>
# <i>netstat -r</i>
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.0.0     *               255.255.255.0   U         0 0          0 eth0
loopback        desktop         255.0.0.0       UG        0 0          0 lo
default         router          0.0.0.0         UG        0 0          0 eth0
</pre>

</body>
</section>
</chapter>

<chapter>
<title>Configurare vpnc</title>
<section>
<body>

<p>
Adesso che <c>vpnc</c> è installato, verranno discusse le basi per la sua
configurazione a partire dall'esempio precedente. Il file di configurazione per
le impostazioni di connessione <c>vpnc</c> può essere collocato in un paio di
posizioni, a seconda di quanti profili è necessario impostare. Normalmente,
<c>vpnc</c> cerca inizialmente in <path>/etc/vpnc/default.conf</path> e poi,
se quel file non viene trovato, in <path>/etc/vpnc.conf</path>. Poiché in
questa guida viene configurato un solo profilo, verrà utilizzato il file
<path>/etc/vpnc.conf</path>. Prestare attenzione al fatto che il file
<path>/etc/vpnc/default.conf</path> <e>non</e> sia presente nel filesystem.
</p>

<pre caption="File /etc/vpnc.conf di esempio">
IPSec gateway vpngateway.domain.org
IPSec ID id_del_gruppo
IPSec secret password_di_gruppo
Xauth username nomeutente_rete
Xauth password password_rete
</pre>

<p>
Il file di configurazione di esempio dovrebbe essere modificato con i valori
appropriati. L'opzione <e>gateway</e> <c>vpngateway.domain.org</c> può essere
espressa sia come un nome di dominio completamente qualificato, oppure come
indirizzo IP. Le opzioni <e>ID</e> e <e>secret</e> dovrebbero essere riempite
con le informazioni ricevute dall'amministratore di rete. Se non è possibile
ottenere questi dati, ma è disponibile una configurazione funzionante su una
macchina Windows con il client Cisco VPN ufficiale, basta allora esportare il
profilo da quell'applicazione. Le opzioni <e>username</e> e <e>password</e>
sono quelle utilizzate per l'autenticazione di rete, come ad esempio quelle
dell'account di un dominio di Windows NT.
</p>

<p>
Quando si esporta un profilo da una macchina Windows, nella maggior parte dei
casi si ottiene un file con estensione <path>.pcf</path>. Questo file contiene
tutte le informazioni necessarie. Ecco un esempio:
</p>

<pre caption="File profile.pcf di esempio">
[main]
Description=
Host=VPNGATEWAY.DOMAIN.ORG
AuthType=1
GroupName=id_del_gruppo
GroupPwd=
enc_GroupPwd=F3256220AA200A1D532556024F4F314B0388D48B0FBF2DB12
EnableISPConnect=0
ISPConnectType=0
ISPConnect=FOOBAR
ISPCommand=
Username=
SaveUserPassword=0
UserPassword=
enc_UserPassword=
NTDomain=
EnableBackup=0
BackupServer=
EnableMSLogon=1
MSLogonType=0
EnableNat=1
TunnelingMode=0
TcpTunnelingPort=10000
CertStore=0
CertName=
CertPath=
CertSubjectName=
CertSerialHash=00000000000000000000000000000000
SendCertChain=0
VerifyCertDN=
DHGroup=2
ForceKeepAlives=0
PeerTimeout=90
EnableLocalLAN=0
EnableSplitDNS=1
ForceNetLogin=0
</pre>

<p>
Nell'esempio in alto, notare le variabili <c>Host</c>, <c>GroupName</c> e
<c>enc_GroupPwd</c>. Le opzioni <c>Username</c> e <c>UserPassword</c> potrebbero
anche non essere esportate, a seconda della propria configurazione. Per generare
una configurazione funzionante a partire da un file come questo, usare
<c>pcf2vpnc</c>, incluso con vpnc.
</p>

<note>
È possibile decrittare la password con l'aiuto di <c>cisco-decrypt</c>, fornito
con le versioni più recenti di vpnc.
</note>

</body>
</section>
<section>
<title>Testare la propria configurazione</title>
<body>

<p>
Una volta che il file di configurazione è stato creato, è tempo di verificare
il funzionamento delle proprie impostazioni. Per far partire <c>vpnc</c> usare:
</p>

<pre caption="Esempio d'uso di vpnc">
# <i>vpnc</i>
Enter password for username@vpngateway.domain.org:
VPNC started in background (pid: 14788)...
</pre>

<p>
Come evidenziato dall'output del comando precedente, una volta lanciato
<c>vpnc</c> (come utente root), viene richiesta la password di rete o di
dominio, che non viene mostrata durante la digitazione. Dopo l'inserimento
della password, il processo <c>vpnc</c> si sposta automaticamente in
background.
</p>

<note>
Se è stata specificata l'opzione <c>Xauth password</c> nel proprio file di
configurazione, la password non verrà richiesta durante l'avvio di <c>vpnc</c>.
Allo stesso modo, se <c>vpnc</c> ha bisogno di ulteriori informazioni non
specificate nel file di configurazione, compreso il caso in cui queste siano
state omesse per dimenticanza, il programma le richiederà interattivamente.
</note>

<pre caption="Esempio di modifiche eseguite da vpnc alla configurazione
delle interfacce">
# <i> ifconfig -a</i>
eth1      Link encap:Ethernet  HWaddr 00:11:2F:8D:08:08
          inet addr:192.168.0.2  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::211:2fff:fe8d:808/64 Scope:Link
          UP BROADCAST NOTRAILERS RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2101119 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1577559 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1757862627 (1676.4 Mb)  TX bytes:732200131 (698.2 Mb)
          Interrupt:177 Memory:faa00000-0

sit0      Link encap:IPv6-in-IPv4
          NOARP  MTU:1480  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:192.168.160.42  P-t-P:192.168.160.42  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1412  Metric:1
          RX packets:1 errors:0 dropped:0 overruns:0 frame:0
          TX packets:9 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500
          RX bytes:60 (60.0 b)  TX bytes:616 (616.0 b)

</pre>

<pre caption="Esempio di modifiche eseguite da vpnc alla tabella di
instradamento">
# <i>netstat -r</i>
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
vpn01.domain.or router          255.255.255.255 UGH    1500 0          0 eth1
192.168.0.0     *               255.255.255.0   U         0 0          0 eth1
loopback        desktop         255.0.0.0       UG        0 0          0 lo
default         *               0.0.0.0         U         0 0          0 tun0
</pre>

<p>
Come è possibile desumere dall'output dei comandi precedenti, <c>vpnc</c> ha
eseguito le seguenti operazioni:
</p>

<ul>
  <li>
    Creazione dell'interfaccia di rete tun0, dispositivo virtuale che permette
    la gestione del traffico sul tunnel VPN
  </li>
  <li>
    Ottenimento dell'indirizzo IP per il dispositivo tun0 dal proprio
    provider VPN
  </li>
  <li>Impostazione della route predefinita verso il gateway VPN</li>
</ul>

<p>
A questo punto, la propria macchina è capace di comunicare con gli host via
VPN. poiché <c>vpnc</c> indirizza la route predefinita verso il gateway VPN,
tutto il traffico di rete generato dalla macchina attraverserà il tunnel VPN,
anche se destinato alla rete Internet o qualsiasi altra rete non specificata
manualmente. Per alcuni questa connessione potrebbe essere soddisfacente, ma
nella maggior parte delle situazioni è necessario eseguire alcune azioni
aggiuntive.
</p>

<p>
Ad esempio, sarebbe desiderabile avere anche:
</p>

<ul>
  <li>Il servizio DNS per la VPN</li>
  <li>
    Una tabella di routing che invii sul tunnel il solo traffico destinato
    effettivamente per la VPN. In questo modo, si potrebbe continuare ad
    utilizzare Internet mentre la VPN è attiva, senza che il traffico personale
    (web, p2p, ecc...) viaggi attraverso il tunnel.
  </li>
  <li>
    Uno script che gestisca tutte queste azioni, in quanto <c>vpnc</c>,
    semplicemente, non basta.
  </li>
</ul>

<p>
Quanto si è pronti a terminare la sessione VPN, eseguire <c>vpnc-disconnect</c>.
Un esempio è mostrato in basso.
</p>

<note>
Non disconnettersi in questo momento, in quanto è necessario ancora provare
qualche comando. L'esempio è riportato soltanto per scopi informativi.
</note>

<pre caption="vpnc-disconnect">
# <i>vpnc-disconnect</i>
Terminating vpnc daemon (pid: 26250)
</pre>

</body>
</section>
</chapter>

<chapter>
<title>Impostare il DNS</title>
<section>
<body>

<p>
Sfortunatamente, <c>vpnc</c> non gestisce l'impostazione e la gestione del DNS
sul tunnel appena creato. La decisione su come gestire il DNS è lasciata
all'utente. Anche se è possibile semplicemente sovrascrivere
<path>/etc/resolv.conf</path> al momento della connessione, una soluzione del
genere utilizzerebbe il DNS della VPN per tutte le query DNS, anche se il
traffico legato ad essa non è destinato al tunnel VPN. Questo metodo di
connessione è molto semplice ed è adatto per chi vuole instaurare la VPN,
eseguire il proprio lavoro e disconnettersi. Se, però, si ha bisogno di
lasciare attivo il tunnel per lunghi periodi di tempo e non si vuole che il
DNS dell'ufficio risolva i nomi per il traffico personale, continuare con la
lettura: in caso contrario, saltare pure questa sezione.
</p>

<p>
Una configurazione ideale permetterebbe all'utente la separazione delle query
DNS in due categorie: quelle legate alla VPN e tutte le altre. In questo modo,
tutte le query DNS relative alla VPN riceverebbero risposta dai server DNS
collocati all'altra estremità del tunnel VPN, mentre tutte le altre richieste
sarebbero servite dal DNS locale o del proprio ISP. A breve verrà mostrato come
adottare questa soluzione.
</p>

<note>
Per gli scopi di questa guida, le query DNS sono considerate legate alla VPN se
richiedono la risoluzione di un nome appartenente al dominio example.org,
come ad esempio host1.example.org o server1.example.org.
</note>

<p>
Per poter adottare questa soluzione è necessario installare un server DNS
locale: a dispetto delle apparenze, la procedura è molto semplice. Numerosi
pacchetti software offrono le funzionalità di server DNS, ma per gli scopi di
questa guida verrà utilizzato <c>dnsmasq</c>. Installarlo come segue:
</p>

<note>
Questo server DNS non sarà raggiungibile dalla rete e risponderà soltanto alle
richieste provenienti da localhost, <c>127.0.0.1</c>.
</note>

<pre caption="Installare dnsmasq">
# <i>emerge dnsmasq</i>
</pre>

<p>
In seguito è necessario aggiungere un'opzione alla configurazione di
<c>dnsmasq</c>. Sostituire .example.org con il reale dominio e l'indirizzo IP
con quello di un server DNS valido che appartenga al tunnel VPN.
</p>

<pre caption="/etc/conf.d/dnsmasq">
Config file for /etc/init.d/dnsmasq

# Vedere la pagina di manuale dnsmasq(8) per la lista delle opzioni.
DNSMASQ_OPTS="-S /.example.org/192.168.125.10"
</pre>

<p>
Successivamente, accertarsi che la prima voce in <path>/etc/resolv.conf</path>
sia quella di localhost, <c>127.0.0.1</c>, seguita da quelle dei server DNS
di backup, utilizzati se dnsmasq non è attivo, oppure se esso ha bisogno di
inoltrare una query DNS della quale non ha in cache la risposta. Un file
<path>/etc/resolv.conf</path> di esempio è riportato in basso.
</p>

<pre caption="/etc/resolv.conf">
nameserver 127.0.0.1
nameserver 192.168.0.1
</pre>

<p>
Adesso che è stato configurato il DNS per il proprio tunnel VPN, è necessario
far partire <c>dnsmasq</c>.
</p>

<pre caption="Avviare dnsmasq">
# <i>/etc/init.d/dnsmasq start</i>
# <i>rc-update add dnsmasq default</i>
</pre>

</body>
</section>
</chapter>

<chapter>
<title>Configurare la tabella di routing</title>
<section>
<body>

<p>
In uno scenario ideale, solo il traffico realmente destinato alla VPN dovrebbe
viaggiare sul tunnel. Allo stato attuale delle cose, invece, tutti i dati
attraversano il tunnel, a meno che non vengano specificate delle route
aggiuntive. Per poter correggere questa situazione, è necessario conoscere
quali reti siano raggiungibili attraverso la VPN. Il modo più semplice per
farlo è chiedere al proprio amministratore di rete, ma talvolta costui potrebbe
essere riluttante al rispondere a domande come questa. Se il proprio
amministratore non fornisce alcuna risposta, bisognerà provare a scoprire
da soli le reti raggiungibili.
</p>

<p>
Quando viene creato il tunnel VPN, <c>vpnc</c> imposta la route predefinita
affinché passi attraverso il tunnel. Per fare in modo che tutto torni alla
normalità, bisogna reimpostare la route predefinita al suo valore iniziale.
</p>

<pre caption="Reimpostare la route di default">
# <i>route add default gw 192.168.0.1</i>
</pre>

<p>
In precedenza, quando è stato configurato il DNS per la VPN, è stato scelto
il server che si occupa della risoluzione dei nomi per il dominio example.org .
È necessario specificare una route per il raggiungimento della sottorete
192.168.125.0 (che include il server DNS) affinché la risoluzione dei nomi
avvenga come previsto.
</p>

<pre caption="Aggiungere una route per il DNS">
# <i>route add -net 192.168.125.0 netmask 255.255.255.0 dev tun0</i>
</pre>

<p>
A questo punto, bisogna aggiungere le route addizionali per le altre reti
conosciute, come quella per la sottorete 192.168.160.0, che include l'indirizzo
IP ricevuto dal dispositivo virtuale TUN/TAP. Se l'amministratore di rete ha
gentilmente fornito queste informazioni, bene. Altrimenti, è necessario fare
ping verso gli host ai quali ci si connetterà più frequentemente e quindi farsi
un'idea della routing table a partire dal risultato di questi tentativi.
</p>

<note>
Per come è stata strutturata questa guida, quando si usano i servizi della rete
VPN utilizzando il loro nome bisogna specificare l'intero nome di dominio, come
in: webserver1.example.org
</note>

<pre caption="Esempio di ping">
# <i>ping intranet1.example.org</i>
PING intranet1.example.org (172.25.230.29) 56(84) bytes of data.


--- intranet1.example.org ping statistics ---
18 packets transmitted, 0 received, 100% packet loss, time 16997ms
</pre>

<p>
Come è visibile nell'esempio precedente, i tentativi di ping verso
<c>intranet1.example.org</c> sono falliti. Questo indica che è necessario
aggiungere una route specifica per quella sottorete.
</p>

<pre caption="Esempio di comando per l'aggiunta di una nuova sottorete">
# <i>route add -net 172.25.230.0 netmask 255.255.255.0 dev tun0</i>
</pre>

<p>
Dopo alcune sessioni di ping e di aggiunta delle relative route alla tabella di
instradamento, l'elenco delle reti raggiungibili via VPN dovrebbe essere stato
completato ed il tunnel dovrebbe funzionare con successo.
</p>

</body>
</section>
</chapter>

<chapter>
<title>Gestire la connessione</title>
<section>
<title>Richiamare vpnc quando richiesto</title>
<body>

<p>
Segue uno script di esempio per gestire la connessione VPN. È possibile
utilizzarlo per avviare (da root) la connessione VPN da una finestra di
terminale. Per terminare la connessione basta semplicemente premere invio.
Ovviamente è necessario apportare le modifiche del caso, come ad esempio
l'aggiunta delle route necessarie.
</p>

<pre caption="Esempio di script per la gestione della sessione">
#!/bin/bash

source /sbin/functions.sh

ebegin "Connessione alla VPN"
vpnc
eend

ebegin "Modifica della tabella di instradamento"
route add default gw 192.168.0.1
route add -net 172.25.230.0 netmask 255.255.255.0 dev tun0
route add -net 192.168.160.0 netmask 255.255.255.0 dev tun0
route add -net 192.168.125.0 netmask 255.255.255.0 dev tun0
eend

einfo "Premere un tasto per disconnettersi ..."

read $disconnect

ebegin "Disconnessione dalla VPN"
vpnc-disconnect
eend
ebegin "Riconfigurazione della tabella di instradamento"
route add default gw 192.168.0.1
eend

einfo "La VPN dovrebbe ora essere disconnessa"
</pre>

</body>
</section>
<section>
<title>Lanciare vpnc all'avvio</title>
<body>

<p>
La versione 0.4.0-r1 di vpnc viene distribuita con un file di init
(<path>/etc/init.d/vpnc</path>) che è capace di gestire configurazioni multiple.
Lo script predefinito cerca il file <path>/etc/vpnc/vpnc.conf</path>, ma è
comunque possibile utilizzare tutte le configurazioni che si desidera. Prima e
dopo dell'arresto o dell'avvio del servizio, possono essere eseguiti degli
script personalizzati, che devono avere un nome simile a quello del
corrispettivo script di init (a partire dalla versione 0.5.1-r1). I loro nomi
terminano in <path>-preup.sh</path>, <path>-postup.sh</path>,
<path>-predown.sh</path> e <path>-postdown.sh</path> e vanno salvati nella
directory <path>/etc/init.d/scripts.d/</path>. La convenzione dei nomi è
riportata nella tabella seguente.
</p>

<table>
  <tr>
    <th>nome dello script di init</th>
    <th>file di configurazione richiesto</th>
    <th>some dello script di preup</th>
  </tr>
  <tr>
    <ti>/etc/init.d/vpnc</ti>
    <ti>/etc/vpnc/vpnc.conf</ti>
    <ti>/etc/vpnc/scripts.d/vpnc-preup.sh</ti>
  </tr>
  <tr>
    <ti>/etc/init.d/vpnc.work</ti>
    <ti>/etc/vpnc/work.conf</ti>
    <ti>/etc/vpnc/scripts.d/work-preup.sh</ti>
  </tr>
</table>

<p>
Aggiungere vpnc al runlevel di default utilizzando i comandi seguenti (in questo
caso, per utilizzare la configurazione standard). Ricordarsi di aggiungere il
modulo tun (se il supporto è stato, appunto, compilato come modulo) ai
meccanismi di caricamento automatico dei moduli all'avvio del kernel.
</p>

<pre caption="Aggiungere vpnc tra gli script avviati nel runlevel di default">
# <i>rc-update add vpnc default</i>
</pre>

<p>
Se non si desidera salvare la propria password nel file di configurazione, è
possibile dire allo script di inizializzazione di mostrare tutto l'output e i
prompt sullo standard output modificando <path>/etc/conf.d/vpnc</path>.
Impostare la variabile <c>VPNCOUTPUT</c> a yes o no, dove la sua impostazione
predefinita è non visualizzazione l'output a video.
</p>

<note>
Gli script di init non gestiscono la separazione del traffico DNS, ma è
possibile usare degli script personalizzati. Fare riferimento alla sezione
<uri link="#tipsscript">Suggerimenti</uri>, più in basso.
</note>

</body>
</section>
</chapter>

<chapter>
<title>Suggerimenti</title>
<section>
<title>Accesso grafico da remoto</title>
<body>

<p>
Se si cerca un'applicazione per Linux che supporti l'RDP (Remote Desktop
Protocol), provare <c>grdesktop</c>. È un interfaccia grafica scritta in GTK+
che ben si adatta ad un desktop Gnome, anche se non dipende da esso. Se non si
ha bisogno delle finestre di dialogo fornite da grdesktop, installare soltanto
<c>rdesktop</c>. Tra l'altro, grdesktop è semplicemente un'interfaccia per
rdesktop.
</p>

<p>
Se si usa KDE, provare <c>kvpnc</c>, una interfaccia grafica matura per l'uso
delle VPN.
</p>

<p>
Per connettersi ad una macchina Windows che non possiede un record DNS, se si
dispone dell'indirizzo di un server WINS, è possibile utilizzare un programma
chiamato <c>nmblookup</c> che permette di richiedere al server WINS l'indirizzo
dell'host al quale ci si vuole connettere. Sfortunatamente è necessario
installare <c>samba</c> per ottenere questo strumento, però se si ha bisogno di
lavorare con macchine Windows questo pacchetto risulta molto utile, in quanto
include altri programmi utili in circostanze simili.
</p>

<pre caption="Installare samba">
# <i>emerge -av samba</i>
</pre>

<p>
Quando è terminata l'installazione di Samba, provare <c>nmblookup</c> chiedendo
al server WINS raggiungibile all'indirizzo 192.168.125.11 informazioni su un
host chiamato wintelbox1.
</p>

<pre caption="esempio per nmblookup">
# <i>nmblookup -U 192.168.125.11 -R 'wintelbox1'</i>
querying wintelbox1 on 192.168.125.11
172.25.230.76 wintelbox1
</pre>

</body>
</section>
<section id="tipsscript">
<title>Script personalizzati all'avvio</title>
<body>

<p>
Gli script personalizzati per il file di <path>init.d</path> possono essere
utilizzati per impostare un routing definito dall'utente per la connessione
vpnc. Gli esempi in basso mostrano come impostare la tabella di instradamento
affinché solo le connessioni verso 123.234.x.x passino attraverso la VPN, mentre
tutte le altre usano il default gateway. L'esempio usa work-preup.sh per salvare
il default gateway corrente prima di avviare vpnc (che reimposta il default
gateway usando la connessione VPN). Quando vpnc si è avviato,
<path>work-postup.sh</path> cancella questo nuovo default gateway, ripristina il
vecchio default gateway ed imposta la route per tutte le connessioni verso
123.234.x.x attraverso la connessione vpnc.
</p>

<pre caption="/etc/vpnc/scripts.d/work-preup.sh">
#!/bin/sh
route -n | grep -E '^0.0.0.0 ' | cut -c 17-32 >/var/tmp/defaultgw
</pre>

<pre caption="/etc/vpnc/scripts.d/work-postup.sh">
#!/bin/sh
route del -net 0.0.0.0 netmask 0.0.0.0 dev tun1
route add default gw $(cat /var/tmp/defaultgw)
route add -net 123.234.0.0 netmask 255.255.0.0 dev tun1
</pre>

<p>
Gli script di esempio assumono che la connessione vpnc usi tun1 come dispositivo
TUN. È possibile impostare il nome del dispositivo nel file di configurazione
per la connessione.
</p>

<pre caption="/etc/vpnc/work.conf">
Interface name tun1
IPSec gateway vpn.mywork.com
Pidfile /var/run/vpnc.work.pid
</pre>

</body>
</section>
</chapter>

<chapter>
<title>Collegamenti utili</title>
<section>
<body>

<ul>
  <li>
    <uri link="http://www.unix-ag.uni-kl.de/~massar/vpnc/">Homepage di
    vpnc</uri>
  </li>
  <li>
    <uri link="http://home.gna.org/kvpnc/en/index.html">Homepage di kvpnc</uri>
  </li>
  <li>
    <uri link="http://www.nongnu.org/grdesktop/">Homepage di grdesktop</uri>
  </li>
</ul>

</body>
</section>
</chapter>

<chapter>
<title>Note finali</title>
<section>
<body>

<p>
Al termine di questa guida, dovrebbe essere possibile connettersi ad una VPN di
propria scelta ed essere sulla buona strada per il lavoro da remoto. Non esitare
ad aprire un bug su <uri link="http://bugs.gentoo.org">bugs.gentoo.org</uri> nel
caso si scovi un errore nella guida, o anche solo per un'aggiunta o una
raccomandazione che riguardi questo documento.
</p>

</body>
</section>
</chapter>
</guide>
