Dd-wrt: vpn lan-to-lan con pptp

ddwrt-vpn-pptpMi appresto a descrivere come realizzare una vpn lan-to-lan per mezzo del protocollo pptp che dd-wrt mette a disposizione sia come client che come server.

Le prove sono state eseguite con una Fonera 2100 e un Linksys wrt54gl. La fonera è stata configurata come client pptp per accedere al Linksys wrt54gl configurato come server. Di seguito la descrizione delle due reti e delle versioni di dd-wrt installate sui router:

Rete A:
  • Indirizzo di rete: 192.168.1.0/24
  • Indirizzo ip della Fonera: 192.168.1.240
  • Versione dd-wrt utilizzata: v24-sp1 (07/26/08) std – SVN revision: 9994
Rete B:
  • Indirizzo di rete: 192.168.50.0/24
  • Indirizzo ip del Linksys wrt54gl: 192.168.50.254
  • Versione dd-wrt utilizzata: v24 (05/24/08) mini – SVN revision: 9525

Configurazione Liksys wrt54gl come server PPTP

Attiviamo il server pptp del linksys andando nel pannello di controllo di dd-wrt nel menu Serices/PPTP, nella sezione PPTP Server.

Qui impostiamo l’indirizzo ip con cui verrà visto il router dal client (fonera) che instaurerà la connessione: nel mio caso ho scelto 192.168.100.254.

Indichiamo l’intervallo di indirizzi da assegnare ai possibili client che si connettono al server (in realtà in questo caso non viene assegnato nessun indirizzo ip al router client (fonera) ma viene mantenuto quello dello della lan e su questo viene creata un connessione puno-punto come vedremo in seguito): nel mio caso ho scelto il range tra 192.168.100.100 a 192.168.100.120.

Come ultimo parametro non rimane che indicare l’utente e la password da utilizzare per fare autenticare il client, che va inserito in questa forma:

username * password *

Nel mio caso l’utente è david e la password è 123456789.

Una volta salvato e applicato le modifiche il server pptp si metterà in ascolto per eventuali connesioni da parte dei client.

dd-wrt-pptp-server

Configurazione della Fonera 2100 come client PPTP

La configurazione di dd-wrt come client pptp avviene similmente alla sezione precedente,  inserendo gli appositi parametri nella sezione Client PPTP raggiungibile dal menu Services/PPTP dell’interfaccia web.

Quindi sulla Fonera andranno inseriti l’indirizzo ip o l’hostname pubblico con cui è possibile raggiungere il rotuter che funge da server pptp (Linksys wrt54gl), nell’immagine non lo vedete per motivi di riservatezza. Successivamente inseriamo la subnet/netmask della rete che vogliamo raggiungere che sta dietro al Linksys (192.168.50.0/255.255.255.0). Indichiamo se le richieste verso la vpn devono essere nattate o meno e in fine inseriamo l’utente e password con cui autenticarsi sul router che funziona da server pptp (Linksys).

ddwrt-pptp-client

Una volta salvate e applicate le modifiche il router proverà immediatamente a instaurare la connessione pptp e questo avverra anche ad ogni avvio della Fonera.

A livello di sistema la vpn viene vista come due interfacce di rete punto-punto, una per ogni router. Infatti se tutto è enadato ok potremo notare che digitando il comando ifconfig (da lina di comando dopo essersi precedentemente connessi con ssh/telnet) tra le interfacce visualizzate è presente una denominata ppp0:

Linksys wrt54gl:

ppp0      Link encap:Point-to-Point Protocol
          inet addr:192.168.100.254  P-t-P:192.168.1.240  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1450  Metric:1
          RX packets:1769 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1550 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:1868097 (1.7 MiB)  TX bytes:130694 (127.6 KiB)

Fonera 2100:

ppp0      Link encap:Point-to-Point Protocol
          inet addr:192.168.1.240  P-t-P:192.168.100.254  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1450  Metric:1
          RX packets:3242 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3502 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:365911 (357.3 KiB)  TX bytes:2460804 (2.3 MiB)

Rifiniture

Possiamo testare l’effettivo funzionamento della vpn eseguendo un ping da un qualsiasi host della rete 192.168.1.0/24 verso il router Linksys 192.168.50.254 o qualsiasi altro host appartenente alla rete 192.168.50.0/24. Purtroppo però non è vero il contrario, ovvero se proviamo a eseguire un ping da un host della rete 192.168.50.0/24 verso uno della 192.168.1.0/24 questo non funziona perchè sul router che fa da server pptp (Linksys) manca l’apposita regola di routing. Infatti se sul Linksys wrt54gl impartiamo il comando route add -net 192.168.1.0/24 gw 192.168.100.254 vedremo che il ping inizierà a funzionare.

Con il comando precedentemente indicato andiamo a dire al Linksys che per raggiungere la rete 192.168.1.0/24 deve passare dal router con indirizzo 192.168.100.254, ovvero quello con cui viene visto Linksys nella connessione punto-punto della vpn.

Passiamo ora ad automatizzare l’inserimento della regola di routing nel momento in cui viene connessa la vpn. Dobbiamo sapere che nel momento del boot di un router configurato come server pptp viene creato una serie di script nella directory /tmp/pptpd che vengono lanciati per instaurare la vpn, tra questi ne è presente uno che si chiama ip-up, il quale viene lanciato appena dopo la creazione dell’interfaccia punto-punto ppp0 ed è utilizzato per  impostare alcune regole sul firewall. Nella mia configurazione il file si presenta con il seguente contenuto:

#!/bin/sh
/sbin/startservice set_routes
/usr/sbin/iptables -I FORWARD -i $1 -p tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1353: -j TCPMSS --set-mss 1352
/usr/sbin/iptables -I INPUT -i $1 -j ACCEPT
/usr/sbin/iptables -I FORWARD -i $1 -j ACCEPT

Allo script vengono passati i seguenti parametri:

  • $1 = nome dell’interfaccia punto-punto (ppp0)
  • $2 = device a livello di sistema che identifica il tunnel punto-punto (/dev/pts/1)
  • $3 = velocita di baudrate della connessine (115200)
  • $4 = indirizzo ip locale della connessione punto-punto (192.168.100.254)
  • $5 = indirizzo ip remoto della connessione punto-punto (192.168.1.240)
  • $6 = indirizzo ip pubblico del router che si collega come client

Quello che faremo è inserire il comando che crea la regola di route, dove volendo potrà essere discriminato a piacere per mezzo di un qualsiasi degli argomenti passati. Nel mio caso ho deciso di creare la regola solo se l’indirizzo remoto ($5) è 192.168.1.240. Queste sono le linee cho ho accodato al file /tmp/pptpd/ip-up:

if [ "$5" == "192.168.1.240" ]; then
route add -net 192.168.1.0/24 gw 192.168.100.254
fi

Purtroppo però il file in questione è residente su un filesystem volatile, questo vuol dire che allo spengimento del router non esisterà più e verrà rigenerato in fase di boot, quindi tutte le modifiche che abbiamo apportato andranno perse. Per ovviare a questo problema possiamo fare inserire la nosta modifica con un comando echo da dd-wrt proprio in fase di boot. Lo facciamo inserendo il comando

echo -e "if [ \"\$5\" == \"192.168.1.240\" ]; then\nroute add -net 192.168.1.0/24 gw 192.168.100.254\nfi" >> /tmp/pptpd/ip-up

nella videata raggiungibile dal menu Ammunistrazione/Comandi del router Linksys e premendo il pulsante Salva Startup.

ddwrt-pptp-startup

Ultimo appunto per quanto riguarda il router che funziona da client pptp (Fonera). Inquesto è presente lo script /tmp/pptpd_client/vpn che serve per avviare (/tmp/pptpd_client/vpn start) o fermare (/tmp/pptpd_client/vpn stop) la connessione vpn. Quando allo script viene passato il parametro start viene avviata la vpn se non è già attiva. In caso di caduta della vpn possiamo inserire il comando in un’apposito crontab in modo che questa venga ritirata su in automatico. Ho inserito la seguente stringa nel crontab (dalla sezione Cron raggiungibile dal menu Amministrazione/Gestione) che tenta di fare partire la vpn ogni cinque minuti:

0-59/5 * * * * root /tmp/pptpd_client/vpn start

ddwrt-pptp-cronE con quest è tutto.

13 pensieri su “Dd-wrt: vpn lan-to-lan con pptp

  1. cazzarola ho seguito alla lettera tuttue le indicazioni ma non funziona nulla…se come client uso quello di microsoft funziona con il client del ddwrt nulla da fare !!

  2. Ciao Alessio, puoi essere un po più chiaro? Cosa non funziona?
    Hai verificato se viene creata l’interfaccia ppp0 sui due router. Ha provato a fare dei ping per diagnosticare il problema?

  3. Ciao.Grazie per la risposta.Si la connessione ppp0 in teria viene creata.Ho provato a collegarmi ai due router in telnet e lanciando il comnado ifconfig.Nel router che fa da server compare la connessione ppp0 come quelle da te mostrate in figura.Sul router che fa da client compare stranamente una ppp0 e una ppp1.Non capisco perchè.Se provo a pingare una pc dalla parte del router server e vicevera non funziona nulla.Non riesco a raggiungere nessuno dei pc in nessuna delle due reti.Se invece provo a collegarmi al router server con il client software dei windows xp riesco a raggiungere il web server del mio fax/multifunzione.Posso pingare il fax e uno dei pc della rete.Se provo a pingare da uno dei pc della rete router server non funziona.Queso pero’ è dovuto solo alla mancanza delle route statiche probabilmente.Qunado lancio la connessione del client di windows xp si collega immediatamente.L’unica cosa strana è che vengo avvertito che c’e’ un errore nei protocolli usati poiche’ ipx/spx o compatibile cp hanno restituito l’errore 733.Purtroppo l’ideale e’ riuscire a realizzare la connessione vpn solo con i router.Ho cercato altre guide ma per il moemnto non sono riuscito a trovare molto.Puoi in qualche modo aiutarmi o provare a darmi qualche dritta ? grazie moltissimo

  4. Ciao scusa …dimenticavo una cosa.Sto usando come router un linksys wrt54gl sul quale ho installato il firmware ver DD-WRT v24-sp2 (10/10/09) mini
    (SVN revision 13064), che uso come server
    Ed un router TL-WR941ND con installato firmware ver DD-WRT v24-sp2 (11/21/10) std
    (SVN revision 15778)

    Mia mail flaiale@gmail.com oppure account skype : aleflai

    ciao grazie ancora

  5. Ciao e grazie per la splendida guida.
    dopo essermi scervellato per giorni con questa guida riesco a vedere un po di luce.
    Segui sempre il forum?
    Posso farti alcune domende?

    grazie

  6. Mah io sono circa due settimane che mi scervello e va a tratti: A volte penso che sia solo un problema di lentezza della rete client:

    Io ho 2 router uguali due TP-Link TL-WR1043ND entrambi con Firmware: DD-WRT v24-sp2 (12/31/12) std

    1) Il server 192.168.1.1 gira PPTP SERVER

    PPTP Server Enable
    Broadcast support Disable
    MPPE Encryption Enable
    DNS1
    DNS2
    WINS1
    WINS2
    MTU 1450
    MRU1450
    Server IP 192.168.1.3
    Client IP(s) 192.168.1.201-210
    Max Associated Clients 64

    Cheap secrets tutto a posto xxx * yyy *

    Sul command startup del server gira:

    nvram set routes=’route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.2.1′

    2 il client 192.168.2.2 gira PPTP Client
    Options
    Server IP or DNS Name 81.164.19.114
    Remote Subnet… 192.168.1.0
    Remote Subnet Mask… 255.255.255.0
    MPPE Encryption mppe required
    MTU 1450
    MRU 1450
    NAT Enable
    Username xxx
    Password yyy

    Sul cron del client gira

    0-59/5 * * * * root /tmp/pptpd_client/vpn start

    eppure non riesco a farlo funzionare in modo fluido: vedi degli sbagli?

  7. Ciao,

    grazie per la gentile risposta.

    Con ifconfig vedo montati i ppp in entrambe le macchine, ma non pingano.
    Se metto le due macchine sotto un router che ho 192.168.0.1 va tutto bene,

    Spostandolo a casa del vicino non va più….

    qualche idea?

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.