Exemples de configuracions amb Tinc i OpenVPN: Diferència entre les revisions
De Guifi.net - Wiki Català
(Es crea la pàgina amb «'''VPN amb Tinc (Linux)''' 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 sig...».) |
|||
(Hi ha 2 revisions intermèdies sense mostrar fetes per un usuari) | |||
Línia 1: | Línia 1: | ||
− | |||
− | |||
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. | 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. | 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 13: | 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 25: | Línia 23: | ||
− | Portatil | + | '''Portatil''' |
Hostname: notebook | Hostname: notebook | ||
Línia 41: | Línia 39: | ||
Instalem Tinc i les seves dependencies: | 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: | 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 87: | 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 117: | 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 135: | Línia 133: | ||
− | tincd -n vpn | + | tincd -n vpn |
Enrutament: | Enrutament: | ||
Línia 141: | 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 147: | 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!!