Una semplice VPN con tinc

da Nss il agosto 14, 2010

Collegare due (o più) computer tramite internet come se fossero in una rete locale??
Che ne dite di una VPN[1]??
Ci sono differenti soluzioni per la creazione di VPN quella che noi vedremo è tinc[2] essendo particolarmente leggero e avendo le seguenti peculiarità:

  • Automatic full mesh routing
  • Regardless of how you set up the tinc daemons to connect to each other, VPN traffic is always (if possible) sent directly to the destination, without going through intermediate hops.

  • Easily expand your VPN
  • When you want to add nodes to your VPN, all you have to do is add an extra configuration file, there is no need to start new daemons or create and configure new devices or network interfaces.

  • Ability to bridge ethernet segments
  • You can link multiple ethernet segments together to work like a single segment, allowing you to run applications and games that normally only work on a LAN over the Internet.


Verranno mostrati i passi essenziali da seguire…

  • Abbiamo 2 computer PCA e PCB
    1. PCA con direttamente raggiungibile e con ip pubblico x.y.z.t
    2. PCB dietro nat quindi non direttamente raggiungibile

    entrambi i pc hanno installata la distribuzione ArchLinux.

  • Su entrambi i PC:
    1. Installiamo i pacchetti necessari
    2. pacman -S openssh zlib lzo
      yaourt -S tinc
    3. Definiamo la variabile $VPNNAME assegnandole il nome che vogliamo dare alla vostra VPN
    4. VPNNAME=mia_vpn
    5. Creiamo i file e le directory necessarie
    6. mkdir -p /etc/tinc/$VPNNAME/hosts
      mkdir -p /usr/var/run/
      touch /etc/tinc/$VPNNAME/tinc.conf
      touch /etc/tinc/$VPNNAME/tinc-down
      touch /etc/tinc/$VPNNAME/tinc-up
      chmod +x /etc/tinc/$VPNNAME/tinc-up
      chmod +x /etc/tinc/$VPNNAME/tinc-down
  • Ora spostiamoci su PCA (quello con ip pubblico x.y.z.t)
  • ATTENZIONE: sostituire a $PCxHOSTNAME l’hostname della macchina, a $INTERNETIF l’interfaccia con la quale la macchina esce su internet e a $VPNNAME il nome della vpn usato precedentemente (VPNNAME=mia_vpn)

    1. Inseriamo le seguenti righe nel file /etc/tinc/$VPNNAME/tinc.conf
    2. Name = $PCAHOSTNAME
      AddressFamily = ipv4
      BindToInterface = $INTERNETIF
      Device = /dev/net/tun
      PrivateKeyFile=/etc/tinc/$VPNNAME/rsa_key.priv
    3. Creiamo il file /etc/tinc/$VPNNAME/hosts/$PCAHOSTNAME e all’interno mettiamo:
      l’ip 10.0.10.1 è stato preso a caso dalla classe 10.x.x.x, potrete cambiarlo a vostro piacimento
    4. Address = x.y.z.t
      Subnet = 10.0.10.1/32
    5. Aggiungiamo al file /etc/tinc/$VPNNAME/tinc-up
    6. #!/bin/bash
      ifconfig $VPNNAME 10.0.10.1 netmask 255.255.0.0 up
    7. Mentre nel file /etc/tinc/$VPNNAME/tinc-down mettiamo
    8. #!/bin/bash
      ifconfig $VPNNAME down
    9. Lanciamo il comando per generare la chiave per criptare la comunicazione e diamo invio alle successive richieste
    10. tincd -K -n $VPNNAME
  • Possiamo finalmente passare a PCB, i passi saranno uguali se non per alcuni dettagli
    1. Configuriamo il portforwarding del router in modo da mandare tutte le richieste delle porte 655 TCP/UDP su PCB
    2. Inseriamo le seguenti righe nel file /etc/tinc/$VPNNAME/tinc.conf
    3. Rispetto alla configurazione di PCA abbiamo aggiunto le righe 5 e 6.

      1
      2
      3
      4
      5
      6
      7
      
      Name = $PCBHOSTNAME
      AddressFamily = ipv4
      BindToInterface = $INTERNETIF
      Device = /dev/net/tun
      ConnectTo = $PCAHOSTNAME
      TCPOnly = yes
      PrivateKeyFile=/etc/tinc/$VPNNAME/rsa_key.priv
    4. Creiamo il file /etc/tinc/$VPNNAME/hosts/$PCBHOSTNAME e inseriamoci:
    5. l’ip 10.0.10.2 è stato preso a caso dalla classe 10.x.x.x, potrete cambiarlo a vostro piacimento

      Subnet = 10.0.10.2/32
    6. Aggiungiamo al file /etc/tinc/$VPNNAME/tinc-up
    7. #!/bin/bash
      ifconfig $VPNNAME 10.0.10.2 netmask 255.255.0.0 up
    8. Mentre nel file /etc/tinc/$VPNNAME/tinc-down mettiamo
    9. #!/bin/bash
      ifconfig $VPNNAME down
    10. Lanciamo il comando per generare la chiave per criptare la comunicazione e diamo invio alle successive richieste
    11. tincd -K -n $VPNNAME

La procedura è quasi terminata, dovremmo solo copiare i file

  • /etc/tinc/$VPNNAME/hosts/$PCAHOSTNAME sulla stessa directory in PCB
  • /etc/tinc/$VPNNAME/hosts/$PCBHOSTNAME sulla stessa directory in PCA

In questo momento dovremmo avere nella directory etc/tinc/$VPNNAME/ di entrambe le macchine i seguenti file

./tinc.conf
./tinc-up
./rsa_key.priv
./tinc-down
./hosts
./hosts/$PCAHOSTNAME
./hosts/$PCBHOSTNAME

Se tutto è stato configurato in maniera corretta, basterà dare il seguente comando su entrambi i pc

tincd -n $VPNNAME

e per verificare l’effettivo funzionamento

  • Da PCA proviamo:
  • ping 10.0.10.2
  • Da PCB proviamo:
  • ping 10.0.10.1

In caso di problemi è possibile lanciare tinc in modalità debug per analizzare al meglio eventuali errori

tincd -D -d5 -n $VPNNAME

[1] http://it.wikipedia.org/wiki/Virtual_Private_Network
[2] http://www.tinc-vpn.org/

Lascia un commento

Required.

Required. Not published.

If you have one.