diff --git a/content/posts/2024/network/tinc.md b/content/posts/2024/network/tinc.md new file mode 100644 index 0000000..ffbc21a --- /dev/null +++ b/content/posts/2024/network/tinc.md @@ -0,0 +1,130 @@ +--- +title: "🕸️ Mesh VPN через Tinc" +date: 2024-12-19T04:37:57+03:00 +draft: false +tags: [tutorial, linux, vpn, network] +--- + +## Подготовка рабочей директории + +Создание директорий новой сети. + +```sh +export NETWORK_NAME="office" # Имя новой сети +mkdir -p /etc/tinc/$NETWORK_NAME/hosts +cd /etc/tinc/$NETWORK_NAME/ +``` + +Создание исполняемых файлов для управления интерфейсом. + +```sh +touch tinc.conf tinc-down tinc-up +chmod +x tinc-down tinc-up +``` + + +## Настройка tinc + +Следующий шаг настройка файла конфигурации демона `tincd`. + +Файл `tinc.conf` на `master` _(«Основной» сервер с белым IP)_ + +```text +Name = master +Device = /dev/net/tun +Port = 655 +``` + +Файл `tinc.conf` на `client` _(Клиент)_ + +```text +Name = client +Device = /dev/net/tun +Port = 655 + +ConnectTo = master +``` + + +## Создание ключей + +```sh +# Команду необходимо выполнить на обеих (всех) машинах +tincd -n $NETWORK_NAME -K +``` + + +## Настройка хостов + +`/etc/$NETWORK_NAME/hosts/master`. Адрес `1.1.1.1` заменить на белый IP сервера. + +```text +Address = 1.1.1.1 +Subnet = 10.0.7.1/32 + +# Здесь находится публичный ключ +``` + +`/etc/$NETWORK_NAME/hosts/client` + +```text +Subnet = 10.0.7.2/32 + +# Здесь находится публичный ключ +``` + +Эти файлы должны находится на всех машинах. + + +## Скрипты для управления интерфейсом + +Адрес `10.0.7.1` на клиентах заменить на соответствующий. + +`/etc/$NETWORK_NAME/tinc-down` + +```sh +#!/bin/sh +ip addr del 10.0.7.1/24 dev $INTERFACE +ip link set $INTERFACE down +``` + +`/etc/$NETWORK_NAME/tinc-up` + +```sh +#!/bin/sh +ip link set $INTERFACE up +ip addr add 10.0.7.1/24 dev $INTERFACE +``` + + +## Запуск + +```sh +tincd -n $NETWORK_NAME -D -d3 +``` + +* Флаг `-d3` отвечает за вывод отладочных сообщений. +* Флаг `-D` _(`no-detach`)_ отвечает за запуск демона без форка. + +Если всё впорядке и сеть работает, можно активировать **systemd** сервис. + +```sh +systemctl start tinc@$NETWORK_NAME.service +systemctl enable tinc@$NETWORK_NAME.service +``` + +## Прочее + +### На клиенте сервер запущен, сервер на мастере перезапущен + +Всё в порядке. Сервер `tincd` на клиенте будет пытаться переподключаться к мастер серверу, пока не наладится соединение. + + +### На клиенте пропал интернет, а потом появился + +Всё в порядке, ничего не произойдёт. При появлении сети VPN продолжит работу. + + +### Добавление нового клиента на мастер сервер без перезапуска tinc + +Всё будет работать, демон перезапускать нет необходимости.