7. Integrazione della VPN nel proprio sistema

Avviare il collegamento manualmente risulta laborioso dopo un po'. Probabilmente si desidera che la VPN venga creata all'avvio del computer o quando si instaura una connessione dial-up.

7.1. Connessione all'avvio del sistema

È piuttosto semplice fare in modo che questo script venga eseguito al momento dell'avvio. Considereremo di impiegare la comune configurazione System V initscript. Se non è questo il caso, si dovrà individuare da soli un modo diverso per integrare lo script nel proprio sistema.

  1. Si copi o si crei un link simbolico di vpn-pppssh in /etc/init.d.

    cp /usr/local/bin/vpn-pppssh /etc/init.d/vpn-pppssh
  2. Togliere il segno di commento alle righe echo presenti nelle funzioni start e stop dello script vpn-pppssh per abilitare i messaggi "Starting" e "done" all'avvio.

  3. Inserire "> /dev/null 2>&1" dopo la linea che inizia con "${PPPD}" nella sezione start dello script. Questo impedisce che i lunghi messaggi di pppd rendano confusa la schermata di avvio. È possibile anche ridirigere i messaggi di pppd (che possono includere informazioni sugli errori) in un file di log o, se non si hanno pretese di tipo estetico, si può ignorarli e lasciare lo schermo confuso.

  4. A questo punto si può creare semplicemente un link al proprio script in ciascuno dei sei runlevel.

    client$ ln -s /etc/init.d/vpn-pppssh /etc/rc0.d/K10vpn-pppssh
    client$ ln -s /etc/init.d/vpn-pppssh /etc/rc1.d/K10vpn-pppssh
    client$ ln -s /etc/init.d/vpn-pppssh /etc/rc2.d/S99vpn-pppssh
    client$ ln -s /etc/init.d/vpn-pppssh /etc/rc3.d/S99vpn-pppssh
    client$ ln -s /etc/init.d/vpn-pppssh /etc/rc4.d/S99vpn-pppssh
    client$ ln -s /etc/init.d/vpn-pppssh /etc/rc5.d/S99vpn-pppssh
    client$ ln -s /etc/init.d/vpn-pppssh /etc/rc6.d/K10vpn-pppssh

Adesso, quando riavviate la macchina, la vpn dovrebbe attivarsi verso la fine del processo di boot. Quando viene raggiunto questo script, la macchina attenderà che la VPN sia attiva prima di continuare il boot. Se questo è un problema, potete scrivere il vostro script /etc/init.d/vpn-pppssh che chiama lo script /usr/local/bin/vpn-pppssh in background. Il collegamento sarà attivo non appena la macchina avrà finito il boot.

Per attivare e disattivare manualmente il collegamento, basta eseguire lo script vpn-pppssh direttamente da /etc/init.d:

client$ /etc/init.d/vpn-pppssh stop
client$ /etc/init.d/vpn-pppssh start

7.2. Connettersi attraverso Dial-Up

Se vi state collegando ad internet tramite PPP, potete attivare la VPN ogni volta che attivate la connessione. Questo non è difficile, ma richiede una versione recente di pppd, che supporti sia l'opzione ipparam che le directory ip-up.d e ip-down.d.

  1. Create il file "vpn-up" in /etc/ppp/ip-up.d:

    #!/bin/sh
    
    if [ "$PPP_IPPARAM" = "vpn" ]; then
            # Don't bring up the vpn if we're bringing up the vpn.
            exit 0
    fi
    
    /usr/local/bin/vpn start

    L'espressione if gestisce la ri-invocazione. Se si sta creando il normale collegamento PPP, si desidera che anche la VPN venga avviata. Ma la VPN stessa è un collegamento PPP! Se non ne venisse tenuto conto, PPP verrebbe istanziato ricorsivamente fino a condurre la macchina ad un arresto.

    Il segreto sta nel parametro "ipparm vpn" all'interno dello script vpn-pppssh. Esso imposta la variabile IPPARAM per la corrente invocazione di "vpn", che poi verrà controllata nello script di avvio. Se è impostata a vpn, sappiamo di avere già l'avvio della vpn in corso, quindi si esce senza riportare errori. In caso contrario si esegue l'avvio.

  2. Se si desidera creare una apertura nel proprio firewall appositamente per l'avvio della VPN, è sufficiente creare un file /etc/ppp/ip-up.d/vpn-fw con il seguente contenuto. Tutte le variabili della shell indicate vengono fornite da pppd, quindi dovrebbe essere possibile utilizzare questo script senza modifiche.

    #!/bin/sh
    
    # Punch a hole in the firewall for the VPN
    
    if [ "$PPP_IPPARAM" = "vpn" ]; then
            ipchains -I input 1 -i $PPP_IFACE -s $PPP_REMOTE -d $PPP_LOCAL -j ACCEPT
            ipchains -I output 1 -i $PPP_IFACE -s $PPP_LOCAL -d $PPP_REMOTE -j ACCEPT
    fi
  3. Si crei il file "vpn-down" in /etc/ppp/ip-down.d/vpn-pppssh:

    #!/bin/sh
    
    if [ "$PPP_IPPARAM" = "vpn" ]; then
            # Don't bring down the VPN if we're bringing down the vpn.
            exit 0
    fi
    
    /usr/local/bin/vpn stop

Tutti gli script citati devono essere resi eseguibili (chmod a+x /etc/ppp/ip-up.d/vpn-pppssh). A questo punto, quando si avvia il collegamento PPP, contemporaneamente dovrebbe essere avviata la VPN. Al momento di arrestarlo la VPN scomparirà. È facilissimo.