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="me@myhost.mydomain"
 export KEY_OU="MyOrganizationalUnit"
 . . . . .

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

. . . . .
 export KEY_COUNTRY="RU"
 export KEY_PROVINCE="SPb"
 export KEY_CITY="Sankt-Peterburg"
 export KEY_ORG="admin812.ru"
 export KEY_EMAIL="admin@admin812.ru"
 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
Тут необходимо внести изменения в пункте remote
. . .
# 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.
Далее, необходимо убедиться по какому протоколу ( tcp или udp ) работает openvpn и от какого пользователя запускается. Настройки должны быть аналогичным настройкам в файле server.conf
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 '<ca>') \
    ${KEY_DIR}/ca.crt \
    <(echo -e '</ca>\n<cert>') \
    ${KEY_DIR}/${1}.crt \
    <(echo -e '</cert>\n<key>') \
    ${KEY_DIR}/${1}.key \
    <(echo -e '</key>\n<tls-auth>') \
    ${KEY_DIR}/ta.key \
    <(echo -e '</tls-auth>') \
    > ${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

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

Установка и настройка OpenVPN в Ubuntu 16.04
Метки:         

2 мыслей о “Установка и настройка OpenVPN в Ubuntu 16.04

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

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