Как установить Tinc и настроить базовый VPN на Ubuntu 14.04

Вступление

В этом руководстве мы рассмотрим, как использовать Tinc, демон виртуальной частной сети с открытым исходным кодом (VPN), для создания защищенной VPN, с которой ваши серверы могут взаимодействовать, как если бы они находились в локальной сети. Мы также продемонстрируем, как использовать Tinc для настройки безопасного туннеля в частной сети. Мы будем использовать серверы Ubuntu 14.04, но конфигурации могут быть адаптированы для использования с любой другой ОС.

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

[.note] #Note: Если вы хотите быстро и легко настроить Tinc mesh VPN, ознакомьтесь с этим руководством:How To Use Ansible and Tinc VPN to Secure Your Server Infrastructure.
#

Предпосылки

Для завершения этого урока вам потребуется доступ с правами суперпользователя как минимум на трех серверах Ubuntu 14.04. Инструкции по настройке корневого доступа можно найти здесь (шаги 3 и 4):Initial Server Setup with Ubuntu 14.04.

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

Если вы хотите точно следовать этому руководству, создайте два VPS в одном и том же центре данных с частной сетью и создайте другой VPS в отдельном центре данных. Мы создадим два VPS в центре обработки данных NYC2 и один в центре обработки данных AMS2 со следующими именами:

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

  • internalnyc: подключается к узлу VPNexternalnyc, используя его сетевой интерфейсprivate

  • ams1: подключается к узлу VPNexternalnyc через общедоступный Интернет

Наша цель

Вот схема VPN, которую мы хотим настроить (описано в разделе Предварительные условия):

Tinc VPN Setup

Зеленый представляет нашу VPN, серый представляет общедоступный Интернет, а оранжевый представляет частную сеть. Все три сервера могут общаться по VPN, хотя частная сеть недоступна для ams1.

Давайте начнем с установки Tinc!

Установить Tinc

На каждом VPS, который вы хотите присоединить к частной сети, установите Tinc. Давайте начнем с обновления apt:

sudo apt-get update

Затем установите Tinc через apt:

sudo apt-get install tinc

Теперь, когда Tinc установлен, давайте посмотрим на конфигурацию Tinc.

Конфигурация Tinc

Tinc использует «сетевое имя», чтобы отличать одну Tinc VPN от другой (в случае нескольких VPN), и рекомендуется использовать сетевое имя, даже если вы планируете настроить только одну VPN. Мы для простоты назовем нашу VPN «netname».

Каждый сервер, который будет частью нашей VPN, требует следующих трех компонентов конфигурации:

  • Конфигурационные файлы: tinc.conf, tinc-up и tinc-down, например

  • Public/private key pairs: For encryption and node authentication

  • Файлы конфигурации хоста: которые содержат открытые ключи и другую конфигурацию 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

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

Теперь сгенерируйте пару открытых / закрытых ключей для этого хоста с помощью следующей команды:

sudo tincd -n netname -K4096

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

Теперь мы должны создатьtinc-up, скрипт, который будет запускаться всякий раз, когда запускается нашnetname VPN. Откройте файл для редактирования сейчас:

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

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

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

Когда мы запускаем наш VPN, этот скрипт запускается для создания сетевого интерфейса, который будет использовать наш VPN. В VPN этот сервер будет иметь IP-адрес 10.0.0.1.

Давайте также создадим скрипт для удаления сетевого интерфейса, когда наш VPN остановлен:

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

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

#!/bin/sh
ifconfig $INTERFACE down

Сохранить и выйти.

Наконец, сделайте исполняемые сетевые скрипты tinc:

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

Сохранить и выйти.

Давайте перейдем к другим нашим узлам.

Настройте innernyc и ams1

Эти шаги необходимы как дляinternalnyc, так и дляams1, с небольшими изменениями, которые будут отмечены.

Наinternalnyc иams1 создайте структуру каталога конфигурации для нашей VPN с именем «netname» и отредактируйте файл конфигурации Tinc:

sudo mkdir -p /etc/tinc/netname/hosts
sudo vi /etc/tinc/netname/tinc.conf

Добавьте следующие строки (замените имя на имя узла):

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

Эти IP-адреса - то, как эти узлы будут доступны в VPN. Сохранить и выйти.

Теперь создайте скрипт остановки сетевого интерфейса:

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

И добавьте эту строку:

ifconfig $INTERFACE down

Сохранить и выйти.

Наконец, сделайте исполняемые сетевые скрипты tinc:

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

Сохранить и выйти.

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

Распределить ключи

Если вы используете систему управления конфигурацией, вот хорошее приложение. Как минимум, каждый узел, который хочет обмениваться данными напрямую с другим узлом, должен обмениваться открытыми ключами, которые находятся внутри файлов конфигурации хостов. В нашем случае, например, толькоexternalnyc должен обмениваться открытыми ключами с другими узлами. Управлять проще, если вы просто копируете каждый открытый ключ всем членам узла. Обратите внимание, что вы захотите изменить значение «Address» в файле конфигурации хостовexternalnyc на его частный IP-адрес, когда он копируется вinternalnyc, чтобы соединение устанавливалось через частную сеть.

Поскольку наша VPN называется «сетевым именем», вот расположение файлов конфигурации хостов:/etc/tinc/netname/hosts

Обмен ключами между внешним и внутренним

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

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

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

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

Затем снова наexternalnyc скопируйте файл конфигурации его хостов вinternalnyc:

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

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

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

Наinternalnyc давайте отредактируем файл конфигурации хостовexternalnyc так, чтобы в поле «Address» был установлен частный IP-адресexternalnyc (таким образом, internalnyc будет подключаться к VPN через частную сеть). Отредактируйте файл конфигурации хостовexternalnyc:

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

Измените значение «Адрес» на частный IP-адресexternalnyc:

Address = externalnyc_private_IP

Сохранить и выйти. Теперь давайте перейдем к нашему оставшемуся узлу, ams1.

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

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

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

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

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

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

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

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

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

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

Если вы создаете больший VPN, сейчас самое подходящее время для обмена ключами между этими другими узлами. Помните, что если вы хотите, чтобы два узла напрямую взаимодействовали друг с другом (без переадресации между серверами), они должны были обменяться своими файлами конфигурации ключей / хостов и иметь возможность доступа к реальным сетевым интерфейсам друг друга. Кроме того, можно просто скопировать конфигурацию каждого хоста на каждый узел в VPN.

Проверьте нашу конфигурацию

На узлеeach, начиная сexternalnyc, запустите Tinc в режиме отладки следующим образом (netname - это имя нашей VPN):

sudo tincd -n netname -D -d3

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

В отдельном окне наams1 проверьте связь с IP-адресом VPN internalnyc (который мы присвоили 10.0.0.2 ранее):

ping 10.0.0.2

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

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

В каждом окне отладки демона Tinc выйдите из демона, нажав CTRL-.

Note: если соединения не работают, убедитесь, что ваш брандмауэр не блокирует соединения или пересылку.

Настроить Tinc для запуска при загрузке

Прежде чем сценарий инициализации Tinc заработает должным образом, мы должны поместить имя нашей VPN в файл конфигурацииnets.boot.

Наeach node отредактируйте nets.boot:

sudo vi /etc/tinc/nets.boot

Добавьте название вашего VPN в этот файл. У нас есть «нетмэйн»:

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

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

sudo service tinc start

Congrats! Ваш Tinc VPN настроен.

Заключение

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

Удачи!

Related