Настройка сервера OpenVPN в Ubuntu 14.04

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

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

OpenVPN – это полнофункциональное открытое средство VPN SSL, которое поддерживает широкий спектр конфигураций. В этом мануале вы научитесь настраивать сервер OpenVPN на вашем выделенном сервере, а также настраивать доступ к Windows, OS X, iOS и Android.

Требования

Для работы вам нужен сервер Ubuntu 14.04, полностью настроенный по этому мануалу.

1: Установка и настройка среды OpenVPN

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

Установка и настройка OpenVPN

Для начала установите пакет OpenVPN на сервер. Пакет OpenVPN доступен в репозиториях Ubuntu по умолчанию, поэтому для установки можно использовать apt. Также вам понадобится пакет easy-rsa, который поможет создать внутренний центр сертификации (ЦС или CA) для VPN.

Обновите индекс пакетов и установите необходимые программы:

apt-get update
apt-get install openvpn easy-rsa

Образец конфигурационного файла VPN нужно извлечь из /etc/openvpn  и добавить его в свою установку. Для этого используйте команду:

gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server.conf

Затем откройте server.conf в текстовом редакторе:

vim /etc/openvpn/server.conf

В файл нужно внести пару изменений. Найдите такой раздел:

# Diffie hellman parameters.
# Generate your own with:
#   openssl dhparam -out dh1024.pem 1024
# Substitute 2048 for 1024 if you are using
# 2048 bit keys.
dh dh1024.pem

Обновите строку dh1024.pem:

dh2048.pem

Это увеличит длину RSA-ключа.

Затем найдите такой раздел:

# If enabled, this directive will configure
# all clients to redirect their default
# network gateway through the VPN, causing
# all IP traffic such as web browsing and
# and DNS lookups to go through the VPN
# (The OpenVPN server machine may need to NAT
# or bridge the TUN/TAP interface to the internet
# in order for this to work properly).
;push "redirect-gateway def1 bypass-dhcp"

Найдите раздел redirect-gateway и удалите точку с запятой в начале строки redirect-gateway, чтобы раскомментировать ее. Это позволит клиенту перенаправить свой трафик через сервер OpenVPN.

push "redirect-gateway def1 bypass-dhcp"

После этого найдите это раздел:

# Certain Windows-specific network settings
# can be pushed to clients, such as DNS
# or WINS server addresses.  CAVEAT:
# http://openvpn.net/faq.html#dhcpcaveats
# The addresses below refer to the public
# DNS servers provided by opendns.com.
;push "dhcp-option DNS 208.67.222.222"
;push "dhcp-option DNS 208.67.220.220"

Раскомментируйте строки push «dhcp-option DNS 208.67.222.222» и push «dhcp-option DNS 208.67.220.220».

push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"

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

Теперь найдите раздел:

# You can uncomment this out on
# non-Windows systems.
;user nobody
;group nogroup

Раскомментируйте обе строки:

user nobody
group nogroup

По умолчанию OpenVPN работает как пользователь root и, таким образом, имеет полный корневой доступ к системе. OpenVPN нужно ограничить в правах, и для этого нужно использовать nobody и nogroup. Это непривилегированный пользователь, не имеющий возможности входа в систему по умолчанию, часто зарезервированный для запуска ненадежных приложений.

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

Маршрутизация пакетов

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

echo 1 > /proc/sys/net/ipv4/ip_forward

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

vim /etc/sysctl.conf

В начале файла будет:

# Uncomment the next line to enable packet forwarding for IPv4
#net.ipv4.ip_forward=1

Раскомментируйте net.ipv4.ip_forward.

# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

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

Настройка брандмауэра ufw

ufw является интерфейсом iptables. Настройка ufw довольно проста. Этот брандмауэр по умолчанию входит в Ubuntu 14.04, поэтому нам нужно только добавить несколько правил и внести пару изменений в конфигурации, а затем включить его.

Читайте также: Настройка фаервола с помощью UFW на облачных серверах Ubuntu и Debian

Сначала включите поддержку SSH:

ufw allow ssh

В мануале OpenVPN работает по UDP, откройте этот трафик по порту 1194.

ufw allow 1194/udp

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

vim /etc/default/ufw

Найдите DEFAULT_FORWARD_POLICY=»DROP». Значение в кавычках замените на ACCEPT.

DEFAULT_FORWARD_POLICY="ACCEPT"

Затем добавьте дополнительные правила ufw для преобразования сетевых адресов и IP-маскарадинга подключенных клиентов.

vim /etc/ufw/before.rules

Начало файла before.rules нужно отредактировать так, как показано ниже. Необходимо добавить выделенный красным раздел:

#
# rules.before
#
# Rules that should be run before the ufw command line added rules. Custom
# rules should be added to one of these chains:
#   ufw-before-input
#   ufw-before-output
#   ufw-before-forward
#
# START OPENVPN RULES

# NAT table rules


*nat


:POSTROUTING ACCEPT [0:0]


# Allow traffic from OpenVPN client to eth0


-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE


COMMIT


# END OPENVPN RULES

# Don't delete these required lines, otherwise there will be errors
*filter

Теперь можно включить брандмауэр:

ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)?

Выберите y:

Firewall is active and enabled on system startup

Теперь проверьте правила и состояние брандмауэра:

ufw status
Status: active
To                         Action      From
--                         ------      ----
22                         ALLOW       Anywhere
1194/udp                   ALLOW       Anywhere
22 (v6)                    ALLOW       Anywhere (v6)
1194/udp (v6)              ALLOW       Anywhere (v6)

2: Создание ЦС, сертификатов и ключей

Создание центра сертификации

Теперь пора настроить центр сертификации (CA) и создать сертификат и ключ для сервера OpenVPN. OpenVPN поддерживает двунаправленную аутентификацию на основе сертификатов, что означает, что клиент должен аутентифицировать сертификат сервера, а сервер должен аутентифицировать сертификат клиента для установления взаимного доверия. Используйте сценарии Easy RSA.

Скопируйте сценарии Easy-RSA:

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

Создайте каталог для ключей:

mkdir /etc/openvpn/easy-rsa/keys

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

vim /etc/openvpn/easy-rsa/vars

Значения, выделенные красным, нужно заменить своими данными:

export KEY_COUNTRY="US"
export KEY_PROVINCE="TX"
export KEY_CITY="Dallas"
export KEY_ORG="My Company Name"
export KEY_EMAIL="8host@example.com"
export KEY_OU="MYOrganizationalUnit"

В том же файле vars отредактируйте строку, приведенную ниже. Для простоты мы в качестве имени рекомендуется использовать server. Если вы хотите использовать другое имя, вам необходимо будет обновить файлы конфигурации OpenVPN, ссылающиеся на server.key и server.crt.

export KEY_NAME="server"

Теперь нужно сгенерировать ключ Диффи-Хеллмана; это может занять несколько минут.

openssl dhparam -out /etc/openvpn/dh2048.pem 2048

Перейдите в каталог:

cd /etc/openvpn/easy-rsa

Инициализируйте PKI (инфраструктуру открытого ключа). Обратите внимание на точку (.) и пробел перед ./varscommand. Это определяет текущий рабочий каталог.

. ./vars

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

NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys

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

./clean-all

Эта последняя команда создает центр сертификации (CA), вызывая интерактивную команду OpenSSL. На выходе будет предложено подтвердить переменные, которые ранее вы определили в файле Easy-RSA (название страны, организация и т. д.).

./build-ca

Чтобы принять значения по умолчанию, просто нажмите ENTER.

Генерирование ключей и сертификатов сервера

Оставаясь в каталоге /etc/openvpn/easy-rsa, теперь введите команду для создания ключа сервера. Значение server – это переменная export KEY_NAME, которую вы установили в файле Vars Easy-RSA.

./build-key-server server

Команда сгенерирует почти такой же вывод, как при запуске ./build-ca, и вы сможете снова нажать Enter для подтверждения значений по умолчанию. Однако на этот раз есть еще две строки:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Обе строки оставьте пустыми, просто нажав Enter.
В конце появится еще две строки, в которых нужно ответить y:

Sign the certificate? [y/n]
1 out of 1 certificate requests certified, commit? [y/n]

Последняя строка выведет:

Write out database with 1 new entries
Data Base Updated

Перемещение ключей и сертификатов сервера

OpenVPN будет искать CA, сертификат и ключ сервера в /etc/openvpn. Скопируйте их в правильное расположение.

cp /etc/openvpn/easy-rsa/keys/{server.crt,server.key,ca.crt} /etc/openvpn

Вы можете убедиться, что операция прошла успешно:

ls /etc/openvpn

Вы должны увидеть сертификат и файлы ключей сервера.

Теперь сервер OpenVPN готов к запуску. Запустите его и проверьте состояние:

service openvpn start
service openvpn status

Последняя команда ответит:

VPN 'server' is running

Сервер OpenVPN работает!

Если же команда сообщает, что VPN не работает, проверьте /var/log/syslog:

Options error: --key fails with 'server.key': No such file or directory

Эта ошибка говорит, что server.key  был скопирован в /etc/openvpn некорректно. Скопируйте его снова и попробуйте запустить сервер.

3: Генерирование сертификатов и ключей клиента

Ранее вы установили и настроили сервер OpenVPN, создали центр сертификации и сертификат и ключ сервера. На этом этапе нужно использовать CA сервера для создания сертификатов и ключей для каждого клиентского устройства, которое будет подключаться к VPN. Эти файлы позже нужно будет установить на клиентские устройства, такие как ноутбук или смартфон.

Создание ключей и сертификатов

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

Примечание: По умолчанию OpenVPN не поддерживает одновременных клиентских подключений к серверу, созданных с помощью одного сертификата и ключа (см. duplicate-cn в /etc/openvpn/server.conf).

Чтобы создать индивидуальные учетные данные для каждого устройства, которое вы собираетесь подключить к VPN, вы должны повторить этот раздел для каждого из них (но при этом нужно менять имя клиента, например client2 или iphone2). При наличии индивидуальных учетных данных устройства можно впоследствии деактивировать в индивидуальном порядке.  В этом руководстве в примерах используется имя клиента client1.

Соберите ключ для клиента client1 в каталоге /etc/openvpn/easy-rsa.

./build-key client1

Вам будет снова предложено изменить или подтвердить переменные и эти две строки, которые должны быть пустыми. Нажмите Enter, чтобы принять значения по умолчанию.

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Как и раньше, следующие две строки в конце процесса сборки требуют ответа y:

Sign the certificate? [y/n]
1 out of 1 certificate requests certified, commit? [y/n]

Если сборка ключей была успешной, результат снова будет выглядеть так:

Write out database with 1 new entries
Data Base Updated

Пример конфигурационного файла клиента также должен быть скопирован в каталог ключей Easy-RSA. Мы будем использовать его в качестве шаблона, который будет загружен на клиентские устройства для редактирования. В процессе копирования нужно изменить имя файла с client.conf на client.ovpn, потому что клиенты должны использовать расширение .ovpn.

cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/easy-rsa/keys/client.ovpn

Повторите этот раздел для всех своих клиентов, меняя имя клиента.

Передача ключей и сертификатов на клиентские устройства

Напомним, что клиентские сертификаты и ключи хранятся на сервере OpenVPN в каталоге /etc/openvpn/easy-rsa/keys.

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

Например, в данном случае файлы должны располагаться в etc/openvpn/easy-rsa/keys/client1.crt и /etc/openvpn/easy-rsa/keys/client1.key

Файлы ca.crt и client.ovpn одинаковы для всех клиентов. Загрузите эти два файла; обратите внимание, что файл ca.crt находится в другом каталоге.

/etc/openvpn/easy-rsa/keys/client.ovpn
/etc/openvpn/ca.crt

Выбор приложения для передачи зависит от вас и от операционной системы устройства, но рекомендуется выбирать приложения с поддержкой SFTP (протокол передачи файлов SSH) или SCP (Secure Copy). Это передаст файлы клиента по зашифрованному соединению.

Ниже приведен пример команды SCP. Она помещает файл client1.key в каталог Downloads на локальном компьютере.

scp root@your-server-ip:/etc/openvpn/easy-rsa/keys/client1.key Downloads/

Также вы можете использовать следующие приложения и мануалы:

Затем убедитесь, что на клиентском устройстве есть эти файлы:

  • client1.crt
  • client1.key
  • client.ovpn
  • ca.crt

4: Создание единого профиля OpenVPN для клиентов

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

Создайте единый профиль для клиентского устройства client1 на локальном компьютере, в который загрузите все клиентские файлы. Этот локальный компьютер может быть клиентом или просто временной рабочей областью для объединения файлов аутентификации. Исходный файл шаблона client.ovpn нужно скопировать и переименовать. Как вы это сделаете, зависит от операционной системы вашего локального компьютера.

Примечание. Имя дубликата client.ovpn не обязательно должно быть связано с клиентским устройством. Клиентское приложение OpenVPN будет использовать имя файла в качестве идентификатора для самого VPN-соединения. Скопируйте client.ovpn с таким названием, которое будет использовать VPN в вашей операционной системе. Например: work.ovpn будет определяться как рабочая сеть, school.ovpn – как школьная и т.д.

В мануале соединение VPN будет называться 8host.ovpn. Откройте файл 8host.ovpn в текстовом редакторе.

Укажите вместо my-server-1 IP-адрес VPN.

# The hostname/IP and port of the server.
# You can have multiple remote entries
# to load balance between the servers.
remote my-server-1 1194

Затем найдите этот раздел и раскомментируйте user nobody and group nogroup, как это было сделано в server.conf. Это не касается ОС Windows.

# Downgrade privileges after initialization (non-Windows only)
user nobody
group nogroup

В приведенном ниже разделе нужно закомментировать три строки, чтобы включить сертификат и ключ непосредственно в файл 8host.ovpn. Это должно выглядеть следующим образом:

# SSL/TLS parms.
# . . .
#ca ca.crt
#cert client.crt
#key client.key

Чтобы объединить отдельные файлы в единый профиль, содержимое файлов ca.crt, client1.crt и client1.key нужно вставить непосредственно в профиль .ovpn с помощью базового синтаксиса, подобного XML:

<ca>
(insert ca.crt here)
</ca>
<cert>
(insert client1.crt here)
</cert>
<key>
(insert client1.key here)
</key>

В результате в конце файла будут такие строки:

<ca>
-----BEGIN CERTIFICATE-----
. . .
-----END CERTIFICATE-----
</ca>
<cert>
Certificate:
. . .
-----END CERTIFICATE-----
. . .
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
. . .
-----END PRIVATE KEY-----
</key>

В файле client1.crt есть дополнительная информация; вы можете просто включить весь файл.

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

5: Установка клиентского профиля

Теперь мы обсудим, как установить клиентский профиль VPN в Windows, OS X, iOS и Android. Эти разделы не зависят друг от друга, поэтому их не нужно выполнять последовательно – просто выберите нужную вам систему и следуйте инструкциям.

Соединение OpenVPN будет называться так же, как файл .ovpn. В данном примере это означает, что соединение будет называться 8host.

Windows

Установка

Приложение OpenVPN для Windows можно найти здесь. Выберите подходящую версию инсталлятора.

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

После установки OpenVPN скопируйте файл .ovpn в:

C:\Program Files\OpenVPN\config

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

OpenVPN должен запускаться как администратор каждый раз, когда он используется даже с помощью административных учетных записей. Чтобы не кликать правой кнопкой мыши и не выбирать Run as administrator каждый раз, когда вы используете VPN, вы можете настроить такой запуск, но это должно быть сделано из учетной записи администратора. Это также означает, что стандартным пользователям необходимо будет ввести пароль администратора для использования OpenVPN. С другой стороны, стандартные пользователи не могут правильно подключиться к серверу, если у приложения OpenVPN на клиенте нет прав администратора, поэтому необходимы повышенные привилегии.

Чтобы приложение OpenVPN всегда запускалось как администратор, кликните по нему правой кнопкой мыши и выберите Properties. В нижней части вкладки Compatibility нажмите Change settings for all users. В новом окне установите флажок Run this program as an administrator.

Подключение

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

После запуска OpenVPN инициируйте соединение; для этого войдите в апплет панели задач и кликните правой кнопкой мыши по значку OpenVPN. Откроется контекстное меню. Выберите 8host в верхней части меню (это наш профиль 8host.ovpn) и нажмите Connect.

Откроется окно состояния, показывающее вывод лога при установлении соединения, а после подключения клиента появится сообщение.

Отключить VPN  можно так же: зайдите в апплет панели задач, кликните правой кнопкой мыши по OpenVPN, выберите профиль клиента и нажмите Disconnect.

OS X

Установка

Tunnelblick – это свободный и открытый клиент OpenVPN для Mac OS X. Загрузить последний образ можно отсюда. Кликните дважды по загруженному файлу .dmg и следуйте инструкциям.

В конце установки Tunnelblick спросит, есть ли у вас файлы конфигурации. Легче ответить No и дать Tunnelblick закончить установку. Откройте окно Finder и дважды щелкните 8host.ovpn. Tunnelblick установит профиль клиента. Для этого требуются административные привилегии.

Подключение

Запустите Tunnelblick, дважды кликнув по Tunnelblick в папке Applications. После запуска в строке меню в верхней правой части экрана появится значок Tunnelblick для управления соединениями. Нажмите на значок, а затем выберите пункт меню Connect, чтобы начать VPN-соединение. Выберите соединение 8host.

IOS

Установка

В iTunes App Store найдите и установите OpenVPN Connect, официальное клиентское приложение iOS OpenVPN. Чтобы перенести конфигурацию клиента iOS на устройство, подключите его непосредственно к компьютеру.

Здесь будет приведено описание завершения передачи iTunes. Откройте iTunes на компьютере и нажмите iPhone > apps. Прокрутите вниз до раздела File Sharing и кликните по OpenVPN. Пустое окно справа, OpenVPN Documents, предназначено для обмена файлами. Перетащите файл .ovpn в окно OpenVPN Documents.

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

Подключение

OpenVPN теперь готов к использованию с новым профилем. Запустите соединение, сдвинув кнопку Connect в положение On. Чтобы прервать соединение, нужно сдвинуть ту же кнопку в положение Off.

Примечание: Переключатель VPN в разделе Settings нельзя использовать для подключения к VPN. Если вы попытаетесь, вы сможете подключаться только с помощью приложения OpenVPN.

Android

Установка

Откройте Google Play Store. Найдите и установите Android OpenVPN Connect, официальное клиентское приложение Android OpenVPN.

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

Запустите приложение OpenVPN и откройте меню, чтобы импортировать профиль.

Затем перейдите к расположению сохраненного профиля (/sdcard/Download/) и выберите файл. Приложение сообщит, что профиль был импортирован.

Подключение

Чтобы подключиться, просто нажмите кнопку Connect. Программа спросит, доверяете ли вы OpenVPN-приложению. Нажмите OK, чтобы начать соединение. Чтобы отключиться от VPN, вернитесь в приложение OpenVPN и выберите Disconnect.

6: Тестирование VPN-соединения

Теперь, когда  все установлено, нужно выполнить простую проверку, чтобы убедиться, что все работает правильно. Без VPN-подключения откройте браузер и перейдите в DNSLeakTest.

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

Подключите клиент OpenVPN к VPN вашего сервера и обновите браузер. Теперь у вашего VPN-сервера должен появиться совершенно другой IP-адрес и в сети вас видят по-другому. Опять же, расширенный тест DNSLeakTest проверит ваши настройки DNS и подтвердит, что вы используете DNS-резолверы, настроенные вашим VPN.

Tags: , ,