Blog/content/posts/2024/network/tinc.md
2024-12-19 05:44:03 +03:00

131 lines
3.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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
Всё будет работать, демон перезапускать нет необходимости.