Exemples de configuracions amb Tinc i OpenVPN

De Guifi.net - Wiki Català

A una xarxa ciutadana com guifi.net hi han molts casos on pot ser interessant conectar dos nodes (o mes) de forma remota entre ells, ja sigui per compartir una sortida a Internet amb la resta de nodes, o per fer extendre la xarxa local entre llocs distants, com per exemple la central d'una empresa amb les seves delegacions, dos amics o familiars que paguen a mitjes una conexio i la volen compartir tot i viure a pobles o ciutats diferents, etc.

Els gairebe 40000 km de territori cobert per guifi.net ofereixen una excelent oportunitat per muntar una VPN sense passar per Internet. Veurem un parell d'exemples, amb dues aplicacions diferents: OpenVPN i Tinc.Les dues son programari lliure i es poden executar en qualsevol sistema operatiu.

Xarxa VPN amb Tinc (entre nodes Linux)

Al primer exemple, volem compartir una sortida a Internet des d'un servidor Debian GNU/Linux amb un portatil amb Linux Mint. Els dos tenen conectivitat amb guifi.net des de nodes diferents, pero nomes el servidor esta conectat a Internet.

La configuracio sera igual o similar amb altres versions de Linux.

Volem que la conexio vagi xifrada i tenir opcions d'afegir mes nodes a la VPN, o inclus vincular-la mes endavant amb altres xarxes privades. L'opcio mes adhient en aquest cas es Tinc.

Servidor

Hostname: server

IP externa: 10.140.150.52

IP local: 192.168.1.2

IP VPN: 172.16.20.1


Portatil

Hostname: notebook

IP externa: 10.140.150.95

IP local: 192.168.2.2

IP VPN: 172.16.20.2

Comencem amb la configuracio del servidor Debian:

Fem una redirecció del port 655 TCP/UDP cap a l'IP local (192.168.1.2).

Instalem Tinc i les seves dependencies:

         aptitude update && aptitude install  ncurses-dev libreadline-dev zlib1g-dev  liblzo2-dev libcurl4-openssl-dev tinc

Comprovem que el modul tun estigui carregat al kernel:

         lsmod | grep tun

En cas de no estar, afegir-ho al /etc/modules.conf:

         alias char-major-10-200-tun

·Editem /etc/networks per tal que la xarxa obtingui un nom simbolic (en aquest exemple 'vpn', pot ser qualsevol altre).

          vpn                172.16.20.0

·Afegim a /etc/services el servei, per tal de que sigui reconegut pel software (a les darreres versions de Debian/Ubuntu ja hi es):


         #Local services
         tinc            655/tcp         TINC
         tinc            655/udp         TINC

·Afegim el nom de la xarxa que s'ha d'aixecar en iniciar la maquina:

         vim /etc/tinc/nets.boot
         vpn

Creem l'arxiu de configuracio de tinc:

         vim /etc/tinc/vpn/tinc.conf
         Device=/dev/net/tun
         Name=server
         Mode=switch
         PrivateKeyFile=/etc/tinc/vpn/server.priv


La documentacio de la wiki de tinc, diu que amb:

         tinc -n vpn init server

s'haurien de construir tots els arxius i directoris basics, pero aquesta comanda no funciona a la versio 1.0.21 (no existeix tinc, nomes tincd, i amb tincd no es creen). S'han de fer els directoris i les claus a ma:

·Fem el directori pels hosts:


         mkdir -p /etc/tinc/vpn/hosts

·Generem el parell de claus public i privat:

         tincd -n server -K

·Fem l'arxiu /etc/tinc/vpn/tinc-up


       #!/bin/sh
       ifconfig $INTERFACE 172.16.20.1 netmask 255.255.0.0

·Fem l'arxiu /etc/tinc/vpn/tinc-down


       #!/bin/sh
       ifconfig $INTERFACE down

Li donem permisos d'execucio:


       chmod u+x /etc/tinc/vpn/tinc-up
       chmod u+x /etc/tinc/vpn/tinc-down

S'ha de repetir el proces a tots els nodes de la mesh VPN, adaptant segons correspongui. IMPORTANT: En mode switch les subnets de cada node han de ser diferents (p.e. no poden tenir tots com subnet la 192.168.1.0/24). Per treballar tots els nodes amb els mateixos rangs de subnet, tinc hauria de configurar-se en mode bridge (si es necessita broadcast i trafic no ip, o amb arp proxy si no).

El tinc.conf dels "clients" ha de ser:


        Device=/dev/net/tun
        Name=notebook
        ConnectTo=server
        Mode=switch
        PrivateKeyFile=/etc/tinc/vpn/notebook.priv

·Intercanviem les claus publiques (tot el directori /hosts) de tots els nodes

Conexio:

·Iniciem com a dimoni i amb debugging el servei al servidor amb

         tincd -D -d -n vpn


·Iniciem tinc al client (depen de la plataforma) Quan ja tenim clar que funciona be, es pot iniciar nomes amb:


         tincd -n vpn

Enrutament:

Comprovem que esta l'ip forwarding activat a tots els nodes. Si no ho esta, l'activem:

        echo 1 > /proc/sys/net/ipv4/ip_forwarding

Per redirigir la porta d'enllaç des del servidor cap als altres nodes, s'han de crear els seguents scripts a cada "client":

NOTA: Aquest procediment nomes esta documentat per Linux a la web de Tinc, si algu vol fer una adaptacio a com serien aquests scripts amb Windows, segur que li agrairan a la wiki de Tinc!!

        vim /etc/tinc/vpn/hosts/server-up


       #!/bin/sh
       VPN_GATEWAY=172.16.20.1
       ORIGINAL_GATEWAY=`ip route show | grep ^default | cut -d ' ' -f 2-5`
       ip route add $REMOTEADDRESS $ORIGINAL_GATEWAY
       ip route add $VPN_GATEWAY dev $INTERFACE
       ip route add 0.0.0.0/1 via $VPN_GATEWAY dev $INTERFACE
       ip route add 128.0.0.0/1 via $VPN_GATEWAY dev $INTERFACE
       vim /etc/tinc/vpn/hosts/server-down
       #!/bin/sh
       ORIGINAL_GATEWAY=`ip route show | grep ^default | cut -d ' ' -f 2-5`
       ip route del $REMOTEADDRESS $ORIGINAL_GATEWAY
       ip route del $VPN_GATEWAY dev $INTERFACE
       ip route del 0.0.0.0/1 dev $INTERFACE
       ip route del 128.0.0.0/1 dev $INTERFACE

Els hi donem permisos d'execucio:

      chmod u+x /etc/tinc/vpn/hosts/server-up
      chmod u+x /etc/tinc/vpn/hosts/server-down 

I per ultim, afegim al /etc/tinc/vpn/hosts/server (a tots els nodes) la linia:

      Subnet=0.0.0.0/0

Ja tenim Internet directe i segur des de qualsevol node!!

Eines de l'usuari