Проксируем OpenVPN с помощью Cloak для обхода блокировок.
https://ipscore.me | https://t.me/ipscore_bot | https://t.me/ip_score_checker_botРуководство состоит из:
- Предисловие
- Описание работы Cloak
- Настройка сервера Cloak
- Настройка клиента Cloak на OpenWRT
- Настройка клиента 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). Вам потребуется выполнить следующие шаги: 🖥️
- Загрузите исполняемый файл с официального сайта проекта на 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 файл клиента для архитектуры вашего роутера.
- Определите архитектуру вашего роутера с помощью команды:
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.
- Перейдите в раздел VPN – OpenVPN.
Редактируем текущую конфигурацию:
- Замените в строке remote адрес вашего сервера OpenVPN и порт на 127.0.0.1 1984, или используйте другой порт, если вы изменили значение 1984.
- Сохраните внесенные изменения.
- Далее перейдите в раздел Сеть – Маршрутизация.
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, пользователи могут настраивать надежное и эффективное соединение, которое остается незамеченным для цензоров.
Следует отметить, что при использовании таких технологий важно соблюдать законы и правила вашей страны и провайдера интернет-услуг. Безопасное и анонимное использование интернета важно, но также важно соблюдать законы и регуляции, чтобы избежать нежелательных последствий.
Мы надеемся, что эта статья была полезной для вас, и что вы сможете использовать этот метод, чтобы оставаться связанными с миром в условиях строгой интернет-цензуры. Будьте в безопасности и сохраняйте доступ к свободному интернету.