Skip to content

Exit node OpenWRT

p1neappleXpress edited this page Sep 12, 2026 · 2 revisions

Развертывание OpenFlux на OpenWrt

Технические характеристики стенда:

  • Роутер: MediaTek Filogic 820 (ARM64), OpenWrt 22.03 / 24.10+, настроенный Podkop.
  • Размещение бинарника: Наследуемый путь /usr/bin/openflux (размер ~3.1 МБ после UPX).
  • Клиент: OpenFluxAndroid

ЧАСТЬ 1. Настройка Exit Node на роутере OpenWrt

Шаг 1. Передача бинарника с телефона/ПК на роутер В Termux на смартфоне или консоли на ПК перейдите в каталог с собранным файлом и передайте его по локальной сети:

cd ~/OpenFlux
scp -O openflux root@192.168.1.1:/usr/bin/

Примечание: Флаг -O критичен для OpenWrt, так как на роутере по умолчанию отсутствует sftp-server.

Шаг 2. Настройка прав и проверка бинарника Подключитесь к роутеру по SSH (или открыв Terminal в веб-интерфейсе LuCI) и сделайте файл исполняемым:

chmod +x /usr/bin/openflux
/usr/bin/openflux --help

Успех: На экране появится список аргументов и флагов OpenFlux.

Шаг 3. Создание службы автозапуска procd с обработкой nftables Для устойчивости туннеля ядро Linux не должно отправлять TCP RST пакеты при разрывах сессий. В современных OpenWrt для этого используется nftables.

Создайте файл службы /etc/init.d/openflux, выполнив единый блок команд в терминале роутера:

cat << "EOF" > /etc/init.d/openflux
#!/bin/sh /etc/rc.common

START=99
STOP=10

USE_PROCD=1
PROG=/usr/bin/openflux
URL="ваша ссылка на Яндекс Документ, ВАЖНО: ссылка должна быть такого вида: https://disk.yandex.ru/edit/**"

start_service() {
    # Блокировка отправки RST-пакетов через nftables
    nft add table inet openflux_table 2>/dev/null
    nft add chain inet openflux_table output "{ type filter hook output priority 0; }" 2>/dev/null
    nft add rule inet openflux_table output tcp flags rst drop 2>/dev/null

    procd_open_instance
    procd_set_param command $PROG --exit-node --url "$URL"
    procd_set_param respawn
    procd_set_param stdout 1
    procd_set_param stderr 1
    procd_close_instance
}

stop_service() {
    nft delete table inet openflux_table 2>/dev/null
}
EOF

Шаг 4. Активация и запуск службы Активируйте автозапуск при загрузке роутера и запустите процесс:

chmod +x /etc/init.d/openflux
/etc/init.d/openflux enable
/etc/init.d/openflux start

Проверка статуса работы:

  1. Проверка процесса:
ps | grep openflux

В выводе должен присутствовать активный процесс /usr/bin/openflux --exit-node.

  1. Проверка системного лога:
logread -e openflux

Должны отображаться строки Mode: EXIT NODE и Transport: yandex без ошибок связи.

ЧАСТЬ 2. Настройка клиента на Android

Шаг 1. Скачиваем OpenFluxAndroid от автора. Шаг 2. В приложении нажимаем "Ввести вручную". Добавляем название тунеля и ссылку которую вы раннее скопировали. Шаг 3. Нажимаем кнопку для подключения и тестируем.

ЧАСТЬ 3. Важные нюансы, тонкие настройки и решение проблем

  1. Проблема с DNS и "Частным DNS" (Private DNS) на Android Причина: OpenFlux маскирует только TCP-трафик. Стандартные DNS-запросы системы идут по UDP (порт 53) или DoT (порт 853), из-за чего система не может отрезолвить домены или блокирует сеть.

  2. Подключение нескольких устройств (Оптимизация скорости) Причина: Яндекс Документы накладывают лимиты на пропускную способность и частоту кадров (RPS) в рамках одной комнаты совместного редактирования. Если два устройства работают через одну ссылку, их скорость делится пополам и возникают задержки синхронизации.

Решение: Для каждого активного устройства создавайте отдельный документ на Яндекс Диске (отдельную ссылку). Для роутера можно запустить второй инстанс openflux на другом порту/с другой ссылкой, прописав дополнительный инстанс в /etc/init.d/openflux


Источник: #44 — спасибо автору issue