Skip to content

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

Description

@tronxcreeper

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

  • Роутер: 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.
2. Проверка системного лога:
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

Впервые что-то пишу на GitHub, не пинайте.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions