Tinc
Este artigo visa em descrever de forma minimalista o processo de instalação do serviço de vpn com tinc em ambiente linux exclusivamente para routers que utilizem uma distribuição de firmware baseada em openwrt que utilize uci como por exemplo; mvwrt ou openwrt. Versões de firmware mais recentes do gargoyle, freifunk e outros do género que incluam suporte uci poderão também seguir este artigo e outras que não utilizem [suportem uci poderão utiliza-lo como referência. Recomenda-se o uso de uci em detrimento da linha de comandos ou editor de texto como vim sempre que possível e ou existente.
Preparação
No processo de configuração do tinc é necessário proceder a uma prepararão prévia para o seu funcionamento e criar uma estrutura de directórios.
Serão necessários os pacotes adicionais kmod-tun, liblzo e libopenssl para o funcionamento do tinc e que serão instalados adicionalmente de forma automática se não fizerem previamente parte do sistema.
Instalando o tinc
opkg update opkg install tinc insmod kmod-tun
A instalação do tinc depende da livraria libopenssl que tem um tamanho de pelo menos 615K e poderá impedir a instalação do resto do software. O ficheiro kmod-tun tem 9.3K e o liblzo 32K.
Directórios
Nota: na criação de directórios o nome NETNAME ou neste exemplo vpn é um nome á escolha que deverá identificar o serviço tinc em questão.
mkdir -p /etc/tinc/vpn/hosts/ touch /etc/tinc/vpn/tinc.conf cd /etc/tinc/vpn/
Certificados ssl
A criação de certificados de digitais é indispensável e devemos proceder da seguinte forma:
cd /etc/tinc/vpn/ tincd -n vpn -K Generating 2048 bits keys: .......+++ p .....+++ q Done. Please enter a file to save private RSA key to [/etc/tinc/vpn/rsa_key.priv]: Please enter a file to save public RSA key to [/etc/tinc/vpn/rsa_key.pub]:
Ou para gerar um certificado mais forte e seguro:
tincd -n vpn -K --generate-keys=4096
Ver: certificados de criptografia para mais opções.
De seguida devemos criar um ficheiro com uma identificação dos routers que se vão servir do tinc e inserir ou copiar a chave pública rsa_key.pub para lá.
A chave rsa_key.priv deverá ficar sempre em nossa posse e nunca ser transmitida e ninguém. A chave rsa_key.pub é a que damos a quem vai estabelecer ligação á nossa chave privada. Por outras palavras isto significa que teremos de receber uma chave rsa_key.pub do outro router ou pessoa e coloca-la em /etc/tinc/vpn/ no nosso equipamento.
Podemos simplesmente copiar a chave a partir de uma página ou ficheiro ou fazer o download da mesma a partir de um servidor, página, ftp, sshd, etc. Exemplos:
A partir de uma página:
wget -P /etc/tinc/vpn/hosts/ http://wirelesspt.net/arquivos/public_keys/cmsv/tinc_rsa_key.pub mv /etc/tinc/vpn/hosts/tinc_rsa_key.pub /etc/tinc/vpn/hosts/router2
Buscar a chave pública do router2 a partir do router1 com de scp
Router2 router1 scp root@router2-ip:/etc/tinc/router2/rsa_key.pub /etc/tinc/router1/hosts/router2
O resultado será semelhante ao seguinte e poderá ser visto digitando: cat hosts/router2
-----BEGIN RSA PUBLIC KEY----- MIICCgKCAgEAwnEr+XfWj12nDKDSkEocMwAhi0LmUzV/JHm3orjoVkAFZemREdbe bKEiBLQ9NiS5cx0AHwoNZhEVRIcqBsoq0+rl3uOWiJ7hFqS+TTHcD3Vnz2usFj/b jhqAZlpciAq/fhQMx0kQjM5v8m9yVtY2aCZ9ZFs947TktjHxePYH/NWg+e3QtlxE 1FfsfNSaHDb1PuCBfj1lSqkxrzzabez1ZDMI1iZ+L0rM8bjYQUSaWPvRnhhz7ukT +p7OouZ56P7h/bKXyi0tuYlG5DyjReA2dBDfEFnbIRUGTLTrg4aFlh4cNCfs6yIp AViYkH27WhZLgUZzPfvOAbgZZa59qFr5FjJZBVBcLxR3qWCd/Cu31vE76r1Wuh4R 5x+pOXMydVxsQtd9HWGqbCv1tOsdXT80sPlhNBMcu6fZQ6/1UmBMqcUZ7G7vjynt 4dqEFgN3Y6txSgDdcIKns9/xgS/1LntM2KllTh3J7/aaytL1i7TF9UiNIIpNYE7t UOK3ivex5CvauJDrODipLDUaTiWr6cquYoauJ3mE0vtgdKCwFJ4fiNCbJlpa4Y8z w+Pn4+o2r1xuQjqPxtB7hO/Y7ERUh4litr9TL32Oi2Ms2A7vCjMbiuSZivEpubJA usb7HMCh2doc0rL5Jxd8Xu0ZUuZAStuHLCwyjTXODyb+dlWQewSOLccCAwEAAQ== -----END RSA PUBLIC KEY-----
Nota: O outro router ou pessoa terá de proceder aos menos passos de geração e troca de chave pública. A chave pública do router1 passa para o router2 e vice versa.
Firewall
Importante: Antes de procedermos à configuração da abertura de portas na firewall; devemos verificar o numero de regras já existentes na firewall para evitar alterar alguma delas e prosseguir com um numero acima dos já existentes:
uci show firewall |grep =rule
Criar regra via uci:
uci add firewall rule uci set firewall.@rule[5].name=tinc uci set firewall.@rule[5].src=wan uci set firewall.@rule[5].target=ACCEPT uci set firewall.@rule[5].proto=tcp,udp uci set firewall.@rule[5].dest_port=655 uci commit firewall
Reiniciar a firewall pode ser feito com reboot ou restart:
/etc/init.d/firewall restart
Nota: será necessário encaminhar e abrir a porta 655 no router que faz de gateway para a Internet onde ligamos este equipamento, caso exista um.
Configuração
Após a instalação o ficheiro de configuração principal do tinc no seguinte local e poderá ser visualizado e editado com um editor de texto como o vim onde se deve configurar os parâmetros que desejamos utilizar na configuração da vpn.
Configurando o router local via uci:
uci rename tinc.NETNAME=vpn uci set tinc.vpn.enabled=1 uci set tinc.vpn.generate_keys=0 uci set tinc.vpn.key_size=2048 uci set tinc.vpn.AddressFamily=any uci set tinc.vpn.ConnectTo=router2 uci set tinc.vpn.DirectOnly=0 uci set tinc.vpn.Forwarding=internal uci set tinc.vpn.Hostnames=0 uci set tinc.vpn.IffOneQueue=0 uci set tinc.vpn.Interface=tun uci set tinc.vpn.Mode=router uci set tinc.vpn.Name=router1 uci set tinc.vpn.PingInterval=60 uci set tinc.vpn.PingTimeout=5 uci set tinc.vpn.PriorityInheritance=0 uci set tinc.vpn.PrivateKeyFile=/etc/tinc/vpn/rsa_key.priv uci set tinc.vpn.ProcessPriority=normal uci set tinc.vpn.ReplayWindow=16 uci set tinc.vpn.StrictSubnets=0 uci set tinc.vpn.TunnelServer=0 #uci set tinc.vpn.device=/dev/net/tun #uci set tinc.vpn.log=/tmp/log/tinc.vpn.log #uci set tinc.vpn.debug=3 #uci set tinc.vpn.BindToAddress=127.0.0.1 #uci set tinc.vpn.BindToInterface=lo #uci set tinc.vpn.GraphDumpFile=/tmp/log/tinc.vpn.dot #uci set tinc.vpn.KeyExpire=3600 #uci set tinc.vpn.MACExpire=600 #uci set tinc.vpn.MaxTimeout=900 #uci set tinc.vpn.UDPRcvBuf=x #uci set tinc.vpn.UDPSndBuf=x uci rename tinc.NODENAME=router2 uci set tinc.router2=tinc-host uci set tinc.router2.enabled=1 uci set tinc.router2.net=vpn uci set tinc.router2.Address=router2.wirelesspt.net uci set tinc.router2.Cipher=blowfish uci set tinc.router2.ClampMSS=yes uci set tinc.router2.Compression=1 uci set tinc.router2.Digest=sha256 uci set tinc.router2.IndirectData=0 uci set tinc.router2.MACLength=4 uci set tinc.router2.PMTU=1514 uci set tinc.router2.PMTUDiscovery=yes uci set tinc.router2.Port=655 uci set tinc.router2.Subnet=192.168.1.0/24 uci set tinc.vpn.debug=3 uci commit tinc
Os parâmetros a negrito deverão ser especificados de acordo com a rede o utilizador em questão.
Ficheiro de configuração com os parâmetros uci expostos em cima.
vi /etc/config/tinc
config tinc-net 'vpn'
option enabled '1'
option generate_keys '0'
option key_size '2048'
option AddressFamily 'any'
option DirectOnly '0'
option Forwarding 'internal'
option Hostnames '0'
option IffOneQueue '0'
option Interface 'tun'
option Mode 'router'
option Name 'router1'
option PingInterval '60'
option PingTimeout '5'
option PriorityInheritance '0'
option PrivateKeyFile '/etc/tinc/vpn/rsa_key.priv'
option ProcessPriority 'normal'
option ReplayWindow '16'
option StrictSubnets '0'
option TunnelServer '0'
option ConnectTo 'router2'
option debug '3'
config tinc-host 'router2'
option enabled '1'
option net 'vpn'
option Address 'router2.wirelesspt.net'
option Cipher 'blowfish'
option ClampMSS 'yes'
option Compression '1'
option Digest 'sha256'
option IndirectData '0'
option MACLength '4'
option PMTU '1514'
option PMTUDiscovery 'yes'
option Port '655'
option Subnet '192.168.1.0/24'
Ficheiro de configuração original do tinc
config tinc-net NETNAME option enabled 0 ## Daemon Configuration (cmd arguments) #option generate_keys 0 #option key_size 2048 #option log /tmp/log/tinc.NETNAME.log #option debug 3 ## Server Configuration (tinc.conf) #option AddressFamily any #option BindToAddress 127.0.0.1 #option BindToInterface lo #list ConnectTo peer1 #option DirectOnly 0 #option Forwarding internal #option GraphDumpFile /tmp/log/tinc.NETNAME.dot #option Hostnames 0 #option IffOneQueue 0 #option Interface NETNAME #option KeyExpire 3600 #option MACExpire 600 #option MaxTimeout 900 #option Mode router option Name NODENAME #option PingInterval 60 #option PingTimeout 5 #option PriorityInheritance 0 #option PrivateKeyFile /etc/tinc/NETNAME/rsa_key.priv #option ProcessPriority normal #option ReplayWindow 16 #option StrictSubnets 0 #option TunnelServer 0 #option UDPRcvBuf x #option UDPSndBuf x config tinc-host NODENAME option enabled 0 option net NETNAME #list Address example.com #option Cipher blowfish #option ClampMSS yes #option Compression 0 #option Digest sha1 #option IndirectData 0 #option MACLength 4 #option PMTU 1514 #option PMTUDiscovery yes #option Port 655 #option Subnet 192.168.1.0/24
- Ficheiro:Tinc.pdf
- Definições das opções do cliente (em Inglês)
- Definições das opções do servidor (em Inglês)
- Log: Nome to registo de log
- BindToAddress: Endereço ip a utilizar. Se nenhum for especificado; o serviço fica activo em todos.
- BindToInterface: Interface de rede a utilizar. Se nenhum for especificado; o serviço fica activo em todos
- GraphDumpFile: Nome to registo de log de dump
- Interface: Interface de rede correspondente ao interface virtual criado pelo sistema operativo.
- UDPRcvBuf: Recomenda-se que seja gerido pelo sistema operativo
- UDPSndBuf: Recomenda-se que seja gerido pelo sistema operativo
- Address: Endreco ip da ligação à internet
Modo de funcionamento
O tinc possibilita 3 tipos de funcionando: router, switch ou hub. Neste artigo o exemplo usado é:
uci set tinc.vpn.Mode=router
ou
option Mode 'router'
Neste modo de sub-rede as variáveis nos ficheiros de configuração do router host vão ser utilizadas para formar uma tabela de encaminhamento e apenas pacotes unicast dos protocolos ipv4 e ipv6 são suportados. Neste modo a configuração dhcp do tinc deve ser estática em todos os router da vpn.
Neste modo, os endereços mac dos pacotes da vpn serão usados para criar uma tabela de roteamento dinâmico como um switch físico faz na rede. Pacotes de cada protocolo que transitam pela rede (unicast, multicast e broadcast) são compatíveis com este modo ao custo de transmissão frequente requisições arp e actualizações da tabela de roteamento. Este modo é útil se optarmos por construir uma ponte segmentos de rede. Neste modo devemos utilizar o serviço de dhcp automaticamente para gerir a atribuição de ips na vpn.
Este modo é basicamente o mesmo que o modo de switch, mas cada pacote será transmitido para os outros serviçoss sem se gerir nenhuma tabela de roteamento.
Activando o tinc
Os seguintes parâmetros vão activar e iniciar o serviço no router de forma efectiva.
/etc/init.d/tinc enable /etc/init.d/tinc start
Para confirmar que de facto o tinc se encontra a funcionar e temos a porta aberta na firewall basta digitar os seguintes parâmetros que produzirão um resultado semelhante ao que podemos ver:
lsmod | grep tun tun 10640 2
pidof tincd 1890
netstat -napt | grep tincd tcp 0 0 0.0.0.0:655 0.0.0.0:* LISTEN 1710/tincd
logread | egrep "tun|tinc" mvwrt kern.info kernel: [ 119.510000] tun: Universal TUN/TAP device driver, 1.6 mvwrt kern.info kernel: [ 119.520000] tun: (C) 1999-2004 Max Krasnyansky <maxk@qualcomm.com> mvwrt daemon.notice tinc.vpn[1710]: tincd 1.0.21 (Feb 10 2014 23:44:53) starting, debug level 0 mvwrt daemon.info tinc.vpn[1710]: /dev/net/tun is a Linux tun/tap device (tun mode) mvwrt daemon.notice tinc.vpn[1710]: Ready
Ver ainda
Links externos
- Tinc openwrt
- Manual 5 tinc.conf
- Configuração Tinc pela Reseaulibre
- Configuração Tinc pela Ninux.org
- Configuração IsoleVPN Tinc pela Ninux.org
- Configuração em Microsoft Windows 2000/XP/7/8
- Joshua Kitchens - Tinc VPN - Mesh VPN (youtube wirelesspt)
- Tinc WZR-HP-G300NH
- Configuracão personalizada do tinc em openwrt
- Mini & rápido manual de instalação para o tinc (em Inglês)
- Tinc pelo método freifunk + olsr
- Tinc em windows e debian linux
- Configurando tinc vpn em arch linux
- Como configurar o tinc em gentoo linux
- Configuração tinc - Arquivos gentoo linux