OpenWRT — Шифруем трафик с помощью Tor

Друг мой, данную статью я хочу начать не с прелюдий, а просто поставить перед фактами, чтобы объяснить свою позицию:

  • Tor — анонимная распределенная сеть, помогающая сохранить анонимность в интернете, об этом многие знают, однако не будь абсолютно уверен, что наличие доступа к этой сети тебя обезопасит от кого-либо и/или чего-либо
  • Возможно, в твоей стране данная сеть запрещена законодательством. Тут главное выполнить два простых условия — во-первых не нарушать закон, во-вторых не париться и забить.
  • Я против наркотиков, нелегального оружия, детской порнографии и прочей ереси. К чему это я? Ну думаю, ты поймешь
  • Все что ты собираешься сделать в этой анонимной сети — это только на твоей совести и ответственности. И еще раз — в сети Tor есть слабые места, которые тебя могут деанонимизировать

Ну а теперь традиционные прилюдии.
Идея этой статьи в моей голове кружила с осени. Тогда я для собственного опыта в первый раз подружил OpenWRT и Tor, однако вопросы эстетики и легальности смущали.
Но вот за прошедшие месяцы я несколько раз сталкивался с ситуациями, когда мой доступ к ресурсам в интернете ограничивали не ребята из роспотребнадзора или органов иных стран, а сами вебмастера.

Да-да, санкции: по Европе пронеслась волна протестов, мол «злых россиян» не хотели не только впускать в гости в реальной жизни, так еще ограничили доступ к интернет-ресурсам.
В итоге я осознал, что сеть Tor может принести пользу и в легальных задачах.
Так что приступаем.

Системные требования

По официальным мануалам Ваше устройство должно обладать не менее чем:

  • Оперативная память — 64 Мб
  • Флеш-память — 32 Мб
  • Процессор — 700МГц

Моя первая мысль была развернуться и уйти, что я впрочем то и сделал. Но потом все таки решил сделать пару допущений, что покупать дорогущий роутер в принципе ни к чему.

Итак, я взял уже упоминаемый ни раз ранее роутер — TP-Link TL-WR842ND/v2 и флешку.
В течении пары недель я несколько раз пересобирал прошивку, облегчая жизнь роутеру, в итоге вроде вышло сносно.

Итак, вполне приемлемые требования:

  • Оперативная память — 32 Мб
  • Флеш-память — 8 Мб
  • Процессор — 500МГц
  • USB-порт

Tor — весьма тяжелая штуковина, по этому советую не доустанавливать пакеты, а собрать с нуля со всеми ниже изложенными рекомендациями.

make menuconfig

Сборка прошивки OpenWRT с прозрачным прокси-сервером Tor

Необходимые пакеты

Конечно же, нам необходим Tor:

Network  --->
   -*- tor
   <*> tor-geoip

Так же нам понадобится расширение для iptablesnat-extra

Network  --->
   Firewall  --->
      <*> iptables
         <*> iptables-mod-nat-extra

Так же не забываем, что будем подключать USB-флешку:

Base system  --->
   <*> block-mount
Kernel modules  --->
   Filesystems  --->
      <*> kmod-fs-ext4
   USB Support  --->
      -*- kmod-usb-core
      <*> kmod-usb-storage
      <*> kmod-usb2

Рекомендации по сборке прошивки

Tor очень требователен к оперативной памяти, посему рекомендую максимально уменьшить все исполняемые файлы, ибо таким же образом мы освободим оперативу, и уменьшим нагрузку на swap-раздел.
Для этого:

  1. Отключаем отладочную информацию
  2. Удаляем неиспользуемый код из бинарных файлов и ядра
  3. Отказываемся от SSH
  4. Отказываемся от IPv6

Помимо этого, необходимо подобрать общие ключи сборки, в народе именуемые как CFLAGS, чтобы найти баланс между оптимизаций и размером потребляемой памяти.
Для своего TP-Link TL-WR842N/ND v2 я остановился на следующем варианте:

[*] Advanced configuration options (for developers)  --->
   [*] Target Options  --->
      Target Optimizations
-Os -pipe -mno-branch-likely -march=74kc -mdspr2

Тут мы четко указали архитектуру процессора -march=74kc, а так же что наш экземпляр обладает поддержкой DSPr2 — -mdspr2. При этом, чтобы сэкономить всё ту же оперативную память — оставил оптимизацию по размеру -Os

Не знаю, на сколько хорошо компилятор умеет оптимизировать код под этот набор инструкций, но решил что хуже не будет, если дать ему возможность провернуть подобные оптимизации.

При подготовки к сборке мы особо больше ничем помочь не можем, начинаем сборку

make -j3 V=-1

Пока идет сборка — берем флешку и размечаем её.
Нам понадобится немного раздела подкачки (swap) и раздел для extroot.
Для эксперимента я для свапа взял 128мбайт, чего хватило с диким избытком (не более 8мбайт используется в итоге), остальное — файловая система ext2, в целом нам хватило бы флешки с совокупным объемом в 512мбайт за глаза.

Настройка OpenWRT с Tor

Ждем пока прошивка собирется, прошиваем устройство, подключаем флешку и подключаемся.
Я, как и раньше говорил, сторонник веб-интерфейса, хоть и в командной строке чувствую себя комфортно.
В общем заходим в веб-интерфейс LuCI
Там идем в СистемаЗагрузка
Отключаем и останавливаем Tor
Он пока нам ни к чему, только память кушать будет.
Теперь подключаем нашу флешку, об этом подробно писал ранее в статье Подключение — usb-диска.

Теперь надо сесть и подумать, кого мы будем заворачивать в сеть Tor.
Я решил для этих задач создать отдельную подсеть WiFi.

Создаем WiFi сеть

Идем в веб-интерфейсе в СетьWi-Fi
Напротив беспроводной сетевой карты жмем Добавить
Тут всё как обычно, кроме одного НО:
В разделе Конфигурация интерфейсаОсновные настройки есть параметр Сеть — тут необходимо создать новую и для отсутствия путаницы дать очевидное краткое название tor
Все остальные действия, уверен, вы и без меня сделаете.

Настройка подсети

Нам необходимо, чтобы клиентам созданной беспроводной сети выдавались IP адреса.
Для этого необходимо отредактировать интерфейс.
СетьИнтерфейсы
Редактируем нашу беспроводную сеть.

Общая конфигурация

Основные настройки
  • Протокол — Статический адрес
  • IPv4-адрес — 192.168.0.1 (или из любой другой незанятой подсети)
  • Маска сети IPv4 — 255.255.255.0
  • IPv4-адрес шлюза — пусто
  • Широковещательный IPv4-адрес — пусто
  • Использовать собственные DNS-серверы — пусто
Настройки межсетевого экрана

Создадим новую зону для фаервола

  • Создать / назначить зону сетевого экрана — tor

DHCP-сервер

Основные настройки
  • Игнорировать интерфейс — нет
  • Запустить — 2
  • Предел — 254
  • Время аренды — 2m

Остальное в настройках интерфейса можно не трогать.

Правила для фаервола

Для нашей новой сети/зоны tor фаервол понятия не имеет что можно делать, а что нельзя.
Надо исправить ситуацию.
Идем в СетьМежсетевой экран

Общие настройки

Здесь нам надо настроить зону tor. Редактируем её:

  • Входящий — Отвергать
  • Исходящий — Принимать
  • Перенаправление — Отвергать
  • Маскарадинг — нет
  • Ограничение MSS — нет
  • Использовать сети — имя вашей беспроводной сети

Чуть ниже на странице еще два параметра:

  • Разрешить перенаправление в зоны назначения: только wan
  • Разрешить перенаправление из зон-источников: пусто

Жмем сохранить и применить.

Правила для трафика

В предыдущем пункте в настройке зоны мы запретили вообще весь трафик с интерфейса tor, вплоть до того, что устройства даже не смогут достучаться до нашего DHCP-сервера.
Тут мы исправил это недоразумение.
Добавим два правила:

Allow DNS Queries
  • Использовать только семейство протоколов — Только IPv4
  • Протокол — udp
  • Соответствовать ICMP типу — пусто
  • Зона-источник — tor
  • MAC-адрес источника — пусто
  • Адрес источника — пусто
  • Порт источника — пусто
  • Зона назначения — Устройство (ввод)
  • Адрес назначения — пусто
  • Порт назначения — 53
  • Действие — принимать
Allow DHCP Request
  • Использовать только семейство протоколов — Только IPv4
  • Протокол — udp
  • Соответствовать ICMP типу — пусто
  • Зона-источник — tor
  • MAC-адрес источника — пусто
  • Адрес источника — пусто
  • Порт источника — пусто
  • Зона назначения — Устройство (ввод)
  • Адрес назначения — пусто
  • Порт назначения — 67-68
  • Действие — принимать

Пользовательские правила

Здесь почти что момент истины — сюда добавим два правила, которые завернут весь трафик пользователей в Tor:

iptables -t nat -A PREROUTING -i wlan0-1 -p udp --dport 53 -j REDIRECT --to-ports 9053
iptables -t nat -A PREROUTING -i wlan0-1 -p tcp --syn -j REDIRECT --to-ports 9040

Здесь wlan0-1 — интерфейс нашей беспроводной сети.

Но и на этом не все.

Настройка Tor

Теперь необходимо настроить сам Tor. Для этого необходимо подключиться к устройству через терминал.

vi /etc/tor/torrc

Сначала мне конфиг показался огромным, но разобравшись в необходимых параметрах снес всё и оставил только действительно нужные строки:

RunAsDaemon 1

User tor

TransPort 192.168.0.1:9040
DNSPort 192.168.0.1:9053
VirtualAddrNetworkIPv4 10.192.0.0/10
AutomapHostsOnResolve 1

DataDirectory /etc/tor/lib

Обратите внимание на DataDirectory — по умолчанию Tor складывает свои файлы в /var/lib/tor, а в OpenWRT каталог /var является ссылкой на /tmp, то есть весит в памяти. Таким образом мы с вами чуть не словили потерю около 5мбайт и без того почти забитой полностью оперативной памяти.

Не забудем создать каталог, который обозначили для хранения данных:

mkdir /etc/tor/lib
chown tor:tor /etc/tor/lib -R

Ну вот и настал момент истины.
В веб интерфейсе обратно включаем запуск прокси-сервера Tor и перезагружаем устройство:

~# reboot

SpeedTest показал 5мбит/с, что по мне так для серфинга практически за глаза.

Кстати, друзья, теперь за всеми свежими и важными записями можете следить прямо из паблика ВКонтакте.

Подпишись в один клик:

Комментариев: 11

  1. Приветствую! Спасибо за статью! Но, у меня не взлетело. По ходу тор обновил пакет и конфиги тупо не совпадают. С конфигом из статьи тор не запускается. Еще вопрос по строчке:

    Здесь wlan0-1 — интерфейс нашей беспроводной сети.

    Мы же вроде создавали интерфейс Tor для вайфая, или это что-то другое?

    • У меня именуется как Tor — зона для фаервола и SSID беспроводной сети.
      wlan0-1 — сам интерфейс, соответствующий этой сети. список всех интерфейсов активных можно посмотреть, например, командой ifconfig.

      Моя прошивка действительно уже тоже не подключается к Tor, ибо с момента написания статьи видел несколько новостей о масштабных устранениях «багов».
      Возможно, необходимо собираться прошивку только из trunk’а последней версии.

      На данный момент не могу проверить все предположения.

      Попробуйте запустить из консоли tor отдельно и посмотреть весь ход загрузки. А главное, учтите, что на соединение требуется некоторое время.

  2. Добрый день.
    Настраивал на Archer C7 v2.0(128MB RAM, 8MB Flash) Open WRT ver 15.05.
    Без подержки USB диска.
    Все сделал как в статье, но от Wi-fi клиентов шли только пинги во внешку и ответы обратно.

    У меня TOR не пускал трафик без таких параметров в torrc
    DNSListenAddress 192.168.2.1
    TransListenAddress 192.168.2.1

    # 192.168.2.1 — это интерфейс wi-fi сети, он же wlan1-1 (аналог wlan0-1 и 192.168.0.1)
    Хотя через Веб Luci и создается tor интерфейс и tor зона, название интерфейса для строчек iptables нужно смотреть ifconfig’ом

    • с момента написания статьи что-то подкрутили в торе, у меня он тоже перестал работать, однако времени не было на разбор полетов, да и писал статью чисто для «фана». Нет особой необходимости в использовании сия анонимайзера.

      • Очень хотелось бы, чтобы вы обновили данную статью с учётом нынешних реалий, потому что штука весьма актуально, например, когда единственный доступный и-нет — это 3G/4G от большой тройки с блокировкой торрентов, а таким образом эта проблема легко решается без VPN-а и т.д. Т.е. достаточно переконнектить на ночь ноутбук к «tor» Wi-Fi и включить закачки.

        В целом хотел выразить вам большую признательность за ваш блог. При сборках OpenWRT на свой парк сетевого оборудования — в основном пользуюсь вашими мануалами.

Оставьте свой комментарий

Войти с помощью: