Как создать легковесную P2P Mesh VPN с Tinc

Графическое изображение облака с замочной скважиной под ним.

Tinc – это адаптер виртуальной частной сети (VPN) с открытым исходным кодом, который предлагает простой способ создания частной сети пир-пир (P2P) mesh в Linux, Windows и macOS. Подобно OpenVPN и Wireguard, он может связывать несколько компьютеров через различные сетевые топологии в одну виртуальную локальную сеть (LAN). В этой статье мы покажем вам преимущества использования Tinc и как установить и создать простую mesh-сеть на базе Tinc.

Почему использовать Tinc вместо Wireguard и OpenVPN?

Одной из уникальных особенностей Tinc по сравнению с другими VPN-демонами является то, что он разработан как mesh-сеть. Это означает, что, в отличие от Wireguard, он может легко адаптироваться к изменениям в условиях сети. Это делает его более устойчивым, особенно для компьютеров с плохим сетевым соединением.

Терминал, показывающий измерение производительности Tinc на Ubuntu.

Кроме того, Tinc обладает большинством функций, которые вы ожидаете от традиционного VPN, такого как OpenVPN. Это включает в себя возможность преодолевать NAT-среды, создавать зашифрованные туннели и связывать приложения, работающие исключительно в LAN.

Терминал, показывающий производительность ping Tinc на Debian.

Наконец, Tinc также стремится сделать каждое ваше соединение внутри сети P2P. Это может быть как через автоматическое обнаружение пир-узлов, так и через координацию с общедоступным сервером Tinc. В результате соединения внутри VPN Tinc не только устойчивы, но и быстры и отзывчивы.

Полезно знать: все еще не решили, какой VPN выбрать? Ознакомьтесь с нашей статьей, где мы рассматриваем, как Wireguard и OpenVPN сравниваются друг с другом.

Установка Tinc на Linux

Первый шаг в установке Tinc – убедиться, что ваша система обновлена. В Ubuntu выполните следующую команду:

sudo apt update && sudo apt upgrade -y

Скачайте и установите Tinc непосредственно из репозиториев пакетов Ubuntu:

sudo apt install tinc

Терминал, показывающий процесс установки пакета Tinc в Ubuntu.

Чтобы установить Tinc на другие дистрибутивы Linux, используйте соответствующий менеджер пакетов для этой системы. Например, мне нужно выполнить sudo dnf install tinc, чтобы скачать программу в Fedora.

Терминал, показывающий процесс установки на Fedora Linux.

Подтвердите, что вы правильно установили Tinc, открыв сеанс терминала и выполнив tincd --version.

Терминал, показывающий текущую версию Tinc, работающую на Ubuntu.

Создание базовой mesh-сети с Tinc

С установленным Tinc на вашем компьютере вы можете теперь настроить вашу первую Tinc-сеть. Создайте новою папку внутри “/etc/tinc.” Это будет содержать все файлы, относящиеся к вашему узлу Tinc:

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

Создайте новый конфигурационный файл, используя любимый текстовый редактор:

sudo nano /etc/tinc/mynetwork/tinc.conf

Вставьте следующий блок кода в ваш новый конфигурационный файл:

Name = mynode  
Device = /dev/net/tun

Замечание: некоторые дистрибутивы Linux могут изменить расположение туннельного адаптера внутри “/dev.” Чтобы найти его точный путь для вашей системы, выполните:

find /dev -name *tun* -type c

Создайте текстовый файл в папке “hosts” с именем вашего узла Tinc и вставьте следующее содержимое:

Subnet = 192.168.11.1/32  
Address = YOUR-MACHINE-IP-ADDRESS-HERE  
Port = 655

Замените значение переменной “Address” на IP-адрес вашего компьютера. Вы можете найти его, выполнив ip addr.

Терминал, подчеркивающий приватный IP-адрес машины Ubuntu.

Замечание: вам необходимо предоставить публичный IP-адрес вашего компьютера, если вы хотите создать общедоступный VPN.

Сохраните файл hosts вашей машины, затем создайте два файла в “/etc/tinc/mynetwork:”

sudo touch /etc/tinc/mynetwork/tinc-{up,down}  
sudo chmod +x /etc/tinc/mynetwork/tinc-{up,down}

Откройте файл “tinc-up”, затем вставьте в него следующий Bash-код. Это создаст виртуальный сетевой интерфейс для Tinc и присвоит IP-адрес этому интерфейсу:

#!/bin/sh  
  
ip link set $INTERFACE up  
ip addr add 192.168.11.1/32 dev $INTERFACE  
ip route add 192.168.11.0/24 dev $INTERFACE

Сохраните файл, затем откройте файл “tinc-down” и вставьте в него следующее. Это делает обратное «tinc-up»: он отменяет присвоение IP-адреса вашему интерфейсу Tinc и удаляет этот интерфейс с вашего компьютера:

#!/bin/sh  
  
ip route del 192.168.11.0/24 dev $INTERFACE  
ip addr del 192.168.11.1/32 dev $INTERFACE  
ip link set $INTERFACE down

Терминал, показывающий содержимое скрипта tinc-down в Ubuntu.

Сгенерируйте ключевую пару для вашего узла Tinc, запустив tincd:

sudo tincd -n mynetwork --generate-keys=4096

Нажмите Enter дважды, чтобы принять место по умолчанию для сохранения как приватных, так и публичных ключей на вашем узле Tinc.

Терминал, показывающий процесс генерации ключевой пары для Tinc в Ubuntu.

Добавление первого клиента Tinc

Чтобы добавить нового клиента Tinc, сначала убедитесь, что вы правильно установили Tinc на вашем втором компьютере.

Терминал, показывающий версию Tinc на Debian.

Создайте структуру каталогов для конфигурации Tinc, используя mkdir -p.

Используйте ваш любимый текстовый редактор, чтобы создать конфигурационный файл для вашего клиента Tinc:

sudo nano /etc/tinc/mynetwork/tinc.conf

Вставьте следующие строки кода в конфигурационный файл вашего второго компьютера:

Name = myclient  
Device = /dev/net/tun  
ConnectTo = mynode

Создайте файл с именем вашего компьютера Tinc в папке “/etc/tinc/mynetwork/hosts.” В этом случае я назвал свой второй компьютер “myclient,” поэтому я создам файл с именем “myclient:”

sudo nano /etc/tinc/mynetwork/hosts/myclient

Вставьте следующий блок кода в новый файл hosts. Подобно вашему первому узлу, это описывает конфигурацию сети вашего демона Tinc:

Subnet = 192.168.11.2/32  
Port = 655

Сохраните новый файл hosts, затем создайте скрипты “tinc-up” и “tinc-down” на вашем втором компьютере:

sudo touch /etc/tinc/mynetwork/tinc-{up,down}  
sudo chmod +x /etc/tinc/mynetwork/tinc-{up,down}

Откройте файл tinc-up с помощью вашего любимого текстового редактора и вставьте следующий блок кода в него:

#!/bin/sh  
ip link set $INTERFACE up  
ip addr add 192.168.11.2/32 dev $INTERFACE  
ip route add 192.168.11.0/24 dev $INTERFACE

Сохраните ваш файл tinc-up, затем откройте tinc-down и вставьте следующие строки кода в него:

#!/bin/sh  
  
ip route del 192.168.11.0/24 dev $INTERFACE  
ip addr del 192.168.11.2/32 dev $INTERFACE  
ip link set $INTERFACE down

Завершите конфигурацию вашего клиента Tinc, сгенерировав его ключевую пару:

sudo tincd -n mynetwork --generate-keys=4096

Терминал, показывающий процесс генерации ключевой пары на втором компьютере Tinc.

Запуск Mesh-сети Tinc

На этом этапе у вас уже есть два правильно сконфигурированных демона Tinc. Однако вам все еще нужно соединить эти два демона Tinc, чтобы создать ваш P2P VPN в Linux. Для этого вам нужно скопировать файл конфигурации hosts с вашего узла Tinc на ваш клиент и наоборот.

Начните, открыв сеанс терминала вашего узла и перейдя в его директорию “/etc/tinc/mynetwork/hosts”:

cd /etc/tinc/mynetwork/hosts

Скопируйте файл конфигурации внутри этой директории и передайте его на ваш клиент. В моем случае я использую scp, чтобы отправить этот файл через ssh:

scp ./mynode YOUR-CLIENT-IP-ADDRESS:~

Терминал, показывающий процесс передачи конфигурации клиента Tinc с одной системы на другую.

Замечание: хотя я использовал scp в этом примере, вы также можете вручную передать их с помощью флеш-накопителей.

Перейдите на ваш клиентский компьютер и скопируйте файл hosts, который вы только что передали, в папку “/etc/tinc/mynetwork/hosts” клиента:

sudo cp -v ~/mynode /etc/tinc/mynetwork/hosts/

После этого выполните scp на стороне клиентского компьютера, чтобы передать его файл hosts обратно на ваш узел:

scp /etc/tinc/mynetwork/hosts/myclient YOUR-NODE-IP-ADDRESS:~

Скопируйте файл hosts вашего клиента в директорию hosts вашего узла:

sudo cp ~/myclient /etc/tinc/mynetwork/hosts/

Кстати: беспокоитесь о вашей личной безопасности в интернете? Узнайте, как вы можете улучшить конфиденциальность и безопасность своего компьютера на Linux.

Запуск Mesh-сети Tinc

Запустите вашу полностью настроенную сеть Tinc, выполнив следующую команду на каждом из ваших хостов:

sudo tincd -n mynetwork

Подтвердите, что вы можете общаться с вашими узлами через интерфейс Tinc, выполняя простой ping:

ping -c 5 192.168.11.2

Терминал, показывающий задержку VPN Tinc, а также сетевое устройство, работающее на Ubuntu.

Наконец, включите службу Tinc, чтобы гарантировать, что ваш VPN будет работать при старте системы:

sudo systemctl enable --now [email protected]

Научиться создавать свою собственную P2P mesh VPN в Linux с помощью Tinc – это только первый шаг в изучении этого чудесного мира компьютерных сетей. Углубитесь в тонкости этой технологии, ознакомившись с нашим полным обзором VPN.

Изображение предоставлено: Growtika через Unsplash. Все изменения и скриншоты от Ramces Red.