VPN установка · 12 min read · Dec 21, 2025
Установка VPN с Tinc на Ubuntu 16.04 LTS
Виртуальная частная сеть (VPN) — это безопасная частная сеть, которая работает через более широкую публичную сеть, такую как интернет. VPN стали все более популярными в последние годы, в значительной степени потому, что они предлагают повышенную безопасность и конфиденциальность без необходимости настройки дорогостоящего и сложного нового оборудования. Они также предлагают несколько других преимуществ, включая снижение затрат на сетевые услуги и поддержку.
VPN работают, создавая зашифрованный туннель через публичную сеть и используя его для безопасной передачи данных между серверами и терминалами. Эти соединения могут быть зашифрованы различными способами, и существует множество различных VPN-клиентов и демонов, которые подходят для вашей архитектуры, бюджета и уровня опыта.
Tinc — это одно из таких решений (1). Это демон VPN с открытым исходным кодом, который теперь доступен для широкого спектра платформ и имеет несколько преимуществ по сравнению с аналогичными VPN-клиентами. Он предлагает безопасное и надежное шифрование, опциональное сжатие и легко расширяется по мере роста вашей сети. Автоматическая полная маршрутизация в виде сетки означает, что трафик VPN всегда (когда это возможно) отправляется напрямую на целевую машину, без промежуточных передач, что значительно улучшает безопасность, ограничивая возможность кражи данных (3). Кроме того, поскольку VPN Tinc воспринимается сетевым кодом на уровне IP как обычное сетевое устройство, после настройки VPN Tinc нет необходимости адаптировать существующее программное обеспечение. Это делает VPN Tinc по своей сути масштабируемым.
Единственная небольшая проблема с Tinc заключается в том, что некоторым людям было немного сложно его настроить. Если это похоже на вас, не бойтесь — сегодня я проведу вас через (более или менее) безболезненный способ настройки VPN Tinc на ваших серверах.
Предварительные требования
Чтобы полностью следовать этому руководству, вам потребуется как минимум три сервера Ubuntu 16.04 и доступ root на каждой машине. Если у вас этого нет или вы не уверены, что это значит, это руководство не для вас — вам следует сначала ознакомиться с тем, как настроить сервер с использованием Ubuntu (2).
Если вы строите серверную систему с нуля, вам сначала нужно подумать о том, как ваши машины будут общаться друг с другом. В этом руководстве я буду использовать имена переменных, которые, как я думаю, выбрали бы большинство людей, но имейте в виду, что вам, возможно, придется адаптировать некоторые имена переменных под вашу собственную настройку.
Если вы хотите точно следовать этому руководству, вам сначала нужно настроить два VPS в одном дата-центре, а затем создать третий VPS во втором дата-центре. Мои дата-центры называются NYC2, в котором находятся два VPS, и AMS2, в котором находится третий. Эти VPS называются следующим образом:
externalnyc — Все наши узлы VPN будут подключаться к этому серверу, что означает, что он должен оставаться подключенным и доступным, чтобы обеспечить правильное функционирование сети. Если вы в конечном итоге хотите добавить дополнительные серверы в вашу настройку, их нужно будет настроить так же, как externalnyc.
internalnyc — Этот VPS подключается к узлу VPN externalnyc с использованием интерфейса частной сети.
ams1 — Это наше публичное VPN-соединение. Оно подключается к externalnyc через публичный интернет.
Цель
Что мы хотим достичь, это следующее:

Наша частная сеть представлена зеленой линией и соединяет все три сервера. Оранжевая линия — это наша частная сеть, связывающая два сервера NYC2. Все три сервера могут подключаться через VPN, хотя частная сеть недоступна для AMS1.
Чтобы сделать это, выполните следующие шаги:
Установка Tinc
Сначала нам нужно установить Tinc. Как всегда, убедитесь, что все ваши репозитории apt обновлены, выполнив:
sudo apt-get updateЗатем установите Tinc стандартным способом через apt:
sudo apt-get install tincИ все! Ваша машина теперь загрузит Tinc, а также все необходимые предварительные условия. Теперь нам нужно взглянуть на конфигурацию.
Конфигурация
Настройка Tinc может немного отличаться от других VPN, к которым вы привыкли. Он использует “netname” для различения одной VPN от другой. Это становится очень полезным, когда у вас работает несколько VPN через Tinc, но в начале это немного противоинтуитивно. Поскольку это наша первая сеть Tinc, давайте сделаем это просто и назовем нашу VPN “netname”.
Теперь для каждого из наших серверов. Каждому потребуется три компонента конфигурации:
Файлы конфигурации: tinc.conf, tinc-up, tinc-down и, возможно, несколько других файлов.
Пары открытых и закрытых ключей: они предназначены для шифрования и аутентификации.
Файлы конфигурации хоста: они содержат открытые ключи и другие элементы конфигурации VPN.
Теперь давайте настроим каждый из наших серверов по очереди. Сначала externalnyc.
Настройка externalnyc
Хорошо, теперь к делу. На externalnyc начните с создания структуры каталогов конфигурации для VPN netname. Выполните:
sudo mkdir -p /etc/tinc/netname/hostsТеперь откройте tinc.conf в вашем текстовом редакторе:
sudo vi /etc/tinc/netname/tinc.confКак только файл окажется перед вами, добавьте следующее в конец файла:
Name = externalnyc
AddressFamily = ipv4
Interface = tun0Все, что вы делаете здесь, это настраиваете узел под названием externalnyc и сообщаете серверу, что его сетевой интерфейс будет использовать ipv4 и называться “tun0”. Сохраните файл и закройте его.
Теперь нам нужно создать файл конфигурации хоста для externalnyc. Для этого откройте файл конфигурации хостов в текстовом редакторе:
sudo vi /etc/tinc/netname/hosts/externalnycСнова добавьте несколько строк в конец этого файла, заменив публичный IP-адрес вашего VPS в первой строке:
Address = externalnyc_public_IP
Subnet = 10.0.0.1/32Это файл, который другие серверы будут использовать для подключения к externalnyc. Адрес сообщает другим узлам, как и где подключиться к этому серверу, а адрес подсети — это подсеть, в которой будет работать этот демон. Снова сохраните изменения в этом файле и закройте его.
Теперь нам нужно сгенерировать пару открытых/закрытых ключей для этого хоста. Это довольно просто, просто выполните:
sudo tincd -n netname -K4096Это создает закрытый RSA-ключ и добавляет пару открытых ключей в конец конфигурационного файла, который мы только что создали. Вы можете снова открыть его, чтобы увидеть, что это было сделано, если хотите.
Теперь нам нужно сделать tinc-up, небольшой скрипт, который будет выполняться, когда наш VPN запущен. Откройте следующий файл для редактирования:
sudo vi /etc/tinc/netname/tinc-upИ добавьте:
#!/bin/sh
ifconfig $INTERFACE 10.0.0.1 netmask 255.255.255.0Каждый раз, когда VPN netname запускается, этот скрипт будет выполняться. Он создаст сетевой интерфейс, который будет использоваться нашим VPN, и на этом VPN externalnyc будет иметь IP-адрес 10.0.0.1.
Но когда VPN останавливается, мы хотим, чтобы этот сетевой интерфейс исчез, поэтому нам нужен еще один скрипт. Этот скрипт должен быть добавлен в tinc-down. Откройте:
sudo vi /etc/tinc/netname/tinc-downИ затем добавьте:
#!/bin/sh
ifconfig $INTERFACE downИ снова сохраните и выйдите. У нас теперь есть наши скрипты, но для того, чтобы они работали, их нужно пометить как исполняемые. Это довольно просто, используя командную строку:
sudo chmod 755 /etc/tinc/netname/tinc-*Сохраните и выйдите, и вы завершили настройку этого сервера. Далее, internalnyc и ams1.
Настройка internalnyc и ams1
Чтобы настроить два оставшихся сервера, вам нужно выполнить те же команды на каждой машине. Есть несколько небольших вариаций, которые я укажу, но процесс в основном такой же.
Как и с externalnyc выше, сначала нам нужно создать структуру каталогов для наших файлов конфигурации. На каждом сервере выполните следующее, а затем откройте файл конфигурации Tinc для редактирования:
sudo mkdir -p /etc/tinc/netname/hosts
sudo vi /etc/tinc/netname/tinc.confЗатем добавьте несколько строк в конец этого файла, заменив “node_name” на имя каждого узла:
Name = node_name
AddressFamily = ipv4
Interface = tun0
ConnectTo = externalnycВы можете видеть, что оба наших сервера теперь настроены на попытку подключения к externalnyc. Сохраните этот файл и закройте его.
Теперь нам нужно создать файл конфигурации хостов. Выполните:
sudo vi /etc/tinc/netname/hosts/node_nameЗатем для internalnyc добавьте эту строку:
Subnet = 10.0.0.2/32А для ams1 добавьте эту строку:
Subnet = 10.0.0.3/32Единственное различие здесь заключается в том, что адреса различаются, чтобы мы могли различать наши серверы. Сохраните этот файл и закройте его.
Теперь, как и раньше, нам нужно сгенерировать наши пары открытых/закрытых ключей и создать скрипт запуска сетевого интерфейса. На каждом сервере выполните:
sudo tincd -n netname -K4096А затем:
sudo vi /etc/tinc/netname/tinc-upТеперь. Для каждого сервера нам нужно использовать адреса, которые мы указали ранее. Если вы следуете за мной точно, для internalnyc вам нужно добавить:
ifconfig $INTERFACE 10.0.0.2 netmask 255.255.255.0А для ams1:
ifconfig $INTERFACE 10.0.0.3 netmask 255.255.255.0Но если вы указали другие адреса выше, измените их и здесь. Сохраните эти файлы и выйдите. Мы почти на финише.
Нам просто нужно сделать скрипт остановки сетевого интерфейса, как и раньше:
sudo vi /etc/tinc/netname/tinc-downА затем добавьте эту строку на обоих серверах:
ifconfig $INTERFACE downИ последняя часть конфигурации — сделать наши новые скрипты исполняемыми:
sudo chmod 755 /etc/tinc/netname/tinc-*Сохраните и выйдите. Уф. Если все прошло хорошо, все три сервера теперь настроены. Теперь к реализации криптографии.
Распределение ключей
Если вы уже используете систему управления конфигурацией, вам повезло. В идеальном мире каждый узел, который мы сейчас создали, должен иметь возможность напрямую общаться с другим узлом, используя интерфейс открытых/закрытых ключей. Ключи, как мы видели выше, теперь находятся в файлах конфигурации хостов для каждого сервера. В простой сети, которую мы создаем здесь, на самом деле только externalnyc нужно обмениваться ключами с другими узлами.
Поэтому самый простой способ сделать это — просто скопировать каждый открытый ключ ко всем членам различных узлов. Это на самом деле довольно просто, просто будьте осторожны, чтобы изменить значение “address” в конфигурационном файле externalnyc на его собственный частный IP-адрес, когда вы его копируете. Таким образом, соединение будет установлено через частную сеть.
Если вы следовали за мной и назвали вашу VPN “netname”, файлы конфигурации хостов находятся здесь: /etc/tinc/netname/hosts
Обмен ключами между externalnyc и internalnyc
Это просто. На internalnyc найдите файл конфигурации хостов и скопируйте его на externalnyc:
scp /etc/tinc/netname/hosts/internalnyc user@externalnyc_private_IP:/tmpЗатем на externalnyc скопируйте тот же файл в правильное место:
cd /etc/tinc/netname/hosts; sudo cp /tmp/internalnyc .Теперь мы выполняем противоположную процедуру. На externalnyc скопируйте файл конфигурации хостов на internalnyc:
scp /etc/tinc/netname/hosts/externalnyc user@internalnyc_private_IP:/tmpА затем на internalnyc скопируйте файл, чтобы он оказался в нужном месте:
cd /etc/tinc/netname/hosts; sudo cp /tmp/externalnyc .Теперь нам нужно отредактировать файл конфигурации хостов externalnyc на internalnyc, чтобы адрес был правильным. Это нужно, чтобы узлы подключались к VPN через частную сеть. Итак, на internalnyc откройте файл конфигурации хостов для externalnyc:
sudo vi /etc/tinc/netname/hosts/externalnycИ измените значение адреса на частный IP-адрес externalnyc, вот так:
Address = externalnyc_private_IPСохраните файл и выйдите. Вот и все с этими двумя ключами. Теперь нам просто нужно обменяться ключами с нашим одним оставшимся узлом.
Обмен ключами между externalnyc и ams1
Процесс здесь довольно похож. Используя ams1, скопируйте файл конфигурации хостов на externalnyc:
scp /etc/tinc/netname/hosts/ams1 user@externalnyc_public_IP:/tmpА затем снова скопируйте его в правильное место, используя externalnyc:
cd /etc/tinc/netname/hosts; sudo cp /tmp/ams1 .Оставаясь на externalnyc, скопируйте файл в другую сторону, на ams1:
scp /etc/tinc/netname/hosts/externalnyc user@ams1_public_IP:/tmpИ снова, на ams1 скопируйте этот файл, чтобы он оказался в нужном месте:
cd /etc/tinc/netname/hosts; sudo cp /tmp/externalnyc .И вы завершили обмен ключами. В теории, теперь у вас есть работающий, зашифрованный VPN через Tinc. Если вы следовали этому руководству дословно, вы можете перейти к тестированию вашей настройки. Если, однако, вы также воспользовались возможностью добавить дополнительные узлы, сейчас хорошее время, чтобы обменяться всеми ключами, которые вам понадобятся.
Помните, что если вы используете центральный узел, как я делаю здесь, вам не нужно копировать все ключи на все серверы. Однако, если вы хотите, чтобы узлы могли напрямую общаться друг с другом, им нужно будет обменяться ключами. Процесс для этого такой же, как я описал выше — просто выполните столько итераций, сколько вам нужно, чтобы достичь желаемой связности.
Тестирование
Теперь вы должны быть готовы к тестированию. Для этого хорошей идеей будет запустить Tinc в режиме отладки, чтобы мы могли поймать любые ошибки и получить больше информации, если что-то пойдет не так. Помните, что плохо настроенный VPN может на самом деле представлять собой риск безопасности, поэтому убедитесь, что все работает правильно, прежде чем вы начнете использовать ваш VPN для чего-либо важного.
Чтобы запустить Tinc в режиме отладки, на каждом узле, начиная с externalnyc, выполните:
sudo tincd -n netname -D -d3Если вы назвали свою VPN как-то иначе, конечно, измените переменную “netname” на соответствующее имя.
После того как демон запустится на каждом узле, он должен вернуть вывод, дающий вам имя каждого узла по мере их подключения. Если этого не происходит, вы где-то допустили ошибку.
Теперь мы можем протестировать VPN. В новом окне на ams1 выполните ping internalnyc, используя его IP-адрес. Мы назначили ему 10.0.0.2 ранее, так что введите:
ping 10.0.0.2Надеюсь, ваш ping сработает. Вы также должны увидеть некоторый отладочный вывод в других окнах, описывающий соединения, которые вы только что установили. Ams1 теперь подключен через ваш новый VPN к externalnyc и может подключаться к internalnyc через него. Нажмите CTRL-C, и ping остановится.
Теперь, когда у вас есть безопасное VPN-соединение, вы можете использовать его для любого другого типа сетевой связи — подключения приложений, копирования файлов, SSH или чего-либо еще, что вам нравится.
Если ваш ping не сработал, но вы думаете, что сделали все правильно, возможно, что-то помешало брандмауэр. Проверьте настройки брандмауэра и попробуйте снова.
Tinc при загрузке
Еще одна последняя вещь. Если вы теперь собираетесь использовать ваш Tinc VPN для всей вашей сетевой работы, вы можете захотеть настроить его на автоматический запуск при загрузке. Вам нужно будет сделать это на каждом узле, отредактировав файл конфигурации nets.boot. Откройте файл с помощью:
sudo vi /etc/tinc/nets.bootА затем добавьте имя вашей новой VPN в этот файл. Если вы выбрали “netname”, как и я, это будет выглядеть следующим образом:
# Этот файл содержит все имена сетей, которые будут запущены при загрузке системы.
netnameСохраните и выйдите, и вы завершили. Tinc теперь работает и будет запускаться при загрузке. Молодец.
Если вам нужно управлять Tinc, вы теперь можете выполнить команду “service”, чтобы сделать это. На каждом узле просто выполните:
sudo service tinc startИ поэкспериментируйте. Большинство основных управляющих функций можно выполнить с помощью этой команды.
Заключение
Теперь у вас должна быть безопасная VPN-сеть, работающая через Tinc на всех ваших машинах. Эта VPN может быть использована как основа для дальнейшего расширения сетевой функциональности.
Если вы хотите добавить дополнительные узлы в будущем или объединить Tinc с другими VPN, Tinc позволит вам это сделать. Процесс для каждого дополнительного узла такой же, как я описал выше, и вы должны легко увидеть, какие переменные и адреса нужно изменить. Просто помните, что если вы хотите, чтобы узлы могли напрямую подключаться друг к другу, вам нужно будет обменяться ключами между ними напрямую. Таким образом, Tinc работает как сетевой VPN, который немного безопаснее, чем мой подход. В противном случае вы можете просто настроить свою сеть так, как я это сделал, и чтобы все проходило через центральный узел.
В любом случае, теперь вы свободны поэкспериментировать. Удачи!
Ресурсы
(2) https://www.howtoforge.com/tutorial/ubuntu-lts-minimal-server/
Get new posts in your inbox
No spam. Unsubscribe anytime.