Сегодня мы поговорим о том, как установить и настроить Clash.Meta Kernel на маршрутизаторе с прошивкой OpenWrt без обвязок с избыточным функционалом. Ранее я уже рассказывал о различных способах централизованного выборочного обхода блокировок, включая использование OpenClash и v2rayA. В этом материале я хочу поделиться более легким и оптимизированным вариантом, который сделал для себя – SSClash. Его легко установить, легко посмотреть скрипты и правила в репозитории на GitHub и, при необходимости, внести правки для себя. Меньше кода - больше понимания как это работает. Наслаждайтесь. Простая установка, удобный веб-интерфейс и yacd (Yet Another Clash Dashboard).

Шаг 1: Обновление списка пакетов

Начнем с обновления списка пакетов на вашем маршрутизаторе.

opkg update

Шаг 2: Установка необходимых модулей

Для работы с nftables потребуется установить соответствующий модуль ядра.

opkg install kmod-nft-tproxy

Для iptables (если у вас версия OpenWrt < 22.03.x) – iptables-mod-tproxy.

Шаг 3: Загрузка и установка пакета luci-app-ssclash

Скачиваем пакет luci-app-ssclash и устанавливаем его.

curl -L https://github.com/zerolabnet/ssclash/releases/download/v1.8.1/luci-app-ssclash_1.8.1-1_all.ipk -o /tmp/luci-app-ssclash_1.8.1-1_all.ipk
opkg install /tmp/luci-app-ssclash_1.8.1-1_all.ipk
rm /tmp/*.ipk

Остановите службу, пока не отредактируете конфигурацию.

/etc/init.d/clash stop

Шаг 4: Загрузка ядра Clash.Meta

Перейдите в директорию bin и загрузите ядро Clash.Meta, подходящее для вашей архитектуры.

cd /opt/clash/bin

Для amd64 архитектуры:

curl -L https://github.com/MetaCubeX/mihomo/releases/download/v1.18.9/mihomo-linux-amd64-compatible-v1.18.9.gz -o clash.gz

Для arm64 архитектуры:

curl -L https://github.com/MetaCubeX/mihomo/releases/download/v1.18.9/mihomo-linux-arm64-v1.18.9.gz -o clash.gz

Для mipsel_24kc архитектуры:

curl -L https://github.com/MetaCubeX/mihomo/releases/download/v1.18.9/mihomo-linux-mipsle-softfloat-v1.18.9.gz -o clash.gz

Если ваша архитектура другая, зайдите на страницу релизов MetaCubeX и выберите нужную версию.

Шаг 5: Подготовка исполняемого файла Clash

Распакуйте загруженный файл и сделайте его исполняемым.

gunzip clash.gz
chmod +x clash

Шаг 6: Управление Clash из интерфейса LuCI

Я написал простой интерфейс для управления Clash из интерфейса LuCI luci-app-ssclash. Отредактируйте конфигурацию Clash и примените её.

Шаг 7: Вы можете получить доступ к Dashboard из интерфейса LuCI или вручную

Вы можете получить доступ к Dashboard по адресу:

http://ROUTER_IP:9090/ui/

Таким образом, вы получите оптимизированное и легкое решение для управления обходом блокировок на вашем маршрутизаторе с OpenWrt.

Удаление Clash

Если вам нужно удалить Clash, удалите все связанные файлы, пакет luci-app-ssclash и модуль ядра kmod-nft-tproxy или iptables-mod-tproxy.

opkg remove luci-app-ssclash kmod-nft-tproxy
rm -rf /opt/clash

Дополнительная информация (необязательно): Автоматическое обновление правил Clash в OpenWrt при поднятии Интернет-интерфейса

Для того чтобы автоматически обновлять правила для Clash при поднятии Интернет-интерфейса в OpenWrt, выполните следующие действия:

Создание Shell-скрипта

1. Откройте терминал и создайте новый shell-скрипт с именем 40-clash_rules в директории /etc/hotplug.d/iface/:

vi /etc/hotplug.d/iface/40-clash_rules

2. Вставьте следующий код скрипта (при необходимости измените api_base_url):

#!/bin/sh

# Add delay
sleep 10

# API IP address and port
api_base_url="http://192.168.1.1:9090"

# API URL
base_url="$api_base_url/providers/rules"

# Get JSON response with provider names
response=$(curl -s "$base_url")

# Extract provider names using standard utilities
providers=$(echo "$response" | grep -o '"name":"[^"]*"' | sed 's/"name":"\([^"]*\)"/\1/')

# Check if data retrieval was successful
if [ -z "$providers" ]; then
  echo "Failed to retrieve providers or no providers found."
  exit 1
fi

# Loop through each provider name and send PUT request to update
for provider in $providers; do
  echo "Updating provider: $provider"
  curl -X PUT "$base_url/$provider"

  # Check success and output the result
  if [ $? -eq 0 ]; then
    echo "Successfully updated $provider"
  else
    echo "Failed to update $provider"
  fi
done

# Service restart
/etc/init.d/clash reload

3. Сохраните и выйдите из редактора.

Это гарантирует, что правила для Clash будут обновлены сразу при поднятии Интернет-интерфейса в случае перезагрузки роутера.


Исходный код опубликован на GitHub:

GitHub - zerolabnet/ssclash: Super Simple Clash – centralized blocking bypass on OpenWrt using Clash.Meta Kernel
Super Simple Clash – centralized blocking bypass on OpenWrt using Clash.Meta Kernel - zerolabnet/ssclash