Page tree

Прежде чем приступать к настройке VPN вручную, рекомендуем попробовать более простой способ настройки: через интерфейс Webmin. Инструкция.

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

Существует множество вариантов реализации VPN. Ниже мы рассмотрим настройку на основе OpenVPN.

Для настройки нам понадобится VDS с установленной Ubuntu 16.04.

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

Установка необходимого ПО

Подключитесь к серверу по SSH и выполните установку OpenVPN и центра сертификации командами:

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

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

OpenVPN использует TLS/SSL, поэтому вам потребуются сертификаты для шифрования трафика между сервером и клиентами. Для выпуска доверенных сертификатов необходимо создать свой собственный центр сертификации.

1. С помощью команд ниже скопируйте шаблонную директорию easy-rsa в домашний каталог и перейдите в созданную директорию:

make-cadir ~/openvpn-ca
cd ~/openvpn-ca

2. Отредактируйте файл vars:

nano vars

Необходимо отредактировать несколько переменных, которые задают параметры сертификатов. Эти переменные:  KEY_COUNTRY, KEY_PROVINCE, KEY_CITY, KEY_ORG, KEY_EMAIL, KEY_OU. Укажите значения для каждой из них, не оставляйте их незаполненными.

Также нужно отредактировать значение переменной KEY_NAME, указав субъекта сертификатов. В примере мы зададим ему имя сервер Server (вы можете указать свое), это же значение будет использоваться далее в командах в инструкции. 

Пример настроек:

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

3. Создайте центр сертификации при помощи утилиты easy-rsa и заданных переменных. Выполните команду:

source vars

Вывод должен быть следующим:

Выполните предложенную команду, чтобы удостовериться, что вы работаете в "чистой среде":

./clean-all

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

./build-ca

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

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

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

Обратите внимание: далее в командах и примерах мы будем использовать Server - значение, указанное выше для переменной KEY_NAME. Если вы указали другое имя, не забудьте заменить его в приводимых командах. Это будет касаться, в том числе, имени файла конфигурации: в нашем случае это будет /etc/openvpn/server.conf.

4.1. Создайте сертификат OpenVPN и ключи для сервера:

./build-key-server Server

Подтвердите все значения по умолчанию, нажимая Enter. Не задавайте challenge password. При завершении процесса два раза введите y для подписи и подтверждения создания сертификата:

4.2. Создайте оставшиеся файлы. Сгенерируйте надежные ключи протокола Диффи-Хеллмана:

./build-dh

4.3. После завершения процесса сгенерируйте подпись HMAC:

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

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

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

cd ~/openvpn-ca/keys
cp ca.crt ca.key Server.crt Server.key ta.key dh2048.pem /etc/openvpn

2. Скопируйте и распакуйте файл c примером конфигурации OpenVPN в конфигурационную директорию. Этот файл послужит основой для последующих настроек.

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

3. Настройте конфигурационный файл сервера. Откройте файл /etc/openvpn/server.conf:

nano /etc/openvpn/server.conf

3.1. Найдите директиву tls-auth. Удалите ";", чтобы раскомментировать строку. Далее добавьте параметр key-direction и установите его значение в 0.

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

Должно получиться следующее:

3.2. Найдите секцию шифрования с закомментированными строками cipher. Удалите ";" для раскомментирования строки со значением AES-128-CBC, под этой строкой добавьте строку auth и укажите алгоритм HMAC, например, SHA256:

cipher AES-128-CBC
auth SHA256

3.3. Найдите настройки user и group и удалите ";" для раскомментирования этих строк:

user nobody
group nogroup

3.4. Для реализации доступа к сети, которая находится за клиентом (внутренняя сеть) необходимо прописать следующие строки, где ip 192.168.33.0 следует заменить на ip необходимой внутренней сети:

push "route 192.168.33.0 255.255.255.0"
route 192.168.33.0 255.255.255.0
client-config-dir ccd

3.5. Проверьте настройки cert и key, чтобы они указывали на правильные файлы .crt и .key, которые вы скопировали ранее в /etc/openvpn:

cert Server.crt
key Server.key

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

4. Для реализации доступа к внутренней сети, которая находится за клиентом, выполните следующее.

4.1. Создайте директорию /etc/openvpn/ccd:

mkdir /etc/openvpn/ccd 
chmod 744 /etc/openvpn/ccd 

4.2. Создайте новый файл, название которого должно совпадать с названием конфига клиента, который будет запущен на соответствующем сервере:

nano /etc/openvpn/ccd/cserver1

4.3. Добавьте в него необходимые ip c масками для пропуска клиентов во внутренние сети:

iroute 192.168.33.0 255.255.255.0

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

4.5. Задайте необходимые права для файла:

chmod 744 /etc/openvpn/ccd/cserver1

Настройка сетевой конфигурации сервера

1. Разрешите серверу перенаправлять трафик:

echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf

2. Примените настройки к текущей сессии:

sysctl -p

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

ufw disable
ufw reset
iptables -F
systemctl disable ufw

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

Запустите сервер OpenVPN, указав имя файла конфигурации в качестве переменной. В нашем случае файл конфигурации называется /etc/openvpn/server.conf, поэтому мы используем @server. Укажите здесь корректное для вас значение. 

service openvpn@server start

Проверить статус можно командой:

service openvpn@server status

Вы также можете проверить доступность интерфейса OpenVPN tun0 командой:

ip addr show tun0

Если всё в порядке, добавьте сервис в автозагрузку:

systemctl enable openvpn@server

Создание конфигураций клиентов

Создание базовой конфигурации

1. В домашней директории создайте каталог для хранения файлов:

mkdir -p ~/client-configs/files
chmod 700 ~/client-configs/files

2. Скопируйте файл с примером конфигурации в этот каталог:

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

3. Откройте этот файл в текстовом редакторе и внесите изменения:

nano ~/client-configs/base.conf

3.1. Найдите директиву remote, которая сообщает клиенту адрес сервера OpenVPN. Укажите здесь IP-адрес вашего VDS-сервера:

remote IP_адрес_сервера 1194

3.2. Раскомментируйте директивы user и group, удаляя “;”:

user nobody
group nogroup

3.3. Найдите директивы ca, cert и key и закомментируйте их, добавив #:

3.4. Добавьте настройки cipher и auth с такими же значениями, как в файле /etc/openvpn/server.conf, а также директиву key-direction со значением 1.

cipher AES-128-CBC
auth SHA256
key-direction 1

3.5. Добавьте следующие закомментированные строки, которые будут необходимы для клиентов на Linux, использующих файл /etc/openvpn/update-resolv-conf. Для таких клиентов потребуется раскомментировать эти строки в сгенерированном клиентском файле конфигурации OpenVPN.

# script-security 2
# up /etc/openvpn/update-resolv-conf
# down /etc/openvpn/update-resolv-conf

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

Скрипт для генерации конфигов

Далее необходимо создать скрипт, который будет генерировать файлы конфигурации с сертификатами, ключами и файлами шифрования и размещать их в директории ~/client-configs/files.

1. Создайте и откройте файл make_config.sh внутри директории ~/client-configs:

nano ~/client-configs/make_config.sh

2. Вставьте в него следующий блок директив:

#!/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

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

4. Сделайте его исполняемым:

chmod 700 ~/client-configs/make_config.sh

Создание конфигураций

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

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

Для создания файлов без пароля (это облегчит автоматические соединения), используйте команду build-key:

cd ~/openvpn-ca
source vars
./build-key cserver1

В процессе создания файлов нажимайте Enter для подтверждения (все необходимые значения уже введены). Не задавайте challenge password. При завершении процесса дважды укажите y в ответ на запросы о подписи и подтверждении создания сертификата.

Сгенерируйте конфигурацию для этих файлов. Для этого перейдите в директорию ~/client-configs и воспользуйтесь созданным скриптом:

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

Если всё прошло успешно, в директории ~/client-configs/files будет создан файл cserver1.ovpn:

Этот файл необходимо передать соответствующему клиенту. Скачать конфигурацию можно по SFTP.

Настройка клиентов

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

Для примера, ниже рассмотрим настройку клиентов на компьютере с системами Windows и MacOS.

Windows

  1. Загрузите клиент с сайта OpenVPN: https://openvpn.net/community-downloads/ и установите его на компьютер.
  2. После установки скопируйте полученный файл конфигурации в папку C:\Program Files\OpenVPN\config.
  3. Запустите OpenVPN. Это необходимо сделать от имени администратора: кликните на значке правой кнопкой и выберите "Запуск от имени администратора". Чтобы OpenVPN всегда по умолчанию запускался от имени администратора, кликните на его значке правой кнопкой и выберите Свойства. На вкладке "Совместимость" отметьте пункт "Выполнять эту программу от имени администратора" и сохраните. 
  4. В появившемся при запуске окне с предупреждением (разрешить программе внести изменения) нажмите "Да."
  5. Кликните правой кнопкой мыши на значке OpenVPN в трее, выберите загруженный профиль и нажмите Connect / Подключиться.

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

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

MacOS

  1. Для MacOS можно использовать бесплатный клиент Tunnelblick.
  2. Загрузите клиент с сайта Tunnelblick: https://tunnelblick.net/downloads.html
  3. Дважды кликните на загруженном файле и пройдите процесс установки.
  4. При завершении установки выберите "Нет" в ответ на вопрос о наличии конфигурационных файлов.
  5. После завершения установке откройте Finder и кликните дважды на вашем конфигурационном файле. Tunnelblick автоматически установит профиль.

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

  • No labels