Настройка tinc vpn windows

Обновлено: 05.07.2024

Периодически сталкиваюсь с какими-то программными продуктами, которые существуют уже много лет, удобны, легки, просто работают, но я о них по какой-то причине не слышал на протяжении всего времени их существования. На этой неделе открыл для себя tinc. Если кратко, то tinc - это vpn, который позволяет объединить несколько машин друг с другом, где каждая будет обмениваться при необходимости данными с каждой, т.е. не будет единой точки отказа. Чем прекрасен именно этот вариант - он требует минимальной настройки, конфигурационные файлы очень просты, создание ключа - тоже. Типичный сценарий для использования tinc - несколько географически удалённых филиалов одной сети. Поднимаем на двух машинах бридж, выдаём ему нужный локальный адрес, tinc поднимает tap или tun интерфейс, при создании/уничтожении интерфейса запускает скрипт, в который передаёт имя интерфейса, что позволяет добавить его в бридж или удалить из него. Всё просто работает, но есть один нюанс, о котором я расскажу ниже.

Для начала поставим tinc и создадим в /etc/tinc директорию, соответствующую имени сети. Пусть в нашем случае это будет просто networkname:

Внутри этой директории нужно создать конфигурационный файл с именем tinc.conf и следующим содержимым:

Соответственно, host1 - это имя нашей машины, host2 - это машина, к которой мы будем подключаться. Строк ConnectTo может быть сколько угодно, таким образом, каждый из ваших узлов может соединяться со всеми остальными, на которых запущен tinc. В этом случае желательно настроить синхронизацию конфигурационных файлов между машинами, чтобы не переносить их каждый раз руками или, ещё лучше, накатывать чем-то вроде ansible. Вдаваться подробно в параметры не вижу смысла, вот здесь есть замечательная и понятная документация по параметрам конфигурационного файла.

Tinc работает по udp протоколу, поэтому необходимо на всех машинах с tinc открыть 655-й порт udp. На обоих машинах в директории /etc/tinc/networkname нужно создать директорию hosts, после чего создать пару ключей - публичный и приватный с помощью tincd:

Публичный ключ должен появиться в директории hosts в файле с именем, соответствующим значению поля Name в конфигурационном файле tinc.conf. Т.е. на host1 публичный ключ будет лежать в /etc/tinc/networkname/hosts/host1, а на host2 - в /etc/tinc/networkname/hosts/host2. Теперь на машине host1 мы должны создать файл /etc/tinc/networkname/hosts/host2 следующего содержания:

Где 1.2.3.4 - это белый IP адрес host2, а в конце файла после Compression = 0 нужно вставить публичный ключ с host2, т.е. содержимое файла /etc/tinc/networkname/hosts/host2. Симметричным образом на машине host2 нужно создать файл /etc/tinc/networkname/hosts/host1, после чего на обеих машинах можно запускать сервис, но тут как раз и появляется та тонкость, о которой я писал в самом начале.

У меня было две машины - с Ubuntu 16.04 LTS и Ubuntu 18.04 LTS. На первой после запуска появился интерфейс tap0, а на второй - нет. Начал разбираться.

Запущен и тут же завершён с кодом возврата 0. Интересно, а что же внутри сервиса?

Гениально! Внимание, запускаем VPN сервис // на самом деле нет! // . Запустили! Наслаждайтесь! // на самом деле нет! //
Для сравнения на ubuntu 16.04 в статусе иное:

Проверил sys-v-init скрипты запуска сервиса на обеих машинах - отличия минимальны. Решил убрать файл сервиса на Ubuntu 18.04, после чего systemd вынужден будет вместо него использовать старый скрипт sys-v-init, проверил - работает!

После этого можно двигаться дальше. Итак, у нас на этот момент на обеих машинах должен быть интерфейс tap0. Далее возможны варианты - можно назначить на эти интерфейсы серые IP адреса и они будут видны друг-другу. Можно устроить роутинг через них. А можно создать два бриджа и добавить интерфейсы в бриджи, что даст возможность в те же бриджи потом добавить и физические интерфейсы, таким образом объединив удалённые подсети.

При создании интерфейса tinc может запустить скрипт tinc-up, если найдёт таковой в директории с конфигурационным файлом сети и аналогичным образом будет запущен tinc-down при опускании интерфейса. Вот примеры моих скриптов.

Нужные мне параметры берутся из файла .env, в который я их буду добавлять по мере необходимости и усложнения.

Скрипт в качестве имени сети берёт имя директории, в которой он запущен, проверяет наличие бриджа, если его нет, то создаёт его, назначает ему адрес сети и маску из файла .env и добавляет в него интерфейс tap0. Сетевой мост мы можем использовать и как стандартный интерфейс в том числе, что удобно.
На сегодня это всё.

Tinc - демон виртуальной частной сети (VPN), который использует туннелирование и шифрование для создания безопасной частной сети между хостами в Интернете.

Особенностью Tinc является Full mesh routing - независимо от того, как вы настроили демоны tinc для подключения друг к другу, трафик VPN всегда (если возможно) отправляется непосредственно в пункт назначения, не проходя промежуточные хопы.

Установка¶

Пройдите в раздел Система -> Прошивка -> Обновления. На вкладке Плагины нажмите на кнопку + напротив плагина os-tinc для его установки.

Настройка функционала¶

Настройка функционала осуществляется в разделе VPN -> Tinc -> Конфигурация.

На вкладке «Сети» в столбце Команды нажимаем на кнопку [+]

_images/os-tinc01.jpg

В появившемся окне Редактировать сеть заполняем следующие значения:

Режим (если выбрана расширенная настройка):

Маршрутизатор - для формирования маршрутной таблицы применяется переменная Подсеть, используемая в конфигурационном файле отдельных узлов. Поддерживается передача только unicast-пакетов.

Коммутатор - в этом режиме поддерживаются ARP, широковещательные и групповые запросы, различаются МАС-адреса.

В строке Имя сети необходимо указать произвольное имя нашей сети (допускаются только буквенно-цифровые значения).

В строке Сеть необходимо указать ip-адрес VPN.

Время пинга - время в секундах между отсылками контрольных пакетов, если в период такого же времени удаленный узел не ответит, соединение будет разорвано, а остальные узлы будут оповещены об этом.

Шифр - симметричный алгоритм, используемый для шифрования UDP-потока. Поддерживаются все алгоритмы, реализуемые библиотекой OpenSSL, при установке значения в None шифрование отключается.

Имя хоста - уникальное имя этого узла в VPN-сети.

Расширенный адрес - внешний ip-адрес устройства.

Внешний порт - порт, на котором принимает запросы демон, по умолчанию 655.

Подсеть - VPN-подсеть, параметр Сеть должен являться частью этой подсети.

Секретный ключ и Открытый ключ - ключи для шифрования и аутентификации. Оставляем пустыми для генерации.

Нажимаем [Сохранить изменения]

Если нажать редактирование созданной сети, то в полях Секретный ключ и Открытый ключ будут значение ключей.

На вкладке Хосты под столбцом Команды нажимаем на кнопку [+].

_images/os-tinc02.jpg

В появившемся окне Редактировать хост заполняем значения параметров хоста, к которому мы будем подключаться.

Сеть - выбираем созданную нами сеть.

Имя хоста - произвольное имя хоста.

Расширенный адрес - внешний ip-адрес.

Внешний порт - порт, на котором удаленный демон слушает входящие соединения, по умолчанию 655.

Подсеть - VPN-подсеть.

Открытый ключ - сюда необходимо скопировать открытый ключ с хоста, к которому мы подключаемся (вкладка Сети:Редактировать сеть:Открытый ключ).

Шифр - необходимо установить такое же, как и на хосте, к которому мы подключаемся.

Подключиться к - установить галочку.

Нажимаем [Сохранить изменения] и [Применить]

В меню VPN -> Tinc -> Журнал при успешном подключении должна быть строка типа:

tinc.tingvpn[18851]: Connection with ting01 (192.168.145.41 port 655) activated

В случае ошибки рекомендуется установить более детальный уровень отладки.

Примечание. os-tinc использует порт 655 протокол tcp и udp, не забудьте добавить разрешение в правила межсетевого экрана.

Во-первых, скачать установщик с сайта. Запустите его из текущего расположения.


Следуйте инструкциям программы установки. Если у вас уже установлен TAP-Win32 или CIPE драйвер, вы можете снять галочку с TAP-Win32 компонент драйвера.


Настройка Tinc


В этой папке вы должны создать новый файл с именем tinc.conf .


Откройте этот файл с помощью блокнота или WordPad. В этом файле вы должны указать имя компьютера в VPN. Оно не должно повторять имя, которое вы дали в Windows, предположим, что вы называли home . Вы также можете указать, к какому другому демону Tinc вы хотите подключиться. И укажите сетевой интерфейс, который будет использоваться Tinc, например VPN.


В текущем папке, вы должны создать папку с именем hosts . В этой папке хранятся файлы конфигурации клиентов. Сначала вы должны создать собственный демон Tinc. Имя файла должно быть таким же, как имя, указанное в tinc.conf файла: home . Этот файл должен содержать переменную Subnet c указанием IP-адреса вашего Tinc демона в VPN, будем считать, Subnet 10.20.40.1/32.




Настройка виртуального сетевого устройства

Далее вы должны создать виртуальное сетевое устройство. Запустить addtap.bat в каталоге установки Tinc. Это позволит добавить новые виртуальные сетевые устройства. (Если вы хотите запустить более одного демона Tinc, вам потребуется создавать дополнительные виртуальные сетевые устройства.)


После этого откройте Сети и удаленный доступ в панели управления подключениями, а также изменить имя нового интерфейса на тот, который был указан в tinc.conf , в нашем случае VPN .


Затем дважды щелкните по новому интерфейсу. Включите значок в панели задач, если хотите. Нажмите на нужный интернет-протокол, а затем кнопку Настроить. Вручную установить адрес, вашего компьютера в VPN, в нашем примере 10.20.40.1. Маска подсети должна быть установлена ​​для всего VPN, в этом примере 255.255.0.0.


Начиная Tinc


Если вы включили значок на панели задач, вы заметите, что он меняет форму:

Вы можете временно остановить и запустить Tinc с панели управления службами.

Схема подключения Tinc VPN

tinc_vpn_1.jpg


Для начала поставим нужный нам пакет (на каждом шлюзе):

apt-get install tinc

Далее создадим виртуальный интерфейс с требуемыми параметрами. Для этого отредактируем /etc/network/interfaces.
Первом шлюзу мы назначим адрес: 172.30.0.1/24 второму, соответственно, 172.30.0.2/24

Конфигурация виртуального интерфейса первого шлюза:
auto tap0
iface tap0 inet static
address 172.30.0.1
netmask 255.255.255.0
pre-up ip tuntap add dev $IFACE mode tap
post-down ip tuntap del dev $IFACE mode tap

Второй шлюз аналогично, но с адресом 172.30.0.2

Виртуальный адаптер для Tinc VPN создан и готов к работе (остается только перезапустить сетевые службы).

Соответственно для второго шлюза создаем такие же записи, но с адресом 172.30.0.2.

Перейдем к непосредственной настройке Tinc VPN.
Для этого, первым делом, отредактируем /etc/tinc/nets.boot на первом и втором шлюзе,
дописав в него строчку с названием нашей сети (сети из этого списка будут запускаться автоматически при старте демона).

Tinc VPN хранит настройки VPN сетей в отдельных папках. Поэтому создадим требуемую структуру папок для нашей VPN сети (на первом и втором шлюзе).

mkdir /etc/tinc/blackdiver
mkdir /etc/tinc/blackdiver/hosts

Теперь нам нужно создать файл конфигурации (на двух хостах):

и отредактировать его (будем считать, что у нас первый шлюз подключается ко второму):

Name = blackdiver_a
Interface = tap0
Mode = switch
MaxTimeout = 120
PriorityInheritance = yes
ConnectTo = blackdiver_b

Соответственно второй шлюз у нас является принимающим соединение и его конфигурационный файл будет выглядеть так:

Name = blackdiver_b
Interface = tap0
Mode = switch
MaxTimeout = 120
PriorityInheritance = yes

Далее генерируем ключи для всех хостов:

tincd -n blackdiver -K4096

Далее эти ключами нужно обменяться между серверами (скопировав их в папку /etc/tinc/perfect/hosts/) и в переданной копии добавить адрес подключения
Пример получившегося файла:

service tinc restart

через несколько секунд туннель должен подняться.

Остается только добавить маршрутизацию между сетями.

Для первого шлюза:

ip route add 10.10.1.0/24 via 172.30.0.1

ip route add 10.10.2.0/24 via 172.30.0.2

Сеть поднята и готова.

Остается только сделать автоматическое добавление маршрутов при перезагрузке.

Например это можно сделать добавив данные команды в post-up параметр адаптера tap0 в файле /etc/network/interfaces:

post-up ip route add 10.10.2.0/24 via 172.30.0.2

На этом настройка полностью закончена.

Предупреждение: конфигурация не оптимальна из-за использования tap интерфейса. Он эмулирует L2 уровень целиком, в связи с чем работает с большими потерями в скорости. При возможности лучше использовать другие типы соединений, например IpSec. Преимущества данного метода в использовании только одного порта для связи, что бывает полезно при различных ограничениях провайдера (например обрезается GRE).

Заказать создание и поддержку безопасной IT-инфраструктуры любой сложности

Читайте также: