Настройка 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 -> Конфигурация.
На вкладке «Сети» в столбце Команды нажимаем на кнопку [+]
В появившемся окне Редактировать сеть заполняем следующие значения:
Режим (если выбрана расширенная настройка):
Маршрутизатор - для формирования маршрутной таблицы применяется переменная Подсеть, используемая в конфигурационном файле отдельных узлов. Поддерживается передача только unicast-пакетов.
Коммутатор - в этом режиме поддерживаются ARP, широковещательные и групповые запросы, различаются МАС-адреса.
В строке Имя сети необходимо указать произвольное имя нашей сети (допускаются только буквенно-цифровые значения).
В строке Сеть необходимо указать ip-адрес VPN.
Время пинга - время в секундах между отсылками контрольных пакетов, если в период такого же времени удаленный узел не ответит, соединение будет разорвано, а остальные узлы будут оповещены об этом.
Шифр - симметричный алгоритм, используемый для шифрования UDP-потока. Поддерживаются все алгоритмы, реализуемые библиотекой OpenSSL, при установке значения в None шифрование отключается.
Имя хоста - уникальное имя этого узла в VPN-сети.
Расширенный адрес - внешний ip-адрес устройства.
Внешний порт - порт, на котором принимает запросы демон, по умолчанию 655.
Подсеть - VPN-подсеть, параметр Сеть должен являться частью этой подсети.
Секретный ключ и Открытый ключ - ключи для шифрования и аутентификации. Оставляем пустыми для генерации.
Нажимаем [Сохранить изменения]
Если нажать редактирование созданной сети, то в полях Секретный ключ и Открытый ключ будут значение ключей.
На вкладке Хосты под столбцом Команды нажимаем на кнопку [+].
В появившемся окне Редактировать хост заполняем значения параметров хоста, к которому мы будем подключаться.
Сеть - выбираем созданную нами сеть.
Имя хоста - произвольное имя хоста.
Расширенный адрес - внешний 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
Для начала поставим нужный нам пакет (на каждом шлюзе):
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-инфраструктуры любой сложности
Читайте также: