Exemples de configuracions amb Tinc i OpenVPN: Diferència entre les revisions

De Guifi.net - Wiki Català

 
(Hi ha una revisió intermèdia sense mostrar fetes per un usuari)
Línia 3: Línia 3:
 
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.
 
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)
+
'''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.
 
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.
Línia 11: Línia 11:
 
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.
 
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  
+
'''Servidor'''
  
 
Hostname: server
 
Hostname: server
Línia 23: Línia 23:
  
  
Portatil
+
'''Portatil'''
  
 
Hostname: notebook
 
Hostname: notebook
Línia 39: Línia 39:
 
Instalem Tinc i les seves dependencies:
 
Instalem Tinc i les seves dependencies:
  
apitude update && aptitude install  ncurses-dev libreadline-dev zlib1g-dev  liblzo2-dev libcurl4-openssl-dev tinc
+
          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:
 
Comprovem que el modul tun estigui carregat al kernel:
  
lsmod | grep tun
+
          lsmod | grep tun
  
 
En cas de no estar, afegir-ho al /etc/modules.conf:
 
En cas de no estar, afegir-ho al /etc/modules.conf:
  
alias char-major-10-200-tun
+
          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).
 
·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
+
          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):
 
·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
+
          #Local services
tinc            655/tcp        TINC
+
          tinc            655/tcp        TINC
tinc            655/udp        TINC
+
          tinc            655/udp        TINC
  
 
·Afegim el nom de la xarxa que s'ha d'aixecar en iniciar la maquina:
 
·Afegim el nom de la xarxa que s'ha d'aixecar en iniciar la maquina:
  
vim /etc/tinc/nets.boot
+
          vim /etc/tinc/nets.boot
  
vpn
+
          vpn
  
 
Creem l'arxiu de configuracio de tinc:
 
Creem l'arxiu de configuracio de tinc:
  
vim /etc/tinc/vpn/tinc.conf
+
          vim /etc/tinc/vpn/tinc.conf
  
Device=/dev/net/tun
+
          Device=/dev/net/tun
Name=server
+
          Name=server
Mode=switch
+
          Mode=switch
PrivateKeyFile=/etc/tinc/vpn/server.priv
+
          PrivateKeyFile=/etc/tinc/vpn/server.priv
  
  
 
La documentacio de la wiki de tinc, diu que amb:
 
La documentacio de la wiki de tinc, diu que amb:
  
tinc -n vpn init server
+
          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:
 
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:
Línia 85: Línia 85:
  
  
mkdir -p /etc/tinc/vpn/hosts
+
          mkdir -p /etc/tinc/vpn/hosts
  
 
·Generem el parell de claus public i privat:
 
·Generem el parell de claus public i privat:
  
tincd -n server -K
+
          tincd -n server -K
  
 
·Fem l'arxiu /etc/tinc/vpn/tinc-up
 
·Fem l'arxiu /etc/tinc/vpn/tinc-up
  
  
#!/bin/sh
+
        #!/bin/sh
ifconfig $INTERFACE 172.16.20.1 netmask 255.255.0.0
+
        ifconfig $INTERFACE 172.16.20.1 netmask 255.255.0.0
  
 
·Fem l'arxiu /etc/tinc/vpn/tinc-down
 
·Fem l'arxiu /etc/tinc/vpn/tinc-down
  
  
#!/bin/sh
+
        #!/bin/sh
ifconfig $INTERFACE down
+
        ifconfig $INTERFACE down
  
 
Li donem permisos d'execucio:
 
Li donem permisos d'execucio:
  
  
chmod u+x /etc/tinc/vpn/tinc-up
+
        chmod u+x /etc/tinc/vpn/tinc-up
chmod u+x /etc/tinc/vpn/tinc-down
+
        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.
 
S'ha de repetir el proces a tots els nodes de la mesh VPN, adaptant segons correspongui.
Línia 115: Línia 115:
  
  
Device=/dev/net/tun
+
        Device=/dev/net/tun
Name=notebook
+
        Name=notebook
ConnectTo=server
+
        ConnectTo=server
Mode=switch
+
        Mode=switch
PrivateKeyFile=/etc/tinc/vpn/notebook.priv
+
        PrivateKeyFile=/etc/tinc/vpn/notebook.priv
  
 
·Intercanviem les claus publiques (tot el directori /hosts) de tots els nodes  
 
·Intercanviem les claus publiques (tot el directori /hosts) de tots els nodes  
Línia 133: Línia 133:
  
  
tincd -n vpn
+
          tincd -n vpn
  
 
Enrutament:
 
Enrutament:
Línia 139: Línia 139:
 
Comprovem que esta l'ip forwarding activat a tots els nodes. Si no ho esta, l'activem:
 
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
+
        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":
 
Per redirigir la porta d'enllaç des del servidor cap als altres nodes, s'han de crear els seguents scripts a cada "client":
Línia 145: Línia 145:
 
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!!
 
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
+
        vim /etc/tinc/vpn/hosts/server-up
  
  
#!/bin/sh
+
        #!/bin/sh
VPN_GATEWAY=172.16.20.1
+
        VPN_GATEWAY=172.16.20.1
ORIGINAL_GATEWAY=`ip route show | grep ^default | cut -d ' ' -f 2-5`
+
        ORIGINAL_GATEWAY=`ip route show | grep ^default | cut -d ' ' -f 2-5`
  
ip route add $REMOTEADDRESS $ORIGINAL_GATEWAY
+
        ip route add $REMOTEADDRESS $ORIGINAL_GATEWAY
ip route add $VPN_GATEWAY dev $INTERFACE
+
        ip route add $VPN_GATEWAY dev $INTERFACE
ip route add 0.0.0.0/1 via $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
+
        ip route add 128.0.0.0/1 via $VPN_GATEWAY dev $INTERFACE
  
vim /etc/tinc/vpn/hosts/server-down
+
        vim /etc/tinc/vpn/hosts/server-down
  
#!/bin/sh
+
        #!/bin/sh
ORIGINAL_GATEWAY=`ip route show | grep ^default | cut -d ' ' -f 2-5`
+
        ORIGINAL_GATEWAY=`ip route show | grep ^default | cut -d ' ' -f 2-5`
  
ip route del $REMOTEADDRESS $ORIGINAL_GATEWAY
+
        ip route del $REMOTEADDRESS $ORIGINAL_GATEWAY
ip route del $VPN_GATEWAY dev $INTERFACE
+
        ip route del $VPN_GATEWAY dev $INTERFACE
ip route del 0.0.0.0/1 dev $INTERFACE
+
        ip route del 0.0.0.0/1 dev $INTERFACE
ip route del 128.0.0.0/1 dev $INTERFACE
+
        ip route del 128.0.0.0/1 dev $INTERFACE
  
 
Els hi donem permisos d'execucio:
 
Els hi donem permisos d'execucio:
  
chmod u+x /etc/tinc/vpn/hosts/server-up
+
      chmod u+x /etc/tinc/vpn/hosts/server-up
chmod u+x /etc/tinc/vpn/hosts/server-down  
+
      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:
 
I per ultim, afegim al /etc/tinc/vpn/hosts/server (a tots els nodes) la linia:
  
Subnet=0.0.0.0/0
+
      Subnet=0.0.0.0/0
  
 
Ja tenim Internet directe i segur des de qualsevol node!!
 
Ja tenim Internet directe i segur des de qualsevol node!!

Revisió de 23:45, 30 ago 2013

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