Virtuální privátní síť (VPN) je zabezpečená privátní síť, která funguje přes větší veřejnou síť, jako je internet. VPN se v posledních letech stávají stále populárnějšími, především proto, že nabízejí zvýšenou bezpečnost a soukromí bez nutnosti nastavovat drahý a složitý nový hardware. Nabízejí také několik dalších výhod, včetně snížených nákladů na síť a podporu.
VPN fungují tak, že vytvářejí šifrovaný tunel přes veřejnou síť a využívají jej k bezpečnému odesílání dat mezi servery a terminály. Tato připojení mohou být šifrována různými způsoby a existuje mnoho různých VPN klientů a démonů, které vyhovují vaší architektuře, rozpočtu a úrovni zkušeností.
Jedním z takových řešení je Tinc (1). Open-source VPN démon, je nyní k dispozici pro širokou škálu platforem a má několik výhod oproti podobným VPN klientům. Nabízí bezpečné a spolehlivé šifrování, volitelnou kompresi a je snadno rozšiřitelný, jak se vaše síť rozrůstá. Automatické úplné směrování sítě znamená, že provoz VPN je vždy (kdykoli je to možné) posílán přímo do cílového počítače, aniž by procházel mezipřenosy, což výrazně zlepšuje zabezpečení omezením možnosti krádeže dat (3). Navíc, protože se Tinc VPN jeví v síťovém kódu na úrovni IP jako normální síťové zařízení, po nastavení Tinc VPN není potřeba upravovat stávající software. Díky tomu je Tinc VPN přirozeně škálovatelná.
Jediným menším problémem s Tincem je to, že některým lidem připadalo trochu složitější nastavit. Pokud to zní jako vy, nebojte se – dnes vás provedu (víceméně) bezproblémovým způsobem, jak zprovoznit Tinc VPN na vašich serverech.
Předběžné požadavky
Chcete-li plně sledovat tento tutoriál, budete potřebovat alespoň tři servery Ubuntu 16.04 a přístup root na každém počítači. Pokud toto nemáte nebo si nejste jisti, co to znamená, tento tutoriál není pro vás – měli byste se nejprve podívat, jak nastavit server pomocí Ubuntu (2).
Pokud budujete serverový systém od nuly, musíte se nejprve zamyslet nad tím, jak spolu budou vaše stroje komunikovat. V tomto tutoriálu budu používat názvy proměnných, které by si podle mě vybrala většina lidí, ale uvědomte si, že možná budete muset některé názvy proměnných upravit tak, aby vyhovovaly vašemu vlastnímu nastavení.
Pokud chcete přesně postupovat podle tohoto návodu, budete muset nejprve nastavit dvě VPS ve stejném datovém centru a poté vytvořit třetí VPS ve druhém datovém centru. Moje datová centra se jmenují NYC2, která má dvě VPS, a AMS2, která má třetí. Tyto VPS se nazývají následovně:
externalnyc – Všechny naše uzly VPN se připojí k tomuto serveru, což znamená, že musí zůstat připojený a dostupný, aby byla zajištěna správná funkce sítě. Pokud nakonec budete chtít do svého nastavení přidat další servery, bude nutné je nastavit stejným způsobem jako externalnyc.
internalnyc – Tento VPS se připojuje k externímu uzlu VPN pomocí privátního síťového rozhraní.
ams1 – Toto je naše veřejné připojení VPN. Připojuje se k externalnyc pomocí veřejného internetu.
Cíl
Chceme dosáhnout následujícího:
Naše privátní síť je reprezentována zelenou linkou a spojuje všechny tři servery. Oranžová je naše soukromá síť, která spojuje dva servery NYC2. Všechny tři servery se mohou připojit přes VPN, ačkoli soukromá síť není pro AMS1 přístupná.
Chcete-li to provést, postupujte takto:
Instalovat Tinc
Nejprve musíme nainstalovat Tinc. Jako vždy se ujistěte, že jsou všechna vaše úložiště apt aktuální, spuštěním:
sudo apt-get update
Poté nainstalujte Tinc standardním způsobem prostřednictvím apt:
sudo apt-get install tinc
A to je vše! Váš počítač si nyní stáhne Tinc a všechny potřebné předpoklady. Nyní se musíme podívat na konfiguraci.
Konfigurace
Konfigurace Tinc se může trochu lišit od ostatních VPN, na které jste zvyklí. K rozlišení jedné VPN od druhé používá „síťový název“, což se stává velmi užitečné, když máte přes Tinc spuštěno více VPN, ale zpočátku je to trochu neintuitivní. Protože toto je naše první síť Tinc, pojďme to zjednodušit a nazvěme naši VPN „síťový název“.
Nyní pro každý z našich serverů. Každý bude potřebovat tři konfigurační komponenty:
Konfigurační soubory:tinc.conf, tinc-up, tinc-down a volitelný počet dalších souborů.
Páry veřejného a soukromého klíče:jsou určeny pro šifrování a ověřování.
Soubory konfigurace hostitele:Obsahují veřejné klíče a další konfigurační prvky VPN.
Nyní postupně nakonfigurujeme každý z našich serverů. Nejprve externalnyc.
Konfigurovat externalnyc
Dobře, teď k maticím a šroubům. Na externalnyc začněte vytvořením konfigurační adresářové struktury pro síťový název VPN. Spustit:
sudo mkdir -p /etc/tinc/netname/hosts
Nyní otevřete tinc.conf ve vámi zvoleném textovém editoru:
sudo vi /etc/tinc/netname/tinc.conf
Jakmile budete mít soubor před sebou, přidejte na konec souboru následující:
Name = externalnyc AddressFamily = ipv4 Interface = tun0
Vše, co zde děláte, je nakonfigurovat uzel s názvem externalnyc a sdělit serveru, že jeho síťové rozhraní bude používat ipv4 a bude se jmenovat „tun0“. Uložte soubor a zavřete jej.
Dále musíme vytvořit konfigurační soubor hostitele pro externalnyc. Chcete-li to provést, otevřete konfigurační soubor hostitelů v textovém editoru:
sudo vi /etc/tinc/netname/hosts/externalnyc
Znovu přidejte několik řádků na konec tohoto souboru a nahraďte veřejnou IP adresou vašeho VPS v prvním řádku:
Address = externalnyc_public_IP Subnet = 10.0.0.1/32
Toto je soubor, který ostatní servery použijí pro připojení k externalnyc. Adresa sděluje ostatním uzlům, jak a kde se mají k tomuto serveru připojit, a adresa podsítě je podsíť, na které bude tento démon fungovat. Znovu uložte změny do tohoto souboru a zavřete jej.
Nyní musíme vygenerovat pár veřejného / soukromého klíče pro tohoto hostitele. Je to snadné, stačí spustit:
sudo tincd -n netname -K4096
Tím se vytvoří soukromý klíč RSA a na konec konfiguračního souboru, který jsme právě vytvořili, se přidá pár veřejných klíčů. Pokud chcete, můžete jej znovu otevřít a zjistit, že to bylo provedeno.
Nyní musíme vytvořit tinc-up, malý skript, který se spustí při spuštění naší VPN. Otevřete následující soubor pro úpravy:
sudo vi /etc/tinc/netname/tinc-up
A přidejte:
#!/bin/sh ifconfig $INTERFACE 10.0.0.1 netmask 255.255.255.0
Při každém spuštění síťového názvu VPN se tento skript spustí. Vytvoří síťové rozhraní, které bude používat naše VPN, a na této VPN bude mít externalnyc IP 10.0.0.1.
Ale když je VPN zastavena, chceme, aby toto síťové rozhraní zmizelo, takže potřebujeme ještě jeden skript. Toto by mělo být připojeno k tinc-down. Otevřít:
sudo vi /etc/tinc/netname/tinc-down
A pak přidejte:
#!/bin/sh ifconfig $INTERFACE down
A znovu uložit a skončit. Nyní máme své skripty, ale aby fungovaly, musí být označeny jako spustitelné. To je docela snadné pomocí příkazového řádku:
sudo chmod 755 /etc/tinc/netname/tinc-*
Uložte a ukončete a tím je konfigurace tohoto serveru hotová. Další na řadě jsou internalnyc a ams1.
Konfigurovat internalnyc a ams1
Chcete-li nakonfigurovat dva zbývající servery, musíte na každém počítači spustit stejné příkazy. Existuje několik menších variací, na které upozorním, ale proces je v podstatě stejný.
Stejně jako u externalnyc výše, musíme nejprve vytvořit adresářovou strukturu pro naše konfigurační soubory. Na každém serveru spusťte následující a poté otevřete konfigurační soubor Tinc pro úpravy:
sudo mkdir -p /etc/tinc/netname/hosts
sudo vi /etc/tinc/netname/tinc.conf
Poté přidejte několik řádků na konec tohoto souboru a nahraďte „název_uzlu“ názvem každého uzlu:
Name = node_name AddressFamily = ipv4 Interface = tun0 ConnectTo = externalnyc
Můžete vidět, že oba naše servery jsou nyní nakonfigurovány pro pokus o připojení k externalnyc. Uložte tento soubor a zavřete jej.
Nyní musíme vytvořit konfigurační soubor hosts. Spustit:
sudo vi /etc/tinc/netname/hosts/node_name
Potom pro internalnyc přidejte tento řádek:
Subnet = 10.0.0.2/32
A pro ams1 přidejte tento řádek:
Subnet = 10.0.0.3/32
Jediný rozdíl je v tom, že adresy se liší, takže můžeme naše servery rozlišit. Uložte tento soubor a zavřete jej.
Nyní, stejně jako předtím, musíme vygenerovat naše páry veřejných / soukromých klíčů a vytvořit spouštěcí skript síťového rozhraní. Na každém serveru spusťte:
sudo tincd -n netname -K4096
A pak:
sudo vi /etc/tinc/netname/tinc-up
Nyní. Pro každý server musíme použít adresy, které jsme zadali dříve. Pokud mě přesně sledujete, pro internalnyc musíte přidat:
ifconfig $INTERFACE 10.0.0.2 netmask 255.255.255.0
A pro ams1:
ifconfig $INTERFACE 10.0.0.3 netmask 255.255.255.0
Pokud jste však výše zadali jiné adresy, změňte je také zde. Uložte tyto soubory a ukončete. Už jsme skoro tam.
Potřebujeme pouze provést zastavení skriptu síťového rozhraní, stejně jako předtím:
sudo vi /etc/tinc/netname/tinc-down
A pak přidejte tento řádek na oba servery:
ifconfig $INTERFACE down
A úplně posledním krokem konfigurace je, aby byly naše nové skripty spustitelné:
sudo chmod 755 /etc/tinc/netname/tinc-*
Uložit a skončit. Uf. Pokud vše proběhlo v pořádku, všechny tři servery jsou nyní nakonfigurovány. Nyní k implementaci kryptografie.
Distribuční klíče
Pokud již používáte systém správy konfigurace, máte štěstí. V ideálním světě musí být každý uzel, který jsme nyní vytvořili, schopen hovořit přímo s jiným uzlem pomocí rozhraní veřejného / soukromého klíče. Klíče, jak jsme viděli výše, jsou nyní v konfiguračních souborech hostitelů pro každý server. V jednoduché síti, kterou zde vytváříme, si ve skutečnosti pouze externalnyc potřebuje vyměnit klíče s ostatními uzly.
Nejjednodušší způsob, jak toho dosáhnout, je jednoduše zkopírovat každý veřejný klíč všem členům různých uzlů. To je vlastně docela snadné, jen buďte opatrní, abyste při kopírování změnili hodnotu „adresa“ v konfiguračním souboru externalnyc na vlastní soukromou IP adresu. Tímto způsobem bude spojení navázáno přes privátní síť.
Pokud jste mě sledovali a nazvali jste svou VPN „síťový název“, konfigurační soubory hostitelů jsou zde:/etc/tinc/netname/hosts
Výměna klíčů mezi externalnyc a internalnyc
To je jednoduché. Na internalnyc vyhledejte konfigurační soubor hostitelů a zkopírujte jej do externalnyc:
scp /etc/tinc/netname/hosts/internalnyc [email protected]_private_IP:/tmp
Poté na externalnyc zkopírujte stejný soubor do správného umístění:
cd /etc/tinc/netname/hosts; sudo cp /tmp/internalnyc .
Nyní provedeme opačný postup. Na externalnyc zkopírujte konfigurační soubor hostitelů do internalnyc:
scp /etc/tinc/netname/hosts/externalnyc [email protected]_private_IP:/tmp
A pak na internalnyc zkopírujte soubor tak, aby byl na správném místě:
cd /etc/tinc/netname/hosts; sudo cp /tmp/externalnyc .
Nyní musíme upravit konfigurační soubor hostitelů externalnyc na internalnyc, aby byla adresa správná. Uzly se tak připojí k VPN přes privátní síť. Takže na internalnyc otevřete konfigurační soubor hosts pro externalnyc:
sudo vi /etc/tinc/netname/hosts/externalnyc
A změňte hodnotu adresy na soukromou IP adresu externalnyc takto:
Address = externalnyc_private_IP
Uložte soubor a ukončete. Tím jsou tyto dva klíče hotové. Nyní si jen potřebujeme vyměnit klíče s naším jedním zbývajícím uzlem.
Výměna klíčů mezi externalnyc a ams1
Zde je postup dost podobný. Pomocí ams1 zkopírujte konfigurační soubor hostitelů do externalnyc:
scp /etc/tinc/netname/hosts/ams1 [email protected]_public_IP:/tmp
A pak jej znovu zkopírujte na správné místo pomocí externalnyc:
cd /etc/tinc/netname/hosts; sudo cp /tmp/ams1 .
Zůstaňte na externalnyc a zkopírujte soubor opačným směrem, napříč do ams1:
scp /etc/tinc/netname/hosts/externalnyc [email protected]_public_IP:/tmp
A ještě jednou, na ams1, zkopírujte tento soubor, aby byl na správném místě:
cd /etc/tinc/netname/hosts; sudo cp /tmp/externalnyc .
A máte hotovo s výměnou klíčů. Teoreticky nyní máte funkční, šifrovanou VPN prostřednictvím Tinc. Pokud jste tento návod dodrželi do puntíku, můžete přejít k testování svého nastavení. Pokud jste však také využili příležitosti přidat další uzly, nyní je vhodná doba na výměnu všech klíčů, které budete potřebovat.
Pamatujte, že pokud používáte centrální uzel, jako to dělám zde, nemusíte kopírovat všechny klíče na všechny servery. Pokud však chcete, aby spolu uzly mohly mluvit přímo, budou si muset vyměnit klíče. Postup je stejný, jak jsem popsal výše – proveďte tolik iterací, kolik potřebujete k dosažení požadovaného připojení.
Testování
Nyní byste měli být připraveni k testování. Chcete-li to provést, je dobré spustit Tinc v režimu ladění, abychom mohli zachytit případné chyby a získat další informace, pokud se něco pokazí. Pamatujte, že špatně nakonfigurovaná VPN může ve skutečnosti představovat bezpečnostní riziko, takže se ujistěte, že vše funguje správně, než začnete VPN používat k čemukoli důležitému.
Chcete-li spustit Tinc v režimu ladění, na každém uzlu, počínaje externalnyc, spusťte:
sudo tincd -n netname -D -d3
Pokud jste svou VPN nazvali jinak, samozřejmě změňte proměnnou „netname“ na odpovídající název.
Po spuštění démona na každém uzlu by měl vrátit výstup s uvedením názvu každého uzlu, když se připojují. Pokud se tak nestane, někde jste udělali chybu.
Nyní můžeme otestovat VPN. V novém okně na ams1 odešlete příkaz ping internalnyc pomocí jeho IP adresy. Toto jsme dříve přiřadili 10.0.0.2, takže zadejte:
ping 10.0.0.2
Doufejme, že váš ping bude fungovat. V ostatních oknech byste také měli vidět nějaký výstup ladění, popisující připojení, která jste právě vytvořili. Ams1 je nyní připojen prostřednictvím vaší nové VPN k externalnyc a může se přes něj připojit k internalnyc. Stiskněte CTRL-C a ping se zastaví.
Nyní máte zabezpečené připojení VPN, které můžete použít pro jakýkoli jiný typ síťové komunikace – připojení aplikací, kopírování souborů, SSH nebo cokoliv jiného, co chcete.
Pokud váš ping nefungoval, ale myslíte si, že jste udělali vše správně, je možné, že vám překážel firewall. Zkontrolujte nastavení brány firewall a zkuste to znovu.
Tinc On Boot
Jen poslední věc. Pokud se nyní chystáte používat Tinc VPN pro všechny své sítě, možná budete chtít nastavit, aby se spouštěla při spouštění. Budete to muset udělat na každém uzlu úpravou konfiguračního souboru nets.boot. Otevřete soubor pomocí:
sudo vi /etc/tinc/nets.boot
A pak do tohoto souboru přidejte název vaší nové VPN. Pokud zvolíte „netname“ jako já, bude to vypadat následovně:
# This file contains all names of the networks to be started on system startup. netname
Uložte a ukončete a máte hotovo. Tinc nyní funguje a spustí se při startu. Výborně.
Pokud potřebujete ovládat Tinc, můžete k tomu nyní spustit příkaz „service“. Na každém uzlu stačí spustit:
sudo service tinc start
A zahrajte si. Nejzákladnější ovládání lze dosáhnout pomocí tohoto příkazu.
Závěr
Nyní byste měli mít zabezpečené připojení VPN běžící přes Tinc na všech vašich počítačích. Tuto VPN lze použít jako základ pro vybudování další síťové funkčnosti.
Pokud chcete v budoucnu přidat další uzly nebo kombinovat Tinc s jinými VPN, Tinc vám to umožní. Proces pro každý další uzel je stejný, jak jsem popsal výše, a měli byste být schopni snadno zjistit, které proměnné a adresy je třeba změnit. Jen si pamatujte, že pokud chcete, aby se uzly mohly k sobě připojovat přímo, budete muset mezi nimi přímo prohodit klíče. Takto Tinc funguje jako síťová VPN, což je o něco bezpečnější než můj přístup. V opačném případě můžete jednoduše nastavit svou síť jako já a nechat vše procházet centrálním uzlem.
Ať tak či onak, nyní si můžete hrát. Hodně štěstí!
Zdroje
(1) https://www.tinc-vpn.org/
(2) https://www.howtoforge.com/tutorial/ubuntu-lts-minimal-server/