Denis Yuriev

Записки бездельника

Главная » Linux » OpenWRT » OpenWRT - Шифруем трафик с помощью Tor

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 отдельно и посмотреть весь ход загрузки. А главное, учтите, что на соединение требуется некоторое время.

    • Aleksey889

      Через веб luci создается интерфейс tor, но в понятиях фаервола он называется так как его видит ifconfig.
      см. мой камент ниже

  2. Aleksey889

    Добрый день.
    Настраивал на 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 на свой парк сетевого оборудования — в основном пользуюсь вашими мануалами.

        • Денис Юрьев

          tor шифрует только TCP-трафик, а торренты работают поверх UDP)
          так что спорное преимущество)

          • Главное, что это в принципе даёт возможность использовать торрент при безлимитном 3G/4G. Разве TOR автоматом не упаковывает всё в TCP, если через него трафик пускаешь?

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

Войти с помощью: 
Denis Yuriev DMOZ Индекс цитирования

© 2017