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

Наконец, 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 на другие дистрибутивы Linux, используйте соответствующий менеджер пакетов для этой системы. Например, мне нужно выполнить sudo dnf install tinc, чтобы скачать программу в Fedora.

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

Создание базовой 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-адрес вашего компьютера, если вы хотите создать общедоступный 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, запустив tincd:
sudo tincd -n mynetwork --generate-keys=4096Нажмите Enter дважды, чтобы принять место по умолчанию для сохранения как приватных, так и публичных ключей на вашем узле Tinc.

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

Создайте структуру каталогов для конфигурации 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
Запуск 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:~
Замечание: хотя я использовал 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
Наконец, включите службу Tinc, чтобы гарантировать, что ваш VPN будет работать при старте системы:
sudo systemctl enable --now [email protected]Научиться создавать свою собственную P2P mesh VPN в Linux с помощью Tinc – это только первый шаг в изучении этого чудесного мира компьютерных сетей. Углубитесь в тонкости этой технологии, ознакомившись с нашим полным обзором VPN.
Изображение предоставлено: Growtika через Unsplash. Все изменения и скриншоты от Ramces Red.