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
sudo systemctl start openvpn@server
sudo systemctl status openvpn@server
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
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
. . .
proto udp user nobody group nogroup
# 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
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
Если вы сделали все правильно, то в результате подключитесь к серверу.
Уведомление:Настройка шлюза Ubuntu 18.04 – Блог системного администратора
Уведомление:Установка OpenVPN на Linux за 5 минут – Блог системного администратора