Строим виртуальную сеть с tinc::Журнал СА 2.2005
www.samag.ru
Льготная подписка для студентов      
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
О журнале
Журнал «БИТ»
Подписка
Где купить
Авторам
Рекламодателям
Магазин
Архив номеров
Вакансии
Контакты
   

Jobsora


  Опросы

Какие курсы вы бы выбрали для себя?  

Очные
Онлайновые
Платные
Бесплатные
Я и так все знаю

 Читать далее...

1001 и 1 книга  
28.05.2019г.
Просмотров: 1944
Комментарии: 2
Анализ вредоносных программ

 Читать далее...

28.05.2019г.
Просмотров: 1974
Комментарии: 1
Микросервисы и контейнеры Docker

 Читать далее...

28.05.2019г.
Просмотров: 1530
Комментарии: 0
Django 2 в примерах

 Читать далее...

28.05.2019г.
Просмотров: 1118
Комментарии: 0
Введение в анализ алгоритмов

 Читать далее...

27.03.2019г.
Просмотров: 1693
Комментарии: 1
Arduino Uno и Raspberry Pi 3: от схемотехники к интернету вещей

 Читать далее...

Друзья сайта  

Форум системных администраторов  

sysadmins.ru

Электронка - 2020!

 Строим виртуальную сеть с tinc

Архив номеров / 2005 / Выпуск №2 (27) / Строим виртуальную сеть с tinc

Рубрика: Безопасность /  Сетевая безопасность

Сергей Яремчук СЕРГЕЙ ЯРЕМЧУК, фрилансер. Автор более 800 статей и шести книг. С «СА» с первого номера. Интересы: сетевые технологии, защита информации, свободные ОС

Строим виртуальную сеть с tinc

Когда зарождались протоколы, используемые в сегодняшнем Интернете, никто и не думал о том, что спустя некоторое время к нему без проблем смогут подключаться миллионы пользователей, а компании будут вести свой бизнес с его помощью. Со временем начали всплывать просчеты создателей и постепенно стали появляться проекты, основная цель которых – минимизировать допущенные ошибки. Сегодня после антивирусов и межсетевых экранов наиболее популярным и востребованным средством являются виртуальные частные сети (Virtual Private Network – VPN), которые, несмотря на первоначальную возню с установкой и отладкой, все-таки делают жизнь админа спокойнее и упрощают настройку многих сетевых сервисов.

Хотя на рынке присутствует большое количество коммерческих продуктов, имеющих в том числе и аппаратные решения, большой интерес вызывают именно свободные проекты. Причин много. Так, не сразу становится ясно, подойдет ли конкретной организации схема сети с VPN, а вкладывать деньги эксперимента ради вряд ли кто рискнет. С другой стороны, очень часто переход сети на VPN является личной инициативой администратора, которому надоели постоянно возникающие проблемы. Да и отношение к бесплатному софту как к некачественному, второсортному постепенно проходит. Большая часть свободных утилит для создания VPN доступна только под UNIX, и если администратор до этого не работал с такими системами, то у него не сразу получится разобраться с настройкой софта. Также не все проекты имеют реализации для различных операционных систем. Выход один – нужен удобный, простой и в то же время функциональный инструмент. Основной идеей проекта tinc (сокращение от There Is No Cabal) как раз и является простота настройки VPN-сети.

Что может tinc?

Особенностью tinc является использование одного исполняемого файла – демона tincd, который является одновременно и сервером, и клиентом. Какие преимущества это дает? В tinc подключить новый компьютер в уже работающую виртуальную сеть довольно легко, для этого необходимо добавить всего лишь один файл, без запуска нового демона или еще одного виртуального сетевого устройства. Удаленные компьютеры могут обмениваться информацией между собой, по прямому каналу, а не через основной сервер, как это реализовано в том же vtun. В vtun для обмена напрямую придется создавать еще один туннель, что при большом количестве клиентов затрудняет настройку. Хотя возможен запуск и нескольких экземпляров tinc на одном компьютере, что позволяет создавать несколько виртуальных сетей. При этом демон самостоятельно осуществляет маршрутизацию и направляет пакеты по назначению кратчайшим путем.

Процесс обработки информации происходит в user space и не требует обязательной перекомпиляции ядра. Принято считать, что такие реализации работают медленнее и нагружают систему больше, но я, признаюсь, дотошных тестов не видел, а работа VPN зависит от многих обстоятельств, среди которых и используемое оборудование, канал, общая нагрузка на сеть, поэтому вряд ли можно говорить о полном и безоговорочном преимуществе VPN-систем, встроенных в ядро, все зависит от конкретной обстановки. Но вот устанавливать user space-реализации проще, хотя после включения IPSec в ядра серии 2.6 некоторые вопросы по настройке отпали сами по себе.

Также tinc способен создавать мост для Ethernet-сегментов и соединять несколько сетей в одну, позволяя, например, использовать программы, нормально работающие только по LAN. На сегодняшний день поддерживаются операционные системы Linux, FreeBSD, OpenBSD, NetBSD, MacOS/X, Solaris, Windows 2000 и XP.

На момент написания статьи последней версией была 1.0.3, которую и рекомендуется использовать. В более ранних версиях были обнаружены серьезные проблемы с безопасностью, заключающиеся в отсутствии порядковых номеров и опознавательного кода сообщения для каждого пакета, что позволяло производить атаку на отказ в обслуживании, повторно запуская старые пакеты. Устранение этого недостатка привело к тому, что более новые версии программы несовместимы со старыми, которые к тому же имеют реализацию не для всех платформ. Хотя криптография на месте не стоит и на сегодняшний день считается, что использование 32 бит для порядковых номеров и 4 бит, используемых по умолчанию для кода аутентификации сообщения (message authentication code – MAC), является уже недостаточным. Поэтому в конфигурации по умолчанию tinc менее защищен чем TLS или IPsec, а полностью переработать tinc разработчики планируют к версии 2.0. Я раньше думал, что самым простым в настройке и использовании является vtun (http://vtun.sourceforge.net/), но после знакомства с героем сегодняшней статьи свое мнение пересмотрел.

Установка tinc

Разработчиками взят курс на упрощение процесса установки и настройки систем на базе tinc, да и документации на сайте хотя и сравнительно немного, но в ней отражены практически все основные вопросы, которые могут возникнуть при настройке tinc, в том числе и особенности установки в различных операционных системах. Поэтому рассказывать обо всех возможных вариантах смысла, думаю, нет. Остановлюсь на установке VPN между двумя системами, для которых процесс настройки диаметрально отличается. Одна построена на базе Linux, в качестве платформы для второй выбрана Windows XP. При этом в BSD и Solaris процесс настройки совсем немного отличается от Linux и, зная особенности работы сетевых сервисов в этих системах и уловив смысл производимых действий, установить tinc в них труда особого не составит.

Особенности установки tinc в Linux

Система tinc использует для работы универсальные драйверы tun и tap. Tun применяется при туннелировании IP-пакетов, а tap, он же ethertap, – при туннелировании фреймов Ethernet. Драйвер TUN/TAP позволяет пользовательским программам самостоятельно обрабатывать соответствующие пакеты. Поэтому эти устройства должны быть включены при конфигурировании ядра. В большинстве дистрибутивов это уже сделано, но если команды:

# ls -al /dev/net/tun

и

# ls -al /dev/tap*

ничего не выводят, то либо придется их создать самому, либо поручить это системе, прописав в файле /etc/modules.conf строку (для ядер 2.4.0 и выше):

alias char-major-10-200 tun

После обновления зависимостей модуля ядра командой:

# /sbin/depmod –a

вы должны увидеть необходимые устройства. Более подробно это все описано в файлах tuntap.txt и ethertap.txt, которые находятся в каталоге /usr/src/linux/Documentation/networking (при установленных исходниках ядра). Иначе придется ядро все-таки пересобирать, включив следующие строки.

Code maturity level options

[*] Prompt for development and/or incomplete code/drivers

Network device support

Universal tun/tap device driver support

Для шифрования трафика используется OpenSSL (http://www.openssl.org/), и для сжатия потока в системе должны быть установлены библиотеки zlib (http://www.gzip.org/zlib) и lzo (http://www.oberhumer.com/opensource/lzo). При этом zlib является опциональной и используется для сжатия UDP-пакетов, а вот наличие lzo в системе обязательно, иначе получите ошибку при конфигурировании. В ближайшем будущем планируется избавить пользователя от поиска программ для удовлетворения всех зависимостей, собрав все необходимое в единый архив.

После того как все библиотеки установлены, берем с сайта проекта http://www.tinc-vpn.org/ бинарные пакеты, скомпилированные под используемую операционную систему, либо исходные тексты. Размер архивов не превышает 600 Кб. Установка из исходников обычно проблем не вызывает и заключается в стандартном ./configure, make и make install. После чего в /usr/local/bin появится всего один бинарный файл tincd.

Установка под Windows

Демон tinc в этой операционной системе использует драйвер TAP-Win32, который можно взять с сайта OpenVPN (http://openvpn.sourceforge.net/). Этот драйвер в настоящее время включен в последнюю версию пакета 1.0.3 для Windows и устанавливается вместе с tinc (рис. 1), поэтому отдельно устанавливать его уже не надо. Также для запуска демона понадобится наличие Cygwin (http://www.cygwin.com/) или MinGW (http://www.mingw.org/). Со второй работать не пробовал, а вот при работе через Cygwin потребуется только cygwin.dll.

Рисунок 1

Рисунок 1

После установки всех необходимых библиотек и tinc, заходим в каталог C:Program Files inc ap-win32 и запускаем файл addtap.bat. Теперь в меню «Сетевые подключения» должно появиться новое соединение, которому можно присвоить более осмысленное имя.

Рисунок 2

Рисунок 2

Выбираем «Свойства –> Протокол Интернета TCP/IP» и редактируем его параметры, в которых указываем адрес и сетевую маску компьютера в виртуальной сети.

Рисунок 3

Рисунок 3

В последней версии tinc сам прописывает себя в автоматически запускаемые сервисы после первого успешного запуска, но на всякий случай проверьте его наличие в ме-ню «Настройка –> Панель Управления –> Администрирование –> Службы».

Рисунок 4

Рисунок 4

Конфигурационные файлы tinc

Tinc во время своей работы использует два вида конфигурационных файлов, плюс в двух скриптах записываются системно-зависимые параметры, необходимые для поднятия и остановки сетевых VPN-интерфейсов (для UNIX-систем), и в отдельном файле (rsa_key.priv) находятся закрытые ключи сервера. В подкаталоге doc-архива с исходными текстами программы находится архив sample-config.tar.gz, содержащий примеры конфигурационных файлов. По умолчанию демон tincd будет искать свои конфигурационные файлы в каталоге /usr/local/etc/tinc/, если вы решили положить их, например, в /etc/tinc/, то при запуске необходимо будет дополнительно использовать опцию --config=/etc/tinc/.

Для одной виртуальной сети такого расположения файлов вполне достаточно, но если планируется организация на компьютере нескольких виртуальных сетей, то для каждой необходимо будет создать подкаталог, выбрав в качестве его имени название VPN-сети. Например, для виртуальной сети vpn_net создаем каталог /usr/local/etc/tinc/vpn_net/. Теперь при запуске демона tincd при помощи опции -n vpn_net указываем название нужной виртуальной сети, в логах информация о ней будет отображаться как tinc.vpn_net. В созданном подкаталоге должны обязательно лежать два скрипта tinc-up и tinc-down, в которых описываются команды для сетевого интерфейса. Для Linux эти файлы выглядят так.

Файл tinc-up 

#!/bin/sh

ifconfig $INTERFACE 192.168.10.1 netmask 255.255.0.0 

Файл tinc-down 

#!/bin/sh

ifconfig $INTERFACE down

Естественно, что для других UNIX-подобных систем эти строки будут немного другими, подробности смотрите в tinc Manual. Раздел 7. «Platform specific information». Для Windows эти файлы не требуются.

Для работы в UNIX-подобных системах желательно наличие в файле /etc/services следующих строк.

tinc            655/tcp    TINC

tinc            655/udp    TINC

И в /etc/networks должно быть указано символическое имя будущей VPN.

vpn_net   192.168.10.0

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

Для работы серверной части демона используется файл tinc.conf, в нем клиенты, с которыми должен соединяться сервер, определяются параметром ConnectTo и более подробно описываются отдельным файлом, лежащим тут же в подкаталоге hosts и имеющим такое же название, как и в опции ConnectTo. При этом на противоположной стороне можно прописать встречное соединение, указав параметр ConnectTo, демоны на этих системах не передерутся за то, кто из них самый главный, но таким образом можно спокойно наращивать в дальнейшем виртуальную сеть, не заботясь о конфликтах. Все параметры файла tinc.conf приведены в таблице 1. Использовать все приведенные параметры нет необходимости, в самом общем случае файл будет выглядеть так:

# Sample tinc configuration file

Name = office

ConnectTo = home

ConnectTo = stock-room

Device = /dev/net/tun

То есть демон, носящий имя office, будет пытаться соединиться с двумя компьютерами home и stock-room, описание которых находится в одноименных файлах, лежащих в подкаталоге hosts. В Windows вместо Device удобнее использовать параметр Interface, т.е. файл будет выглядеть так:

Name = home

ConnectTo = office 

ConnectTo = stock-room

Interface = VPN

В случае если VPN-интерфейсов два, нужно написать Interface = VPN2 и назвать его так в «Сетевых подключениях».

Таблица 1. Параметры, которые могут быть использованы в файле tinc.conf

Параметр

Возможное значение (по умолчанию)

Описание

AddressFamily

ipv4|ipv6|any (any)

Определяет версию протокола, используемую на входящих и исходящих сетевых интерфейсах

BindToAddress

IP-адрес

Если компьютер имеет несколько IP-адресов, tinc будет слушать их все, эта опция позволяет связать его с одним из них

BindToInterface

eth0/ppp0 и т.д.

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

BlockingTCP

yes|no (no)

Эта опция определяет, будут ли блокироваться уже установленные, но перегруженные TCP-соединения, если no, то подключение в этом случае с других узлов будет невозможно

ConnectTo

Имя файла в подкаталоге hosts

Указывает на узел, к которому будет пытаться присоединится демон tincd, если такой опции нет, то он будет только принимать входящие соединения

Device

/dev/tap0, /dev/net/tun и т.п. в зависимости от системы

Используемое виртуальное сетевое устройство. При этом демон может работать только с одним виртуальным устройством

Hostnames

yes|no (no)

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

Interface

 

Определяет интерфейс, соответствующий виртуальному сетевому устройству.

 При установленной Device эта секция обычно устанавливается нормально

Mode

router (по умолчанию)

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

switch

Такой режим полезен при соединении вместе нескольких Ethernet-сетей. В этом режиме поддерживаются ARP, широковещательные и групповые запросы, различаются МАС-адреса. И на основании этой информации строится таблица маршрутизации

hub

Похож на предыдущий, только вместо построения таблиц маршрутизации  се пакеты просто передаются другим демонам

KeyExpire

Секунды (3600)

Интервал времени между сменами сеансовых симметричных ключей шифрования, при помощи которых собственно и происходит шифрование трафика

MACExpire

Секунды  (600)

При установленном Mode в switch определяет время хранения МАС-адресов

Name

 

Уникальное имя этого узла в VPN-подключении

PingTimeout

Секунды (60)

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

PriorityInheritance

yes|no (no)

Включает наследование поля TOS (Type Of Service) уходящими UDP-пакетами

PrivateKey

Path (/usr/local/etc/tinc/netname/rsa_key.priv)

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

PrivateKeyFile

TunnelServer

yes|no (no)

При включении этой опции демон tincd сможет пересылать информацию другим демонам, иначе он будет работать только с узлами, присутствующими в /usr/local/etc/tinc/[netname]/hosts/

Все опции, которые можно использовать в файле описания удаленного узла, приведены в таблице 2. В простейшем файл home будет выглядеть так:

# Sample host configuration file

Address = 10.10.1.67

Port = 655

Subnet = 192.168.10.0/24

-----BEGIN RSA PUBLIC KEY-----

...

-----END RSA PUBLIC KEY-----

Так как в Windows все параметры задаются при настройке сетевого соединения, то в файле клиентов достаточно только секции Subnet.

Таблица 2. Параметры файла описания клиентов

Параметр

Возможное значение (значение по умолчанию)

Описание

Address

IP-адрес (рекомендуется) или доменное имя

Внешний (не VPN) адрес компьютера, с которым необходимо соединиться

Cipher

(blowfish)

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

Compression

0 (выкл., знач. по умолч.),

1 (быстрее zlib), 9 (лучше zlib),

10 (быстрее lzo) и 11 (лучше lzo)

Уровень компрессии UDP-потока

Digest

(sha1)

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

IndirectData

yes|no (no)

Определяет, может ли другой демон, кроме тех, что определены опциями ConnectTo, подсоединяться к системе

MACLength

bytes (4)

Размер кода аутентификации сообщения, значение по умолчанию на сегодняшний день считается уже недостаточным, поэтому нужно использовать максимальное значение, поддерживаемое выбранным  алгоритмом в Digest

Port

номер_порта (655)

Порт, на котором удаленный демон слушает входящие соединения

Subnet

 

VPN-подсеть, в которой происходит вся работа

TCPonly

yes|no (no)

При активации этой опции для подключения используются только TCP?пакеты

PublicKey или PublicKeyFile

path

При хранении  открытого ключа клиента в отдельном файле, этой опцией указывается полный путь к нему

Но кроме правильно описанных параметров в конфигурационных файлах, для нормальной работы всей системы необходимо наличие пары ключей, при помощи которых будет происходить закрытие информации. Для генерации ключей запускается демон с ключом -К, а если на компьютере запускается несколько виртуальных сетей, то добавляется опция -n. Например, на компьютере office, выполняем такую команду:

# tincd -K -n vpn_net

 

Generating 1024 bits keys:

............++++++ p

.........++++++ q

Done.

Appending key to existing contents.

Make sure only one key is stored in the file.

При этом по умолчанию закрытый ключ будет записан в файл /usr/local/etc/tinc/vpn_net /rsa_key.priv, а открытый ключ в файл /usr/local/etc/tinc/vpn_net/hosts/office. Для Windows это будет естественно немного другой путь, C:Program Files tincvpn_net sa_key.priv, а открытый – C:Program Files tincvpn_nethostshome.

Отсюда наиболее оптимальным будет такой вариант настройки виртуальной сети. На каждом узле создается свой host-файл, в который кроме параметров записывается и открытый ключ. А затем администраторы обмениваются этими файлами между собой и подключают опцией ConnectTo. Теперь, когда все настроено, можно пробовать запустить демон.

# tincd  -n vpn_net

Скорее всего, при первом запуске выскочит такая ошибка.

Could write pid file /usr/local/var/run/tinc.vpn_net.pid: No such file or directory

Означающая, что демон не может найти файл tinc.vpn_ net.pid. Вероятной причиной появления такого сообщения является отсутствие нужных каталогов. Выход: либо создать все необходимые каталоги, либо указать новое место для pid-файла, использовав опцию --pidfile=/path/to/file.

После этого узлы должны соединиться между собой и образовать единый канал. Для контроля можно проверить наличие необходимых интерфейсов командами ifconfig -a (ipconfig для Windows) и просмотреть открытые порты при помощи netstat -a.

Рисунок 5

Рисунок 5

Для выявления возможных ошибок могут пригодиться дополнительные параметры запуска. Опция --logfile[=file] указывает на необходимость ведения журнала (по умолчанию запись будет вестись в /usr/local/var/log/tinc.netname.log), опция --debug задает уровень отладочных сообщений (0-5) и --bypass-security отключает шифрование.

Вот в принципе и все. Несмотря на то, что написано много, настройка сервиса на отдельном компьютере не занимает времени больше 10-15 минут. Со временем разработчики собираются интегрировать все приложения, от которых зависит работа tinc, в единый пакет, что еще больше должно упростить установку. А так tinc представляет собой довольно удобный, гибкий и простой инструмент, позволяющий быстро создавать и легко наращивать виртуальные сети, доступный к тому же для всех популярных сегодня операционных систем.


Комментарии отсутствуют

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

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-41
Fax: (499) 277-12-45
E-mail: sa@samag.ru