Tinc site2site VPN Software

A cégemnek, ahol dolgozom több telephelye van. Már több mint kettő :)
Kettőnél még nem volt gond, minden site-on a router-nek van szerencsére Site2Site opciója, így néhány kattintással, meg az alhálózatok miatt egy kis Subnet Mask kalkulációval viszonylag gyorsan össze lehetett kapcsolni a két telephelyet. Háromnál ez még mindig kivitelezhető, de …
De már felmerül, hogy nem lenne-e esetleg egy jobb megoldás annál, mint mindegyik router-ben felvenni a többit és úgy összekapcsolni. Ez a megoldás 2 telephelyig még egyszerű, 3-nál már ok, 4-nél már biztos nem csinálnám meg.
A neten ilyen esetekre két megoldást javasolnak:

  • központi Site — ezen keresztül megy nagyjából minden forgalom a site-ok között.
    Ennek az egyik nagy hátránya, hogy a központi site-nak gyors internet kapcsolattal kell rendelkeznie. Ha ez ráadásul nem párosul a “legtöbb szervert futtató” site-al, akkor lehetnek gondok
  • Mesh VPN — ezzel a megoldással minden site kapcsolatban van a másikkal, úgy, hogy nem kell kismillió kapcsolatot beállítani.
    Ez általában szoftveres megoldás, ha a csilló forintos routerekkel nem számolunk :)

A több MESH kapcsolatot biztosító Linux-os software közül a Tinc-et választottam.
Ezt volt talán a legegyszerűbb beállítani és Ubuntu illetve Fedora distro-kon is elérhető :)

Teszt környezet

Mindegyik site-on docker container-ben futott a tinc “ — net=host — privileged” paraméterekkel indítva, mert kell a “tun0” device hozzáférés.

  • 3 site ( 3 szerver)
    Hamster, Mouse, ubu3
  • Hamster IP:
    Public: 81.2.237.121/24
    LAN: 192.168.2.1/24 (ezt a LAN-t köti össze a Tinc a többi site-al)
  • Mouse IP:
    Public: 89.36.220.114/24
    LAN: 192.168.1.1/24 (ezt a LAN-t köti össze a Tinc a többi site-al)
  • Ubu3 IP:
    Public: 86.101.226.161
    LAN: 192.168.11.203 (ezen a LAN-on fut a Tinc)
    LAN: 192.168.120.0/22 (ezt a LAN-t köti össze a Tinc a többi site-al)

Docker container start:

modprobe tun
docker run -tid --name=tinc-vpn --net=host --privileged fedora /opt/start.sh

Config lépései

  1. Létre kell hozni a mappákat
  2. Létre kell hozni a hosts alatt a host-ok (site-ok) configjait
  3. Létre kell hozni host-ra vonatkozó tinc.conf-ot
  4. Létre kell hozni a tinc-up script fájlt (futtatási jog!)
  5. Le kell generálni a Tinc-féle Cert-et
  6. A cert-el kibővített host fájlt (hosts/…) át kell másolni a másik szerverre (ill. szerverekre)

Site konfigurációk

Site1 (hamster):

mkdir -p /etc/tinc/mycompany/hosts

/etc/tinc/mycompany/hosts/hamster:

Address = 81.2.237.121
#Port = 655
Subnet = 192.168.2.0/24

/etc/tinc/mycompany/tinc.conf:

Name = mouse
ConnectTo = hamster
ConnectTo = ubu3
Device = /dev/net/tun
/etc/tinc/mycompany/tinc-up:
ip link set $INTERFACE up
ip addr add 192.168.1.1/24 dev $INTERFACE
# routes
ip route add 192.168.2.0/24 dev sandras # site2
ip route add 192.168.120.0/22 dev sandras # site3
Permission change:
chmod +x /etc/tinc/mycompany/tinc-up
Generate cert:
tincd -n mycompany -K4096
Most kell átmásolni a host/site publikus kulccsával kibővített '/etc/tinc/mycompany/hosts/hamster' fájlt a többi tinc host-ra!
Site2 (mouse):
mkdir -p /etc/tinc/mycompany/hosts
/etc/tinc/mycompany/hosts/mouse:
Address = 89.36.220.114
#Port = 655
Subnet = 192.168.1.0/24
/etc/tinc/mycompany/tinc.conf:
Name = hamster
ConnectTo = mouse
ConnectTo = ubu3
Device = /dev/net/tun
/etc/tinc/mycompany/tinc-up:
ip link set $INTERFACE up
ip addr add 192.168.2.1/24 dev $INTERFACE
# routes
ip route add 192.168.1.0/24 dev sandras # site1
ip route add 192.168.120.0/22 dev sandras # site3
Permission change:
chmod +x /etc/tinc/mycompany/tinc-up
Generate cert:
tincd -n mycompany -K4096
Most kell átmásolni a host/site publikus kulccsával kibővített '/etc/tinc/mycompany/hosts/mouse' fájlt a többi tinc host-ra!
Site3 (ubu3):
mkdir -p /etc/tinc/mycompany/hosts
/etc/tinc/mycompany/hosts/mouse:
Address = 86.101.226.161
#Port = 655
Subnet = 192.168.120.0/22
/etc/tinc/mycompany/tinc.conf:
Name = hamster
ConnectTo = mouse
ConnectTo = hamster
Device = /dev/net/tun
/etc/tinc/mycompany/tinc-up:
ip link set $INTERFACE up
ip addr add 192.168.2.1/24 dev $INTERFACE
# routes
ip route add 192.168.1.0/24 dev sandras # site1
Ip route add 192.168.2.0/24 dev sandras # site2
Permission change:
chmod +x /etc/tinc/mycompany/tinc-up
Generate cert:
tincd -n mycompany -K4096
Most kell átmásolni a host/site publikus kulccsával kibővített '/etc/tinc/mycompany/hosts/hamster' fájlt a többi tinc host-ra!
Minden site-on:
Ubuntu esetén, a tinc automatikus indulásához be kell írni az elindítandó site2site network (mappa) nevét a nets.boot fájlba.
/etc/tinc/nets.boot:
## This file contains all names of the networks to be started on system startup.
mycompany

Teszt

iperf-el teszteltem, így ezt minden tinc host-on fel kell telepíteni.
dnf install iperf
# vagy
apt-get install iperf
Persze van ennél már újabb verzió is, de most nem érdekes :)
Mouse:
iperf -s 192.168.1.1 -p 9883
Hamster:
iperf -c 192.168.1.1 -t 5 -i 2 -p 9883
...és ha minden jól megy szépen felépül a kapcsolat és "pörögnek a számlálók" :)
De persze lehet ping-el, telnet-el és mással is tesztelni :)
Hasznos parancsok
Debug (level: 0-5):
Ha valami nem stimmel, érdemes lehet a tinc-et ideiglenesen debug módban indítani.
tinc -n mycompany -D -d5
Kapcsolatok listája:
kill -USR1 <tinc pid>
Statisztika:
kill -USR2 <tinc pid>

Kliensek

A legvégére maradt az egyik legfontosabb.
A tinc node-ok mögött lévő hálózaton lévő kliensek még nem érik el a másik site-ot, és az ott lévő klienseket. Ehhez az alábbiakat még be kell állítani, illetve engedélyezni.
  • A klienseken vagy a központi router-en (amin keresztül a kliensek elérik az internetet) kell beálítani, hogy a site2site-os hálózat az aktuális átjáró host-ra mutasson.
  • A tinc node-okon szükség lehet az ip_forward és esetleg a NAT Masquerade engedélyezésére.
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -j MASQUERADE
Nálam legalábbis ezek mind kellettek a fenti teszt környezetben.
A beállítások után már az eltérő site-on lévő klienseknek is látniuk kell egymást. Mennie kell a ping-nek, megosztás elérésnek, stb.
Források
Működési módok (router, switch) magyarázat:
Elsőre lehet bonyolultnak tűnik, vagy hosszúnak, de ha esetleg elsőre nem is, néhány sikertelen kisérlet után már menni fog :)
Sok sikert a beállításhoz, használathoz!
One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.