Termux — удобная среда для работы с сетью на Android: вы можете запускать сетевые утилиты, собирать топологии виртуальных сегментов и программно управлять маршрутизацией и политиками трафика. В этой статье мы разберём подход к построению локальных (внутрисетевых) виртуальных сетевых топологий на базе WireGuard, Open vSwitch и iptables прямо в Termux — с фокусом на контролируемость, наблюдаемость и безопасность.
Важно: мы используем VPN только для создания локальной виртуальной сети (туннеля) между узлами, чтобы управляемо маршрутизировать трафик, а не для обхода блокировок.
Архитектура и логика топологии
Типовой сценарий выглядит так:
- WireGuard поднимает защищённый туннель между узлами (например, между двумя устройствами или между устройством и мини-сервером в вашей сети).
- Open vSwitch (OVS) служит для виртуальной коммутации: мосты, порты, VLAN/flow-таблицы (в рамках доступного функционала в вашей среде).
- iptables задаёт политики фильтрации и правила NAT/forwarding, чтобы корректно направлять трафик между интерфейсами (tun/wg, виртуальными мостами, локальными интерфейсами).
Преимущества такого подхода:
- изоляция сегментов и управляемость потоков;
- возможность наращивать сложность (несколько подсетей, маршруты, политики);
- отладка по журналам OVS и логам iptables.
Подготовка окружения Termux
Перед стартом убедитесь, что у вас есть доступ к сети и возможность устанавливать пакеты. Далее используйте репозитории Termux и стандартные инструменты для сборки/установки зависимостей.
Шаги (пример):
pkg update
pkg upgrade -y
pkg install -y wget curl iptables iproute2 net-toolsДля WireGuard и OVS в Termux обычно требуется аккуратная проверка доступности пакетов и/или запуск через совместимые сборки/обёртки. Начинайте с проверки, какие компоненты вы можете запустить в вашей среде:
which wg
which ovs-vsctl
which iptables
uname -aЕсли каких-то бинарников нет, используйте официальный подход Termux: сборка из исходников или установка через доступные каналы. На Android также важно учитывать ограничения по правам и наличие CAP_NET_ADMIN — без этого часть сетевых операций не сработает.
WireGuard для локальной виртуальной сети
WireGuard создаёт интерфейс wg0 и обеспечивает маршрутизацию между узлами по туннелю. Мы рассмотрим вариант, когда каждому узлу выделяется адрес из небольшой подсети.
1) Генерация ключей
Сгенерируйте ключи на каждом узле (обозначим их как peer A и peer B).
umask 077
wg genkey > privateA.key
wg pubkey < privateA.key > publicA.key
# На peer B:
wg genkey > privateB.key
wg pubkey < privateB.key > publicB.key
cat privateA.key publicA.key2) Конфигурация интерфейса (пример)
На peer A создайте файл конфигурации, например wg0.conf:
[Interface]
Address = 10.10.0.1/24
PrivateKey = <PRIVATE_A>
ListenPort = 51820
# peer B
[Peer]
PublicKey = <PUBLIC_B>
AllowedIPs = 10.10.0.2/32
PersistentKeepalive = 25На peer B:
[Interface]
Address = 10.10.0.2/24
PrivateKey = <PRIVATE_B>
ListenPort = 51820
[Peer]
PublicKey = <PUBLIC_A>
AllowedIPs = 10.10.0.1/32
PersistentKeepalive = 253) Запуск WireGuard
wg-quick up wg0Проверка:
wg showЕсли wg-quick недоступен, можно вручную поднять интерфейс через wg setconf и ip, но обычно удобнее использовать стандартный сценарий, доступный в вашей сборке Termux.
Open vSwitch: виртуальная коммутация и привязка портов
OVS полезен, когда вы хотите:
- создать виртуальные мосты и порты для сегментов;
- управлять потоками (по возможности в вашей версии/сборке);
- вынести логику маршрутизации/перенаправления на уровень виртуальной коммутации (в сочетании с iptables).
Если ваша цель — просто связать подсети/интерфейсы между собой, можно начать с минимального мостового сценария.
1) Создание моста
ovs-vsctl add-br br0
ovs-vsctl show2) Добавление портов
Добавьте интерфейсы в мост. В зависимости от вашей среды имена интерфейсов могут отличаться. Предположим, что вы хотите привязать виртуальный интерфейс WireGuard (wg0) и локальный интерфейс (например, условно eth0 или wlan0).
В реальности на Android интерфейсы обычно не такие, как на сервере Linux, и могут требовать согласования. Начните с определения:
ip link showПосле этого добавьте порты (пример):
ovs-vsctl add-port br0 wg0
# пример локального порта:
# ovs-vsctl add-port br0 wlan0Примечание: прямое добавление некоторых сетевых интерфейсов в OVS может требовать дополнительных параметров/прав. Если в вашей среде это недоступно, вы можете работать через отдельные veth-пары или сетевые namespace (если доступны).
3) Проверка потока/статуса
Базовая диагностика:
ovs-ofctl show br0
ovs-vsctl list interfaceДля углублённого контроля смотрите логи OVS и счётчики портов (в зависимости от того, как собран пакет).
iptables: фильтрация, форвардинг и NAT
Когда WireGuard и OVS уже подняты, вам нужна финальная стыковка: кому разрешено пересылать трафик и как маршрутизировать между сегментами. Именно здесь iptables задаёт политику.
Рекомендуемая стратегия
- Сначала разрешите минимальный набор трафика (например, установление соединений и нужные подсети).
- Затем включите форвардинг и (при необходимости) NAT.
- Добавьте логирование с ограничением частоты для отладки.
1) Включение IP-форвардинга
sysctl -w net.ipv4.ip_forward=1Если sysctl недоступен, используйте проверяемый альтернативный подход в вашей сборке. Обычно нужны права администратора в пределах Android/Linux-контекста.
2) Базовые правила фильтрации
Допустим, вы хотите разрешить:
- трафик из локальной сети в туннель;
- возврат трафика по established/related;
- отсечение остального.
Пример для цепочек FORWARD:
iptables -P FORWARD DROP
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Разрешить трафик из wg0 в br0 (пример)
iptables -A FORWARD -i wg0 -o br0 -s 10.10.0.0/24 -d 192.168.0.0/16 -j ACCEPT
# Разрешить обратный трафик при необходимости (если используете маршруты)
# iptables -A FORWARD -i br0 -o wg0 -s 192.168.0.0/16 -d 10.10.0.0/24 -j ACCEPTПодставляйте реальные подсети и интерфейсы. Если вы не используете NAT и маршруты корректно настроены, то правила FORWARD могут отличаться.
3) NAT (маскарадинг) при необходимости
NAT часто требуется, когда ваши подсети конфликтуют или когда устройство за WireGuard не имеет маршрутов обратно. Пример маскарадинга для трафика, выходящего из туннеля:
# Маскарадинг при выходе через wg0
iptables -t nat -A POSTROUTING -o wg0 -s 192.168.0.0/16 -j MASQUERADEЕсли у вас другая логика (например, наоборот), меняйте -o/-s. Всегда тестируйте с tcpdump (если доступен) и логированием.
4) Логирование для диагностики
Осторожно используйте логирование: лучше ограничивать скорость.
iptables -A FORWARD -m limit --limit 5/min -j LOG --log-prefix "FW_DROP: " --log-level 4Для локальной отладки на Android просматривайте системные логи. Схема зависит от вашей оболочки/прав.
Склейка: пример целостной схемы (концептуально)
Один из практичных вариантов интеграции выглядит так:
- Поднимаем WireGuard (
wg0) между peer A и peer B. - Создаём мост (
br0) в OVS. - Привязываем нужные интерфейсы/возможно veth-устройства к мосту.
- Включаем форвардинг.
- Настраиваем iptables: FORWARD и (при необходимости) NAT.
Конфигурации и имена интерфейсов всегда нужно адаптировать под вашу конкретную среду.
Отладка и проверка связности
Минимальный чек-лист:
- WireGuard:
wg show(есть ли handshake, RX/TX). - Интерфейсы:
ip addr,ip link show. - OVS:
ovs-vsctl show,ovs-ofctl show br0. - iptables:
iptables -S, счётчики правил-v(если используете).
Пинги и трассировка:
ping -c 3 10.10.0.2
# если есть доступ к traceroute:
# traceroute 10.10.0.2Если пинг не проходит, последовательно проверяйте: маршруты (таблица маршрутизации), форвардинг, политику FORWARD и наличие NAT там, где он нужен.
Типичные проблемы на Android/Termux
- Недостаток прав (нет доступа к CAP_NET_ADMIN): сетевые операции могут не применяться.
- Несовпадение имён интерфейсов (вместо
eth0/wlan0могут быть другие или меняются при перезапуске). - Ограничения по выполнению OVS: иногда требуется отдельная схема запуска/сборки.
- Маршруты и политики: iptables может блокировать FORWARD, если забыли включить
ESTABLISHED,RELATED. - NAT там, где маршрутизация уже есть: это может усложнить диагностику и привести к асимметрии.
Безопасность и практики
Чтобы топология была управляемой и безопасной:
- Ограничивайте
AllowedIPsв WireGuard строго нужными подсетями. - Используйте принцип «минимум разрешений» в iptables: сначала drop, затем allow по нужным направлениям.
- Добавляйте логирование с лимитами только на время отладки.
- Документируйте подсети и соответствие интерфейсов (wg0, br0, локальные сегменты).
Заключение
Тонкая настройка сети в Termux становится особенно интересной, когда вы объединяете WireGuard (защищённая локальная виртуальная сеть), Open vSwitch (коммутация и логика виртуальных портов) и iptables (точные политики фильтрации/маршрутизации/NAT). Такой стек позволяет строить и расширять виртуальные топологии, сохраняя контроль над тем, какие потоки разрешены и как именно трафик проходит через каждый слой.
Если хотите, чтобы у вашей топологии была корректная схема маршрутизации, безопасные правила фильтрации и аккуратная диагностика под ваши условия (устройства, подсети, ограничения Android), команда РыбинскЛАБ поможет подобрать архитектуру и выполнить внедрение.
Услуги РыбинскЛАБ: консультации по построению сетей в Termux, помощь с WireGuard/OVS/iptables интеграцией, настройка безопасных правил и обучение практическому разбору инцидентов сети.