Проксируем OpenVPN с помощью Cloak для обхода блокировок.

Проксируем OpenVPN с помощью Cloak для обхода блокировок.

https://ipscore.me | https://t.me/ipscore_bot | https://t.me/ip_score_checker_bot

Руководство состоит из:

  1. Предисловие
  2. Описание работы Cloak
  3. Настройка сервера Cloak
  4. Настройка клиента Cloak на OpenWRT
  5. Настройка клиента OpenVPN

1. Предисловие 📖

В данной статье рассматривается способ установки и настройки прокси Cloak из репозитория автора проекта на Github. Уже несколько лет существует коробочное решение от Amnezia VPN c клиентами для Windows, Mac, Linux, Android и iOS (iOS поддерживает Cloak начиная с версии 3.08). Здесь мы рассмотрим установку чистого Cloak для существующего сервера OpenVPN (если такого сервера у вас нет, можно воспользоваться множеством решений в интернете, например этим) Способ описанный в статье является не самым лучшим и актуальным средством обхода блокировок, стоит обратить внимание на более свежие решения (Пользователь @MiraclePtr исчерпывающе описал существующие на данный момент способы).

Этот материал представляет собой результат моего опыта работы с инструментом Cloak и является практическим руководством по настройке OpenVPN на OpenWRT через этот инструмент. 🔍



2. Описание работы Cloak 🔐


Cloak представляет собой мощный инструмент, предназначенный для обхода цензуры и фильтрации данных, который можно интегрировать с такими прокси-инструментами, как OpenVPN, Shadowsocks и Tor. Этот инновационный подход позволяет маскировать прокси-трафик под обычную активность просмотра веб-страниц и делает его трудным для обнаружения. 🌐

Cloak не просто создает дополнительный слой шифрования, как многие другие инструменты. Вместо этого он переводит всю передаваемую информацию в формат HTTPS-трафика, что делает его крайне сложным для фильтрации и блокировки даже при использовании глубокой проверки пакетов.

Уникальной особенностью Cloak является возможность сервера аутентифицировать соединение сразу после получения первого пакета данных. Если аутентификация не проходит успешно, Cloak переходит в режим моста и остается незаметным для наблюдателей.

Процесс аутентификации начинается с генерации статической пары ключей Диффи-Хеллмана с эллиптической кривой, которые распространяются среди потенциальных клиентов. При попытке подключения клиент генерирует дополнительную эфемерную пару ключей ECDH, и общий секрет используется для симметричного шифрования информации, такой как идентификатор клиента (UID).

Сервер Cloak проверяет полученный пакет данных и вычисляет общий секрет на основе частной части предварительно сгенерированного ключа и открытой части эфемерного ключа клиента. Затем UID расшифровывается и проверяется в базе данных для аутентификации.

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

Таким образом, Cloak обеспечивает высокий уровень безопасности и надежности при обходе цензуры, а также позволяет использовать различные прокси-серверы для максимальной анонимности и доступности.

3. Настройка сервера Cloak 🛠️

Для настройки сервера Cloak, давайте рассмотрим пример на операционной системе Debian 11 (amd64). Вам потребуется выполнить следующие шаги: 🖥️

  1. Загрузите исполняемый файл с официального сайта проекта на Github
wget https://github.com/cbeuw/Cloak/releases/download/v2.7.0/ck-server-linux-amd64-v2.7.0 -O ck-server

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

chmod +x ck-server

3. Переместите файл в каталог /usr/bin (требует прав администратора):

sudo mv ck-server /usr/bin/ck-server

4. Сгенерируйте публичные и приватные ключи Cloak:

/usr/bin/ck-server -key

5. Вам будут предоставлены публичный и приватный ключи. Сохраните их, они понадобятся вам позже.

Your PUBLIC key is:

dnc7/Tbif51pXZ6EcWwc2367rHAbzVOzlzJ4qyS1uC4=

Your PRIVATE key is (keep it secret):

ULn0VAREq6zgk3kVOUYTbauwhKOGK48nRDibL5wLans=

6. Сгенерируйте UID для пользователя и администратора:

/usr/bin/ck-server -uid
/usr/bin/ck-server -uid

7. Вам будут предоставлены UID для пользователя и администратора. Сохраните их.

Your UID is: w2S8IMf/T4/TAC7MJZQlWw== #Пользователь USER_UID1
Your UID is: 9bNJTRNEaN3iwljIAT2U+Q== #Администратор ADMIN_UID

Сохраняем эти данные.

UID для следующих пользователей генерируются тем же образом, путём запуска команды.

Так же необходимо уточнить параметры вашего сервера OpenVPN, например, так

sudo cat /etc/openvpn/server.conf

в примере это OpenVPN UDP и порт 51000.

8. Далее подготавливаем конфигурацию сервера /etc/cloak/ckserver.json

Создадим папку и файл следующего содержания

sudo mkdir /etc/cloak
sudo nano /etc/cloak/ckserver.json

Вставьте следующую конфигурацию и замените значения на полученные ранее:

{
  "ProxyBook": {
    "openvpn": [
      "udp",
      "127.0.0.1:51000"
    ]
  },
  "BindAddr": [
    ":443",
    ":80"
  ],
  "BypassUID": [
    "w2S8IMf/T4/TAC7MJZQlWw=="
  ],
  "RedirAddr": "dzen.ru",
  "PrivateKey": "ULn0VAREq6zgk3kVOUYTbauwhKOGK48nRDibL5wLans=",
  "AdminUID": "9bNJTRNEaN3iwljIAT2U+Q==",
  "DatabasePath": "userinfo.db"
}

Сюда вводим ваши полученные ранее значения.

В примере это:

"ProxyBook": "openvpn" - вводим "udp" и порт 51000

В "PrivateKey" ULn0VAREq6zgk3kVOUYTbauwhKOGK48nRDibL5wLans=

В "AdminUID" 9bNJTRNEaN3iwljIAT2U+Q==

В "BypassUID" w2S8IMf/T4/TAC7MJZQlWw== (при наличии нескольких пользователей каждый UID вводится в кавычках на отдельной строке, как в примере)

9. Сохраните изменения.

10. Создайте службу systemd для автозапуска:

sudo nano /etc/systemd/system/cloak-server.service

Вставьте следующую конфигурацию:

[Unit]
Description=cloak-server
After=network.target
StartLimitIntervalSec=0

[Service]
Type=simple
#Service variables
Environment=CONFIG="/etc/cloak/ckserver.json"
ExecStart=/usr/bin/ck-server -c "$CONFIG"
Restart=always

[Install]
WantedBy=multi-user.target

11. Сохраните изменения и выполните следующие команды для активации службы:

sudo systemctl daemon-reload
sudo systemctl enable cloak-server.service
sudo systemctl start cloak-server.service

12. Убедитесь, что порты 80 и 443 открыты в настройках вашего файрволла.

13. Настройте ваш сервер OpenVPN, убедившись, что конфигурация /etc/openvpn/server.conf содержит следующие строки:

# So that OpenVPN is listening to ck-server
local 127.0.0.1
dev tun

14. Перезагрузите сервер OpenVPN:

sudo /etc/init.d/openvpn restart

Теперь ваш сервер Cloak настроен и готов к работе с сервером OpenVPN. Перейдем к настройке клиента.

4. Настройка клиента Cloak на OpenWRT 📡

Для настройки клиента Cloak на OpenWRT рекомендуется использовать роутер с минимум 128 МБ оперативной памяти и более чем 16 МБ дискового пространства. Ниже приведен пример настройки для OpenWRT версии 22.03.5. 🔄

Необходимо скачать с Github файл клиента для архитектуры вашего роутера.

  1. Определите архитектуру вашего роутера с помощью команды:
cat /sys/devices/system/cpu/modalias | grep -r -E -o ".{0,4}type.{0,6}"

На выходе вы получите информацию об архитектуре вашего устройства.(В моём случае TP-Link Archer C6U):

cpu:type:mips:

2. Далее ищем пакет для архитектуры MIPS - Release v2.7.0 · cbeuw/Cloak (github.com).

Так как в репозитории Github есть версии для Mips и mipsle рекомендую сверится с OpenWRT Table of Hardware Wiki для вашего устройства.

Для TP-Link Archer C6U - архитектура mipsle (он же mipsel)

Скачиваем по ссылке на роутер при помощи wget:

cd /tmp
wget https://github.com/cbeuw/Cloak/releases/download/v2.7.0/ck-client-linux-mipsle_softfloat-v2.7.0 -O ck-client

В моём случае подошла версия mipsle-softfloat, если на более позднем этапе установки выдаст ошибку "line 1: syntax error: unexpected "(" , то сверьтесь ещё раз с OpenWRT wiki и попробуйте версию mipsle.

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

chmod +x /tmp/ck-client

4. Проверьте работу программы:

./tmp/ck-client --help

Если получите справку по командам, переходите к следующему шагу. В противном случае вернитесь к шагу 2 и проверьте выбор архитектуры.

5. Переместите файл ck-client в /usr/bin (ПЗУ):

mv /tmp/ck-client /usr/bin/ck-client

6. Далее подготавливаем конфигурацию клиента.

Создадим папку конфигурации

mkdir /etc/config/cloak

И сам файл

/etc/config/cloak/ckclient.json:
{
"Transport": "direct",
"ProxyMethod": "openvpn",
"EncryptionMethod": "aes-gcm",
"UID": "w2S8IMf/T4/TAC7MJZQlWw==",
"PublicKey": "dnc7/Tbif51pXZ6EcWwc2367rHAbzVOzlzJ4qyS1uC4=",
"ServerName": "dzen.ru",
"NumConn": 4,
"BrowserSig": "chrome",
"StreamTimeout": 300
}

Замените значения UID и PublicKey на те, которые вы получили на сервере Cloak. Сохраните файл.

7. Создайте службу автозапуска Cloak:

Создайте файл /etc/init.d/cloak со следующим содержанием:

#!/bin/sh /etc/rc.common
USE_PROCD=1
START=89
STOP=90
PROG=/usr/bin/ck-client
HOST="0.0.0.0"
PORT="1984"
CONFIG="/etc/config/cloak/ckclient.json"

start_service() {
procd_open_instance
procd_set_param user root
procd_set_param command "HOST" -u -l "CONFIG"
procd_set_param stdout 1
procd_set_param stderr 1
procd_set_param respawn ${respawn_threshold:-3600} ${respawn_timeout:-5} ${res
procd_close_instance
echo "Cloak is working!"
}

stop_service() {
service_stop $PROG
echo "Cloak has stopped!"
}

reload_service() {
stop
sleep 5s
echo "Cloak restarted!"
start
}

Вносим в HOST IP адрес вашего OpenVPN сервера.

PORT меняем по желанию, по умолчанию 1984 (это локальный порт роутера 127.0.0.1 к которому будет подключаться клиент OpenVPN).

В зависимости от настроек вашего сервера рас/закомментируем строки OpenVPN UDP и TCP.


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

chmod +x /etc/init.d/cloak

9. Настройте автозапуск:

ln -s /etc/init.d/cloak /etc/rc.d/S89Cloak

10. Запустите Cloak:

/etc/init.d/cloak start

Теперь можно переходить к настройке клиента OpenVPN.


5. Настройка клиента OpenVPN 🔗

Для настройки клиента OpenVPN внесите следующие изменения в конфигурацию, используя интерфейс LuCI.

  1. Перейдите в раздел VPN – OpenVPN.

Редактируем текущую конфигурацию:

  1. Замените в строке remote адрес вашего сервера OpenVPN и порт на 127.0.0.1 1984, или используйте другой порт, если вы изменили значение 1984.
  2. Сохраните внесенные изменения.
  3. Далее перейдите в раздел Сеть – Маршрутизация.

4. Добавьте новый маршрут через шлюз по умолчанию до вашего VPN сервера.


  • В поле Target введите IP-адрес вашего VPN сервера с подсетью /32 (это означает один IP-адрес).
  • В поле Gateway укажите ваш шлюз по умолчанию (вы можете найти эту информацию в настройках подключения к интернету).
  • Выберите ваш Interface из выпадающего списка.

5. Сохраните настроенный маршрут.

6. Вернитесь в раздел VPN - OpenVPN.

7. Перезапустите подключение к серверу OpenVPN.

8. После перезапуска проверьте работоспособность OpenVPN.

Для использования Cloak существуют клиенты для Windows, Mac, Linux и Android. На данный момент настройка OpenVPN через Cloak на iOS невозможна, однако ShadowRocket поддерживает Shadowsocks over Cloak.

Важные замечания:

  • Если вы используете SELinux, убедитесь, что файл помечен правильной меткой, чтобы избежать проблем с работой сервиса:
chcon -t bin_t /usr/bin/ck-server
  • Во время отладки настроек сервера рекомендуется использовать команду для мониторинга:
journalctl -u cloak-server.service -f

В завершение статьи

Этот метод проксирования, используя Cloak и OpenVPN, представляет собой мощное средство обхода блокировок в России и других странах, где доступ к интернету ограничивается. Благодаря инновационным технологиям, используемым Cloak, и гибкости OpenVPN, пользователи могут настраивать надежное и эффективное соединение, которое остается незамеченным для цензоров.

Следует отметить, что при использовании таких технологий важно соблюдать законы и правила вашей страны и провайдера интернет-услуг. Безопасное и анонимное использование интернета важно, но также важно соблюдать законы и регуляции, чтобы избежать нежелательных последствий.

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


Report Page