# Создание 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).