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