Tun tap что это
TUN/TAP
В терминологии компьютерных сетей, TUN и TAP виртуальные сетевые драйверы ядра системы. Они представляют собой программные сетевые устройства, которые отличаются от обычных аппаратных сетевых карт.
Пакет посылаемый операционной системой через TUN/TAP устройство обрабатывается программой, которая контролирует это устройство. Сама программа также может отправлять пакеты через TUN/TAP устройство. В таком случае TUN/TAP устройство доставляет (или «внедряет») такой пакет в сетевой стек операционной системы, эмулируя таким образом доставку пакета с внешнего устройства.
TUN/TAP используются для:
Драйверы TUN/TAP доступны, по крайней мере, для следующих ОС:
Внешние ссылки
Полезное
Смотреть что такое «TUN/TAP» в других словарях:
TUN/TAP — TUN und TAP sind virtuelle Netzwerk Kerneltreiber, die Netzwerkgeräte über Software simulieren. Während sich normalerweise hinter einem Netzwerkgerät (wie z.B. eth0) direkt eine entsprechende Hardware in Form einer Netzwerkkarte verbirgt, werden… … Deutsch Wikipedia
TUN/TAP — In computer networking, TUN and TAP are virtual network kernel drivers. They implement network devices that are supported entirely in software, which is different from ordinary network devices that are backed up by hardware network adapters. TAP… … Wikipedia
Tun — ist eine Abkürzung für: Tunesien, ISO 3166 und olympisches Länderkürzel Flughafen Tunis im IATA Flughafencode Tunnels over TCP/IP, ein virtueller Netzwerktreiber, siehe TUN/TAP Transistor Universal NPN, siehe Transistor #Bipolartransistor Tun ist … Deutsch Wikipedia
TAP — may refer to: * Tap (valve), controls the release of a liquid or gas * Tap or Flap consonant, a type of consonantal sound * Telephone tapping, the monitoring of telephone conversations by a third party * Tap (transformer), an intermediate… … Wikipedia
TUN — ist eine Abkürzung für: Tunesien, ISO 3166 und olympisches Länderkürzel Flughafen Tunis im IATA Flughafencode Tunnels over TCP/IP, ein virtueller Netzwerktreiber, siehe TUN/TAP Transistor Universal NPN, siehe Universaltransistoren und dioden Tun… … Deutsch Wikipedia
TAP — Unter Tap versteht man: einen Tanzschritt, siehe Tap (Tanzschritt) eine Artikulationsart, siehe Tap (Phonetik) Tap ist der Nachname des in der Schweiz lebenden kambodschanischen Künstlers Paintwo Die Abkürzung TAP steht für: „Tandem Affinity… … Deutsch Wikipedia
Tap — Unter Tap versteht man: einen Tanzschritt, siehe Tap (Tanzschritt) eine Artikulationsart, siehe Tap (Phonetik) Tap ist der Nachname des in der Schweiz lebenden kambodschanischen Künstlers Paintwo Die Abkürzung TAP steht für: „Tandem Affinity… … Deutsch Wikipedia
OpenVPN — Original author(s) James Yonan Developer(s) OpenVPN project / OpenVPN Technologies, Inc. Initial release 1.1.0 / April 10, 2002 … Wikipedia
Comparison of open source operating systems — These tables compare the various free software / open source operating systems. Where not all of the non EOL versions support a feature, the first version which support it is listed. Contents 1 General information 2 Supported architectures 3… … Wikipedia
OpenVPN — Для улучшения этой статьи желательно?: Проставив сноски, внести более точные указания на источники. Переработать оформление в соответствии с правилами написания статей … Википедия
разница tun / tap, это интерфейсы, которые обрабатывают протоколы или ОС?
Введение в Open vSwitch (OVS)
Мне сложно понять разницу между интерфейсом tap и tun. Я знаю, что это часто задаваемый вопрос, и прошу прощения за это. Я задал те же вопросы о stackoverflow, и кто-то сказал мне попробовать этот форум, поэтому я надеюсь, что я нахожусь в хорошем месте. Более того, меня интересуют только сети, но я не студент или профессионал в области сетевых технологий, поэтому простите меня, если мои вопросы слишком просты для вас.
Я читал, что Tap работает на уровне 2, а tun работает на уровне 3. Я также читал, что Tap используется для соединения, а tun используется для маршрутизации. Я уже слышал такие вещи, как «МАРШРУТИЗАТОРЫ работают на уровне 3» или «МОСТЫ работают на уровне 2»: это имеет смысл для меня, потому что маршрутизаторы управляют протоколами уровня 3, а мосты управляют протоколами уровня 2? но, поскольку tap и tun являются «интерфейсами», это означает, что предложение типа «ИНТЕРФЕЙСЫ работают на уровне 3» имеет смысл, но я не понимаю, что это такое: я имею в виду, что интерфейсы не управляют протоколами (это делает ОС, но не интерфейс), поэтому это звучит как tun interface == tap interface:
Если я создаю два интерфейса крана (с tunctl) с двумя IP-адресами, которые находятся в разных сетях (192.168.2.1/24 и 192.168.3.1/24), то я связываю их с двумя виртуальными машинами kvm (интерфейс одного крана соответствует одной виртуальной машине) и если я включу маршрутизацию на хосте, две мои виртуальные машины смогут обмениваться данными.
Таким образом, интерфейсы Tap также могут использоваться для маршрутизации: в чем разница с tun? может тап это тоже интерфейс tun?
Более того, мне кто-то сказал:
Итак, я изучаю IP-соединение точка-точка и соединение Ethernet, и у меня есть другие вопросы:
Вы можете помочь мне прояснить это?
В существенный разница между TUN и TAP это уровень OSI, на котором они функционируют (это не включая программирование, необходимое для каждого типа устройства):
OpenVPN предоставляет эту информацию.
В системе может быть несколько различных типов сетевых адаптеров.
Интерфейс TAP представляет собой виртуальный адаптер Ethernet. Пакеты, проходящие через виртуальный адаптер, будут в форме кадров Ethernet с MAC-адресами источника и назначения (хотя я думаю, что они могут опустить последовательность проверки кадров, не уверен в этом). Как и в случае с настоящим адаптером Ethernet, ядро будет использовать ARP / ND для преобразования «IP-адреса следующего перехода» в MAC-адрес и будет выполнять фильтрацию MAC-адресов для входящих пакетов. Как и в случае с настоящим адаптером Ethernet, ответвительный интерфейс может (при желании) быть включен как часть моста Ethernet.
Интерфейс TUN представляет собой виртуальный «сырой» адаптер. Пакеты, проходящие через виртуальный адаптер, являются необработанными пакетами из протокола уровня 3 с дополнительным заголовком, указывающим тип пакета и флаги. Ядро не будет пытаться преобразовать IP-адрес следующего перехода в любую форму адреса нижнего уровня.
VPN-мост в локальную сеть
Прочитал топик habrahabr.ru/blogs/linux/67209 и решил выложить сюда свою статью, которая была до этого видна только в закрытой корпоративной Wiki.
Обычно, при создании VPN, используется подключение типа точка-точка к некоторому серверу, либо установка ethernet-туннеля с некоторым сервером, при котором туннелю назначается определённая подсеть. Сервер VPN при этом выполняет функции маршрутизации и фильтрования трафика для доступа к локальной сети через VPN.
Данная статья рассматривает другой подход к созданию виртуальной сети, при котором удалённые системы включаются в уже существующую локальную подсеть, а сервер VPN выполняет роль Ethernet-шлюза. При использовании такого подхода мы всё ещё имеем возможность фильтровать трафик на основании способа подключения (например, использовать для локальной сети и для удалённых пользователей разные фильтры), но исключается необходимость настройки маршрутизации, а удалённые машины включаются прямо в локальную сеть, видят ресурсы, даже способны использовать широковещательные посылки вообще без дополнительной настройки. Через такой VPN у них отображаются все компьютеры локальной сети Windows, все доступные XDMCP-серверы при XDMCP broadcast и т. д.
Структура сети и настройка сервера
Предположим, что имеется офис с локальной сетью, используется IP-подсеть 192.168.168.0/24. В эту локальную сеть мы включим домашних пользователей, то есть они будут иметь адрес из этой же самой подсети. Необходимо убедиться, что у них «дома» не встречается данная подсеть, и что никакие системы в локальной сети не имеют адресов из диапазона, который мы выделим для удалённых пользователей.
Поддержка моста в ядре
Для работы такой техники нам нужны некоторые ядерные драйвера. Это универсальный драйвер виртуальных сетевых интерфейсов tun, и драйвер ethernet-моста bridge. Можно включить их в ядро, или собрать модулями:
Если они будут собраны модулями, необходимо либо включить автоматическую загрузку модулей в ядре, либо загружать их самому перед установкой VPN-соединения.
Программное обеспечение
Для сервера потребуется OpenVPN и утилиты для обслуживания моста. В Gentoo они собираются следующим образом:
При использовании >=sys-apps/baselayout-1.12.6 этого достаточно, для более старых версий потребуются специальные утилиты для обслуживания tun/tap-устройств:
Настройка сети
Положим, eth2 — интерфейс, к которому подключена локальная сеть, с назначенным адресом 192.168.168.254. Его настройка выглядела примерно так:
Поскольку он будет участвовать в мосте, ему не нужно назначать адреса. Также, в мосте участвует вновь создаваемый виртуальный интерфейс tap0, которому тоже не назначается никакого адреса. Адрес, который использовался eth2, назначается теперь мосту br0:
Также нужно создать настроечные скрипты для указанных интерфейсов:
Достаточно автоматически загружать только интерфейс br0. depend_br0() автоматически поднимет все остальные необходимые ему для работы:
Создание ключей OpenVPN
Мы будем авторизовывать клиентов посредством RSA-ключей OpenSSL. Для упрощения процесса, для нас приготовили несколько init-скриптов:
Там есть файл vars, в который мы занесём общие значения:
Внизу этого файла мы заполняем наши переменные:
Загружаем переменные из этого файла и строим CA (Certificate Authority):
Ключ сервера
Для генерации ключа сервера с именем office, используем следующую команду:
На вопрос «Common Name» нужно ответить именем сервера (в нашем случае, office). На два вопроса в конце «Sign the certificate? [y/n]» и «1 out of 1 certificate requests certified, commit? [y/n]» отвечаем «y».
Параметры Диффи-Хеллмана
Здесь ничего дополнительно делать не придётся, но придётся подождать.
Этот файл нужен только на сервере.
Ключи клиентов
Каждому клиенту необходимо выдать свой ключ. Для клиента с именем client ключ создаётся командой
На вопрос о «Common Name» отвечаем именем клиента (в данном случае, client). На два вопроса в конце отвечаем согласием.
Настройка и запуск сервиса OpenVPN
Для запуска следует использовать следующую конфигурацию сервера (файл /etc/openvpn/openvpn.conf):
Ключ office.key должен иметь режим 600 (доступ только владельцу). Файлы office.crt и dh1024.pem имеют режим 644.
Настройка фильтрования
Поскольку мы используем мост, есть несколько особенностей организации фильтрования пакетов. Например, не все проходящие пакеты могут вообще оказаться IPv4. Для настройки работы моста в ядре существует несколько параметров:
Для фильтрования пакетов, проходящих через мост, используется соответствие physdev, которое различает, с какого и на какой порт моста следует пакет. Включаем его в ядре:
Кроме этого, конфигурация ядра должна разрешать передачу пакетов на фильтрацию iptables, т.е. bridge-nf-call-iptables=1 и bridge-nf-call-ip6tables=1 (если вы используете IPv6).
После можете использовать, например, такие правила для фильтрования:
Поподробнее про настройку фильтрации между портами поста можно почитать в статье Building bridges with Linux
Если вы не хотите делать никаких различий между пользователями LAN и пользователями bridged VPN, вы можете просто выключить эти параметры в ядре (они включены по умолчанию):
Клиенты
На клиенте необходимо создать конфигурационный файл OpenVPN следующего содержания:
Если сервер подключен через несколько провайдеров, можно повысить устойчивость сети к отказам. Для этого клиенту нужно прописать несколько опций remote, по одной на сервер, в порядке «сначала предпочтительные».
Имена файлов, указанные в параметрах ca, cert и key — это файлы, переданные через защищённый канал. Права доступа к файлу key должны быть установлены в 600.
Linux
Необходим universal tun/tap driver в ядре, либо модулем, но загруженный.
Gentoo
Соответственно, помещаем туда вышеприведённый конфиг, создаём симлинк и кладём скрипты в поддиректорию в /etc/openvpn/. В конфиге прописываем полный путь к ключу и сертификатам. Следите, чтобы имена файлов в конфиге не пересекались, во избежание неприятных эффектов!
Запуск и останов сети производятся через управление сервисом /etc/openvpn.network-name.
Windows
Конфигурационный файл помещается в директорию «C:\Program Files\OpenVPN\config\» с именем вроде «office.ovpn», туда же помещаются остальные файлы — ключи и сертификаты. Если мы их помещаем в поддиректорию (например, хотим использовать несколько виртуальных сетей и все они предоставили файлы с одинаковым именем ca.crt), указываем полные пути к файлам.
Возможные проблемы
Проверить доступность сервера, если он запущен на TCP, можно обычным telnetом.
Windows
Нет свободного виртуального адаптера TAP
По логу OpenVPN видно, что клиент успешно присоединился к серверу, авторизовался, но не смог привязать виртуальную сеть к виртуальному адаптеру. Скорее всего, какие-то другие процессы уже задествовали все имеющиеся в системе адаптеры TAP-Win32. Это мог быть и сам OpenVPN, повисший и не отдавший адаптер.
Лечится перезагрузкой или выяснением, какие бы это могли быть процессы и принудительным их убиванием.
Доступ повышенной проходимости.
Не секрет, что своевременный доступ к информации, в том числе хранящейся внутри корпоративной сети компании, может оказаться решающим фактором успешной работы сотрудников. Речь о виртуальных частных сетях (VPN). Иногда предоставить доступ оказывается не так-то просто.
Доступ всегда и везде.
Обеспечивая удалённый доступ во внутреннюю сеть компании приходится учитывать множество факторов. Среди которых встречается и невозможность установления соединения между клиентом и серверном. Причина может быть проста – системные администраторы гостевой сети, из которой сотрудник фирмы пытается произвести подключение, закрыли возможность всех исходящих соединений, а доступ к веб ресурсам осуществляется через «прозрачный» прокси-сервер. В такой ситуации установить VPN соединение используя стандартные решения типа pptp и IPsec попросту не возможно.
Второй большой неприятностью для любого мобильного пользователя может оказаться банальная потеря(или кража) ноутбука. Излишне объяснять, чем обернётся для компании доступ чужого человека в корпоративную сеть, если нашедшему ноутбук вздумается воспользоваться этой возможностью. Разумеется, мобильные пользователи обязаны (как правило на уровне корпоративного стандарта) не ставить опцию хранения пароля на учётную запись доступа VPN, но… вы много таких пользователей видели? Мне пока не довелось ни одного. Поэтому предпочтительно ввести дополнительные средства безопасности доступа к внутренней сети компании. Другими словами, использовать двухфакторную авторизацию пользователей – программным и аппаратным способом. Речь идёт о ключах eToken, которые могут использоваться для безопасного хранения сертификатов для шифрования и дешифрования данных или авторизации в различных системах.
И последнее (по счёту, но не по важности), что хотелось бы упомянуть – возможность получения доступа не только к файлам на серверах компании, но и к другим ресурсам. Например, к почтовому серверу (во многих компаниях использование внешних соединений по pop3, imap и smtp протоколам запрещено). Проблема может заключаться в том, что почтовый сервер находится, например, вне локальной сети компании. Далее, мы рассмотрим комплексное решение всех обозначенных проблем.
Как мы будем решать задачу.
Мы воспользуемся следующими программными и аппаратными средствами:
• OpenVPN, работающим под Linux, в качестве поставщика защищённого частного канала связи;
• htc и hts программами для организации http тунеля через прокси сервера;
• eToken PRO от компании Alladin.
Вы можете использовать аналогичные ключи любых других производителей, ключ этой компании просто оказался у меня под рукой.
Итак, рассмотрим каждый пункт отдельно.
OpenVPN.
Система OpenVPN [1] выбрана для реализации решения не случайно. Это программное обеспечение весьма активно обновляется разработчиками. OpenVPN позволяет реализовать практически любые задачи по организации VPN каналов.
Среди достоинств системы:
• поддержка практически всех возможных операционных систем — Linux, Windows версий 2000/XP и выше, OpenBSD, FreeBSD, NetBSD, Mac OS X, Solaris;
• возможность использовать все доступные OpenSSL методы шифрования, аутентификации и сертификатов для защиты вашего частного канала;
• возможность создавать целые фермы серверов с балансировкой нагрузки тысяч входящих VPN соединений;
• использование статического ключа для шифрования или систему открытых ключей;
• возможность создавать безопасное подключение типа «мост» (ethernet bridges);
• возможность использования как udp, так и tcp для VPN канала.
И это далеко не полное перечисление функционала OpenVPN. Система постоянно дорабатывается, количество возможностей увеличивается.
Туннель http с использованием htc и hts.
Это маленькие программки одна из которых запускается на сервере, а другая соответственно на клиенте. Они не нуждаются в особых настройках и запускаются простой командной строкой. Ниже мы рассмотрим их более подробно.
eToken ключ.
Для наших целей подойдёт любой аппаратный ключ, предназначенный для безопасного хранения цифровых сертификатов. eToken PRO представляет собой защищенное устройство, предназначенное для строгой аутентификации, безопасного хранения секретных данных, выполнения криптографических вычислений и работы с асимметричными ключами и цифровыми сертификатами. USB-ключ архитектурно реализован как USB карт-ридер с встроенной в него микросхемой (чипом) смарт-карты. Ключ выполнен в виде брелка и напрямую подключается к USB порту компьютера, при этом не требует для своей работы каких-либо дополнительных устройств.
Подобных аппаратных средств на рынке представлено огромное множество и каждый может выбрать наиболее оптимальное для своих целей устройство. Приятная особенность ключей состоит в том, что вы не обязаны использовать их для решения только одной задачи. Один и тот же ключ может позволять производить авторизацию для доступа по Wi-Fi в сеть, для установления VPN соединения и для шифрования данных на жёстком диске.
Вам потребуется только сам ключ и свободно распространяющаяся утилита для работы с ним.
Итак, перейдём к решению поставленной задачи.
Установка OpenVPN сервера.
Воспользуемся Gentoo Linux для установки системы OpenVPN. Но прежде, чем мы приступим к установке, убедимся, что ядро Linux содержит все необходимые модули. Для этого зайдём в конфигуратор нашего ядра и обратим внимание на запись, относящуюся к TUN/TAP драйверам.
Если поддержка установлена, то всё в порядке и можно продолжать. Если нет –установите необходимое значение и перекомпилируйте ядро вашей системы.
Если вы не планируете в дальнейшем использовать аппаратные ключи для двухфакторной аутентификации, то установка самой системы OpenVPN крайне проста и выполняется одной командой.
С текущей версией ebuild’а система установит вам OpenVPN версии 2.0.6 Для использования eToken придётся пройти по дереву портов и принудительно установить более новую версию (на данный момент 2.1_beta14).
# echo net-misc/openvpn >> /etc/portage/package.keywords
# USE=«ssl example» emerge openvpn
Кроме того, может потребоваться установка необходимых дополнительных пакетов. Поэтому я рекомендую на время установки системы просто раскомментировать в вашем /etc/make.conf опцию ACCEPT_KEYWORDS нужной архитектуры (в моём случае это «
x86»), позволив системе установить всё необходимое.
Опция SSL необходима для поддержки OpenSSL, а examples установит примеры конфигурационных файлов OpenVPN. В противном случае, никаких примеров не будет и файлы настроек прийдётся писать, что называется, с чистого листа.
Создание ключей сервера и клиентов.
После того, как скомпилируется система потребуется (для удобства) скопировать примеры конфигурационных файлов в /etc/openvpn и туда же скопировать скрипты, для формирования ключей и сертификатов.
И то, и другое находится в директории /usr/share/openvpn. В поддиректории easy-rsa содержатся скрипты на все случаи жизни, позволяющие создавать:
корневой сертификат (build-ca);
ключ и сертификат сервера (build-key-server);
простые ключи для клиентов (build-key);
ключи для клиентов, защищённые паролем (build-key-pass);
ключи PKCS для необходимой нам возможности использовать eToken (build-key-pkcs12).
Первоначально создадим все необходимые сертификаты и ключи для сервера.
Последняя команда создаёт PKCS12 ключи для пользователя. Где client1, это пример имени пользователя. Команда должна быть выполнена для каждого предполагаемого клиента. Обратите внимание, что при создании ключа вы можете защитить его дополнительно паролем.
Настройка OpenVPN.
Конфигурационный файл OpenVPN (называющийся по-умолчанию server.conf) снабжён весьма подробными комментариями и позволяет без проблем выставить все необходимые настройки практически без использования какой-либо дополнительной документации.
Сначала укажем по какому адресу и на каком порту будет работать наш сервер:
local Х.Х.Х.Х
port 443
Выбор порта не случаен почему, я поясню позже когда будем настраивать клиентскую и серверную часть http тунеля.
Второе, что надо выбрать — по tcp или udp будет работать наш VPN. Для этого есть соответствующая опция:
proto tcp
или
proto udp
Так как мы собираемся сделать возможным доступ через веб прокси сервер гостевой системы, то выберем proto tcp.
Далее, выберите тип сетевого устройства, которое будет использоваться.
dev tun0 – в случае организации обычного VPN, или
dev tap0 – если вы хотите использовать подключение типа «мост».
Используя второй вариант помните о необходимости достаточного пула свободных сетевых адресов в вашей локальной сети, которые будут время от времени заниматься удалёнными пользователями при подключении по VPN.
В секции описания ключей напишем полный путь до нашего ключа:
pkcs12 /etc/openvpn/easy-rsa/keys/server.p12
dh /etc/openvpn/easy-rsa/keys/dh1024.pem
Обратите внимание, что одновременно может использоваться только либо ключ pkcs12, либо «стандартные» ca, cert и key. Если будут выставлены пересекающиеся опции, система откажется запускаться.
Если вы решили использовать обычный VPN, укажите адресное пространство, в котором он будет работать и из которого будет назначать их клиентам.
server 192.168.4.0 255.255.255.0
Если вы собираетесь использовать подключение типа «мост», то потребуется другая опция (параметр server необходимо закомментировать, так как сервер может единовременно работать только в одном качестве):
server-bridge 192.168.1.73 255.255.255.0 192.168.1.61 192.168.1.63
• первый и второй параметры — адрес и маска локальной сетевой карты сервера;
• третий и четвёртый параметры – пул адресов для выдачи внешним клиентам.
Опция, которую мы пропустили
содержит имя файла, в котором будут храниться соответствия клиентов (по именам их ключей) и их внутренним адресам, которые им выдаёт система OpenVPN.
Следующие весьма важные опции указывают, какие адресные пространства будут доступны для клиентов и при подключении автоматически добавятся в таблицу маршрутизации.
push «route 192.168.1.0 255.255.255.0»
push «route Х.Х.Х.Х 255.255.255.255»
Первая опция добавляет возможность использовать нашу локальную сеть, а вторая добавляет один внешний адрес, на котором находится наш почтовый сервер, куда клиенты так же должны иметь доступ при любых обстоятельствах.
Большинство опций, которые следуют дальше необходимы для реализации возможностей, выходящих за рамки данного материала.
Опции
push «dhcp-option DNS 192.168.1.1»
client-to-client
Указывают какой DNS использовать клиентам для преобразования имён в ip адреса внутри нашей локальной сети, а так же позволять ли клиентам VPN взаимодействовать между собой. Это может быть полезно, если есть необходимость обмена файлами между двумя пользователями.
Если вам по какой-то причине необходимо позволить двум независимым клиентам VPN использовать одновременно идентичные сертификаты — раскомментируйте опцию duplicate-cn.
Последнее, на что сейчас стоит обратить внимание – это название файла и путь к нему, куда будет писать журнальный файл OpenVPN, а так же на количество допустимых пользователей системы одновременно.
Настройка шлюза локальной сети.
Если ваш сервер OpenVPN не является основным шлюзом локальной сети – потребуется добавить маршрутизацию для VPN подсети. Так как в моей сети используется Cisco 2621 в качестве основного шлюза, я добавил маршрут на ней следующей командой:
ip route 192.168.4.0 255.255.255.0 192.168.1.73
где первый и второй параметр — адрес и маска виртуальной подсети, а последний — адрес внутреннего интерфейса OpenVPN сервера. (Не забывайте о необходимости включения интерактивного режима на cisco перед вводом команды, а так же записи изменений в память устройства после добавления маршрута.)
Добавление маршрута на Linux шлюзе производится командой:
где первый адрес, это наша виртуальная подсеть, а второй – адрес внутреннего интерфейса сервера OpenVPN.
Если не сделать вышеописанных действий, пакеты из локальной сети не смогут найти «дорогу» до VPN клиента.
Обеспечение доступа к внешнему ресурсу для VPN клиентов.
Для того, чтобы позволить VPN клиентам попадать на наш почтовый сервер, находящийся во внешнем мире относительно нашей рабочей сети, воспользуемся услугами iptables.
Я, создавая правило, не стал указывать допустимые порты соединения по той простой причине, что на внешнем сервере помимо почтового сервиса находятся другие сервисы, работающие на нестандартных портах, которые часто закрыты в гостевых системах для соединения. Вы можете указать, какие порты будут доступны для соединений клиентам VPN.
Кроме того, если правила на вашем файрволе настроены по принципу «всё запретить, нужное разрешить», то не забудьте добавить разрешения на пересылку пакетов с интерфейса tun0.
Запускаем сервер
После того, как были произведены все необходимые настройки, пришло время запустить OpenVPN сервер и посмотреть, что будет в журнальном файле. Обратите внимание, что по-умолчанию скрипт /etc/init.d/openvpn настроен на работу с конфигурационным файлом /etc/openvpn/openvpn.conf, а вовсе не server.conf, который идёт в примерах. Итак, запускаем наш сервер:
В журнальном файле вы должны увидеть нечто вроде:
Так же стоит обратить внимание на вывод команды ifconfig, который должен показать, что в системе появилось новое сетевое устройство tun0.
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:192.168.4.1 P-t-P:192.168.4.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
Если устройство не появилось, то внимательно просмотрите журнал и файл конфигурации.
Не забудьте добавить сервис OpenVPN в список автоматически запускаемых, а так же сохранить новые правила iptables в вашем списке.
Установка и настройка клиента OpenVPN.
Теперь, когда первая половина настройки нашей системы завершена, самое время приступить к установке клиентской части программы. Я рассмотрю клиентов для Linux и Windows систем.
Установка Linux VPN клиента.
Клиент на Linux системе может потребоваться вот в каком случае. Допустим, у вас есть удалённые интранет сервера, ресурсы которых вы хотели бы использовать в своей локальной сети. Нет ничего проще! Мы просто подключаем эти системы к нашей VPN и пользуемся. Особенно это может оказаться полезным, если сервер является локальным для какой-нибудь удалённой сети.
Как и в случае с настройкой серверной системы убедитесь в наличии необходимых модулей в ядре.
В Linux клиентская часть от серверной отличается только конфигурационным файлом. Этот файл значительно короче и так же снабжён весьма подробными комментариями.
Первые же параметры указывают сервису OpenVPN, что в системе он является клиентом. Какое сетевое устройство и протокол используются, а так же какой ip адрес у сервера и какой порт используется сервисом OpenVPN.
client
dev tun
proto tcp
remote openvpn.domain.ru 443
Скопируем на клиентскую систему необходимые для работы ключи и сертификаты:
ca.crt, client1.crt, client1.key
и укажем их в конфигурационном файле
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/client1.crt
key /etc/openvpn/easy-rsa/keys/client1.key
На этом настройка нашей клиентской системы завершена и мы можем её использовать. Запускать можно просто переименовав файл из client.conf в openvpn.conf или же командной сторокой
Первый раз я рекомендовал бы запустить из командной строки. Так как протокол будет выводиться непосредственно на экран, это поможет убедиться, что всё нормально.
Если всё прошло нормально, то в конце вывода вы увидите что-то вроде:
Не забудьте добавить сервис в список автоматически запускаемых.
Установка Windows OpenVPN клиента.
OpenVPN в Windows системе обладает графическим интерфейсом (GUI), что значительно упрощает работу с ним для пользователей. По адресу [2] всегда можно найти свежую версию программы. Рекомендую хотя бы первый раз скачать полный инсталяционный пакет (на данный момент это openvpn-2.0.7-gui-1.0.3-install.exe), так как в нём содержатся драйвера для TUN/TAP интерфейсов. В последствии, можно скачивать обновления только самой программы. (Application only по ссылке.)
Среди достоинств и удобств клиента можно выделить:
• отображение иконки программы в системном трее;
• свертывание окна журнала соединения сразу после установления сессии;
• просмотр журнал соединения (вызов из контектстного меню);
• изменение настроек конфигурационного файла (вызов из контекстного меню);
• использование OpenVPN в качестве системного сервиса;
• окно ввода пароля на цифровой сертификат для аутентификации на сервере;
• дополнительная защита программы на операцию соединения (свой собственный пароль);
• изменение пароля на защищённый ключ (в том числе PKCS # 12);
• настройка используемого прокси сервера;
• использование настроек прокси сервера из опций Internet Explorer;
• выполнение скрипта (bat) перед и/или после соединения с сервером OpenVPN;
• индикация статуса соединения в системном трее.
Помните, что в версиях Windows младше 2000/XP OpenVPN клиент работать не будет. Но думаю в наше время такие версии операционных встречаются редко.
После установки клиента в меню программ появляется пункт OpenVPN с богатым выбором:
• ссылка на папку с конфигурационными файлами;
• на папку с примерами;
• программа формирования статического ключа;
• программа создания сертификата и формирования запроса на его подпись;
• собственно программа клиент OpenVPN;
• ссылки на различную документацию.
Конфигурационный файл, как и все предыдущие, снабжен комментариями и ничем не отличается от файла для клиента Linux системы. Разница только в расширении файла. Если в Linux оно было «conf», то в Windows – opvpn. Поэтому описывать настройки смысла не имеет, можно смело заимствовать их из предыдущего примера.
Остановимся только на описании ключей и сертификатов. Как вы помните, мы решили использовать двухфакторную аутентификацию мобильных пользователей. Для этого скопируем на клиентскую систему с серверной только два файла – ca.crt и сертификат соответствующий (по имени) данному клиенту с раширением p12.
Теперь нам необходимо импортировать наш сертификат в имеющийся в нашем расположении Alladin eToken. Для этого скачаем (если ещё не установлено) программное обеспечение по работе с ключом RTE по ссылке [3].
После установки полученной программы, у нас в меню программ появится папка eToken с единственной ссылкой на программу eToken properties.
Рис 1. Программа для работы с ключом.
Вставив наш ключ в USB порт, мы увидим его в окне программы. Перейдя на иконку ключа и выбрав «Дополнительно», введем PIN код для доступа к ключу. Это даст возможность импортировать сертификат.
Рис 2. Окно импорта сертификата.
Если при создании сертификата на сервере был использован пароль (сразу после его подписывания), то здесь нас попросят ввести его еще раз и можете распоряжаться данным сертификатом.
Теперь мы можем убедиться, что сертификат известен нашей Windows системе, а заодно узнать, как к нему будет обращаться клиент OpenVPN. Для этого проследуем в «Панель управления», где выберем «Свойства обозревателя». В этом окне нас интересует только вкладка «Содержание» и кнопка «Сертификаты».
Рис 3. Список доступных сертификатов.
Выделим наш сертфикат и кликнем на «Просмотр», в открывшемся окне выбирем «Состав». Здесь нас интересует поле «Отпечаток», которое скопируем в буфер обмена.
Полученную информацию об отпечатке сертификата внесём в конфигурационный файл нашего OpenVPN клиента.
cryptoapicert «THUMB:ed 38 ac 63 …»
ca ca.crt
Теперь, когда первоначальное конфигурирование клиента завершено пришло время опробовать его в действии. Для этого достаточно в контекстном меню выбрать коннект. Если обращение к eToken прошло корректно, появится окно ввода PIN кода для доступа к ключу.
Рис 4, 5. Удача и поражение.
В случае ошибки, убедитесь, что ключ вставлен в USB порт, а предыдущие шаги выполнены верно.
После подтверждения доступа к ключу в том же окне ввода будет отображаться журнал соединения с сервером. Окно автоматически скроется, как только соединение будет успешно установлено. Вернуться к журналу всегда можно, выбрав в контекстном меню «View log». Осталось попробовать выполнить ping до какого-нибудь из компьютеров удалённой локальной сети и убедиться, что всё работает правильно.
Теперь, когда всё уже настроено и работает пора вернуться к ситуации, когда доступ во внешний мир ограничен веб ресурсами. А для его предоставления используется прозрачное проксирование.
hts и htc.
Как уже было сказано выше, эти две программки легко устанавливаются и ещё проще используются. Суть их работы состоит в том, что первая «слушает» указанный ей порт (в нашем случае это будет 80, доступ к которому есть везде) и в случае инициации соединения создаёт http тунель.
Вторая же наоборот слушает 443 порт и инициирует с удалённой htc соединение через 80 порт.
Установка htc в Gentoo Linux на сервере выполняется простой командой:
Для Windows систем скачать httptunnel можно с страницы проекта по ссылке [4].
Использовать httptunnel весьма и весьма просто. Для запуска на сервере достаточно команды:
Где указан ip адрес и порт, на которые должен быть установлен туннель в случае обращение на порт 80. Команда выполняется без какого-либо вывода на экран. О результатах её выполнения можно узнать только из системного журнала. (Например, /var/log/messages.)
Jun 18 01:47:28 admin hts[27389]: hts (httptunnel) 3.3 started with arguments:
Jun 18 01:47:28 admin hts[27389]: me = hts
Jun 18 01:47:28 admin hts[27389]: device = (null)
Jun 18 01:47:28 admin hts[27389]: port = 80
Jun 18 01:47:28 admin hts[27389]: forward_port = 443
Jun 18 01:47:28 admin hts[27389]: forward_host = Х.Х.Х.Х
Jun 18 01:47:28 admin hts[27389]: content_length = 102400
Jun 18 01:47:28 admin hts[27389]: strict_content_length = 0
Jun 18 01:47:28 admin hts[27389]: use_std = 0
Jun 18 01:47:28 admin hts[27389]: debug_level = 0
Jun 18 01:47:28 admin hts[27389]: pid_filename = (null)
Команда netstat подтверждает нам, что hts действительно работает и «слушает» 80 порт.
Осталось сделать windows скрипт (bat) для запуска клиентской части httptunnel. Этот файл мы создадим в папке c:\program files\openvpn\config и назовём hts_pre.bat. А в сам файл добавим только одну строку:
Где:
-F 443 указывает порт, являющийся итоговым получаетелем.
-P 192.168.1.1:3128 ip адрес и порт прокси сервера гостевой системы.
X.X.X.X:80 собственно адрес серверной части httptunnel.
Выбор места создания и имени файла для скрипта не случаен. Как было уже сказано выше, OpenVPN для Windows умеет выполнять bat файлы до соединения, сразу после соединения и после завершения сессии. Для этого достаточно выполнить всего два условия. Создать bat файл в директории конфигурационных файлов OpenVPN и назвать файл по следующей схеме:
• Назвать файл xxx_pre.bat для выполнения скрипта непосредственно перед соединением.
• Назвать xxx_up.bat для выполнения сразу после установления соединения.
• Назвать ххх_down.bat для завершающего сессию скрипта.
Нас интересует первый тип скрипта. К слову сказать, выполнив команду из нашего bat файла, система не закроет окно и это прийдётся сделать вручную. Это не остановит наш туннель, но избавит от лишнего открытого окна на рабочем столе. Предполагаю, есть средство, позволяющее избежать этого «вечно открытого» окна, но сходу я его не обнаружил (может быть потому что не силён в написании скриптов для Windows). Если вам способ известен – тем лучше.
Как вы заметили, для установления тунеля нам потребовалось знать ip адрес и порт, на которых работает прокси сервер гостевой системы. Эта информация, конечно, не написана крупным шрифтом при входе в здание, но тем не менее (обычно) легко узнаётся у системного администратора. Случаев, когда сисадмин отказывался сообщать параметры прокси мне (возможно пока) не известны.
Теперь наша система полностью настроена и готова работать в практически любых условиях. Этакий максимально защищённый «вседорожник» на просторах интернета!
Насколько мобильным может быть OpenVPN.
Как уже было сказано выше, система OpenVPN позволяет использовать удалённую локальную сеть практически в любых условиях. Но помимо компьютеров (в том числе и ноутбуков), как вам известно, существуют ещё более «мобильные» устройства. Я говорю о коммуникаторах и наладонниках (КПК). В большинстве из них (например, в устройствах на базе Windows Mobile или Symbian) есть либо встроенное средство установления VPN соединения, либо можно установить программное обеспечение стороннего производителя.
Однако, из-за использования в системе OpenVPN TUN/TAP простые средства соединения не подойдут. И найти их для устройств данного класса, увы, пока не возможно. Изыскания в интернете дали только информацию о ведущихся разработках реализации возможности использования OpenVPN. (Сейчас ссылка на информацию об этом есть уже и на главной странице проекта. [5])
Правда, есть одно исключение. Если вы обладатель КПК Sharp Zaurus и давно собирались установить на него Linux, то вполне сможете использовать ваш VPN. Драйвера и необходимый софт для этого можно найти на просторах интернета. Он используется многими людьми. Необходимые файлы можно взять, например, здесь [6].
Заключительное слово.
Устанавливая и настраивая клиент OpenVPN помните, что средства встроенной защиты уже самой Windows программы никто не отменял и ввод ещё одного пароля не будет лишним, если того требует строгая политика информационной безопасности вашей компании. Использование же сертификатов без eToken, как мы помним, так же нам доступно. Например, на домашних компьютерах аппаратные ключи использовать совершенно не обязательно. А вот мобильным пользователям ПК eToken явно не будет лишним. Особенно, если вспомнить, что этот же ключ можно использовать для авторизации в самой Windows системе (и не только).
(с) akeeperКоршунов Алексей.
Впервые опубликовано в журнале «Системный администратор.