# Создание VPN-сети на OpenVPN для удаленного доступа ## Содержание [TOC] ## Цель Обеспечить защищенный удаленный доступ. ## Участники сети: * Сервер VPN * Рабочая машина(-ы) * Домашняя машина(-ы) Ограничения: отсутствие пересечения трафика между разными парами домашний-рабочий компьютер. VPN сервер размещается на сервере VPS. ## Шаг 0. Предварительная настройка сервера *Подготовка сервера описана [здесь](https://hackmd.io/52eDjFGVRIO1Kx-xgGq5uA)* ## Шаг 1. Сервер VPN *Взято [отсюда](https://github.com/Nyr/openvpn-install)* ### 1.1. Инициализируем конфигурацию одним скриптом Скачиваем скрипт Для Ubuntu 16.04 (xenial): ```shell wget https://git.io/vpn1604 -O openvpn-install.sh ``` Для Ubuntu 18.04 (bionic) и других ОС: ```shell wget https://git.io/vpn -O openvpn-install.sh ``` Вначале скорректируем скрипт. Откройте файл: ```shell nano openvpn-install.sh ``` Найдите и закомментируйте строку (поиск по Ctrl+W): ```dockerfile #setenv opt block-outside-dns ``` Закомментируйте строку *topology subnet*: ```dockerfile #topology subnet ``` Можно заменить везде 10.8 на, например, 10.19 (через Ctrl+\), если мы не хотим использовать подсеть 10.8.0.0, предлагаемую по-умолчанию. Наконец дополните первую встреченную строку с *verb 3* ```dockerfile= ... verb 3 crl-verify crl.pem" >> /etc/openvpn/server.conf ... ``` так, чтобы получилось: ```dockerfile= ... verb 3 crl-verify crl.pem client-config-dir ccd client-to-client # Диапазоны (для простоты на каждого пользователя своя подсеть) route 10.19.10.0 255.255.255.0 route 10.19.11.0 255.255.255.0" >> /etc/openvpn/server.conf mkdir /etc/openvpn/ccd echo "ifconfig-push 10.19.10.1 10.19.10.2 push \"route 10.19.10.0 255.255.255.0\" > /etc/openvpn/ccd/c1w echo "ifconfig-push 10.19.10.5 10.19.10.6 push \"route 10.19.10.0 255.255.255.0\" > /etc/openvpn/ccd/c1h echo "ifconfig-push 10.19.11.1 10.19.10.2 push \"route 10.19.11.0 255.255.255.0\" > /etc/openvpn/ccd/c2w echo "ifconfig-push 10.19.11.5 10.19.10.6 push \"route 10.19.11.0 255.255.255.0\" > /etc/openvpn/ccd/c2h ... ``` Далее запускаем скрипт и следуем инструкциям. Укажите свой протокол, порт. DNS можно использовать Google. ```shell . openvpn-install.sh ``` ### 1.2. Проверка сгенерированного конфигурационного файла сервера *Подробнее [здесь](https://openvpn.net/community-resources/how-to/#configuring-client-specific-rules-and-access-policies)* Можно проверить конфигурационный файл ``` sudo nano /etc/openvpn/server.conf ``` Он должен быть следующим: ```nginx= port 1194 proto udp dev tun sndbuf 0 rcvbuf 0 ca ca.crt cert server.crt key server.key dh dh.pem auth SHA512 tls-auth ta.key 0 server 10.19.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt push "dhcp-option DNS 8.8.8.8" push "dhcp-option DNS 8.8.4.4" keepalive 10 60 cipher AES-256-CBC user nobody group nogroup persist-key persist-tun status openvpn-status.log verb 3 crl-verify crl.pem client-config-dir ccd client-to-client route 10.19.10.0 255.255.255.0 route 10.19.11.0 255.255.255.0 ``` ### 1.3. Проверка работы Проверим состояние службы: ```shell systemctl status openvpn@server ``` Если служба остановлена, а в журнале указано *failed*, возможно необходим скорректировать файл конфигурации службы: ```shell sudo nano /lib/systemd/system/openvpn@.service ``` Закомментируйте строку *LimitNPROC=10*: ```nginx #LimitNPROC=10 ``` После изменения настроек следует выполнить: ```shell systemctl daemon-reload ``` И снова попытаться запустить службу: ```shell systemctl start openvpn@server systemctl status openvpn@server ``` :::warning Если служба по прежнему не запускается, проверьте файл конфигурации */etc/openvpn/server.conf* на ошибки. Запустите openvpn вручную для отладки: ```shell openvpn --config /etc/openvpn/server.conf ``` Вывод должен завершиться сообщением *Initialization Sequence Completed*. ::: ### 1.4. Инициализация клиентских конфигураций Для генерации клиентов и их конфигурационных файлов просто снова запустите скрипт `. openvpn-install.sh` Укажите наименования клиентов: c1w, c1h, c2w, c2h Таким образом, в каталоге */root* у нас будут файлы c1w.ovpn, c1h.ovpn, c2w.ovpn, c2h.ovpn. Переместите эти файлы на соответствующие клиентские машины. Например на клиенте с установленной ОС Linux (или Windows с установленным bash) выполните команду scp (замените CLIENT на наименование клиента): ```shell scp root@server:/root/CLIENT.ovpn ./CLIENT.ovpn ``` ## Шаг 2. Подключение клиентов к серверу ### 2.1. Установка Установите клиент на домашнюю и рабочую машины. Скачать дистрибутивы можно [здесь](https://openvpn.net/community-downloads/). ### 2.2. Домашняя машина 1) Скопируйте или импортируйте файл конфигурации \*.ovpn в папке пользователя **%USERPROFILE%/OpenVPN/config** (создайте каталоги при необходимости). 2) Пользователь запускает соединение с помощью значка в системной трее. ### 2.3. Рабочая машина 1) Скопируйте файл \*.ovpn в каталог C:\Program Files\OpenVPN\config. 2) Откройте Службы (services.msc) и установите тип запуска службы OpenVPNService в автоматический. 3) Перезапустите службу OpenVPNService. 4) При необходимости настройте файрвол на рабочей машине для доступа по rdp (порт 3389). > Создайте правило для файрвола, разрешающее входящие соединения на порт 3389 для публичной сети (по умолчанию новая сеть относится к публичной). Можно также указать ip-адрес, с которого допускается доступ (например, для клиента 1 это будет 10.19.10.5).