Будуємо віртуальну мережу з tinc

Будуємо віртуальну мережу з tinc

Коли зароджувалися протоколи, використовувані в сьогоднішньому Інтернеті, ніхто і не думав про те, що через деякий час до нього без проблем зможуть підключатися мільйони користувачів, а компанії будуть вести свій бізнес з його допомогою. Згодом почали спливати прорахунки творців і поступово стали з'являтися проекти, основна мета яких - мінімізувати допущені помилки. Сьогодні після антивірусів і міжмережевих екранів найбільш популярним і затребуваним засобом є віртуальні приватні мережі (Virtual Private Network - VPN), які, незважаючи на початкову метушню з установкою і налагодженням, все-таки роблять життя адміна спокійніше і спрощують настройку багатьох мережевих сервісів.

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

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

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

Розробниками узятий курс на спрощення процесу установки і настройки систем на базі 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

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

alias char-major-10-200 tun

Після поновлення залежностей модуля ядра командою:

ви повинні побачити необхідні пристрої. Більш детально це все описано в файлах 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

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

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

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

Файли 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 ці файли виглядають так.

ifconfig $ INTERFACE 192.168.10.1 netmask 255.255.0.0

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.

Як говорилося вище, tincd є одночасно як клієнтом, так і сервером. За рахунок цього істотно спрощена настройка системи, а також подальше нарощування мережі в будь-якому напрямку.

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

# Sample tinc configuration file

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

У разі якщо VPN-інтерфейсів два, потрібно написати Interface = VPN2 і назвати його так в «Мережевих підключеннях».

Таблиця 1. Параметри, які можуть бути використані в файлі tinc.conf

При включенні цієї опції демон tincd зможе пересилати інформацію іншим демонам, інакше він буде працювати тільки з вузлами, присутніми в / usr / local / etc / tinc / [netname] / hosts /

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

# Sample host configuration file

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

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

Так як в Windows всі параметри задаються при налаштуванні підключення до мережі, то у файлі клієнтів досить тільки секції Subnet.

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

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

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

# Tincd -K -n vpn_net

Generating тисячі двадцять чотири bits keys:

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.

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

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

Схожі статті