Как создать vpn linux

Настройка VPN подключения в Linux

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

Методика настройки VPN подключения в Linux.

Что такое VPN и зачем это нужно

Для начала разберём, что представляет собой Virtual Private Network (виртуальная частная сеть) и как применим данный вид технологий. Благодаря VPN можно объединить любое число устройств в частную сеть, и обеспечить защищённый канал для передачи данных. Так, применяя подключение такого типа, пользователи могут сохранить приватность в интернете и не переживать о сохранности данных, в том числе при работе в сетях с общим доступом. Подсоединение к VPN позволяет избежать перехвата информации со стороны злоумышленников, поскольку маршрут обмена пакетами надёжно защищён шифрованием и аутентификацией пользователя. Данные шифруются на стороне отправителя и следуют по каналу связи в зашифрованном виде, а расшифровываются уже на устройстве получателя, при этом у обоих подразумевается общий ключ доступа. С применением VPN возможно создание надёжной сети поверх ненадёжной (как правило, интернета). Подключение пользователя выполняется не напрямую, а посредством сервера, соединённого с внутренней или внешней сетью. Это и обеспечивает приватность в интернете, поскольку в таком случае веб-ресурсам будет виден IP сервера, к которому подсоединён клиент. Сервер потребует прохождения процедуры идентификации, а также аутентификации и после того, как пользователь авторизован, возможна работа с сетью. Наиболее часто VPN используют в следующих случаях:

  • Подключение к интернету посредством VPN нередко применимо провайдерами городских сетей, а также на предприятиях. Плюсом такого метода реализации является защищённость канала связи, поскольку возможна настройка разных ступеней безопасности. Это обеспечивается настройкой одной сети поверх другой и доступом в интернет посредством двух разных сетей.
  • Внутри корпоративной сети. Объединение в одну сеть позволяет получить безопасным доступ к сети скольким угодно компьютерам сотрудников вне зависимости от их местонахождения и удаления от сервера.
  • Объединение компонентов корпоративной сети. Применяя VPN для обеспечения взаимодействия различных частей предприятия, возможна организация доступа для них к отдельным ресурсам общей сети.

Реализация технологии доступна для различных устройств, операционкой которых поддерживается опция или имеется VPN-клиент, способный осуществлять проброс портов с применением TCP/IP в виртуальную сеть. Пользователь может самостоятельно выполнить все действия по настройке. Необходимость в этом возникает даже не ради цели обхода региональных блокировок, ведь для этого можно и не настраивать VPN в компьютере (для посещения заблокированных ресурсов достаточно инсталляции стороннего приложения, установки специального расширения для браузеров или использования встроенного функционала обозревателя). Настроить VPN на ПК или ноутбуке часто требуется в случае смены провайдера для настройки доступа в интернет. Настройка VPN под Linux имеет свои специфические особенности, учитывая многогранность ОС, но принцип остаётся тот же.

Настройка серверной части на Linux

Рассмотрим создание VPN сервера PPTP на платформе Ubuntu Server. С Linux достаточно легко развернуть сервер и сделать это можно даже на слабом устройстве. Наиболее просто реализовать VPN с PPTP, поскольку для воплощения не потребуется устанавливать сертификаты на устройства клиентов, а аутентификация выполняется благодаря вводу имени и пароля. Для начала потребуется инсталлировать пакеты:

Читайте также:  Windows common controls manifest

Когда пакеты для функционирования PPTP VPN установлены, следует настроить сервер. Чтобы задать диапазон адресов и выполнить прочие главные настройки, откроем файл /etc/pptpd.conf (редактируется с правами администратора):

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

Диапазон адресов для раздачи клиентам (выделяем сразу с некоторым запасом, поскольку увеличить количество, не перезапуская pptpd не получится):

Если у вас имеется несколько внешних IP, можно конкретизировать, по какому из них прослушивать интерфейсы входящих PPTP:

Параметр speed позволяет задать скорость подключений (бит/с). Сохраняем и закрываем файл. Остальные параметры можно настроить в /etc/ppp/pptpd-options:

В секторе #Encryption, отвечающем за шифрование, строки, которые запрещают применение устаревших и небезопасных способов аутентификации, должны быть раскомментированы:

Опция proxyarp должна быть включена, она отвечает за включение поддержки сервером Proxy ARP. Опция lock позволяет разрешить (для этого комментируем) или запретить (для этого раскомментируем) пользователю множественные подключения. Сохраняемся и закрываем файл. Настройка сервера завершена, но для создания клиентов вносим соответствующие записи в /etc/ppp/chap-secrets:

Они выглядят примерно таким образом:

username2 10.10.12.11 password345*

username3 * password787 10.10.11.21

Для каждого пользователя прописываем его имя, пароль, удалённый и локальный IP, разделяя сведения клавишей пробел. Удалённый адрес прописываем при наличии у клиента статического IP и при условии применения исключительно такового, в ином случае предпочтительно ставить звёздочку, чтобы соединение однозначно было выполнено. Локальный адрес же указываем при выделении пользователю одного и того же IP в VPN-сети. В примере выше для клиента в первом варианте соединения осуществляются с любого внешнего IP, локальный выделится первый доступный. Во втором случае – локальный будет выделен первый доступный, но подключения выполняются только с указанного адреса. В третьем – соединиться с сетью можно с любого адреса, локальный же выделится тот, который был нами прописан. Настройка серверной части VPN PPTP завершена, перезапускаем его:

Само устройство в перезагрузке не нуждается.

Настройка VPN клиентов

Выполнить наладку клиентской части VPN сервера можно в любой ОС, мы же будем настраивать на Убунте. По большому счёту соединение будет работать и с параметрами, выставленными по умолчанию, но лучше указать тип подключения и выполнить некоторые другие настройки. Установка VPN на Ubuntu предполагает следующие действия:

  • В меню «Система» переходим в «Параметры» и выбираем «Сетевые соединения».
  • Выбираем тип соединения «Туннельный протокол точка-точка PPTP».
  • Присваиваем подключению наименование или оставляем, как было предоставлено.
  • В поле «Шлюз» вбиваем внешний IP сервера, прописываем имя и пароль (в правой части поля для пароля присутствует опция его сохранения для этого юзера).
  • Жмём «Дополнительно» и в новом окне ставим флажок напротив пункта «Использовать шифрование MPPE» (это обязательное условие для связи с сервером).
  • Теперь позакрываем окна и подключимся к нашему серверу.

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

Настройка доступа в интернет через VPN

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

iptables -t nat -A POSTROUTING -o eth0 -s 10.0.0.1/24 -j MASQUERADE

iptables -A FORWARD -s 10.0.0.1/24 -j ACCEPT

iptables -A FORWARD -d 10.0.0.1/24 -j ACCEPT

Под 10.0.0.1/24 подразумевается локальный IP сервера и маска сети. Сохраняемся:

и подтверждаем новые параметры:

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

Читайте также:  Структура реестра операционной системы windows

Источник

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».

При необходимости, можно будет создать дополнительные ключи серверов. Например, это могут быть резервные серверы доступа для повышения надёжности системы. Они создаются той же командой, перед ней нужно выполнить source ./vars.

Параметры Диффи-Хеллмана

Здесь ничего дополнительно делать не придётся, но придётся подождать.

Этот файл нужен только на сервере.

Ключи клиентов

Каждому клиенту необходимо выдать свой ключ. Для клиента с именем client ключ создаётся командой

На вопрос о «Common Name» отвечаем именем клиента (в данном случае, client). На два вопроса в конце отвечаем согласием.

Сгенерированные ключи и сертификаты передаём клиентам через защищённый канал. При необходимости, можно создавать ещё ключи той же командой. Перед её запуском, необходимо загрузить окружение — выполнить source ./vars.

Читайте также:  Clean install linux from usb

Настройка и запуск сервиса OpenVPN

Для запуска следует использовать следующую конфигурацию сервера (файл /etc/openvpn/openvpn.conf):

Ключ office.key должен иметь режим 600 (доступ только владельцу). Файлы office.crt и dh1024.pem имеют режим 644.

Настройка фильтрования

Поскольку мы используем мост, есть несколько особенностей организации фильтрования пакетов. Например, не все проходящие пакеты могут вообще оказаться IPv4. Для настройки работы моста в ядре существует несколько параметров:

Переменные этой группы сохраняются в файлах директории /proc/sys/net/bridge/. Их можно также настраивать в /etc/sysctl.conf, тогда они все получат префикс «net.brigde.»

  • bridge-nf-call-arptables
    Логическая переменная bridge-nf-call-arptables управляет передачей трафика ARP в цепочку FORWARD пакетного фильтра arptables. Установленное по умолчанию значение 1 разрешает передачу пакетов фильтрам, 0 – запрещает.
  • bridge-nf-call-iptables
    Логическая переменная bridge-nf-call-iptables управляет передачей проходящего через мост трафика IPv4 в цепочки iptables. Используемое по умолчанию значение 1 разрешает передачу пакетов для фильтрации, 0 – запрещает.
  • bridge-nf-call-ip6tables
    Действие аналогично предыдущему, только оно настраивает передачу трафика IPv6 для фильтрования в цепочки ip6tables.
  • bridge-nf-filter-vlan-tagged
    Логическая переменная bridge-nf-filter-vlan-tagged определяет возможность передачи трафика IP/ARP с тегами VLAN программам фильтрации пакетов (arptables/iptables). Значение 1 (установлено по умолчанию) разрешает передачу пакетов с тегами VLAN программам фильтрации, 0 – запрещает.

Для фильтрования пакетов, проходящих через мост, используется соответствие 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

При установке net-misc/openvpn создаётся скрипт /etc/init.d/openvpn. Этот скрипт запускает openvpn с конфигурационным файлом /etc/openvpn/openvpn.conf. Мы, однако, можем поддерживать несколько конфигураций OpenVPN одновременно, если сделаем симлинки вида /etc/init.d/openvpn.network-name -> /etc/init.d/openvpn — каждый такой скрипт запускает OpenVPN с конфигурационным файлом /etc/openvpn/network-name.conf.

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

Запуск и останов сети производятся через управление сервисом /etc/openvpn.network-name.

Windows

Конфигурационный файл помещается в директорию «C:\Program Files\OpenVPN\config\» с именем вроде «office.ovpn», туда же помещаются остальные файлы — ключи и сертификаты. Если мы их помещаем в поддиректорию (например, хотим использовать несколько виртуальных сетей и все они предоставили файлы с одинаковым именем ca.crt), указываем полные пути к файлам.

Для запуска сетей можно либо запустить сервис OpenVPN (тогда будут запущены все конфигурации *.ovpn, найденные в config\), либо по отдельности — щёлкаем по файлу .ovpn правой кнопкой и выбираем «Запустить OpenVPN с этой конфигурацией».

Возможные проблемы

Проверить доступность сервера, если он запущен на TCP, можно обычным telnetом.

Windows

Нет свободного виртуального адаптера TAP

По логу OpenVPN видно, что клиент успешно присоединился к серверу, авторизовался, но не смог привязать виртуальную сеть к виртуальному адаптеру. Скорее всего, какие-то другие процессы уже задествовали все имеющиеся в системе адаптеры TAP-Win32. Это мог быть и сам OpenVPN, повисший и не отдавший адаптер.

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

Источник

Оцените статью