TorBOX NG и контейнеры

Мне всегда хотелось "оформить" TorBOX Next Generation (TBNG) в виде автономного контейнера. Но вот незадача — TBNG это набор сервисов, а идеология того же Docker подразумевает подход "один сервис — один контейнер", то есть получается, что для работы докера по фэн-шую придётся наплодить несколько контейнеров, да ещё и бороться с iptables. Задачка немного сложная, и где-то бессмысленная. Однако, есть два кейса, которые имеет смысл описать в этом контексте.

Взаимодейстие TBNG и Docker

Если кто-то устанавливает TBNG на то же устройство, где уже есть или планируется запуск Docker-контейнеров, нужно помнить о двух моментах:

  • TBNG достаточно жёстко обходится с правилами iptables и фактически "перетирает" их для того, чтобы обеспечить корректный проброс пакетов в TOR. Так что требуется во-первых перезапускать демона docker после изменения режима TBNG, а во-вторых позаботиться о том, чтобы демон Docker стартовал после TBNG. Это можно сделать либо принудительным рестартом TBNG в /etc/rc.local, либо отредактировать зависимости в файлах systemd.
  • Для того, чтобы обеспечить работу контейнеров "из под TBNG", в tbng.conf в раздел LAN нужно добавить интерфейс docker0. В сервисы, работающие в Docker лучше настроить для использования socks5 или http proxy. Как правило, это можно сделать дополнительными опциями командной строки.

Второй факт, кстати следует проверить и следующий адпейт TBNG скорее всего будет посвящен совместимости с docker.

LXC-контейнер c TBNG внутри

В отличие от Docker, LXC контейнеризация довольно "расслаблено" относится к большому количеству сервисов внутри контейера, да и с persistence (сохранение данных контейнера) проблем не будет никаких. У меня лично попытка выполнить установку внутри LXC закончилась относительно успешно.

Текущая конфигурация:

  • "Домашний" сервер с джентельменским набором типа Samba, torrent, etc.
  • На нем же крутится LXC с набором контейнеров. Один из контейнеров — Ubuntu 17.04 с установленным TBNG.
  • В этот контейнер эксклюзивно проброшен WiFi интерфейс со статическим адресом.
  • У контейнера проброшены порты 9050 и 8118 наружу.

В финале — при использовании сети WiFi всё работает "как задумано", то есть весь TCP траффик WiFi-клиентов идёт через TOR/Privoxy/на прямую, в зависимоти от режима работы TBNG.

Для клиентов вне WiFi можно пользоваться прокси вида ipдомашнегосервера:9050 (socks5) или 8118 (http).

Чтобы сконфигурировать TBNG — достаточно с телефона зайти в WiFi сеть или сделать это из командой строки, подсоединившись через lxc-attach или через ssh прямо в контейнер.

Как установить LXC и запустить свой первый контейнер — читаем тут и тут. Как пробросить WiFi интерфейс — описано здесь.

Прочие тонкости:

  • На момент установки TBNG WiFi интерфейс для организации точки доступа должен быть уже проброшен в контейнер, иначе не удасться его отконфигурировать правильно.
  • DNSMasq стартует слишком рано, до того как в контейнере становится виден этот самый WiFi, поэтому имеет смысл его перезапускать ещё разок в /etc/rc.local (ну или опять-таки, отредактировать зависимости systemd).
  • Код TBNG требует очень небольшой доработки. Текущая публичная версия не содержит этот патч, однако в приватном репозитарии он уже есть.

Короче говоря план такой — более тщательно оттестировать взаимодействие TBNG и Docker, обновить документацию на эту тему, а также по созданию контейнера LXC с TBNG, да и выложить обновления всего поделия. По срокам пока не скажу, но, в любом случае спасибо, что дочитали до этого места.

На корм коту

Магазин открыт!

ещё