Установка и настройка openvpn ubuntu 16.04. Маршрутизация и внешние скрипты. Установка файлов конфигураций клиентов

Технология VPN хорошо известна как способ безопасного доступа к закрытым ресурсам компаний, а также различному контенту, будь то аудио, видео или архивные документы. Она позволяет создать приватную сеть, перенаправляя документы на один компьютер ресурсами другого или нескольких. Virtual Private Network широко используется во всех современных браузерах. Без неё редко обходится удалённая работа сотрудника крупной и важной организации. Настройка OpenVPN Ubuntu актуальна не только для технических специалистов и поборников высокой безопасности, но и всех тех, кто не желает мириться с высокой стоимостью лицензионного контента в странах, где доступ к нему ограничен.

В Linux настройка виртуальных сетей тонкая.

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

Установка OpenVPN - это применение свободно распространяемой технологии виртуальных частных сетей. Она возможна как в Windows, так и в Linux-образных ОС. Поскольку в среде Linux тонкая настройка всех параметров этой функции проще, мы рассмотрим именно её. Тема Виртуальных Частных сетей широко освещается на множестве тематических сайтов и форумов, благодаря чему приобщится к ней смогли как профессионалы, так и новые приверженцы технологий безопасности во всём мире. Установка OpenVPN Ubuntu позволяет не только повысить уровень сохранности личных данных, но и правильно организовать свою деятельность в сети.

Зачем использовать именно ВПН, а не другие способы защиты личной информации? Этот способ достаточно настроить лишь однажды. Все данные будут автоматически проходить через сервер частной сети, сразу в зашифрованном виде.

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

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

  1. Вы используете для доступа в интернет-соединение со слабой защитой.
  2. В месте вашего пребывания действует цензура на доступ к информации.
  3. Вы находитесь в месте с точками доступа Wi-Fi для общественного пользования.
  4. Вам нужно хорошо скрыть своё местонахождение от других пользователей сети.
  5. Вы хотите ещё лучше защитить свои личные данные и пароли.

СОВЕТ. Сеть VPN называется виртуальной, поскольку все её элементы объединены с помощью программного обеспечения, которое применяет виртуальные соединения.

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

Базовые понятия

Туннель - это безопасное, защищённое соединение, которое использует ресурсы небезопасной сети (в этом случае интернета), и позволяет обмениваться информацией по частному каналу, настроенному только на доверенные устройства.

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

Сервер - компьютер или место, где хранятся учётные записи пользователей виртуальной частной сети. Использование сервера позволяет ускорить работу программ и уменьшить трафик (объём передаваемых данных).

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

Переходим к практике

Чтобы выполнить настройку своего сервера OpenVPN Ubuntu, потребуется приобрести свой сервер с установленной Ubuntu Linux. На нём необходимо получить права root . В настоящее время приобрести решение можно по невысокой цене, а количество компаний, которые предлагают такие услуги - всё больше. Сама по себе установка OpenVPN Ubuntu не потребует значительных затрат времени.

Приступаем к установке и настройке

Для начала необходимо подключиться к серверу и дать ему такие команды :

«apt-get update
apt-get install openvpn»

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

«cd /tmp
wget https://github.com/OpenVPN/easy-rsa/archive/master.zip
apt-get install unzip
unzip master.zip
cd easy-rsa-master
./build/build-dist.sh
tar xvzf ./EasyRSA-git-development.tgz
cd EasyRSA-git-development»

«./easyrsa init-pki
./easyrsa build-ca
./easyrsa build-server-full server
./easyrsa build-client-full client1
./easyrsa gen-dh»

После генерации необходимо перенести полученные данные в /etc/openvpn/:

«mv ./pki/dh.pem /etc/openvpn/dh.pem
mv ./pki/private/client1.key /etc/openvpn/
mv ./pki/private/server.key /etc/openvpn/
mv ./pki/ca.crt /etc/openvpn/
mv ./pki/issued/client1.crt /etc/openvpn/
mv ./pki/issued/server.crt /etc/openvpn/»

Создайте в том же каталоге файл server.conf с такими параметрами:

«mode server
dev tun
server 10.128.0.0 255.255.255.0
push «redirect-gateway def1»
push «dhcp-option DNS 8.8.8.8»
tls-server
ca ca.crt
cert server.crt
key server.key
dh dh.pem
proto tcp-server
port 1194
client-to-client
comp-lzo
keepalive 10 120
verb 4
cipher AES-256-CBC
user nobody
group nogroup
max-clients 10»

Проведите запуск

«service openvpn start»

«mkdir vpn
cd vpn
scp vpn-server:/etc/openvpn/client1.crt ./
scp vpn-server:/etc/openvpn/client1.key ./
scp vpn-server:/etc/openvpn/ca.crt ./»

Здесь в строке remote требуется написать IP-адрес сервера так, как показано в примере.

«client
proto tcp
dev tun
remote 123.45.67.89 1194
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
cipher AES-256-CBC
comp-lzo
verb 3»

«sudo openvpn —config client.conf»

В соседнем окне терминала необходимо ввести команду:

«ping 10.128.0.1
traceroute mail.ru»

Если всё было сделано правильно, вы обнаружите, что 10.128.0.1 успешно пингуется. Однако отправки пакетов получателю происходить не будет, так как на сервере не настроен NAT. Нам ещё потребуется выполнить этот шаг.

На сервере необходимо открыть файл с названием /etc/sysctl.conf и убрать знаки комментария со строки «net.ipv4.ip_forward=1», сделав её активной.

«echo1>>/proc/sys/net/ipv4/conf/all/forwarding»

Затем необходимо ввести:

«iptables -A FORWARD -s 10.128.0.0/24 -j ACCEPT
iptables -A FORWARD -d 10.128.0.0/24 -m state \
—state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.128.0.0/24 \
-j SNAT —to-source (адрес сервера)»

«iptables-save > /etc/iptables.rules»

Также необходимо проверить, что в файле «/etc/network/interfaces» записана строка «pre-up iptables-restore < /etc/iptables.rules». Перезагрузите сервер OpenVPN, чтобы настраивать его дальше.

Вы должны завершить настройку VPN через Network Manager. Для этого необходимо ввести команду «sudoapt-get install network-manager-openvpn-gnome». Вы можете записать в конфигурацию все файлы, указанные ранее в текстовом виде.

На этом настройка OpenVPN-сервера в Ubuntu завершена! Если у вас возникли какие-либо проблемы - не стесняйтесь спрашивать в комментариях или искать подробности на тематических форумах! Linux - сложная и многогранная система, которая редко поддаётся новичкам сразу. Но при должном рвении осилить её возможно. И тогда перед пользователем открывается миллион новых возможностей, которые ранее были вне поля зрения.

VPN (Virtual Private Network) – это технология, позволяющая объединять компьютеры через интернет так, как будто они находятся в одной локальной сети. В результате мы можем объединять в одну сеть офисы, расположенные в разных городах и странах.
Установив VPN-сервер дома, а клиентскую часть на смартфон, можно выходить в интернет через публичные точки WiFi не боясь, что ваши пароли будут перехвачены.
Аренда сервера в в зарубежном дата-центре стоит от 5$ в месяц и разместив VPN в американском регионе мы получаем доступ к Spotify, Pandora, Hulu и другим сервисам, недоступным в вашей стране, да и цензура в интернет вас больше не касается.

1. Установим OpenVPN.

Обновим наш сервер и установим OpenVPN и центр сертификации.

Sudo apt update sudo apt upgrade sudo apt install openvpn easy-rsa

OpenVPN это виртуальная частная сеть, использующая для шифрования трафика TLS/SSL. А это означает, что нам потребуются доверенные сертификаты.

2. Настройка центра сертификации

Настроим центр сертификации.

Make-cadir ~/openvpn-ca cd ~/openvpn-ca nano vars

Найдем следующий фрагмент:

. . . . . export KEY_COUNTRY="US" export KEY_PROVINCE="CA" export KEY_CITY="SanFrancisco" export KEY_ORG="Fort-Funston" export KEY_EMAIL="[email protected]" export KEY_OU="MyOrganizationalUnit" . . . . .

и заменим на свои данные

. . . . . export KEY_COUNTRY="RU " export KEY_PROVINCE="SPb " export KEY_CITY="Sankt-Peterburg " export KEY_ORG="сайт " export KEY_EMAIL="admin@сайт " export KEY_OU="IT " . . . . .

Несколькими строками ниже поменяем значение KEY_NAME

Export KEY_NAME="server" cd ~/openvpn-ca source vars

В ответ система должна выдать:

NOTE: If you run ./clean-all, I will be doing a rm -rf on /home/sammy/openvpn-ca/keys

На всякий случай очистим каталог от всех ключей:

./clean-all

и создадим корневой центр сертификации:

./build-ca

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

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

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

Сперва создадим сертификат OpenVPN и ключи для сервера. Для этого запустим следующую команду:

./build-key-server server

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

./build-dh

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

Openvpn --genkey --secret keys/ta.key

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

Рассмотрим процедуру создания ключа и сертификата для клиента client1. Если клиентов несколько, процесс создания аналогичен Для автоматического соединения мы создадим файл без пароля. Используем команду build-key:

Cd ~/openvpn-ca source vars ./build-key client1

5. Настройка сервиса OpenVPN

Скопируем созданные файлы (сертификат и ключ центра сертификации, сертификат и ключ сервера, подпись HMAC, файл Diffie-Hellman) из директории ~/openvpn-ca/keys в /etc/openvpn

Cd ~/openvpn-ca/keys sudo cp ca.crt ca.key server.crt server.key ta.key dh2048.pem /etc/openvpn

Gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf sudo nano /etc/openvpn/server.conf

Найдем раздел HMAC и раскомментируем строку с tls-auth, а также добавим параметр key-direction:

Tls-auth ta.key 0 # This file is secret key-direction 0

Затем ищем раздел шифрования и раскомментируем строку с шифром AES-128-CBC и после нее добавим алгоритм HMAC:

Cipher AES-128-CBC auth SHA256

И в заключении найдем строки user и group и раскомментируем их:

User nobody group nogroup

6. Включение сервиса OpenVPN

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

sudo nano /etc/sysctl.conf

Найдите и раскомментируйте строку:

net.ipv4.ip_forward=1

Чтобы применить измененные настройки выполните:

sudo sysctl -p

Пропишем как будет запускаться наш сервер. Так как имя конфигурационного файла server.conf дадим такую команду:

sudo systemctl start openvpn@server

Проверим запустился ли сервер:

sudo systemctl status openvpn@server

и поднялся ли интерфейс tun

ip addr show tun0

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

sudo systemctl enable openvpn@server

7. Скрипт для настройки клиентов.

mkdir -p ~/client-configs/files chmod 700 ~/client-configs/files cp /usr/share/doc/openvpn/ examples/sample-config-files/ client.conf ~/client-configs/base.conf

Внесём некоторые изменения в файл base.conf

nano ~/client-configs/base.conf . . . # The hostname/IP and port of the server. # You can have multiple remote entries # to load balance between the servers. remote server_IP_address 1194 . . .

Вместо server_IP_address пропишем ip-адрес нашего сервера OpenVPN.

proto udp user nobody group nogroup

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

# SSL/TLS parms. # See the server config file for more # description. It"s best to use # a separate .crt/.key file pair # for each client. A single ca # file can be used for all clients. #ca ca.crt #cert client.crt #key client.key

Приведем настройки клиентской части к аналогичным настройкам сервера.

Проверьте на вашей клиентской системе наличие файла /etc/openvpn/update-resolv-conf. Если он есть, последние три строки нужно раскомментировать.

cipher AES-128-CBC auth SHA256 key-direction 1 # script-security 2 # up /etc/openvpn/update-resolv-conf # down /etc/openvpn/update-resolv-conf

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

Nano ~/client-configs/make_config.sh

Вставим текст:

#!/bin/bash # First argument: Client identifier KEY_DIR=~/openvpn-ca/keys OUTPUT_DIR=~/client-configs/files BASE_CONFIG=~/client-configs/base.conf cat ${BASE_CONFIG} \ <(echo -e "") \ ${KEY_DIR}/ca.crt \ <(echo -e "\n") \ ${KEY_DIR}/${1}.crt \ <(echo -e "\n") \ ${KEY_DIR}/${1}.key \ <(echo -e "\n") \ ${KEY_DIR}/ta.key \ <(echo -e "") \ > ${OUTPUT_DIR}/${1}.ovpn

Сохраним и закроем файл, после этого сделаем его исполняемым:

Chmod 700 ~/client-configs/make_config.sh

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

cd ~/client-configs ./make_config.sh client1

Проверим что получилось:

Ls ~/client-configs/files

в результате мы должны получить файл

Client1.ovpn

с настройками соединения,сертификатами и ключом.

Данный файл нужно доставить на клиентский компьютер, используя защищенное соединение. В Linux можно воспользоваться командой scp. На клиентском компьютере запустим:

Scp viktor@openvpn_server_ip :client-configs/files/client1.ovpn ~/

Копируем файл «client1.ovpn» c удаленного сервера на локальный компьютер.

9. Установка файлов конфигураций клиентов

Последующие действия будем выполнять только на клиентском компьютере c Ubuntu. Установим OpenVPN.

Sudo apt-get update sudo apt-get install openvpn

Проверим, есть ли на нашей системе файл /etc/openvpn/update-resolv-conf

Ls /etc/openvpn

Если при выводе мы получаем:

Update-resolve-conf

отредактируем файл конфигурации client1 .ovpn, который мы скачали с сервера

Nano client1 .ovpn

Раскомментируем следующие строки:

Script-security 2 up /etc/openvpn/update-resolv-conf down /etc/openvpn/update-resolv-conf

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

Теперь пробуем запустить соединение:

Sudo openvpn --config client1 .ovpn

Если вы сделали все правильно, то в результате подключитесь к серверу.

Хотите иметь безопасный и защищённый доступ в Интернет с вашего смартфона или ноутбука при подключении к незащищённой сети через WiFi отеля или кафе? Виртуальная частная сеть (Virtual Private Network, VPN) позволяет использовать незащищённые сети таким образом, как если бы вы работали в частной сети. Весь ваш трафик в этом случае проходит через VPN-сервер.

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

Передать профиль с компьютера на телефон можно подключив Android устройство к компьютеру через USB и скопировав файл. Вы также можете переместить файл профиля с помощью SD карты, скопировав профиль на карту и вставив карту в Android устройство.

Запустите приложение OpenVPN и нажмите на меню для импорта профиля.

Соединение

Для установки соединения нажмите кнопку Connect . Вам будет задан вопрос, доверяете ли вы приложению OpenVPN. Ответьте OK для установки соединения. Для остановки соединения зайдите в приложение OpenVPN и выберите Disconnect .

Шаг 13. Тестирование VPN соединения

После того, как всё установлено и настроено, убедимся, что всё работает правильно. Без установки соединения с VPN откройте браузер и зайдите на DNSLeakTest .

Этот сайт вернёт IP адрес, назначенный вам вашим Интернет-провайдером. Для того, чтобы проверить, какие DNS сервера используются, нажмите на Extended Test .

Теперь установите соединение, используя ваш VPN клиент и обновите страницу в браузере. Выдаваемый вам IP адрес должен быть совершенно другим. Теперь для всех в Интернете вы используете этот новый IP адрес. Нажмите Extended Test ещё раз, чтобы проверить ваши настройки DNS и убедитесь, что теперь вы используете DNS сервера вашего VPN.

Шаг 14. Отзыв клиентских сертификатов

Время от времени, вам может понадобиться отозвать клиентский сертификат для предотвращения доступа к серверу VPN&

Для этого зайдите в вашу директорию центра сертификации и введите команды:

  • cd ~/openvpn-ca
  • source vars
  • ./revoke-full client3

Вывод результатов работы этой команды будет оканчиваться ошибкой 23. Это нормально. В результате работы будет создан файл crl.pem в директории keys с необходимой для отзыва сертификата информацией.

Переместите этот файл в директорию /etc/openvpn:

  • sudo cp ~/openvpn-ca/keys/crl.pem /etc/openvpn
  • sudo nano /etc/openvpn/server.conf

Добавьте в конец файла строку crl-verify . Сервер OpenVPN будет проверять список отозванных сертификатов каждый раз, когда кто-то устанавливает соединение с сервером.

/etc/openvpn/server.conf

Crl-verify crl.pem

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

Перезапустите OpenVPN для завершения процесса отзыва сертификата:

  • sudo systemctl restart openvpn@server

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

Для отзыва дополнительных сертификатов выполните следующие шаги:

    Сгенерируйте новый список отозванных сертификатов используя команду source vars в директории ~/openvpn-ca и выполняя команду revoke-full с именем клиента.

    Скопируйте новый список отозванных сертификатов в директорию /etc/openvpn перезаписав тем самым старый список.

    Перезапустите сервис OpenVPN.

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

Заключение

Поздравляем! Теперь вы можете безопасно выходить в Интернет, весь ваш трафик защищён от прослушки цензоров и злоумышленников.

Для конфигурации дополнительных клиентов повторите шаги 6 и 11-13 для каждого нового устройства. Для отзыва доступа того или иного клиента используйте шаг 14 .

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

И вот недавно я обратил внимание на то, что среди барахла, хранящегося в /etc/init.d , скромненько притаился скрипт с именем . «Ну и чё?» — тут же спросит опытный администратор. Всё дело в том, что до недавних пор поднятие сетевых интерфейсов, в том числе и TUN , я организовывал исключительно через /etc/network/interfaces , оперируя опциями pre-up для запуска демона OpenVPN и опциями pre-down для его останова. Всё это «безобразие» повсеместно разбавлялось различными командами, манипулирующими таблицами маршрутизации... В общем, довольно громоздкая картинка получалась. В принципе, всё работало вполне себе прилично, но раз есть предоставленный разработчиками иной (Ubuntu-way?) путь, то почему бы им не воспользоваться, тем более, что это позволит значительно разгрузить /etc/network/interfaces . Итак, что у меня получилось.

Установка OpenVPN

Установка OpenVPN в Ubuntu не требует каких-либо финтов ушами:

$ sudo apt-get install openvpn

Обязательно подтвердите установку всех зависимостей.

Тем же, кому хочется/нужно установить OpenVPN из исходных кодов, придётся ознакомиться с .

Если вас интересуют бинарные пакеты под другие платформы, посетите .

Размещение файлов ключей

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

  • закрытый ключ шифрования клиента в формате .pem (назовём файл client.key );
  • подписанный центром сертификации сертификат клиента в формате .pem , (назовём файл client.crt );
  • сертификат центра сертификации сервера в формате .pem , которым был подписан файл client.crt (назовём файл ca.crt )

Получив ключ и сертификаты, обязательно позаботьтесь об их безопасности. Хорошим решением будет размещение всего этого добра на флешке, зашифрованной, например, . В этой статье будем полагать, что ключи и сертификаты размещены в каталоге /media/keys . Также, обязательно оставьте минимум прав доступа к каталогу с ключом и сертификатами:

$ sudo chown -R root.root /media/keys
$ sudo chmod 0700 /media/keys
$ sudo chmod 0600 /media/keys/*
# ls -la /media/keys
drwx------ 2 root root 1024 2010-08-18 15:32 .
drwx------ 5 root root 1024 2010-08-18 15:24 ..
-rw------- 1 root root 1265 2010-08-18 22:27 ca.crt
-rw------- 1 root root 3821 2010-08-18 15:13 client.crt
-rw------- 1 root root 887 2010-08-18 15:13 client.key

Файл конфигурации

Фалы конфигурации OpenVPN, как правило, располагаются в каталоге или /usr/local/etc/openvpn . В этой статье я предполагаю, что вы установили OpenVPN из репозитариев Ubuntu и каталогом для хранения конфигурации является .

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

Допустим, что сервер, к которому вы подключаетесь, называется myvpnsrv.com . Достаточно удобно называть файлы конфигурации (их может быть несколько, если вы пользуетесь несколькими подключениями или несколькими вариантами какого-либо подключения) в соответствии с именами серверов. Так, в нашем примере файл конфигурации будет находится в /etc/openvpn/myvpnsrv.conf со следующим содержанием:

client
remote myvpnsrv.com
ca /media/keys/ca.crt
key /media/keys/client.key
cert /media/keys/client.crt
daemon
dev tun
proto udp
comp-lzo

Первая строка сообщает OpenVPN, что подключение будет осуществляться в режиме клиента.

Значение параметра remote определяет имя хоста или IP-адрес сервера.

Значения параметров ca , keys и cert определяют пути к файлу сертификата CA, закрытому ключу и сертификату клиента соответственно.

Указанием параметра daemon мы заставляем OpenVPN отцепиться от консоли и работать в фоновом режиме.

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

Параметр proto определяет протокол, в который будет заворачиваться шифрованный трафик. использовать UDP.

Наличие параметра comp-lzo заставляет OpenVPN сжимать трафик, что очень полезно при наличии «узкого» канала передачи данных.

Маршрутизация и внешние скрипты

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

Сразу же отметьте себе один тонкий момент. Для того, чтобы OpenVPN-демон смог запускать внешние программы, ему необходимо это явно разрешить делать, передав параметр script-security со значением, не ниже 2. Безопасность, однако.

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

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

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

Формат вызова внешней программы демоном OpenVPN при инициализации tun-интерфейса следующий:

tun_dev tun_mtu link_mtu ifconfig_local_ip ifconfig_remote_ip

  • tun-dev — имя сетевого интерфейса, например tun1;
  • tun_mtu — MTU сетефого интерфейса;
  • link_mtu — MTU соединения;
  • ifconfig_local_ip — IP-адрес клиента (на «нашей» стороне);
  • ifconfig_remote_ip — IP-адрес клиента (на стороне сервера);
  • init — передаётся в случае, если программа вызывается во время запуска демона;
  • restart — передаётся, если программа вызывается во время перезапуска демона (например, если была потеря связи);

Для tap-интерфейса формат тот же, за исключением того, что вместо ifconfig_remote_ip передаётся ifconfig_netmask , содержащий маску подсети, в которой находится наш клиент.

Также, следует отметить, что все параметры, которые вы будете передавать внешней программе, при помощи up /down , будут подставлены перед параметрами, перечисленными выше.

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

#!/bin/bash case ${1} in "up") case ${2} in "tun0") ip rule add ... ip route add ... ;; "tun1") ip rule add ... ip route add ... ;; esac ;; "down") case ${2} in "tun0") ip rule del ... ip route del ... ;; "tun1") ip rule del ... ip route del ... ;; esac ;; esac

А вызов скрипта осуществляется двумя параметрами OpenVPN:

up "/usr/local/bin/routes.sh up"
down "/usr/local/bin/routes.sh down"

То есть, запускаемый скрипт получает примерно такие параметры:

  • $1 up или down ;
  • $2 — имя интерфейса. В рассматриваемой мной системе им может быть tun0 или tun1 ;
  • $3 — например, 1500;
  • $4 — например, 1542
  • $5 — например, 10.8.0.5
  • $6 — например, 10.8.0.6
  • $7 init или restart (параметр мной полностью игнорируемый, так что манипуляции с маршрутами выполняются всегда, даже если сетевой интерфейс не был отключён, а всего лишь имел место «штатный» перезапуск демона в связи с отсутствием связи).

Само-собой разумеется, можно (и нужно) использовать значения параметров $3 — $6. Например, если вы хотите какую-то часть трафика «завернуть» через VPN-туннель, то можно в скрипте использовать что-то вроде:

ip route add from 192.168.0.0/24 via ${6}

используя значение переменной $6, чтобы определить адрес маршрутизатора, через который необходимо направлять трафик.

Запуск и останов демона

Собственно, к чему все эти танцы с вызовом внешних скриптов и отказом от старого-доброго /etc/network/interfaces ? А вот к чему.

Откройте файл /etc/default/openvpn и в переменной AUTOSTART укажите имя файла (или нескольких, через пробел) конфигурации из каталога , откусив расширение «.conf». Для нашего примера это будет выглядеть так:

AUTOSTART="myvpnsrv"

Или же, если нужно, чтобы OpenVPN выполнил подключения на основе всех найденных файлов конфигурации:

Теперь «достаточно одной таблэтки» в виде:

sudo service openvpn start

и скрипт из /etc/init.d/openvpn заботливо запустит OpenVPN для всех найденных конфигураций.

Остановка демона также не очень сложна:

sudo service openvpn stop

И напоследок. Если вам понадобилось, чтобы ни один из существующих в конфигурационных файлов не обрабатывался, достаточно определить в /etc/default/openvpn .

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

Возможности OpenVPN:

  • Предустановленный ключ - самый простой метод аутентификации.
  • Сертификатная аутентификация - наиболее гибкий в настройках метод.
  • С помощью логина и пароля - может использоваться без создания клиентского сертификата (серверный сертификат всё равно нужен).
  • Сжатия трафика с помощью lzo.
  • Использование на выбор TCP/UDP протокола.
  • Использование IP tunneling/Ethernet tunnel.

Для установки выполним команду:

apt-get install openvpn

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

Нам потребуется:

  • Сертификат сервера, ключ сервера(секретный).
  • Сертификат клиента, ключ клиента(секретный).
  • Ключ Диффи Хельман для TLS сессии.
  • Сертификат CA (Создадим центр сертификации для подписки сертификата сервера и клиента,данный способ удобен для управления сертификатами).
  • Ключ CA (очень секретный).
  • Последний ключ для TLS-аутентификации(подпись HMAC).

Не пугайтесь сразу, если вы не очень сильны в сертификатах за вас все придумали. В состав OpenVPN входит набор скриптов для генерации сертификатов easy-rsa расположенный в /usr/share/easy-rsa/ . Мы создадим папку и перенесем для удобства easy-rsa в /etc/openvpn/easy-rsa .

mkdir /etc/openvpn/easy-rsa
cp -r /usr/share/easy-rsa /etc/openvpn/easy-rsa

Export KEY_SIZE=2048 #Размер ключа. export CA_EXPIRE=3650 #Время действия сертификата CA,дней. export KEY_EXPIRE=3650 #Время действия сертификата, дней. export KEY_COUNTRY="US" #Страна export KEY_PROVINCE="CA" #Используется только в США export KEY_CITY="SanFrancisco" #Город export KEY_ORG="Fort-Funston" #Организация export KEY_EMAIL="[email protected]" #Почта сервера. export KEY_OU="MyOrganizationalUnit" #Мое Подразделение.

export KEY менять не обязательно, в процессе генерации сертификатов и ключей вы можете вести данные вручную. Запускаем оболочку скрипта и генерируем CA сертификат:

cd /etc/openvpn/easy-rsa/
source vars
./clean-all # Очистит все сертификаты в папке /etc/openvpn/keys.
./build-ca

Создадим теперь сертификат и ключ сервера:

./build-key-server server

Заполняем поля, на вопросы A challenge password : , An optional company name : отвечаем N. Подписываем сертификат Sign the certificate? отвечаем y.

./build-dh

Ключ TLS-аутентификации:

openvpn —genkey —secret keys/ta.key

Последняя цель ключ и сертификат клиента. Это можно сделать как на сервере и передать клиенту ключ по ЗАЩИЩЕННОМУ каналу или с генерировать на клиентской машине и подписать центром сертификации сервера. Для простоты мы будем с генерируем все на сервере и передадим ключ и сертификат потом клиенту.

./build-key user # Если у вас много клиентов, по аналогии меняем имена user1,user2 и т.д.

Можно создать и защищенный паролем ключ клиента командой ./build-key-pass user .

Клиенту понадобятся следующие ключи:

  • user.crt
  • user.key
  • ca.crt
  • ta.key

Теперь перейдем к настройке файла конфигурации сервер OpenVPN. Пример конфига лежит в /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz , можем его скопировать в папку с openvpn или создать новый:

nano /etc/openvpn/server.conf

Mode server port 1194 #Порт. proto udp #Протокол. dev tun #Тип соединения. ca ca.crt #Путь к сертификату. cert server.crt key server.key #Путь к ключу сервера. dh dh2048.pem #Путь к dh. server 10.0.0.1 255.255.255.0 ifconfig-pool-persist ipp.txt # файл, в котором будут храниться связи "профиль клиента, выделенный ip-адрес". keepalive 10 120 # устанавливаем количество секунд для ping и ping-restart соответственно. comp-lzo #Включаем компрессию трафика persist-key #при получении сигнала SIGUSR1 или срабатывания ping-restart не нужно перечитывать сертификаты, так как у сервера не хватит привелегий persist-tun # Тоже самое для туннеля. status openvpn-status.log log /var/log/openvpn.log verb 3 #Детализация логов 0-11. tls-auth ta.key 0 #tls авторизация cipher AES-256-CBC #официально рекомендованное шифрование или AES-128-CBC. auth SHA512 # По умолчанию используется SHA1 что уже не так безопасно. #client-to-client позволяет клиентам VPN-сервера связываться друг с другом. max-clients 5 # ограничение максимального числа одновременно подключенных клиентов #Понизить права vpn-сервера для большей безопасности user nobody group nogroup

Запускаем сервере и если все хорошо то появиться интерфейс tun0:

root@debian:/# service openvpn start (restart)

Если возникли какие то проблемы смотрим журнал и разбираемся:

journalctl | grep ovpn-server

Теперь нам надо настроить клиента для подключения к серверу. Для примера я покажу настройку на Windows. Для начало качаем сам клиент с официального сайта(https://openvpn.net/). После установки нам придется сделать файл конфигурации который имеет вид *.ovpn и создать его можно в любом текстовом редакторе.

client.ovpn :

Client proto udp port 1194 dev tun remote 192.168.0.1 #Адрес сервера OpenVPN. ca ca.crt cert client.crt key client.key tls-auth ta.key 1 auth SHA512 cipher AES-256-CBC comp-lzo

Возможно вам потребуется выход в интернет через VPN. Для этого на сервере нужно разрешить форвардинг:

Включаем форвардинг в ядре, в файле /etc/sysctl.conf раскомментируем строчку:
net.ipv4.ip_forward=1

Чтобы не перезагружаться сообщаем ядру о включении форвардинга:
echo 1 > /proc/sys/net/ipv4/conf/all/forwarding

Теперь нужно еще настроить iptables для прохождения пакетов NAT :

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

В файл конфигурации OpenVPN нужно добавить:

Push "redirect-gateway" # при успешном подключении к серверу, клиенту будет установлен новый default-gateway от vpn-сервера. push "dhcp-option DNS 8.8.8.8" # передать адрес DNS сервера.

На этом основная настройка закончена. Приятного использования.