Установка Tinc и настройка VPN на Ubuntu 14.04

Данное руководство поможет установить Tinc; это VPN-демон, позволяющий создавать безопасные виртуальные частные сети, по которым серверы могут взаимодействовать так, будто они работают в локальной сети. Также в этом руководстве показано, как при помощи Tinc создать в частной сети безопасный туннель.

Примечание: Руководство предназначается для серверов Ubuntu 14.04, но его команды могут быть адаптированы для любой другой ОС.

Среди полезных особенностей Tinc следует выделить шифрование, дополнительное сжатие, автоматическую маршрутизацию mesh-сети (по возможности трафик VPN направляется непосредственно между взаимодействующими серверами), и простое расширение. Эти особенности выгодно отличают Tinc от других средств VPN; благодаря этим дополнительным функциям Tinc можно использовать для создания VPN из нескольких небольших географически распределенных сетей. Tinc поддерживается многими операционными системами, в том числе Linux, Windows и Mac OS X.

Требования

Вам понадобится минимум три сервера Ubuntu 14.04; чтобы выполнить предварительную настройку этих серверов, читайте это руководство.

Примечание: Используя инструкции данного руководства в другом окружении, не забудьте адаптировать представленные здесь команды и примеры. Замените условные данные в примерах собственными значениями.

Чтобы следовать руководству, нужно создать два виртуальных выделенных сервера в одном датацентре (с частной сетью) и один виртуальный сервер в другом датацентре. Для примера предположим, что у нас есть два VPS в датацентре NYC2 и один в AMS2. Серверам присвоены следующие имена:

  • externalnyc: к этому серверу будут подключены все ноды VPN. Если вы хотите настроить дополнительные серверы, настраивайте их аналогично этому серверу.
  • internalnyc: этот сервер подключается к ноде сервера externalnyc при помощи интерфейса частной сети.
  • ams1: этот сервер подключается к ноде externalnyc в публичной сети Интернет.

В результате все три сервера смогут взаимодействовать по VPN несмотря на то, что частная сеть недоступна для сервера ams1.

Установка Tinc

Установите Tinc на все три сервера согласно данным инструкциям. Для начала обновите apt:

sudo apt-get update

Затем установите Tinc:

sudo apt-get install tinc

Настройка Tinc

Tinc использует netname, чтобы различать частные сети в случае если используется несколько VPN. Однако netname рекомендуется использовать, даже если вы планируете настроить всего одну сеть. Для простоты в данном руководстве сеть будет называться просто netname; выберите более надёжное имя для сети в реальном окружении.

Каждый сервер, входящий в эту настройку VPN, должен иметь следующие три компонента:

  • Конфигурационные файлы: например, tinc.conf, tinc-up и tinc-down
  • Открытый и закрытый ключ (для шифрования и аутентификации)
  • Конфигурационные файлы хоста (содержащие открытые ключи и другие параметры VPN).

Настройка сервера 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. Сохраните и закройте файл.

Затем создайте конфигурационный файл в каталоге hosts:

sudo vi /etc/tinc/netname/hosts/externalnyc

Добавьте в него следующие настройки, указав свой внешний IP:

Address = externalnyc_public_IP
Subnet = 10.0.0.1/32

Этот файл будет использоваться другими серверами для взаимодействия с этим сервером. Параметр Address определяет, как другие ноды смогут подключиться к этому серверу, а Subnet определяет, какие подсети будет обслуживать этот демон. Сохраните и закройте файл.

Сгенерируйте пару ключей (открытый и закрытый):

sudo tincd -n netname -K4096

Это создаст закрытый ключ (/etc/tinc/netname/rsa_key.priv) и добавит открытый ключ в конфигурационный файл externalnyc в папке hosts (/etc/tinc/netname/hosts/externalnyc).

Теперь нужно создать tinc-up; это скрипт, который будет запускаться вмете с сетью netname.

sudo vi /etc/tinc/netname/tinc-up

Добавьте в файл следующий код:

#!/bin/sh
ifconfig $INTERFACE 10.0.0.1 netmask 255.255.255.0

При запуске сети этот скрипт будет создавать сетевой интерфейс для VPN (IP-адрес этого сервера в сети – 10.0.0.1).

Теперь нужно создать скрипт, который будет удалять сетевой интерфейс после отключения сети:

sudo vi /etc/tinc/netname/tinc-down

Добавьте в файл:

#!/bin/sh
ifconfig $INTERFACE down

Сохраните и закройте файл.

Теперь можно приступать к настройке остальных нод.

Настройка серверов internalnyc и ams1

Примечание: Настройки серверов internalnyc и ams1 совмещены в один раздел, поскольку в них немного отличий; эти отличия будут оговорены.

На серверах internalnyc и ams1 создайте структуру конфигурационных каталогов дл сети netname и отредактируйте конфигурационный файл 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. Сохраните и закройте файл.

Создайте конфигурационный файл в каталоге hosts:

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

По этим адресам ноды будут доступны в сети VPN. Сохраните и закройте файл.

Затем создайте скрипт, закрывающий сетевой интерфейс:

sudo vi /etc/tinc/netname/tinc-down

Вставьте в файл строку:

ifconfig $INTERFACE down

Сделайте скрипты tinc исполняемыми:

sudo chmod 755 /etc/tinc/netname/tinc-*

Теперь нужно распределить конфигурационные файлы каталога hosts всех нод.

Распределение ключей

В данной ситуации можно использовать систему управления конфигурациями.

Каждая нода, которая хочет напрямую взаимодействовать с другой нодой, должна обменяться с ним открытыми ключами, которые находятся внутри конфигурационных файлов хоста. В данном случае сервер externalnyc должен обменяться открытыми ключами с другими нодами. Для этого можно просто скопировать все открытые ключи. Имейте в виду, что необходимо заменить значение параметра Address в конфигурационном файле externalnyc в hosts, указав внутренний IP-адрес этого сервера, чтобы соединение устанавливалось по частной сети.

В сети netname конфигурационные файлы hosts находятся в /etc/tinc/netname/hosts.

Обмен ключами между externalnyc и internalnyc

На сервере internalnyc скопируйте конфигурационный файл hosts на сервер externalnyc.

scp /etc/tinc/netname/hosts/internalnyc user@externalnyc_private_IP:/tmp

Перейдите на сервер externalnyc и скопируйте конфигурационный файл hosts на сервер internalnyc.

scp /etc/tinc/netname/hosts/externalnyc user@internalnyc_private_IP:/tmp

На сервере internalnyc переместите полученный файл сервера externalnyc в соответствующий каталог:

cd /etc/tinc/netname/hosts; sudo cp /tmp/externalnyc.

Затем на этом же сервере отредактируйте этот файл, указав в поле Address закрытый IP-адрес сервера externalnyc.

sudo vi /etc/tinc/netname/hosts/externalnyc

Замените значение Address внутренним IP-адресом сервера:

Address = externalnyc_private_IP

Сохраните и закройте файл.

Обмен ключами между externalnyc и ams1

На сервере ams1 скопируйте конфигурационный файл hosts на сервер externalnyc.

scp /etc/tinc/netname/hosts/ams1 user@externalnyc_public_IP:/tmp

Затем на сервере externalnyc скопируйте конфигурационный файл hosts сервера ams1 в соответствующий каталог:

cd /etc/tinc/netname/hosts; sudo cp /tmp/ams1 .

После этого скопируйте конфигурационный файл hosts сервера externalnyc на сервер ams1:

scp /etc/tinc/netname/hosts/externalnyc user@ams1_public_IP:/tmp

На ams1 переместите файл externalnyc в соответствующий каталог:

cd /etc/tinc/netname/hosts; sudo cp /tmp/externalnyc .

Обмен ключами между дополнительными нодами

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

Чтобы две ноды могли взаимодействовать непосредственно, они должны обменяться конфигурационными файлами hosts и ключами, а также иметь доступ к сетевым интерфейсам друг друга. Для этого можно просто скопировать конфигурации каждого хоста на каждую ноду VPN.

Тестирование настройки

Начиная с externalnyc, на каждой ноде запустите Tinc (заменив условно название сети VPN):

sudo tincd -n netname -D -d3

После запуска демона на экране появится вывод, содержащий имя каждого нода, подключенного к externalnyc. Теперь нужно проверить соединения в сети.

На сервере ams1 в отдельном окне пропингуйте IP-адрес сервера internalnyc в сети (согласно настройкам это 10.0.0.2):

ping 10.0.0.2

Команда должна быть успешно выполнена, а в других окнах должна появиться отладочная информация о подключении к VPN. Это значит, что сервер ams1 может взаимодействовать с сервером internalnyc по частной сети через сервер externalnyc. Чтобы закрыть пинг, нажмите CTRL-C.

Можно также использовать VPN-интерфейсы, чтобы создать другие соединения (подключение приложений, копирование файлов, SSH и т.п.).

В каждом отладочном окне Tinc остановите демон при помощи комбинации клавиш CTRL-\.

Примечание: Если соединения не работают, убедитесь, что их не блокирует брандмауэр.

Настройка автозапуска Tinc

Сначала нужно поместить имя сети в конфигурационный файл nets.boot каждой ноды.

На каждой ноде отредактируйте nets.boot:

sudo vi /etc/tinc/nets.boot

Поместите в него имя соей сети (в данном случае это netname):

# This file contains all names of the networks to be started on system startup.
netname

Сохраните и закройте файл. Теперь Tinc сможет загружаться вместе с запуском сервера, также им можно будет управлять при помощи команды service. Чтобы запустить сервис, введите:

sudo service tinc start

Заключение

Получившуюся в результате виртуальную частную сеть можно использовать в качестве шаблона или основы для разработки более широкой сети. Инструмент Tinc очень гибкий и позволяет настраивать непосредственное взаимодействие между любыми нодами сети, а потому может работать как mesh-сеть.

Tags: , ,

Добавить комментарий