Openvpn client windows несколько подключений

Обновлено: 07.07.2024

OpenVPN это виртуальная частная сеть, использующая TLS/SSL. Это означает, что OpenVPN использует сертификаты для шифрования трафика между сервером и клиентами. Для выпуска доверенных сертификатов (trusted certificates) нам потребуется создать наш собственный центр сертификации.

Создайте пользователя с именем, например, openvpn-ca и перейдите в его домашний каталог:

Для начала скопируем шаблонную директорию easy-rsa в нашу домашнюю директорию с помощью команды make-cadir:

Шаг 3. Настройка переменных центра сертификации

Для настройки переменных нашего центра сертификации нам необходимо отредактировать файл vars. Откройте этот файл в вашем текстовом редакторе:

Внутри файла вы найдёте переменные, которые можно отредактировать, и которые задают параметры сертификатов при их создании. Нам нужно изменить всего несколько переменных.

Пока мы в этом файле, отредактируем значение KEY_NAME чуть ниже, которое заполняет поле субъекта сертификатов. Для простоты зададим ему название vpnsrv2 :

Сохраните и закройте файл.

Шаг 4. Создание центра сертификации

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

Убедитесь, что вы находитесь в директории центра сертификации и используйте команду source к файлу vars . В моем случае также потребовалось добавить симлинк к файлу openssl-1.0.0.cnf :

Вы должны увидеть следующий вывод:

Убедимся, что мы работаем в "чистой среде" выполнив следующую команду:

Теперь мы можем создать наш корневой центр сертификации командой:

Эта команда запустит процесс создания ключа и сертификата корневого центра сертификации. Поскольку мы задали все переменные в файле vars, все необходимые значения будут введены автоматически. Нажимайте ENTER для подтверждения выбора.

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

Шаг 5. Создание сертификата, ключа и файлов шифрования для сервера

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

Начнём с создания сертификата OpenVPN и ключей для сервера. Это можно сделать следующей командой:

Внимание: Если ранее вы выбрали имя, отличное от server, вам придётся немного изменить некоторые инструкции. Например, при копировании созданных файлов в директорию /etc/openvpn вам придётся заменить имена на заданные вами. Вам также придётся изменить файл /etc/openvpn/server.conf для того, чтобы он указывал на корректные .crt и .key файлы.

Вывод опять будет содержать значения по умолчанию, переданные этой команде ( server ), а также значения из файла vars .

Согласитесь со всеми значениями по умолчанию, нажимая ENTER. Не задавайте challenge password. В конце процесса два раза введите y для подписи и подтверждения создания сертификата:

Далее создадим оставшиеся файлы. Мы можем сгенерировать сильные ключи протокола Диффи-Хеллмана, используемые при обмене ключами, командой:

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

Далее мы можем сгенерировать подпись HMAC для усиления способности сервера проверять целостность TSL:

Шаг 6. Создание сертификата и пары ключей для клиента

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

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

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

Для создания файлов без пароля для облегчения автоматических соединений используйте команду build-key :

В ходе процесса создания файлов все значения по умолчанию будут введены, вы можете нажимать ENTER. Не задавайте challenge password и введите y на запросы о подписи и подтверждении создания сертификата.

Шаг 7. Настройка сервиса OpenVPN

Далее настроим сервис OpenVPN с использованием созданных ранее файлов.

Копирование файлов в директорию OpenVPN Нам необходимо скопировать нужные нам файлы в директорию /etc/openvpn.

Сначала скопируем созданные нами файлы. Они находятся в директории

/openvpn-ca/keys , в которой они и были созданы. Нам необходимо скопировать сертификат и ключ центра сертификации, сертификат и ключ сервера, подпись HMAC и файл Diffie-Hellman:

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

Настройка конфигурации OpenVPN Теперь, когда наши файлы находятся на своём месте, займёмся настройкой конфигурационного файла сервера:

Адрес сети VPN сервера

Найдём секцию HMAC поиском директивы tls-auth . Удалите ";" для того, чтобы раскомментировать строку с tls-auth . Далее добавьте параметр key-direction и установите его значение в "0":

Далее найдём секцию шифрования, нас интересуют закомментированные строки cipher . Удалите ";" для раскомментирования строки AES-256-CBC :

Под этой строкой добавьте строку auth и выберите алгоритм HMAC. Хорошим выбором будет SHA512 :

Наконец, найдите настройки user и group и удалите ";" для раскомментирования этих строк:

Необходимо закомментировать следующие директивы. Найдите секцию redirect-gateway и добавьте ";" в начало строки:

Чуть ниже находится секция dhcp-option .

(Опционально) Настройка порта и протокола По умолчанию OpenVPN использует порт 1194 и протокол UDP для соединения с клиентами. Если вам необходимо изменить порт из-за каких-либо ограничений для ваших клиентов, вы можете сделать это изменив настройку port .

(Опционально) Использование кастомного имени сертификата и ключа Если во время использования команды ./build-key-server чуть выше вы указали параметр, отличный от vpnsrv2 , измените настройки cert и key , чтобы они указывали на правильные файлы .crt и .key . Если вы использовали vpnsrv2 , эти настройки должны выглядеть таким образом:

Сохраните и закройте файл.

Шаг 8. Настройка сетевой конфигурации сервера

Далее нам необходимо настроить сетевую конфигурацию сервера, чтобы OpenVPN мог корректно перенаправлять трафик.

Настройка перенаправления IP Сначала разрешим серверу перенаправлять трафик. Это ключевая функциональность нашего VPN сервера.

Настроим это в файле /etc/sysctl.conf :

Сохраните и закройте файл.

Для применения настроек к текущей сессии наберите команду:

Настройка правил UFW для сокрытия соединений клиентов Вам нужно установить файрвол UFW. Нам потребуется файрвол для манипулирования с входящим на сервер трафиком. Мы должны изменить файл настроек для сокрытия соединений (masquerading).

Это файл содержит настройки UFW, которое применяются перед применением правил UFW. Добавьте в начало файла выделенные красным строки. Это настроит правила, применяемые по умолчанию, к цепочке POSTROUTING в таблице nat и будет скрывать весь трафик от VPN:

Сохраните и закройте файл.

Теперь мы должны сообщить UFW, что ему по умолчанию необходимо разрешать перенаправленные пакеты. Для этого откройте файл /etc/default/ufw :

Найдите в файле директиву DEFAULT_FORWARD_POLICY . Мы изменим значение с DROP на ACCEPT :

Сохраните и закройте файл.

Открытие порта OpenVPN и применение изменений Далее настроим сам файрвол для разрешения трафика в OpenVPN.

Если вы не меняли порт и протокол в файле /etc/openvpn/server.conf , вам необходимо разрешить трафик UDP для порта 1194. Если вы изменили эти настройки, введите указанные вами значения. В моем случае это TCP порт 1194

Также добавьте ваш SSH порт

Теперь деактивируем и активируем UFW для применения внесённых изменений:

Теперь наш сервер сконфигурирован для обработки трафика OpenVPN.

Шаг 9. Включение сервиса OpenVPN

Мы готовы включит сервис OpenVPN на нашем сервере. Мы можем сделать это с помощью systemd.

Нам необходимо запустить сервер OpenVPN указав имя нашего файла конфигурации в качестве переменной после имени файла systemd. Файл конфигурации для нашего сервера называется /etc/openvpn/server.conf , поэтому мы добавим @server в конец имени файла при его вызове:

Убедимся, что сервис успешно запущен командой:

Если всё в порядке, настроем сервис на автоматическое включение при загрузке сервера:

Шаг 10. Создание инфраструктуры настройки клиентов

Далее настроим систему для простого создания файлов конфигурации для клиентов.

Создание структуры директорий конфигурации клиентов В домашней директории создайте структуру директорий для хранения файлов:

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

Создание базовой конфигурации Далее скопируем конфигурацию-пример в нашу директорию для использования в качестве нашей базовой конфигурации:

Откройте этот файл в вашем текстовом редакторе:

Сделаем несколько изменений в этом файле.

Сначала найдите директиву remote . Эта директива сообщает клиенту адрес нашего сервера OpenVPN. Это должен быть публичный IP адрес вашего сервера OpenVPN. Если вы изменили порт, который слушает сервер OpenVPN, измените порт по умолчанию 1194 на ваше значение:

Убедитесь, что протокол совпадает с настройками сервера:

Далее раскомментируйте директивы user и group удаляя ";":

Найдите директивы ca , cert и key . Закомментируйте эти директивы, так как мы будем добавлять сертификаты и ключи в самом файле:

Добавьте настройки cipher и auth согласно заданным в файле /etc/openvpn/server.conf :

Далее добавьте директиву key-direction в любое место в файле. Она должна иметь значение "1" для корректной работы сервера:

Создание скрипта генерации файлов конфигурации Теперь создадим простой скрипт для генерации файлов конфигурации с релевантными сертификатами, ключами и файлами шифрования. Он будет помещать сгенерированные файла конфигурации в директорию

Создайте и откройте файл make_config.sh внутри директории

Вставьте следующие текст в этот файл:

Сохраните и закройте файл.

Сделайте его исполняемым файлом командой:

Шаг 11. Генерация конфигураций клиентов

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

Если вы следовали всем шагам этой статьи, вы создали сертификат clientsrv2.crt и ключ клиента clientsrv2.key командой ./build-key clientsrv2 на шаге 6. Вы можете сгенерировать конфигурацию для этих файлов перейдя в директорию

/client-configs и используя только что созданный нами скрипт:

Если всё прошло успешно, мы должны получить файл clientsrv2.ovpn в директории

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

На первом сервере делаем все идентично, кроме следующих пунктов:

Интерфейс eth0 меняем на tun1 и адрес 10.8.1.0/24 на 10.8.0.0/24

Сохраните и закройте файл.

Перенаправление всего трафика через VPN сервер

Адрес сети VPN сервера

Протокол ставим udp4

Далее раскомментируйте следующие строки. Секция redirect-gateway :

и секция dhcp-option

также эту директиву

Прописываем правила маршрутизации на первом сервере:

Создадим скрипт /etc/openvpn/upstream-route.sh содержащий следующие команды:

Далее добавим их в файл конфигурации клиента который подключается ко второму серверу.

Также в этом файле необходимо указать чтобы OpenVPN клиент всегда занимал интерфейс tun1 :

Скопируем clientsrv2.ovpn в корневую папку OpenVPN и переиминуем его в client.conf

Настраиваем автозауск

Точно так же создаем инфраструктуру настройки клиентов. Шаг 10 И сгенерированный файл переносим на клиентскую машину.

Админу на заметку - 24. Как настроить несколько одновременных OpenVPN подключений в Windows

OpenVPN можно без преувеличения назвать "народной" технологией для организации виртуальных частных сетей, но мы не будем сейчас перечислять все достоинства данного решения, а поговорим о иных вещах. Очень часто возникает необходимость иметь одновременные соединения сразу с несколькими OpenVPN серверами и нужно это далеко не только админам и прочим техническим специалистам. Но, как оказалось, даже в этой среде не все знают как это сделать, не говоря уже о представителях иных, "мирных", профессий. Поэтому наша сегодняшняя заметка посвящена этому, на первый взгляд простому, вопросу.

А в чем, собственно, проблема? А в том, что на платформе Windows при установке OpenVPN по умолчанию мы можем иметь только одно активное соединение в один момент времени, при попытке выполнить второе подключение мы получим ошибку:

multiple-OpenVPN-connections-001.jpg

Но в этом случае даже не нужно ничего искать, причина неудачного соединения написана красным по белому: все TAP-адаптеры в этой системе уже используются. Действительно, при установке OpenVPN в системе создается только один TAP-адаптер. Что делать? Добавить нужное количество адаптеров, по числу необходимых одновременных соединений.

Для этого перейдем в C:\Program Files\TAP-Windows\bin, где обнаружим пакетный файл addtap.bat, для добавления в систему еще одного TAP-адаптера следует запустить его с правами Администратора.

multiple-OpenVPN-connections-002.jpg

Если вам нужно добавить более одного TAP-адаптера - запустите данный файл нужное количество раз. В данной директории также содержится файл deltapall.bat, который позволяет удалить из системы все установленные TAP-адаптеры.

В нашем случае мы добавили два адаптера, что позволило без проблем иметь три одновременных подключения к разным OpenVPN серверам:

multiple-OpenVPN-connections-003-1.jpg

Как видим - ничего сложного нет, поэтому надеемся, что данный материал окажется вам полезен и позволит использовать OpenVPN с полной отдачей.

Когда используешь openvpn клиент под windows существует ограничение на подключение только к одному серверу. Это связано с тем, что при установке openvpn создается только 1 tap адаптер, который обслуживает только одно vpn соединение.

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «DevOps практики и инструменты» в OTUS. Курс не для новичков, для поступления нужно пройти .

Если при активном соединении попробовать подключиться к еще одному серверу, то получаешь ошибку:

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

Как оказалось, обойти данное ограничение очень просто. После установки клиента openvpn в windows создается папка:

добавление tap адаптера openvpn

2 tap адаптера openvpn

Теперь нужно в папке

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

несколько openvpn подключений

Вот так просто решается задача создания нескольких активных openvpn подключений в windows.

Помогла статья? Подписывайся на telegram канал автора

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

Рекомендую полезные материалы по схожей тематике:

Онлайн курс "DevOps практики и инструменты"

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, научиться непрерывной поставке ПО, мониторингу и логированию web приложений, рекомендую познакомиться с онлайн-курсом «DevOps практики и инструменты» в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и установке Linux на виртуалку. Обучение длится 5 месяцев, после чего успешные выпускники курса смогут пройти собеседования у партнеров. Проверьте себя на вступительном тесте и смотрите программу детальнее по .
  • Подробная статья по настройке openvpn сервера на CentOS 7.
  • Как настроить web интерфейс для openvpn под Freebsd.

Автор Zerox

40 комментариев

Ну с подклчениями оно и понятно, а вот можно ли одновременно 2 службы опенвпн поднять на разных портах? udp и tcp

В Linux без проблем. Я постоянно это делаю. В Windows не знаю, не пробовал.

Так ( "c:\Program Files\OpenVPN\bin\tapctl.exe" create ) можно добавить адаптер в версии OpenVPN 2.5.3

Ну лично в моем случае не получилось найти волшебный батник которые решает проблему добавления доп. адаптера.
На сайте нашел инструкцию bit.ly/3bA6EI3

> tapinstall.exe install
Device node created. Install is complete when drivers are installed.
Updating drivers for from C:\Program Files\TAP-Windows\driver\OemVista.inf.
Drivers installed successfully.

refers to the driver identifier which is tap0901 for OpenVPN 2.2+, but may be different in older/newer OpenVPN versions.
is typically OemWin2k.inf (old tap-drivers) or OemVista.inf (newer tap-drivers). You need to specify the full path to this file, e.g.C:\Program Files\TAP-Windows\driver\OemVista.inf.

By installing multiple times, you will create additional TAP-Windows adapter instances, which can be used for multiple concurrent VPN tunnels. It is also possible to install using Control Panel -> Add New Hardware, and it is possible to uninstall using Control Panel -> System -> Hardware -> Device Manager.

Окей. Круто. Драйвера там были в папке, поэтому для меня команда вышла вот такая
tapinstall.exe install ..\driver\OemVista.inf tap0901

и вывод который говорил что все оке1
Device node created. Install is complete when drivers are installed.
Updating drivers for tap0901 from C:\Program Files\TAP-Windows\driver\OemVista.inf.
Drivers installed successfully.

Здравствуйте, уважаемый Zerox !

Представляете, то о чём мы когда-то говорили, я имею в виду цепочку из нескольких включённых файлов конфигурации, это была самая настоящая цепочка. Я это понял только потом. И вот сегодня мне потребовалось сделать такую цепочку. Я взял Вашу Инструкцию и .
И увидел, что OpenVPN уже не версия 2.4, а версия 2.5. И в этой версии этот замечательный способ не работает.
А как включить несколько файлов конфигурации в версии 2.5 я не знаю. Если Вы, уважаемый Zerox, что-нибудь об этом знаете, то дайте, пожалуйста,
знать нам, пользователям.

Я тоже не знаю. Не пользуюсь этим.

Автор, спасибо за статью. Много полезных разделов на вашем сайте.
При попытке подключения с одного компа к двум разным pptp серверам подключение возможно только одно. Приходится отключаться и чередовать подключения. Проблема понял так же в отсутствии свободного адаптера - как вы и описали. Подскажите - возможно ли 2 pptp подключения одновременно ?

Для pptp такого ограничения нет. Я могу подключиться по двум pptp соединениям одновременно. Та возможны проблемы с маршрутами, если они пересекаются.

Здравствуйте. Новый openvpn устанавливает в систему новое устройство - OpenVPN Wintun. Это устройство, как заявлено, способно увеличить скорость передачи шифрованных данных. Но, нигде не написано, как сделать так, чтобы openvpn использовало именно его, а не OpenVPN TUP, как сейчас. Не могли бы разместить на своем сайте информацию, если вы конечно разбираетесь в этом вопросе.

Пока еще не разбирался с этим вопросом, но надо будет заняться.

Здравствуйте. Я включил его. Скорость увеличилась в 2 раза. То есть, у меня 100 мегабит, openvpn максимум выжимал 30 мегабит. Сейчас с этим wintun поднимается выше 60 мегабит. К сожалению, я не могу написать здесь решение. Причина - отказ в помощи с вашей стороны. Все мои вопросы оставались без ответа. Прощайте.

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

Здравствуйте. А как объединить несколько VPN серверов в один? То есть, клиент на ПК 1, но он подключается к нескольким серверам одновременно? Аналогичным способом пытался, но второй не подключается. Что-то с tap проблемы.

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

Попробую разобраться. Но сейчас проблема - отсутствует папка Tap-Windows. Была, но после установки новой версии openvpn исчезла. Есть другой способ добавления еще одного tap?

В общем, новая версия openvpn не создает папку Tap-Windows. Пришлось поставить старую версию. Но в любом случае два одновременно подключения не удалось реализовать. Вот такая ошибка -

А вот такой вопрос возник. Допустим есть у меня 2 tap-адаптера и два конфига. Как указать что вот этот конфиг к этому адаптеру, а вон тот конфиг - вон к тому? Потому как со стороны операционки и дальнейших сервисов настройки этих адаптеров сильно различаются

Разобрался , накосячил в сертификатах клиентов, но ONO выдавло одинаковый адрес! Вот в чем прикол

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

Извините, но вопрос такой: клиенты получают один адрес? то есть сервер Openvpn выдает одинаковый адрес , как минимум 2 тестовым клиентам тоже openvpn под Windows. Пробовла менять диапазон в тоннеле, из другого диапазона все равно выдает идентичный. Как с этим бороться ?

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

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

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

Поэтому и написал, а то всю голову сломал, где только не искал, а оказалось на поверхности

Подскажите пожалуйста как решить задачку - две OpenVPN client службы на Windows?
Сейчас на виндовом серваке отлично автоматически поднимается один туннель, но возникла необходимость во втором, никак не могу это реализовать. Вручную поднять два соединения при помощи дополнительного TAP-интерфейса никаких проблем не вызывает, оба поднимаются, но это не вариант, т.к. нужно чтобы служба сама запускала их, а тут проблема - второй конфиг она не принимает.

Отвечаю сам себе, т.к. мне на другой площадке уже помогли - все что нужно, это поместить обе конфигурации с ключами в папку config без подпапок, а также ес-но необходимое количество TAP-интерфейсов, при запуске службы автоматически запускаются все конфигурации и их должно быть меньше или равно количеству интерфейсов.

Спасибо за информацию. Так и думал, что это как-то просто должно решаться, как и все в openvpn.

можете немного развернуть ответ для ламера?
создал второй tap-win-adapter
добавил в папку config вторую группу файлов с ключами. но при этом часть файлов имеет разные имена, а часть одинаковые, как быть?
может быть надо эту часть файлов переименовать и где-то руками прописать? подскажите плз если не трудно

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

То есть у вас для подключения идет комплект в виде файла конфигурации и файлов сертификатов. Имена файлов сертификатов прописаны в конфигурации. Сделайте все имена уникальные.

А что в файлах nat, doping и routes? Примерно представляю, но любопытно реализацию посмотреть.

С уважением, spb304

Я даже не знаю, как создать цепочку. Данное руководство к цепочке не имеет никакого отношения и ее не построит. Оно решает другую задачу. Для построения цепочки vpn подключений, надо продумать и организовать правильно маршруты на своем компьютере. Я никогда не пробовал это сделать.

Вы пишете "Оно решает другую задачу".
А какую задачу оно решает ?
Допустим, я создал два TAP-адаптера и вставил в папку "config"
два файла конфигурации. Я пробовал файлы конфигурации вставлять
по разному. Пробовал оба файла вставлять в общую папку "config".
Пробовал в общей папке "config" делать две папки: "config 1" и "config 2".
Результат всегда один и тот же. Всё прекрасно подключается.
Но я никак не могу взять в толк, как эти два соединения подключаются между собой.
Если Вы, уважаемый Zerox знаете, то подскажите пожалуйста.
Если сможете сделать рисунок, это будет совсем замечательно.
Заранее благодарю.

Я до конца не понимаю, что вы хотите сделать. Говорите о цепочке vpn подключений, но при этом остаетесь в рамках одного компьютера и пытаетесь как-то конфигурации менять местами.

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

В таком случае у вас получится цепочка выхода в интернет через 2 vpn соединения. Как это вы себе представляете цепочку в рамках одного компьютера, я не понимаю.

Недавно я научился делать цепочки из Прокси. Я хочу использовать VPN, Тор, Прокси, в общем всё то, что в Интернете обеспечивает честному человеку максимальную безопасность.
Хочу создать такой запутанный клубок соединений, который распутать смог бы только я.
А если это попытается сделать кто-то другой, то у него должно на распутывание уйти столько времени, что он сам откажется от этой затеи.
У меня на компьютере ещё установлена Виртуальная машина VirtualBox. Может быть и её как-то задействовать ? Думаю она в таком деле будет нелишней.
Так что, если Вы Zerox, в этом можете мне помочь, буду Вам очень признателен.

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

З.Ы. Несколько ремарок:
1) даже если разкидать фали .ovpn по разным подпапкам у них всеравно должны быть разные имена.
2) "Создать для каждого подключения отдельную папку и положить конфиг с сертификатами в нее." Справедливо только для ручного подключения. Если иcпользуется служба OpenVPN Service все файлы конфигурации и сертификати должны лежать в одной папке .\OpenVPN\config. Даная служба с подпапками работать не умеет.

В данной инструкции подробно описан процесс настройки клиента OpenVPN на примере операционных систем Windows и Linux. Также, с ее помощью можно настроить скиента на Android.

Установка

Windows

Заходим на официальную страницу загрузки openvpn и скачиваем клиента для нужной Windows:

Скачиваем OpenVPN для Windows

Запускаем скачанный файл и устанавливаем программу, нажимая «Далее».

Linux CentOS

Устанавливаем репозиторий EPEL:

yum install epel-release

yum install openvpn

Linux Ubuntu

apt-get install openvpn

Android

Установка выполняется из Google Play. Набираем в поиске OpenVPN Connect - нажимаем установить и принимаем условия.

Настройка

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

В системах Windows создаем файл config.ovpn в папке %programfiles%\OpenVPN\config.

* имя файла может быть любым, расширение должно быть .ovpn.

Для создания конфигурационного файла в Linux выполняем команду:

* чтобы служба openvpn автоматически выполняла соединение, необходимо, чтобы конфигурационный файл назывался client.conf.

Пример конфигурационного файла

client
dev tun
proto udp
remote 192.168.0.15 443
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
dh dh2048.pem
tls-client
tls-auth ta.key 1
float
keepalive 10 120
comp-lzo
verb 0

Параметры конфигурационного файла

Наиболее полный и актуальный список параметров для OpenVPN можно получить командой openvpn --help (в Linux и Windows).

Сертификаты

Клиентские сертификаты генерируются на стороне сервера. Процедура следующая.

Данная статья посвящена объеденению нескольких домашних локальных сетей с предоставлением прозрачного общего доступа к ресурсам сетей с помощью VPN. За реализацию VPN взята openvpn. Клиенты и сервер openvpn установлены на роутерах домашних сетей, в конкретном случае роутеры семейства asus wl500, но данный мануал вполне применим и другим роутерам где есть досуп к OS и можно поставить openvpn.

Хотя подобных руководств в Интернете пруд пруди, они написаны больше для администраторов, которые имеют большой опыт общения с *nix системами, в то время как пользователями домашних роутеров являются в основном не хакеры, а обычные юзеры, может быть впервые увидевшие коммандную строку Linux на том самом роутере. Я постараюсь писать так чтобы было понятно всем.


Для тех кто не любит много букв, чтобы было понятно о чём речь под катом, привожу картинку

Итак, ещё раз формализую задачу. У нас есть несколько сетей имеющих выход в Интеренет через роутер, нам нужно предоставить доступ к ресурсам сетей друг друга через шифрованный интернет-тунель.

Что там понадобится

  1. Роутеры семейства asus wl500
  2. Очень желательно снабдить роутеры usb-флешками, так как в роутере очень мало флеш и оперативной памяти, подойдёт совершенно любая, ну кроме уж совсем раритеного старья, то есть меньше 9Mb. Чем не отличный повод порадовать себя новой флешкой? :)
  3. Хотя бы один из роутеров должен выходить в Интеренет с реальным IP адресом, либо все роутеры должны быть в одном сегменте локальной сети провайдера.
  4. Сети за роутерами должны иметь разный диапазон адресов
  5. Немного времени и мозга

Настраивать роутеры нужно будет вместе, поэтому желательно иметь к ним доступ одновременно. Бегать из одной квартиры в другую не особо удобно, поэтому можно либо обеспечить доступ из Интернета к компьютерам за роутерами (как это сделал я), либо просто собрать роутеры в одной квартире и прицепить клиентские (ой забежал вперёд) роутеры к сервеному, тогда на месте их постоянной работы нужно будет только изменить адрес openvpn сервера.

Теория

Рассмотрим кратко как будет работать система. Сеть состоит из сервера (на рисунке это роутер Mars) и клиентов Earth и Mercury. Сервер обеспечивает функционирование виртуальной сети, шифрование трафика и маршрутизацию пакетов из одной сети в другой.

Более подробно работа сервера показана на следующем рисунке (рисунок очень условный, он только для общего понимания и не отражает компоненты программы). В клиентском режиме openvpn работает точно также, только не осуществляет маршрутизацию.


Итак у нас есть сеть с диапазоном адресов 192.168.1.1-192.168.1.255 за первым роутером (Mars) и с диапазоном 192.168.2.1-192.168.2.255 за роутером Earth. OpenVPN создаёт специальную виртуальную сетевую карту tun0, и пакеты попавшие туда рашифровываются и отправляются на сервер (на серверном компьютере локально, на клинетском через интеренет), где они расшифровывются и отправляются по нужным тунелям до адресата.

Практика

  • openvpn — ну это нетрудно догадаться :)
  • vim — текстовый редактор (тот который встроен в оболочку совершенно ни для чего не годится)
  • wget-ssl — понадобится для обновления записей в dns, если у сервера динамический внешний ip.

Пока пакеты устанавливаются мы немного отвлечемся от Линукса и сгенерим ключи для vpn соединения. Как это сделать под Windows (линуксоиды, думаю, уже в теме :) ) уже подробно рассматривалось на хабре, повторятся тут нет смысла, следует только добавить что ca.key надо бы убрать куда нибудь подальше, например записать на ненужную флешку., а флешку положить в сундук под 33 замка, так как зная ca.crt и ca.key можно спокойно подключится к вашей домашней сети, что ясно не входит в наши планы.

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

$vim /opt/etc/openvpn/keys/ca.crt
Потом нажимаем кнопку i, вставляем содержимое файла ca.crt. Тоже самое делаем с файлами dh2048.pem, mars.crt и mars.key.

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

$rm /opt/etc/openvpn/openvpn.conf
$vim /opt/etc/openvpn/openvpn.conf

tls-server
server 192.168.255.0 255.255.255.0
ifconfig 192.168.255.1 192.168.255.2

dh /opt/etc/openvpn/keys/dh1024.pem
ca /opt/etc/openvpn/keys/ca.crt
cert /opt/etc/openvpn/keys/home2.crt
key /opt/etc/openvpn/keys/home2.key

port 1194
proto udp

user nobody
group nobody

comp-lzo
persist-tun
persist-key
verb 3

log-append /opt/var/log/openvpn/openvpn.log
status /opt/var/log/openvpn/status.log

Создадим директорию в которой будет находится конфигурация для клиентов

В это директории необходимо создать файлы для тех клиентов за которыми будут находится объединяемые сети. В нашем случае это клиент Earth, создаём файл Earth

Он у нас будет состять всего из одной строчки

Эта строчка говорит openvpn куда отправлять пакеты для сети 192.168.2.0/24.

Всё, запускаем openvpn

Если всё ok, то вывод netstat -ul | grep 1194 дожен выдавать сторчку
udp 0 0 *:1194 *:*

а в файле /opt/var/log/openvpn/openvpn.log Появится запись об успешном запуске сервера.

Итак, сервер работает, надо дать возможность пакетам проходить через firewall.
Для этого:
$iptables -I INPUT -p udp --dport 1194 -j ACCEPT
$iptables -I FORWARD -i br0 -o tun0 -j ACCEPT
$iptables -I FORWARD -i tun0 -o br0 -j ACCEPT
$iptables -I INPUT -i tun0 -p tcp --dport 80 -j ACCEPT

Чтобы правила применялись каждый раз их надо добавить в файл /usr/local/sbin/post-firewall, а строчку /opt/etc/init.d/S20openvpn дописать в post-mount, чтобы сервер стартовал каждый раз при запуске роутера ($ обозначает прилашение командной строки, в файлы его вносить не надо!).

(Вы не забыли записать изменения в flashfs?)

На этом настройка сервера практически закончена. Единственное, если сервер имеет динамический ip, то надо позаботится чтобы клиенты знали какой IP сейчас имеет сервер. Для этого есть такая штука как DDNS, то есть динамический DNS. Asus имеет встроенную поддержку некоторых DDNS провайдеров, но не всех, например моего нет. Поэтому я написал простенький скрипт, который обновляет IP на DNS, если IP роутера изменился:

/sbin/ifconfig $IFACE > /dev/null 2>&1
if [ "$?" -ne "0" ]
then
logger "update_ip.sh: Interface $IFACE is down, exiting. "
exit 1
fi

new=`/sbin/ifconfig $IFACE|grep inet\ addr|sed -e 's/.*\ addr:\([0-9\.]*\).*/\1/'`

if [ -f $TMPFILE ]
then
old=`cat $TMPFILE`
else
touch $TMPFILE
old=" "
fi

if [ "$new" != "$old" ]
then
/opt/bin/wget --no-check-certificate "https://dynamicdns.park-your-domain.com/update?host=mars&domain=yourdomain&password=PASSWORD" > /dev/null 2>&1
logger "update_ip.sh: New ip $new detected"
echo $new > $TMPFILE
fi

Как поставить и настроить cron очень подробно написано тут: wl500g.info/showpost.php?p=52524&postcount=1

Конфиг клиента, в поле remote нужно вставить адрес сервера

client
dev tun
proto udp
remote mars.yourdomain 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca /opt/etc/openvpn/keys/ca.crt
cert /opt/etc/openvpn/keys/Earth.crt
key /opt/etc/openvpn/keys/Eartth.key
ns-cert-type server
comp-lzo
verb 3
log-append /opt/var/log/openvpn/openvpn.log
status /opt/var/log/openvpn/status.log

Аналогично применяем правила iptables:
$iptables -I FORWARD -i br0 -o tun0 -j ACCEPT
$iptables -I FORWARD -i tun0 -o br0 -j ACCEPT
$iptables -I INPUT -i tun0 -p tcp --dport 80 -j ACCEPT

Запускаем openvpn на клиенте, он соединеятся с сервером и радуемся жизни. Можно смотреть фильмы, фотографии и рубится в игры как по локалке.

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

Ну, надеюсь это будет кому-то полезно, я что-то устал писать этот эпический мануал.

В качестве домашнего задания подключите компьютер Mercury, чтобы он имел доступ к локальным ресурам из любого места, например по gprs или публичного wifi.

В качестве advanced домашнего задания, отнимите у mercury возможность подсоединятся к сети, изменив только конфигурацию Mars.

Читайте также: