Menginstal sebuah VPN dengan Tinc di Ubuntu 16.04 LTS

 

Virtual Private Network (VPN) adalah jaringan pribadi aman yang beroperasi lebih besar jaringan umum misalnya internet. Vpn telah menjadi semakin populer dalam beberapa tahun terakhir, terutama karena mereka menawarkan peningkatan keamanan dan privasi tanpa perlu untuk menyiapkan mahal dan kompleks hardware baru. Mereka juga menawarkan beberapa keuntungan lainnya, termasuk jaringan dan dukungan mengurangi biaya.

VPN bekerja dengan menciptakan sebuah terowongan dienkripsi melalui jaringan publik, dan menggunakan ini untuk aman mengirim data antara server dan terminal. Koneksi ini dapat dienkripsi dalam berbagai cara, dan ada banyak klien VPN yang berbeda dan daemon sesuai arsitektur anda, anggaran, dan tingkat pengalaman.

Tinc adalah salah satu solusi tersebut (1,2). Open-source daemon VPN, sekarang tersedia untuk berbagai platform, dan memiliki beberapa keunggulan dibandingkan klien yang sama VPN. Menawarkan enkripsi yang aman dan terpercaya, kompresi opsional, dan mudah diupgrade sebagai jaringan Anda tumbuh. Otomatis jala penuh routing yang berarti bahwa lalu lintas VPN selalu (bila memungkinkan) dikirim langsung ke mesin tujuan, tanpa menjalani transfer menengah, dan ini sangat meningkatkan keamanan dengan membatasi kemungkinan pencurian data (3). Sebagai tambahan, karena Tinc VPN muncul untuk kode jaringan tingkat IP sebagai perangkat jaringan yang normal, setelah mendirikan Tinc VPN tidak perlu untuk beradaptasi perangkat lunak yang ada. Hal ini membuat Tinc VPN inheren scalable.

Satu-satunya masalah kecil dengan Tinc adalah bahwa beberapa orang telah menemukan itu agak sulit untuk mengatur. Jika itu terdengar seperti Anda, tidak pernah takut - hari ini saya akan membawa Anda melalui cara (kurang lebih) bebas repot mendapatkan Tinc VPN dan berjalan pada server Anda.

Pre-syarat

Untuk mengikuti tutorial ini sepenuhnya, Anda akan membutuhkan setidaknya tiga Ubuntu 16.04 Server, dan akses root pada setiap mesin. Jika Anda tidak memiliki ini atau tidak yakin apa artinya ini, tutorial ini bukan untuk Anda - pertama Anda harus memeriksa bagaimana menyiapkan server menggunakan Ubuntu (4).

Jika Anda sedang membangun sebuah sistem server dari awal, Anda harus terlebih dahulu berpikir tentang bagaimana mesin Anda akan berkomunikasi satu sama lain. Dalam tutorial ini, Aku akan menggunakan nama variabel yang saya pikir kebanyakan orang akan memilih, tetapi harus menyadari bahwa Anda mungkin perlu menyesuaikan beberapa nama variabel sesuai dengan setup sendiri.

Jika Anda ingin mengikuti tutorial ini persis, Anda akan harus terlebih dahulu menyiapkan dua VPS di datacenter yang sama, dan kemudian membuat VPS ketiga di pusat data kedua. pusat data saya disebut NYC2, yang memiliki dua VPS, dan AMS2, yang memiliki sepertiga. VPS ini disebut sebagai berikut:

externalnyc - Semua node VPN kami akan terhubung ke server ini, yang berarti bahwa itu harus tetap terhubung dan tersedia untuk memastikan fungsi jaringan benar. Jika Anda akhirnya ingin menambahkan server tambahan untuk set up, mereka akan perlu mengatur dengan cara yang sama seperti externalnyc.

internalnyc - VPS ini menghubungkan ke node VPN externalnyc menggunakan antarmuka jaringan pribadi.

ams1 - Ini adalah koneksi VPN publik kita. Menghubungkan ke externalnyc menggunakan internet publik.

Tujuan

Apa yang kita ingin capai adalah sebagai berikut:

jaringan pribadi kita diwakili oleh garis hijau, dan menghubungkan semua tiga server. oranye adalah jaringan pribadi kita, menghubungkan bersama dua server NYC2. Semua tiga server dapat terhubung melalui VPN, meskipun jaringan pribadi tidak dapat diakses untuk AMS1.

Untuk melakukan hal ini, Ikuti langkah berikut:

saya menginstal

pertama, kita perlu menginstal Tinc. Seperti biasa, pastikan semua repositori apt yang up to date dengan menjalankan:

sudo apt-get update

Kemudian instal Tinc dalam cara standar melalui apt:

sudo apt-get install I

Dan hanya itu! Mesin Anda sekarang akan men-download Tinc, ditambah prasyarat yang Anda butuhkan. Kita sekarang perlu kita lihat konfigurasi.

Konfigurasi

Konfigurasi Tinc mungkin sedikit berbeda dari VPN lain yang digunakan untuk. Ini menggunakan “netname” untuk membedakan satu dari yang lain VPN, Hal ini menjadi sangat berguna ketika Anda memiliki beberapa VPN berjalan melalui Tinc, tetapi sedikit kontra-intuitif pada awalnya. Karena ini adalah jaringan Tinc pertama kami, mari kita tetap sederhana dan memanggil kami VPN “netname”.

Sekarang untuk masing-masing server kami. Masing-masing akan membutuhkan tiga komponen konfigurasi:

File-file konfigurasi: tinc.conf, saya-up, I-turun, dan jumlah opsional file lainnya.

Publik dan swasta pasangan kunci: ini adalah untuk enkripsi dan otentikasi.

Host file konfigurasi ini berisi kunci publik, dan elemen konfigurasi VPN lainnya.

Sekarang mari kita mengkonfigurasi masing-masing server kami pada gilirannya. pertama, externalnyc.

Konfigurasi externalnyc

Oke, sekarang untuk mur dan baut. pada externalnyc, mulai dengan membuat struktur direktori konfigurasi untuk netname VPN. Jalankan:

sudo mkdir -p / etc / I / netname / host

tinc.conf sekarang terbuka di editor teks yang Anda pilih:

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

Setelah Anda memiliki file di depan Anda, tambahkan berikut ke bagian bawah file:

Name = externalnyc
AddressFamily = ipv4
Interface = tun0

Semua yang Anda lakukan di sini adalah untuk mengkonfigurasi node disebut externalnyc, dan memberitahu server bahwa itu antarmuka jaringan akan menggunakan IPv4 dan disebut “tun0”. Simpan file, dan menutupnya.

Selanjutnya, kita perlu membuat file konfigurasi host untuk externalnyc. Untuk melakukan hal ini, buka file konfigurasi host dalam editor teks:

sudo vi / etc / I / netname / host / externalnyc

Lagi, menambahkan beberapa baris ke bagian bawah file ini, mengganti alamat IP publik dari VPS Anda di baris pertama:

Address = externalnyc_public_IP
Subnet = 10.0.0.1/32

Ini adalah file yang server lain akan digunakan untuk menyambung ke externalnyc. Alamat memberitahu node lain bagaimana dan di mana untuk terhubung ke server ini, dan alamat subnet adalah subnet yang daemon ini akan beroperasi pada. Lagi, menyimpan perubahan ke file ini dan menutupnya.

Sekarang kita perlu untuk menghasilkan publik / sepasang kunci pribadi untuk tuan rumah ini. Hal ini cukup mudah, hanya jalankan:

sudo tincd -n netname -K4096

Hal ini membuat sebuah kunci RSA swasta, dan menambahkan sepasang kunci publik untuk akhir dari file konfigurasi yang baru saja kita buat. Anda dapat membukanya lagi untuk melihat bahwa ini telah dilakukan, Jika Anda suka.

Sekarang, kita perlu membuat Tinc-up, script kecil yang akan dijalankan ketika VPN kami dimulai. Buka file berikut untuk mengedit:

sudo vi / etc / I / netname / my-up

Dan tambahkan:

#!/bin/sh
ifconfig $INTERFACE 10.0.0.1 netmask 255.255.255.0

Setiap kali netname VPN dimulai, script ini akan berjalan. Ini akan membuat antarmuka jaringan yang akan digunakan oleh VPN kami, dan pada externalnyc VPN ini akan memiliki IP 10.0.0.1.

Tapi ketika VPN dihentikan, kami ingin antarmuka jaringan ini menghilang, jadi kita perlu satu script lebih. Ini harus ditambahkan ke Tinc-down. Terbuka:

sudo vi / etc / I / netname / I-down

Dan kemudian menambahkan:

#!/bin/sh
ifconfig $INTERFACE down

Dan lagi menyimpan dan keluar. Kami sekarang memiliki script kami, tetapi agar mereka bekerja mereka harus ditandai sebagai executable. Hal ini cukup mudah, menggunakan baris perintah:

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

Simpan dan keluar, dan Anda selesai mengkonfigurasi server ini. Selanjutnya, internalnyc dan ams1.

Konfigurasi internalnyc dan ams1

Untuk mengkonfigurasi dua server yang tersisa, Anda perlu menjalankan perintah yang sama pada setiap mesin. Ada variasi kecil beberapa, yang saya akan menunjukkan, namun proses ini pada dasarnya sama.

Seperti yang kita lakukan dengan externalnyc atas, pertama kita perlu membuat struktur direktori untuk file konfigurasi kita. Pada setiap server, jalankan berikut, dan kemudian buka file konfigurasi Tinc untuk mengedit:

sudo mkdir -p / etc / I / netname / host
sudo vi /etc/tinc/netname/tinc.conf

Kemudian tambahkan beberapa baris ke bagian bawah file ini, menggantikan “node_name” dengan nama setiap node:

Name = node_name
AddressFamily = ipv4
Interface = tun0
ConnectTo = externalnyc

Anda dapat melihat bahwa kedua server kami sekarang dikonfigurasi untuk mencoba untuk terhubung ke externalnyc. Simpan file ini, dan menutupnya.

Sekarang kita perlu membuat file konfigurasi host. Jalankan:

sudo vi / etc / I / netname / host / node_name

Kemudian untuk internalnyc, tambahkan baris ini:

subnet = 10.0.0.2/32

Dan untuk ams1, tambahkan baris ini:

subnet = 10.0.0.3/32

Satu-satunya perbedaan di sini adalah bahwa alamat berbeda, sehingga kami dapat memberitahu server kami terpisah. Simpan file ini, dan menutupnya.

Sekarang, seperti sebelum, kita perlu menghasilkan publik kami / pasangan kunci privat, dan menciptakan antarmuka jaringan start up naskah. Pada setiap server, Jalankan:

sudo tincd -n netname -K4096

Lalu:

sudo vi / etc / I / netname / my-up

Sekarang. Untuk setiap server, kita perlu menggunakan alamat kita ditentukan sebelumnya. Jika Anda mengikuti saya tepat, untuk internalnyc Anda perlu menambahkan:

ifconfig $ INTERFACE 10.0.0.2 netmask 255.255.255.0

Dan untuk ams1:

ifconfig $ INTERFACE 10.0.0.3 netmask 255.255.255.0

Tapi, jika Anda tentukan alamat yang berbeda di atas, mengubahnya di sini juga. Simpan file ini, dan berhenti. Kami hampir ada.

Kita hanya perlu membuat jaringan antarmuka berhenti naskah, seperti sebelumnya:

sudo vi / etc / I / netname / I-down

Dan kemudian tambahkan baris ini pada kedua server:

ifconfig $ INTERFACE bawah

Dan sedikit yang terakhir dari konfigurasi adalah untuk membuat script baru dieksekusi:

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

Simpan dan keluar. Fiuh. Jika semuanya berjalan dengan baik, semua tiga server sekarang dikonfigurasi. Sekarang untuk menerapkan kriptografi.

mendistribusikan Keys

Jika Anda sudah menggunakan sistem manajemen konfigurasi, Anda sedang beruntung. Dalam dunia yang ideal, setiap node bahwa kita sekarang telah membuat perlu untuk dapat berbicara langsung dengan node lain menggunakan publik / antarmuka kunci pribadi. Kunci, seperti yang kita lihat di atas, sekarang dalam file konfigurasi host untuk setiap server. Pada jaringan sederhana kita buat di sini, sebenarnya hanya externalnyc perlu untuk bertukar kunci dengan node lain.

Dan begitu, cara termudah untuk melakukannya adalah hanya untuk menyalin setiap kunci publik untuk semua anggota dari berbagai node. Ini sebenarnya cukup mudah, hanya berhati-hati untuk mengubah nilai “alamat” dalam file konfigurasi externalnyc untuk alamat IP pribadi itu sendiri ketika Anda menyalinnya. Cara itu, koneksi akan dibentuk melalui jaringan privat.

Jika Anda mengikuti saya dan disebut VPN Anda “netname”, file-file konfigurasi host di sini: / etc / Tinc / netname / host

Keys pertukaran Antara externalnyc dan internalnyc

Ini sangat mudah. pada internalnyc, menemukan file konfigurasi host dan menyalinnya ke externalnyc:

scp / etc / I / netname / host / internalnyc [email protected]_private_IP: / tmp

Kemudian, pada externalnyc, menyalin file yang sama ke lokasi yang tepat:

cd / etc / I / netname / host; sudo cp / tmp / internalnyc .

Sekarang kita melakukan prosedur yang berlawanan. pada externalnyc, menyalin file konfigurasi host untuk internalnyc:

scp / etc / I / netname / host / externalnyc [email protected]_private_IP: / tmp

Dan kemudian pada internalnyc menyalin file sehingga di tempat yang tepat:

cd / etc / I / netname / host; sudo cp / tmp / externalnyc .

Sekarang kita perlu mengedit file konfigurasi host externalnyc pada internalnyc sehingga alamat benar. Hal ini agar node akan terhubung ke VPN melalui jaringan pribadi. Jadi, pada internalnyc, buka file konfigurasi host untuk externalnyc:

sudo vi / etc / I / netname / host / externalnyc

Dan mengubah nilai alamat ke alamat IP pribadi externalnyc ini, Seperti ini:

Alamat = externalnyc_private_IP

Simpan file, dan berhenti. Itu dua kunci ini dilakukan. Sekarang kita hanya perlu untuk bertukar kunci dengan kami satu node yang tersisa.

Keys pertukaran Antara externalnyc dan ams1

Proses di sini cukup mirip. menggunakan ams1, menyalin file konfigurasi host untuk externalnyc:

scp / etc / I / netname / host / ams1 [email protected]_public_IP: / tmp

Dan sekali lagi salin ke tempat yang tepat, menggunakan externalnyc:

cd / etc / I / netname / host; sudo cp / tmp / ams1 .

Tinggal di externalnyc, menyalin file dengan cara lain, menyeberang ke ams1:

scp / etc / I / netname / host / externalnyc [email protected]_public_IP: / tmp

Dan sekali lagi, adalah AMS1, menyalin file ini sehingga di tempat yang tepat:

cd / etc / I / netname / host; sudo cp / tmp / externalnyc .

Dan Anda selesai dengan pertukaran kunci. Dalam teori, Anda sekarang punya kerja sebuah, VPN dienkripsi melalui Tinc. Jika Anda telah mengikuti tutorial ini untuk surat, Anda dapat beralih ke pengujian set up. Jika, Namun, Anda juga telah mengambil kesempatan untuk menambahkan node ekstra, sekarang adalah waktu yang baik untuk bertukar semua tombol Anda akan perlu.

Ingat bahwa jika Anda menggunakan simpul pusat, seperti yang saya lakukan di sini, Anda tidak perlu menyalin semua kunci untuk semua server. Namun, jika Anda ingin node dapat berbicara satu sama lain secara langsung, mereka akan perlu untuk bertukar kunci. Proses untuk melakukan hal ini adalah sama seperti yang telah saya dijelaskan di atas - hanya melakukan sebanyak iterasi yang Anda butuhkan untuk mencapai konektivitas yang Anda inginkan.

Pengujian

Anda sekarang harus siap untuk menguji. Untuk melakukan hal ini, itu ide yang baik untuk memulai Tinc dalam mode debug, sehingga kita bisa menangkap kesalahan apapun dan mendapatkan beberapa informasi lebih lanjut jika ada yang tidak beres. Ingat bahwa VPN buruk dikonfigurasi benar-benar dapat menjadi resiko keamanan, jadi pastikan semuanya bekerja dengan baik sebelum Anda mulai menggunakan VPN Anda untuk sesuatu yang penting.

Untuk memulai Tinc dalam mode debug, pada setiap node, dimulai dengan externalnyc, Jalankan:

sudo tincd -n netname -D -d3

Jika Anda sudah disebut VPN sesuatu yang berbeda Anda, Tentu saja, mengubah “netname” variabel ke nama yang tepat.

Setelah daemon dimulai pada setiap node, itu harus kembali output yang memberikan nama dari setiap node karena mereka terhubung. Jika hal ini tidak terjadi, Anda telah membuat kesalahan di suatu tempat.

Sekarang, kita dapat menguji VPN. Di jendela baru pada ams1, ping internalnyc menggunakan alamat IP-nya. Kami ditugaskan ini untuk 10.0.0.2 sebelumnya, jadi ketik:

Ping 10.0.0.2

Mudah-mudahan, ping Anda akan bekerja. Anda juga harus melihat beberapa output debugging di jendela lain, menggambarkan koneksi Anda baru saja membuat. Ams1 sekarang terhubung, melalui VPN baru Anda, untuk externalnyc, dan dapat terhubung ke internalnyc melalui itu. Hit CTRL-C dan ping akan berhenti.

Sekarang Anda punya koneksi VPN aman, Anda dapat menggunakannya untuk semua jenis lain dari jaringan komunikasi - koneksi aplikasi, menyalin file, SSH, atau apa pun yang Anda suka.

Jika ping Anda tidak bekerja, tetapi Anda berpikir Anda melakukan segalanya dengan benar, mungkin bahwa firewall mendapat di jalan. Periksa pengaturan firewall Anda, dan coba lagi.

Dimana saya Boot

Hanya satu hal terakhir. Jika Anda sekarang akan menggunakan Anda Tinc VPN untuk semua jaringan Anda, Anda mungkin ingin mengaturnya untuk startup boot. Anda akan perlu melakukan hal ini pada setiap node, dengan mengedit file konfigurasi nets.boot. Buka file menggunakan:

sudo vi /etc/tinc/nets.boot

Dan kemudian menambahkan nama dari VPN baru Anda ke berkas ini. Jika Anda memilih “netname” seperti saya, ini akan terlihat seperti berikut:

# File ini berisi semua nama-nama jaringan yang akan dimulai pada sistem startup.
netname

Simpan dan keluar, dan Anda sudah selesai. Tinc sekarang bekerja, dan akan mulai pada boot. Bagus kamu.

Jika Anda perlu untuk mengontrol Tinc, Anda sekarang dapat menjalankan “layanan” perintah untuk melakukannya. Pada setiap node, hanya jalankan:

Saya memulai layanan sudo

Dan memiliki bermain di sekitar. Kebanyakan kontrol dasar dapat dicapai melalui perintah ini.

Kesimpulan

Anda sekarang harus memiliki koneksi VPN aman berjalan melalui Tinc pada semua mesin Anda. VPN ini dapat digunakan sebagai dasar untuk membangun fungsionalitas jaringan lebih lanjut.

Jika Anda ingin menambahkan node lanjut di masa depan, atau menggabungkan Tinc dengan VPN lainnya, Tinc akan memungkinkan Anda untuk melakukan hal ini. Proses untuk setiap node tambahan adalah sama seperti yang telah saya dijelaskan di atas, dan Anda harus dapat dengan mudah melihat mana variabel dan alamat perlu berubah. Hanya ingat bahwa jika Anda ingin node dapat terhubung satu sama lain secara langsung, Anda akan perlu untuk menukar tombol antara mereka langsung. Seperti ini, Tinc beroperasi sebagai mesh VPN, yang sedikit lebih aman daripada pendekatan saya (3). Jika tidak, Anda hanya dapat mengatur jaringan Anda seperti yang telah saya lakukan, dan telah segala sesuatu yang terjadi melalui simpul pusat.

Entah cara, Anda sekarang bebas untuk bermain-main. Semoga sukses!

Sumber daya

(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

Sumber