Настройка и использование openvpn на ubuntu

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

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

Копирование файлов в директорию OpenVPN

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

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

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

Базовая настройка

Сначала найдём секцию HMAC поиском директивы . Удалите “;” для того, чтобы раскомментировать строку с . Далее добавьте параметр и установите его значение в “0”:

/etc/openvpn/server.conf

Далее найдём секцию шифрования, нас интересуют закомментированные строки . Шифр обеспечивает хороший уровень шифрования и широко поддерживается другими программными продуктами. Удалите “;” для раскомментирования строки :

/etc/openvpn/server.conf

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

/etc/openvpn/server.conf

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

/etc/openvpn/server.conf

(Опционально) Проталкивание изменений DNS для перенаправления всего трафика через VPN

Сделанные нами настройки создают VPN соединение между двумя машинами, но они не заставляют эти машины использовать VPN соединение. Если вы хотите использовать VPN соединение для всего своего трафика, вам необходимо протолкнуть (push) настройки DNS на клиентские машины.

Для этого вам необходимо раскомментировать несколько директив. Найдите секцию и удалите “;” из начала строки для расскоментирования :

/etc/openvpn/server.conf

Чуть ниже находится секция . Удалите “;” для обеих строк:

/etc/openvpn/server.conf

Это позволит клиентам сконфигурировать свои настройки DNS для использования VPN соединения в качестве основного.

(Опционально) Настройка порта и протокола

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

/etc/openvpn/server.conf

Используемый протокол может иметь ограничения по номеру порта. В этом случае измените с UDP на TCP:

/etc/openvpn/server.conf

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

(Опционально) Использование кастомного имени сертификата и ключа

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

/etc/openvpn/server.conf

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

Установка OpenVPN

Начинаем с самого первого – с установки OpenVPN на сервер. Так как OpenVPN есть в стандартных репозиториях Ubuntu, для установки можно использовать утилиту apt. Необходимо еще также установить пакет easy-rsa; он нужен для настройки внутреннего центра сертификации (CA или certificate authority). Центр сертификации нужен для подтверждения подлинности ключей шифрования. Он и будет использоваться в создаваемой VPN сети.

Обновите список доступных пакетов, а затем установите нужные:

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

Следующая задача – настроить то, что мы только что установили.

Настройка клиента OpenVPN для первого примера

С сервером мы закончили, теперь переходим к клиенту. Скачиваем все то же приложение, устанавливаем где нам удобнее. Переносим сертификат и ключ клиента, сертификат УЦ (у меня это: ca.crt, barnak-client.crt, barnak-client.key) в любое удобное для вас место.

Заходим в папку Config (у меня это C:\Program Files\OpenVPN\Config), создаем файл client.ovpn со следующим содержимым:

client
dev tun
dev-node OpenVPN
proto tcp
remote 87.215.46.32 1120
resolv-retry infinite
nobind
ca C:\\Program files\\OpenVPN\\keys\\ca.crt
cert C:\\Program files\\OpenVPN\\keys\\barnak-client.crt
key C:\\Program files\\OpenVPN\\keys\\barnak-client.key
ns-cert-type server
cipher AES-128-CBC
comp-lzo
verb 3
mute 20

Что у нас появилось нового:

  • client, — означает, что мы являемся клиентом;
  • remote 89.215.46.32 1120, — здесь указываем IP адрес (или DNS имя) нашего сервера и его порт;
  • resolv-retry infinite, — программа будет каждый раз узнавать IP адрес по DNS имени (если мы указывали DNS имя). Удобно тем, кто пользуется ноутбуками и не всегда подключен к сети;
  • nobind, — указываем, что мы не используем определенный локальный порт (т.е. программа будет выбирать случайный доступный порт);
  • ;http-proxy , — если вы используете прокси, то уберите «;». Здесь можно указать адрес (или DNS имя) прокси сервера и его порт;
  • ;http-proxy-retry # retry on connection failures,- переподключаться к прокси при обрыве связи. Также уберите «;», если вы собираетесь использовать прокси;
  • ns-cert-type server, — проверяем, что в сертификате сервера написано, что он сервер, а не клиент.

Теперь сохраняем настройки и запускаем VPN клиент. Через пару минут он подключится:

Следом настроим наше файловое хранилище.

Prerequisites

To complete this tutorial, you’ll need the following:

  • A new Ubuntu 16.04 server.
  • A standard user account with privileges. You can set up a standard account by following Steps 2 and 3 of the Initial Server Setup with Ubuntu 16.04 tutorial.
  • OpenVPN installed and configured on your server. Complete the How to Set Up an OpenVPN Server on Ubuntu 16.04 tutorial before proceeding. We will assume that the VPN server is located at the IP address on the VPN, which is the address used in the OpenVPN tutorial, and that you can connect to the VPN from your local machine.
  • A registered domain name and access to add DNS entries. We’ll use throughout this tutorial, and we’ll use DigitalOcean’s DNS service. To use DigitalOcean’s DNS service with your domain, follow steps 1 and 2 of our How To Set Up a Host Name with DigitalOcean tutorial to point your domain name at DigitalOcean’s name servers.
  • Apache installed with two virtual hosts configured for your domain. Follow the tutorial How to Set Up Apache Virtual Hosts on Ubuntu 16.04 to set up two virtual hosts called and , each with a default HTML page.

Step 6 — Testing Your VPN Connection

Once everything is installed, a simple check confirms everything is working properly. Without having a VPN connection enabled, open a browser and go to DNSLeakTest.

The site will return the IP address assigned by your internet service provider and as you appear to the rest of the world. To check your DNS settings through the same website, click on Extended Test and it will tell you which DNS servers you are using.

Now connect the OpenVPN client to your Droplet’s VPN and refresh the browser. The completely different IP address of your VPN server should now appear. That is now how you appear to the world. Again, DNSLeakTest’s Extended Test will check your DNS settings and confirm you are now using the DNS resolvers pushed by your VPN.

Congratulations! You are now securely traversing the internet protecting your identity, location, and traffic from snoopers and censors.

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

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

Теперь нужно убедиться, что вы находитесь в нужной директории (то есть директории CA – центра сертификации):

$ cd ~/openvpn-ca

А затем использовать следующую команду:

$ source vars

На экране должен отобразиться следующий вывод:

Output
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 для подтверждения:

Output
Generating a 2048 bit RSA private key
..........................................................................................+++
...............................+++
writing new private key to 'ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) :
State or Province Name (full name) :
Locality Name (eg, city) :
Organization Name (eg, company) :
Organizational Unit Name (eg, section) :
Common Name (eg, your name or your server's hostname) :
Name :
Email Address :

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

Step 5: Create the Server Certificate, Key, and Encryption Files

Next, we will generate our server certificate and key pair, as well as some additional files used during the encryption process.

Start by generating the OpenVPN server certificate and key pair. We can do this by typing:

Note: If you choose a name other than here, you will have to adjust some of the instructions below. For instance, when copying the generated files to the directroy, you will have to substitute the correct names. You will also have to modify the file later to point to the correct and files.

Once again, the prompts will have default values based on the argument we just passed in () and the contents of our file we sourced.

Feel free to accept the default values by pressing ENTER. Do not enter a challenge password for this setup. Towards the end, you will have to enter y to two questions to sign and commit the certificate:

Next, we’ll generate a few other items. We can generate a strong Diffie-Hellman keys to use during key exchange by typing:

This might take a few minutes to complete.

Afterwards, we can generate an HMAC signature to strengthen the server’s TLS integrity verification capabilities:

Настройка OpenVPN сервера для второго примера

Подключаемся к нашему серверу, входим под рутом и скачиваем openvpn:

aptitude install openvpn openssl

После установки копируем скрипты в папку программы:

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

Далее переходим в папку /etc/openvpn/easy-rsa и открываем файл vars текстовым редактором. Здесь нас интересуют следующие опции:

export KEY_SIZE=1024

export KEY_COUNTRY="RU"

export KEY_PROVINCE="CA"

export KEY_CITY="Moscow"

export KEY_ORG="barnak VPN"

export KEY_EMAIL="test"

export KEY_OU="test"

Соответственно что делать с этими полями вы уже знаете 🙂

export KEY_SIZE=1024 — длина ключа. Можно указать 2048, но особого смысла в этом не будет, только VPN медленнее станет работать.

Теперь эти переменные надо инициировать:

source ./vars

Мы получим предупреждение, что при запуске скрипта clean-all оно удалит все содержимое папки с ключами (а это папка с программой). Но нам ничего чистить не нужно, так что не обращаем внимания.

Теперь создаем сертификат УЦ:

./build-ca

После этого ключи DH:

./build-dh

Сертификат и ключи сервера:

./build-key-server debian-srv

И клиента:

./build-key client

Теперь создаем файл конфигурации сервера:

vim.tiny /etc/openvpn/server.conf

Добавляем туда следующее:

port 1194

proto tcp

dev tun

ca ca.crt

cert debian-srv.crt

key debian-srv.key

dh dh1024.pem

server 10.10.20.0 255.255.255.0

keepalive 10 120

cipher AES-128-CBC # AES

comp-lzo

max-clients 10

persist-key

persist-tun

client-to-client

status openvpn-status.log

log /var/log/openvpn.log

verb 4

mute 20

sndbuf 0

rcvbuf 0

push "route 10.10.20.0 255.255.255.0"

push "redirect-gateway def1"

Из новых настроек здесь следующие:

  • persist-key, — позволяет избежать некоторых проблем с доступностью при понижении прав (только для Linux);
  • persist-tun, — аналогично;
  • client-to-client, — позволяет клиентам видеть друг друга. Без этой опции клиенты смогут видеть только сервер и его ресурсы, но не других клиентов (аналог AP Isolation);
  • log /var/log/openvpn.log, — где будет храниться журнал событий openvpn;
  • push «redirect-gateway def1», — добавляет клиентам маршрут к VPN серверу, чтобы весь трафик ходил через него.

Теперь, чтобы мы все-таки могли открывать сайты, будучи подключенным к VPN, надо на сервере прописать правило NAT:

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

Где 10.10.20.0/24 — ваша виртуальная VPN подсеть.

Сохраняем правило NAT в файл:

iptables-save > /etc/network/iptables.conf

Теперь открываем текстовым редактором настройки сетевых интерфейсов:

vim.tiny /etc/network/interfaces

И добавляем к интерфейсу eth0 (или какой вы используете) строчку для автозагрузки правила:

post-up /sbin/iptables-restore < /etc/network/iptables.conf

Вот как это выглядит у меня:

Это нужно для того, чтобы при перезагрузке сервера правила NAT не удалилось.

И последний штрих. нужно включить IP Forwarding. Без этого скорее всего ваш NAT не заработает. Открываем текстовым редактором файл  /etc/sysctl.conf, находим строчку net.ipv4.ip_forward=1, раскомментируем ее (либо выставляем 1) и применяем командой:

sysctl -p

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

openvpn server.conf

Теперь сервер настроен и переходим к клиенту.

Step 4: Build the Certificate Authority

Now, we can use the variables we set and the utilities to build our certificate authority.

Ensure you are in your CA directory, and then source the file you just edited:

You should see the following if it was sourced correctly:

Make sure we’re operating in a clean environment by typing:

Now, we can build our root CA by typing:

This will initiate the process of creating the root certificate authority key and certificate. Since we filled out the file, all of the values should be populated automatically. Just press ENTER through the prompts to confirm the selections:

We now have a CA that can be used to create the rest of the files we need.

Генерация клиентских ключей.

Аналогично генерации серверных ключей создаются и клиентские:

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

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

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

Следует помнить, что имена ключей должны быть уникальными. Один пользователь — один ключ с уникальным именем.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector