[2024-feb-29] Sad news: Eric Layton aka Nocturnal Slacker aka vtel57 passed away on Feb 26th, shortly after hospitalization. He was one of our Wiki's most prominent admins. He will be missed.

Welcome to the Slackware Documentation Project

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
howtos:network_services:tinc [2014/02/25 20:30 (UTC)] – created tonberryhowtos:network_services:tinc [2022/06/08 12:25 (UTC)] (current) – [Installation] pointed to SlackBuild tonberry
Line 5: Line 5:
  
 ===== Overview ===== ===== Overview =====
-Tinc utilizes asymmetric crypthography. Each node has its own private key, a public key and another public key; one for each participating node. These files are, together with a few configuration files, stored in /etc/tinc/<VPN name> directory.+Tinc utilizes asymmetric cryptography. Each node has its own private key, a public key and another public key; one for each participating node. These files are, together with a few configuration files, stored in /etc/tinc/<VPN name> directory.
  
-Each node also runs a daemon (or multiple daemons, one for each separate VPN). Daemon listens on set port (default is 655) for incomming connections from other nodes. Only nodes with valid private keys can produce data decipherable with matching public keys and are thus granted access.+Each node also runs a daemon (or multiple daemons, one for each separate VPN). Daemon listens on set port (default is 655) for incoming connections from other nodes. Only nodes with valid private keys can produce data decipherable with matching public keys and are thus granted access.
  
 Public key file may contain not only key itself, but also public IP address (and port) of node to which it belongs. If set to, daemon will not wait for connections, but will attempt to connect to these known nodes. Public key file may contain not only key itself, but also public IP address (and port) of node to which it belongs. If set to, daemon will not wait for connections, but will attempt to connect to these known nodes.
  
-Each node has its own IP address (in private address space) which, once the daemon is running, is assigned to virtual network interface. Any traffic comming from VPN is processed by the daemon and made come from that network interface, and any traffic send through that interface is also processed by the daemon and sent to VPN, all behind the scenes, transparent to applications.+Each node has its own IP address (in private address space) which, once the daemon is running, is assigned to virtual network interface. Any traffic coming from VPN is processed by the daemon and made come from that network interface, and any traffic send through that interface is also processed by the daemon and sent to VPN, all behind the scenes, transparent to applications.
  
 Important feature of Tinc is that daemon can (and by default does) forward traffic for other nodes, e.g. if nodes A and B are behind NAT and can directly communicate with only node C, which has unrestricted internet access, or even do not know public key of each other, but C knows them both, C will happily forward traffic between/for them. They just need to know IP addresses (in private address space). Important feature of Tinc is that daemon can (and by default does) forward traffic for other nodes, e.g. if nodes A and B are behind NAT and can directly communicate with only node C, which has unrestricted internet access, or even do not know public key of each other, but C knows them both, C will happily forward traffic between/for them. They just need to know IP addresses (in private address space).
Line 17: Line 17:
  
 ===== Installation ===== ===== Installation =====
 +
 +=== Compile using SlackBuild ===
 +  * Tinc is now apparently maintained as [[https://slackbuilds.org/repository/15.0/network/tinc/|SlackBuild]].
 +
 +=== Compile from source ===
   * Download sources from http://www.tinc-vpn.org/download/   * Download sources from http://www.tinc-vpn.org/download/
  
Line 22: Line 27:
  
 <code> <code>
-./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var +./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var 
-make +make 
-make install+make install
 </code> </code>
  
Line 30: Line 35:
  
 <code> <code>
-make DESTDIR=/somewhere/else install+make DESTDIR=/somewhere/else install
 </code> </code>
  
Line 38: Line 43:
  
 <code> <code>
-tinc -n VPNtest init node1+tinc -n VPNtest init node1
 </code> </code>
  
Line 44: Line 49:
  
 <code> <code>
-tinc -c . generate-keys +tinc -c . generate-keys 
-mkdir -p VPNtest/hosts +mkdir -p VPNtest/hosts 
-mv *.priv VPNtest/. +mv *.priv VPNtest/. 
-cat rsa_key.pub ecdsa_key.pub > VPNtest/hosts/node1 +cat rsa_key.pub ecdsa_key.pub > VPNtest/hosts/node1 
-rm rsa_key.pub ecdsa_key.pub+rm rsa_key.pub ecdsa_key.pub
 </code> </code>
  
   * Fine-tune configuration in /etc/tinc/<VPN name>/tinc.conf. Skip ConnectTo if deamon should passively wait for connections. Interface is name of virtual network card, see more below. Optionally set listening port, especially if you intend to run multiple daemons/VPNs.   * Fine-tune configuration in /etc/tinc/<VPN name>/tinc.conf. Skip ConnectTo if deamon should passively wait for connections. Interface is name of virtual network card, see more below. Optionally set listening port, especially if you intend to run multiple daemons/VPNs.
  
-<code>+<file - tinc.conf>
 Name = node1 Name = node1
 ConnectTo = node2 ConnectTo = node2
 Interface = vpnNIC Interface = vpnNIC
 Port = 6655 Port = 6655
-</code>+</file>
  
   * Configure virtual network interface in /etc/tinc/<VPN name>/tinc-up. Do not manually create interface (via ip command), Tinc daemon will do that for you, just write down configuration for IP level. Also, make tinc-up file executable.   * Configure virtual network interface in /etc/tinc/<VPN name>/tinc-up. Do not manually create interface (via ip command), Tinc daemon will do that for you, just write down configuration for IP level. Also, make tinc-up file executable.
  
-<code>+<file - tinc-up>
 #!/bin/sh #!/bin/sh
 ip addr add 192.168.1.1/24 dev vpnNIC ip addr add 192.168.1.1/24 dev vpnNIC
 +ip route add 192.168.1.0/24 dev vpnNIC
 ip link set vpnNIC up ip link set vpnNIC up
-</code>+</file> 
 + 
 +  * Create tinc-down script that deconfigures VPN interface when VPN shuts down. Make the file executable too. 
 + 
 +<file - tinc-down> 
 +#!/bin/sh 
 +ip link set vpnNIC down 
 +ip route del 192.168.1.0/24 dev vpnNIC 
 +ip addr del 192.168.1.1/24 dev vpnNIC 
 +</file>
  
   * Fine-tune public key file in /etc/tinc/<VPN name>/hosts/<this node>. Public IP may be also a hostname/domain, which is convenient in case you e.g. change ISP, but keep DNS name. Port should be same as in tinc.conf, but may differ if e.g. you are behind NAT with port forwarding from one port number to different port number. Let other nodes have this file and place their public key files here.   * Fine-tune public key file in /etc/tinc/<VPN name>/hosts/<this node>. Public IP may be also a hostname/domain, which is convenient in case you e.g. change ISP, but keep DNS name. Port should be same as in tinc.conf, but may differ if e.g. you are behind NAT with port forwarding from one port number to different port number. Let other nodes have this file and place their public key files here.
  
-<code>+<file - node1>
 Address = <public IP address> [port] Address = <public IP address> [port]
 Subnet = 192.168.1.1/32 Subnet = 192.168.1.1/32
 -----BEGIN RSA PUBLIC KEY----- -----BEGIN RSA PUBLIC KEY-----
 ... ...
-</code>+</file>
  
   * Repeat process on (or for) other nodes, use different names for nodes and different private space IPs. Again, let nodes have each other's public key (or host) file.   * Repeat process on (or for) other nodes, use different names for nodes and different private space IPs. Again, let nodes have each other's public key (or host) file.
Line 82: Line 97:
  
 <code> <code>
-tincd -n VPNtest --debug=5 --logfile=/var/log/VPNtest.log+tincd -n VPNtest --debug=5 --logfile=/var/log/VPNtest.log
 </code> </code>
  
Line 98: Line 113:
  
 <code> <code>
-tapinstall.exe remove tap0901+C:\path\to\tapinstall.exe remove tap0901
 </code> </code>
  
Line 104: Line 119:
  
 <code> <code>
-tapinstall.exe install OemWin2k.inf tap0901+C:\path\to\tapinstall.exe install OemWin2k.inf tap0901
 </code> </code>
   * Device drivers actually seem to come from OpenVPN project. Which is good, because they are signed; Windows are quite hostile towards unsigned drivers lately.   * Device drivers actually seem to come from OpenVPN project. Which is good, because they are signed; Windows are quite hostile towards unsigned drivers lately.
Line 112: Line 127:
 There are a few differences in Windows configuration. There are a few differences in Windows configuration.
  
-  * You still generate initial configuration files, but place them in into where Tinc is installed, which should be something like C:\Program Files\tinc\<VPN name>+  * You still generate initial configuration files, but place them into where Tinc is installed, which should be something like C:\Program Files\tinc\<VPN name>
  
   * In tinc.conf, omit Interface directive, because Tinc daemon will then automatically select TUN/TAP device and directive may do more harm than good. Especially if Tinc service starts and fails immediately, check that Interface is not set.   * In tinc.conf, omit Interface directive, because Tinc daemon will then automatically select TUN/TAP device and directive may do more harm than good. Especially if Tinc service starts and fails immediately, check that Interface is not set.
Line 127: Line 142:
  
 <code> <code>
-C:\path\to\tincd.exe [--debug=5] [--logfile=C:\path\to\file.log-n <VPN name>+C:\path\to\tincd.exe --debug=5 --logfile=C:\path\to\file.log -n VPNtest
 </code> </code>
  
Line 133: Line 148:
  
 <code> <code>
-net start tinc.<VPN name>+cmd> net start tinc.VPNtest
 </code> </code>
  
  
 ===== RC script ===== ===== RC script =====
-Here is some script to start all VPNs on boot. +Here is some script to start all VPNs on boot. Note that stop command differs between 1.0 and 1.1 (prerelease) branches; 1.0 calls tinc**d**, 1.1 calls tinc (no d).
  
 <code bash> <code bash>
Line 185: Line 200:
 Save it as e.g. /etc/rc.d/rc.tinc, make executable and then add line to rc.local. Save it as e.g. /etc/rc.d/rc.tinc, make executable and then add line to rc.local.
  
-<code>+<file - rc.local>
 /etc/rc.d/rc.tinc start /etc/rc.d/rc.tinc start
-</code>+</file>
  
  
Line 201: Line 216:
 <!-- Please do not modify anything below, except adding new tags.--> <!-- Please do not modify anything below, except adding new tags.-->
 <!-- You must remove the tag-word "template" below before saving your new page --> <!-- You must remove the tag-word "template" below before saving your new page -->
-{{tag>howtos template}}+{{tag>howtos network}}
 howtos:network_services:tinc ()