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