Instalowanie VPN za pomocą Tinc na Ubuntu 16.04 LTS

 

Wirtualna sieć prywatna (VPN) to bezpieczna sieć prywatna działająca w większej sieci publicznej, takiej jak Internet. Sieci VPN stają się coraz bardziej popularne w ostatnich latach, głównie dlatego, że oferują zwiększone bezpieczeństwo i prywatność bez konieczności konfigurowania kosztownego i złożonego nowego sprzętu. Oferują one również szereg innych korzyści, w tym zmniejszenie kosztów sieciowania i wsparcia.

Sieci VPN działają, tworząc zaszyfrowany tunel w publicznej sieci i wykorzystując go do bezpiecznego przesyłania danych między serwerami i terminalami. Połączenia te można szyfrować na różne sposoby, a istnieje wiele różnych klientów i demonów VPN, które pasują do architektury, budżetu i poziomu doświadczenia.

Tinc jest jednym z takich rozwiązań (1,2). Demon VPN typu open source jest teraz dostępny dla szerokiej gamy platform i ma wiele zalet w porównaniu z podobnymi klientami VPN. Zapewnia bezpieczne i niezawodne szyfrowanie, opcjonalną kompresję i jest łatwo rozszerzalna wraz ze wzrostem sieci. Automatyczne kierowanie z pełną siatką oznacza, że ​​ruch VPN jest zawsze (kiedykolwiek możliwy) wysyłany bezpośrednio do komputera docelowego, bez przechodzenia pośrednich transferów, a to znacznie poprawia bezpieczeństwo, ograniczając możliwość kradzieży danych (3). Ponadto, ponieważ sieć VPN Tinc pojawia się w kodzie sieciowym na poziomie IP jako normalne urządzenie sieciowe, po skonfigurowaniu sieci VPN Tinc nie ma potrzeby dostosowywania istniejącego oprogramowania. To sprawia, że ​​VPN Tinc z natury jest skalowalny.

The only minor issue with Tinc is that some people have found it a little tricky to set up. If that sounds like you, never fear – today I’ll take you through a (more or less) hassle-free way of getting a Tinc VPN up and running on your servers.

Wstępne wymagania

To follow this tutorial fully, you are going to need at least three Ubuntu 16.04 servers, and root access on each machine. If you don’t have this or are not sure what this means, this tutorial is not for you – you should first check out how to set up a server using Ubuntu (4).

If you are building a server system from scratch, you first need to think about how your machines are going to communicate with each other. In this tutorial, I’m going to use the variable names that I think most people would choose, but be aware that you might need to adapt some of the variable names to suit your own setup.

Jeśli chcesz dokładnie zapoznać się z tym samouczkiem, najpierw musisz skonfigurować dwa VPS w tym samym centrum danych, a następnie zrobić trzeci serwer VPS w drugim centrum danych. Moje centra danych nazywają się NYC2, który ma dwa VPS, i AMS2, który ma trzeci. Te VPS są nazywane:

externalnyc – All of our VPN nodes are going to connect to this server, which means that it must stay connected and available to ensure the network functions properly. If you eventually want to add extra servers to your set up, they will need to be set up in the same way as externalnyc.

internalnyc – This VPS connects to the externalnyc VPN node using a private network interface.

ams1 – This is our public VPN connection. It connects to externalnyc using the public internet.

Cel

Chcemy osiągnąć to, co następuje:

Nasza sieć prywatna jest reprezentowana przez zieloną linię i łączy wszystkie trzy serwery. Pomarańczowa to nasza prywatna sieć, łącząca dwa serwery NYC2. Wszystkie trzy serwery mogą łączyć się przez VPN, ale sieć prywatna nie jest dostępna dla AMS1.

Aby to zrobić, wykonaj następujące kroki:

Zainstaluj Tinc

Najpierw musimy zainstalować Tinc. Jak zawsze, upewnij się, że wszystkie twoje repozytoria apt są aktualne, uruchamiając:

sudo apt-get update

Następnie zainstaluj Tinc w standardowy sposób poprzez apt:

sudo apt-get install tinc

And that’s it! Your machine will now download Tinc, plus any prerequisites you need. We now need to have a look at the configuration.

konfiguracja

Configuring Tinc may be a little different from other VPNs you are used to. It uses a “netname” to distinguish one VPN from another, This becomes very useful when you have multiple VPNs running through Tinc, but is a little counter-intuitive at first. Since this is our first Tinc network, let’s keep it simple and call our VPN “netname”.

Teraz dla każdego z naszych serwerów. Każda będzie potrzebować trzech składników konfiguracji:

Pliki konfiguracyjne: tinc.conf, tinc-up, tinc-down i opcjonalna liczba innych plików.

Pary kluczy publicznych i prywatnych: służą do szyfrowania i uwierzytelniania.

Pliki konfiguracyjne hosta: zawierają klucze publiczne i inne elementy konfiguracji VPN.

Let’s now configure each of our servers in turn. First up, externalnyc.

Skonfiguruj externalnyc

OK, teraz do nakrętek i śrub. Na externalnyc, zacznij od utworzenia struktury katalogów konfiguracji dla nazwy sieci VPN. Biegać:

sudo mkdir -p / etc / tinc / netname / hosts

Teraz otwórz plik tinc.conf w wybranym edytorze tekstu:

sudo vi /etc/tinc/netname/tinc.conf

Gdy masz plik przed sobą, dodaj następujące informacje na dole pliku:

Name = externalnyc AddressFamily = ipv4 Interface = tun0

All you are doing here is to configure a node called externalnyc, and telling the server that it’s network interface will use ipv4 and be called “tun0”. Save the file, and close it.

Następnie musimy utworzyć plik konfiguracji hosta dla externalnyc. Aby to zrobić, otwórz plik konfiguracyjny hosta w edytorze tekstu:

sudo vi / etc / tinc / netname / hosts / externalnyc

Znowu dodaj kilka linii na dole tego pliku, zastępując publiczny adres IP twojego VPS w pierwszym wierszu:

Adres = externalnyc_public_IP Podsieć = 10.0.0.1 / 32

Jest to plik, którego inne serwery wykorzystają do połączenia z externalnyc. Adres mówi innym węzłom, jak i gdzie należy się łączyć z tym serwerem, a adres podsieci jest podsiecią, na której demon będzie działał. Ponownie zapisz zmiany w tym pliku i zamknij je.

Teraz musimy wygenerować parę kluczy publiczny / prywatny dla tego hosta. To proste, wystarczy uruchomić:

sudo tincd -n nazwa sieci -K4096

Tworzy to prywatny klucz RSA i dodaje parę kluczy publicznych na końcu pliku konfiguracyjnego, który właśnie utworzyliśmy. Możesz otworzyć go ponownie, aby zobaczyć, że zostało to zrobione, jeśli chcesz.

Teraz musimy stworzyć zwięzły, mały skrypt, który uruchomi się po uruchomieniu VPN. Otwórz następujący plik do edycji:

sudo vi / etc / tinc / netname / tinc-up

I dodaj:

#! / bin / sh ifconfig $ INTERFEJS 10.0.0.1 maska ​​sieci 255.255.255.0

Za każdym razem, gdy zaczyna się nazwa sieci VPN, ten skrypt zostanie uruchomiony. To spowoduje, że interfejs sieciowy będzie używany przez nasz VPN, i na tym VPN externalnyc będzie miał adres IP 10.0.0.1.

Ale gdy VPN zostanie zatrzymany, chcemy, aby ten interfejs sieciowy zniknął, więc potrzebujemy jeszcze jednego skryptu. To powinno być dołączone do tinc-down. Otwarty:

sudo vi / etc / tinc / netname / tinc-down

A następnie dodaj:

#! / bin / sh ifconfig $ INTERFACE w dół

I ponownie zapisz i zakończ. Mamy teraz nasze skrypty, ale aby mogły działać, muszą zostać oznaczone jako pliki wykonywalne. Jest to dość łatwe, używając wiersza poleceń:

sudo chmod 755 / etc / tinc / netname / tinc- *

Zapisz i zakończ, a skończysz konfigurowanie tego serwera. Dalej, internalnyc i ams1.

Skonfiguruj internalnyc i ams1

To configure the two remaining servers, you need to run the same commands on each machine. There are a few minor variations, which I’ll point out, but the process is basically the same.

Podobnie jak w przypadku externalnyc powyżej, musimy najpierw utworzyć strukturę katalogów dla naszych plików konfiguracyjnych. Na każdym serwerze uruchom następujące, a następnie otwórz plik konfiguracyjny Tinc do edycji:

sudo mkdir -p / etc / tinc / netname / hosts
sudo vi /etc/tinc/netname/tinc.conf

Then add a few lines to the bottom of this file, substituting “node_name” with the name of each node:

Nazwa = nazwa_węzła AdresFamily = ipv4 Interfejs = tun0 ConnectTo = externalnyc

Widać, że oba nasze serwery są skonfigurowane tak, aby próbowały połączyć się z externalnyc. Zapisz ten plik i zamknij go.

Teraz musimy utworzyć plik konfiguracyjny hosta. Biegać:

sudo vi / etc / tinc / netname / hosts / node_name

Następnie dla internalnyc dodaj tę linię:

Podsieć = 10.0.0.2 / 32

A dla ams1 dodaj tę linię:

Podsieć = 10.0.0.3 / 32

Jedyna różnica polega na tym, że adresy różnią się, więc możemy odróżnić nasze serwery. Zapisz ten plik i zamknij go.

Teraz, tak jak poprzednio, musimy wygenerować pary kluczy publiczny / prywatny i utworzyć skrypt uruchamiający interfejs sieciowy. Na każdym serwerze uruchom:

sudo tincd -n nazwa sieci -K4096

I wtedy:

sudo vi / etc / tinc / netname / tinc-up

Teraz. Dla każdego serwera musimy użyć adresów podanych wcześniej. Jeśli śledzisz mnie dokładnie, dla internalnyc musisz dodać:

ifconfig $ INTERFACE 10.0.0.2 maska ​​sieci 255.255.255.0

A dla ams1:

ifconfig $ INTERFACE 10.0.0.3 maska ​​sieci 255.255.255.0

Jeśli jednak podałeś inne adresy powyżej, zmień je również tutaj. Zapisz te pliki i zakończ. Już prawie jesteśmy.

Musimy tylko wykonać skrypt zatrzymujący interfejs sieciowy, tak jak wcześniej:

sudo vi / etc / tinc / netname / tinc-down

A następnie dodaj tę linię na obu serwerach:

ifconfig $ INTERFACE w dół

A ostatnia konfiguracja polega na tym, aby nasze nowe skrypty były wykonywalne:

sudo chmod 755 / etc / tinc / netname / tinc- *

Zapisz i wyjdź. Uff. Jeśli wszystko poszło dobrze, wszystkie trzy serwery są teraz skonfigurowane. Teraz za wdrożenie kryptografii.

Dystrybucja kluczy

Jeśli korzystasz już z systemu zarządzania konfiguracją, masz szczęście. W idealnym świecie każdy węzeł, który teraz stworzyliśmy, musi być w stanie rozmawiać bezpośrednio z innym węzłem przy użyciu publicznego / prywatnego interfejsu klucza. Klucze, jak widzieliśmy powyżej, znajdują się teraz w plikach konfiguracyjnych hosta dla każdego serwera. W prostej sieci, którą tutaj tworzymy, faktycznie tylko externalnyc musi wymieniać klucze z innymi węzłami.

And so, the easiest way to do this is simply to copy each public key to all members of the various nodes. This is actually pretty easy, just be careful to change the “address” value in externalnyc’s configuration file to it’s own private IP address when you copy it. That way, the connection will be established over the private network.

If you followed me and called your VPN “netname”, the hosts configuration files are here: /etc/tinc/netname/hosts

Klucze wymiany między externalnyc i internalnyc

To jest proste. W witrynie internalnyc znajdź plik konfiguracyjny hosta i skopiuj go do externalnyc:

scp / etc / tinc / netname / hosts / internalnyc [Email protected]_private_IP: / tmp

Następnie, na externalnyc, skopiuj ten sam plik do właściwej lokalizacji:

cd / etc / tinc / netname / hosts; sudo cp / tmp / internalnyc.

Teraz wykonujemy odwrotną procedurę. Na externalnyc skopiuj plik konfiguracyjny hosta do internalnyc:

scp / etc / tinc / netname / hosts / externalnyc [Email protected]_private_IP: / tmp

A następnie na internalnyc skopiuj plik, aby znalazł się we właściwym miejscu:

cd / etc / tinc / netname / hosts; sudo cp / tmp / externalnyc.

Now we need to edit externalnyc’s hosts configuration file on internalnyc so the address is correct. This is so the nodes will connect to the VPN via the private network. So, on internalnyc, open the hosts configuration file for externalnyc:

sudo vi / etc / tinc / netname / hosts / externalnyc

And change the address value to externalnyc’s private IP address, like this:

Adres = externalnyc_private_IP

Save the file, and quit. That’s these two keys done. Now we just need to exchange keys with our one remaining node.

Klucze wymiany między externalnyc i ams1

Proces tutaj jest bardzo podobny. Używając ams1, skopiuj plik konfiguracyjny hosta do externalnyc:

scp / etc / tinc / netname / hosts / ams1 [Email protected]_public_IP: / tmp

A następnie ponownie skopiuj go w odpowiednie miejsce, używając externalnyc:

cd / etc / tinc / netname / hosts; sudo cp / tmp / ams1.

Pozostając na externalnyc, skopiuj plik w drugą stronę, w poprzek do ams1:

scp / etc / tinc / netname / hosts / externalnyc [Email protected]_public_IP: / tmp

I jeszcze raz, na ams1, skopiuj ten plik, aby znalazł się we właściwym miejscu:

cd / etc / tinc / netname / hosts; sudo cp / tmp / externalnyc.

And you’re done with key exchange. In theory, you’ve now got a working, encrypted VPN through Tinc. If you’ve followed this tutorial to the letter, you can move on to testing your set up. If, however, you’ve also taken the opportunity to add extra nodes, now is a good time to exchange all the keys you will need.

Remember that if you are using a central node, like I’m doing here, you do not need to copy all keys to all servers. However, if you want nodes to be able to talk to each other directly, they will need to exchange keys. The process for doing this is the same as I’ve described above – just do as many iterations as you need to achieve your desired connectivity.

Testowanie

You should now be ready to test. To do this, it’s a good idea to start Tinc in debug mode, so we can catch any errors and get some more information if anything goes wrong. Remember that a poorly configured VPN can actually be a security risk, so make sure everything works properly before you start using your VPN for anything important.

Aby uruchomić Tinc w trybie debugowania, w każdym węźle, zaczynając od externalnyc, uruchom:

sudo tincd -n nazwa-sieci -D-d3

If you’ve called your VPN something different, of course, change the “netname” variable to the appropriate name.

After the daemon starts on each node, it should return output giving you the name of each node as they connect. If this doesn’t happen, you’ve made a mistake somewhere.

Teraz możemy przetestować VPN. W nowym oknie na ams1, ping internalnyc używa swojego adresu IP. Przydzieliliśmy to wcześniej do 10.0.0.2, więc napisz:

ping 10.0.0.2

Hopefully, your ping will work. You should also see some debugging output in the other windows, describing the connections you’ve just made. Ams1 is now connected, through your new VPN, to externalnyc, and can connect to internalnyc through it. Hit CTRL-C and the ping will stop.

Now you’ve got a secure VPN connection, you can use it for any other type of network communication – application connections, copying files, SSH, or anything else you like.

If your ping didn’t work, but you think you did everything right, it might be that a firewall got in the way. Check your firewall settings, and try again.

Tinc On Boot

Just one last thing. If you’re now going to use your Tinc VPN for all your networking, you might want to set it to startup on boot. You will need to do this on each node, by editing the nets.boot configuration file. Open the file using:

sudo vi /etc/tinc/nets.boot

And then add the name of your new VPN to this file. If you chose “netname” like me, this will look like the following:

# Ten plik zawiera wszystkie nazwy sieci, które będą uruchamiane podczas uruchamiania systemu. netname

Save and quit, and you’re done. Tinc is now working, and will start on boot. Well done you.

If you need to control Tinc, you can now run the “service” command to do so. On each node, just run:

Uruchomienie usługi sudo

I baw się dobrze. Większość podstawowych kontroli można osiągnąć za pomocą tego polecenia.

Wnioski

Teraz powinieneś mieć bezpieczne połączenie VPN przez Tinc na wszystkich twoich maszynach. Ta sieć VPN może być używana jako baza do budowania dalszych funkcji sieciowych.

If you want to add further nodes in the future, or combine Tinc with other VPNs, Tinc will allow you to do this. The process for each extra node is the same as I’ve described above, and you should be able to easily see which variables and addresses need changing. Just remember that if you want nodes to be able to connect to each other directly, you will need to swap keys between them directly. Like this, Tinc operates as a mesh VPN, which is a bit more secure than my approach (3). Otherwise, you can just set up your network like I have done, and have everything going through a central node.

Tak czy inaczej, możesz teraz swobodnie się bawić. Powodzenia!

Zasoby

(1) https://www.tinc-vpn.org/

(2) https://www.linux.com/news/creating-vpn-tinc

(3) https://thebestvpn.com/cryptography/

(4) https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-14-04

Źródło

Reklamy

Dodaj komentarz

GTranslate Your license is inactive or expired, please subscribe again!