> ## Documentation Index
> Fetch the complete documentation index at: https://docs.edisglobal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Как настроить OpenVPN поверх Stunnel

> Настройка OpenVPN поверх Stunnel на Ubuntu 22.04 для маскировки VPN-трафика под TLS и обхода DPI-фильтров.

## Настройка OpenVPN поверх Stunnel на VPS с Ubuntu 22.04

## Введение

Руководство пошагово описывает OpenVPN поверх Stunnel на Ubuntu 22.04. Инкапсуляция трафика OpenVPN в SSL-туннель Stunnel добавляет защиту и потенциально помогает обходить сетевые ограничения или межсетевые экраны, блокирующие либо замедляющие VPN.

## Предварительные требования

* **VPS:** [EDIS Global VPS](https://www.edisglobal.com) с Ubuntu 22.04 и доступом root или sudo.
* **Клиентский компьютер:** Ubuntu или другой дистрибутив Linux, совместимый с OpenVPN и Stunnel; доступ root или sudo.

## Обзор

Основные этапы:

1. **На VPS:** установка и настройка Stunnel, затем OpenVPN.
2. **На клиенте:** установка и настройка Stunnel, затем подключение OpenVPN через него.

***

## Действия на VPS

### Обновите системные пакеты

Убедитесь, что пакеты актуальны:

```bash theme={"system"}
sudo apt update && sudo apt upgrade -y
```

**Пояснение:** команда обновляет список пакетов и устанавливает последние версии, включая исправления безопасности и новые возможности.

### Установите Stunnel

Stunnel создаст SSL-туннель для трафика OpenVPN:

```bash theme={"system"}
sudo apt install stunnel4 -y
```

**Пояснение:** пакет Stunnel позволяет шифровать произвольные TCP-соединения внутри SSL.

### Создайте SSL-сертификат для Stunnel

Перейдите в каталог настроек Stunnel и создайте самоподписанный сертификат:

```bash theme={"system"}
cd /etc/stunnel
sudo openssl req -new -x509 -days 365 -nodes -out stunnel.pem -keyout stunnel.pem
```

**Пояснение:**

* `openssl req -new -x509 -days 365 -nodes` создаёт сертификат X.509 на 365 дней без парольной фразы (`-nodes`).
* `-out stunnel.pem -keyout stunnel.pem` сохраняет сертификат и закрытый ключ в `stunnel.pem`.

**Примечание:** программа запросит страну, регион и другие данные. Их можно заполнить или оставить пустыми.

### Создайте журнал Stunnel

Создайте файл для записи журнала:

```bash theme={"system"}
sudo mkdir -p /var/log/stunnel
sudo touch /var/log/stunnel/stunnel.log
sudo chown stunnel4:stunnel4 /var/log/stunnel/stunnel.log
```

**Пояснение:** команды создают каталог журналов, пустой файл и назначают подходящего владельца.

### Настройте Stunnel

Откройте файл конфигурации:

```bash theme={"system"}
sudo nano /etc/stunnel/stunnel.conf
```

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

```conf theme={"system"}
# Global options
output = /var/log/stunnel/stunnel.log

# Service-level options
[openvpn]
client = no
accept = 443
connect = 127.0.0.1:1194
cert = /etc/stunnel/stunnel.pem
```

**Пояснение:**

* `output` — путь к журналу.
* `[openvpn]` — служба с именем openvpn.
* `client = no` — серверный режим Stunnel.
* `accept = 443` — прослушивание порта 443, обычно используемого HTTPS и часто разрешённого межсетевыми экранами.
* `connect = 127.0.0.1:1194` — пересылка входящих соединений локальному OpenVPN.
* `cert` — файл SSL-сертификата.

### Включите и запустите службу Stunnel

Включите автозапуск и запустите службу:

```bash theme={"system"}
sudo systemctl enable stunnel4
sudo systemctl restart stunnel4
sudo systemctl status stunnel4
```

**Пояснение:** `enable` включает запуск при загрузке, `restart` запускает или перезапускает службу, `status` проверяет её работу.

### Установите OpenVPN

Скачайте и запустите установочный скрипт:

```bash theme={"system"}
cd ~
wget https://git.io/vpn -O openvpn-install.sh
sudo bash openvpn-install.sh
```

**Пояснение:** скрипт автоматизирует установку и настройку OpenVPN. Он запросит параметры — выберите подходящие для своих задач.

### Измените конфигурацию сервера OpenVPN

Настройте прослушивание всех интерфейсов:

```bash theme={"system"}
sudo nano /etc/openvpn/server/server.conf
```

Найдите и измените директиву `local`:

```conf theme={"system"}
# Comment out if present:
# local 127.0.0.1

# Or add:
local 0.0.0.0
```

**Пояснение:** `local 0.0.0.0` включает прослушивание всех сетевых интерфейсов.

### Перезапустите OpenVPN

Примените изменения:

```bash theme={"system"}
sudo systemctl restart openvpn-server@server.service
sudo systemctl status openvpn-server@server.service
```

**Пояснение:** команды перезапускают OpenVPN и проверяют его состояние.

***

## Действия на клиентском компьютере

### Установите Stunnel

Установите Stunnel на клиенте:

```bash theme={"system"}
sudo apt install stunnel4 -y
```

### Настройте Stunnel

Перейдите в каталог настроек и создайте конфигурационный файл:

```bash theme={"system"}
cd /etc/stunnel
sudo nano stunnel.conf
```

Добавьте:

```conf theme={"system"}
client = yes

[openvpn]
accept = 127.0.0.1:1194
connect = VPS_IP_ADDRESS:443
```

**Пояснение:**

* `client = yes` — клиентский режим.
* `accept = 127.0.0.1:1194` — локальное прослушивание порта 1194.
* `connect = VPS_IP_ADDRESS:443` — соединение со Stunnel на VPS.

**Примечание:** замените `VPS_IP_ADDRESS` фактическим IP VPS.

### Включите и запустите службу Stunnel

Включите автозапуск и запустите службу:

```bash theme={"system"}
sudo systemctl enable stunnel4
sudo systemctl restart stunnel4
sudo systemctl status stunnel4
```

### Скопируйте клиентскую конфигурацию OpenVPN

Безопасно перенесите файл конфигурации с VPS на клиент:

```bash theme={"system"}
scp root@VPS_IP_ADDRESS:/root/client.ovpn ~/
```

**Пояснение:** `client.ovpn` копируется в домашний каталог.

**Примечание:** замените `VPS_IP_ADDRESS` IP-адресом VPS.

### Измените клиентскую конфигурацию OpenVPN

Переименуйте и откройте файл:

```bash theme={"system"}
sudo mv ~/client.ovpn /etc/openvpn/client.conf
sudo nano /etc/openvpn/client.conf
```

Внесите изменения:

* Направьте директиву `remote` на локальный конец Stunnel.
* Добавьте или измените следующие директивы.
* При необходимости укажите файл журнала.

**Пояснение:**

* `remote 127.0.0.1 1194` подключает OpenVPN к локальному Stunnel.
* `route-nopull` запрещает автоматическое изменение маршрутов.
* `script-security 2` разрешает выполнение скриптов.
* `route-up` запускает скрипт после установления соединения.

### Создайте скрипт маршрутизации

Создайте скрипт для изменения маршрутов после подключения:

```bash theme={"system"}
sudo nano /etc/openvpn/routing.sh
```

Добавьте содержимое:

```bash theme={"system"}
#!/bin/bash

SERVER_IP="VPS_IP_ADDRESS"
GATEWAY=$(ip route get 8.8.8.8 | grep -oP 'via \K\S+')
sudo ip route add $SERVER_IP/32 via $GATEWAY
sudo ip route add 0.0.0.0/1 via 10.8.0.1
sudo ip route add 128.0.0.0/1 via 10.8.0.1
```

**Пояснение:**

* `SERVER_IP` — IP VPS.
* `GATEWAY` определяет шлюз по умолчанию, чтобы трафик к самому VPS шёл вне VPN-туннеля.
* Команды `ip route add` меняют таблицу маршрутизации.

**Примечание:** замените `VPS_IP_ADDRESS` IP-адресом VPS.

Разрешите выполнение скрипта:

```bash theme={"system"}
sudo chmod +x /etc/openvpn/routing.sh
```

### Запустите клиент OpenVPN

Запустите клиентскую службу:

```bash theme={"system"}
sudo systemctl enable openvpn-client@client.service
sudo systemctl start openvpn-client@client.service
sudo systemctl status openvpn-client@client.service
```

**Пояснение:** команды включают автозапуск и запускают клиент с изменённой конфигурацией.

***

## Проверка

### Проверьте IP-адрес

До и после запуска VPN проверьте публичный IP, чтобы убедиться, что трафик идёт через VPN:

```bash theme={"system"}
curl ifconfig.me
```

### Проверьте службы

Убедитесь, что Stunnel и OpenVPN работают:

```bash theme={"system"}
sudo systemctl status stunnel4
sudo systemctl status openvpn-client@client.service
```

### Проверьте соединение

Убедитесь, что интернет-ресурсы доступны, а трафик проходит через VPN:

```bash theme={"system"}
ping -c 4 google.com
traceroute google.com
```

***

## Устранение неполадок

* **Соединение Stunnel отклонено:** разрешите входящий порт 443 в межсетевом экране VPS и проверьте службу командой `sudo systemctl status stunnel4`.
* **Ошибка аутентификации OpenVPN:** проверьте соответствие сертификатов клиента и сервера и журналы OpenVPN на обеих сторонах.
* **Проблемы маршрутизации:** проверьте IP сервера в `routing.sh`, право выполнения скрипта и правильность пути в конфигурации OpenVPN.
* **Служба не запускается:** изучите `journalctl -xe` или журнал службы, проверьте опечатки и синтаксис конфигурационных файлов.

***

## Заключение

OpenVPN поверх Stunnel на Ubuntu 22.04 настроен. Эта конфигурация добавляет слой шифрования и может помочь обойти сетевые ограничения, помещая VPN-трафик внутрь стандартных протоколов SSL/TLS.

***

## Источники

* [Официальная документация Stunnel](https://www.stunnel.org/docs.html)
* [Официальная документация OpenVPN](https://openvpn.net/community-resources/how-to/)
* [Руководство Ubuntu Server](https://help.ubuntu.com/lts/serverguide/index.html)

***

**Примечание:** убедитесь, что использование VPN и шифрования соответствует местным законам и правилам.


## Related topics

- [Как настроить IPv6 на VPS](https://docs.edisglobal.com/ru/vps-management/ipv6-configuration.md)
- [Как настроить WireGuard VPN](https://docs.edisglobal.com/ru/advanced-setup-guides/how-to-setup-wireguard-vpn.md)
- [Образы Turnkey для OpenVPN на EDIS VPS (устарело)](https://docs.edisglobal.com/ru/advanced-setup-guides/installing-openvpn-with-turnkey.md)
- [Установка AmneziaWG на Ubuntu 22.04](https://docs.edisglobal.com/ru/advanced-setup-guides/install-amneziawg-on-ubuntu-22_04/install-amneziawg-on-ubuntu-2204.md)
- [Уязвимость RegreSSHion в OpenSSH](https://docs.edisglobal.com/ru/advanced-setup-guides/security-advisories/regresshion-openssh-vulnerability.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.