Jul. 25th, 2017

crower: (Default)
systemd, как некая хрень, данная нам в наказание, чтобы жизнь мёдом не казалась.

Началось всё, конечно, гораздо раньше, но конкретно эта история началась с желания добиться от privoxy адекватной работы. Нет, конечно, он работает правильно. Но основная его задача — вставлять в запросы от transmission к аннонсерам строчки x-forwarded-for. Дабы аннонсеры знали его рабочий адрес, не принимая за таковой адрес выходной ноды. То есть конструкция довольно простая: transmission, iptables, privoxy, tor, аннонсеры. Чуток её усложняет dnscrypt-proxy, предназначенный для противодействия MITM-атакам. Сначала, правда, пытался заюзать tor-resolve, но безопасный ресолвинг сходу получить не вышло, потому и переключился на dnscrypt. Сейчас-то понимаю, что проблема могла быть в том, что tor был тогда не в достаточной степени адаптирован под изменившиеся обстоятельства и, imho, выходная нода попадала под MITM-атаку. Потом всё-равно пришлось делать "тонкую настройку" тору, но на dnscrypt так и остался. IMHO, он всё-таки лучше, чем tor-resolve.
Итого, клиент ресолвит адрес через dnscrypt, шлёт анонсы на трекеры, но их перехватывает iptables и отправляет к privoxy. Тот дописывает x-forwarded-for и заталкивает в тор. В результате анонсеры узнают реальный адрес и отдают его пирам.
Но transmission находится за роутером, который имеет динамический адрес и не знает свой адрес.
Да и никто его не знает. Как-то штудировал протоколы, по которым transmission запрашивает проброс порта и что-о не нашёл штатного способа об этом узнать. Хрень какая-то.
А как-же его узнать?
Варинта вижу два.
1). Идти на роутер и выпарсивать адрес из его страничек. Но это долго и нудно.
2). Можно кого-нибудь спросить. Например на api.apify.org или у wtfismyip.com. Которые дают чистый адрес без необходимости выискивать его на странице. Подсмотрел у друзей по несчастью и клонировал демона, который периодически узнаёт рабочий адрес и подсказывает его privoxy.
И всё было прекрасно, до тех пор пока на пол-дня transmission не потерял связь с трекерами.
С чего бы это?
А с того, что privoxy упал
А почему он упал?
А потому что демон внешнего адреса (назовём его Еидом) был тупой (дарёному демону в зубы не смотрят) и когда вместо адреса получил какую-то хрень, то попортил "зону комфорта" для privoxy, который упал на пол, стал стучать ножками и отказался дальше работать. Еиду-то что — его к жизни всякий раз возвращает кронос, а привокси на такое не был расчитан.
Ну, понятное дело, что скил демона был прокачан, дабы тот впредь сообщал привокси только внятный валидный адрес. Но грусть в душу запала, ибо надеяться на чужие ресурсы, которые могут отвалиться, отсплититься или ещё какая напасть возникнет, негоже. Придётся писать собственного демона, который внешний адрес будет узнавать у роутера.
И казалось бы, всё заработало, но тут-то и выходит весь из себя systemd.
Надо сказать, что я на него давно уже зуб имею. Странный какой-то, запутанный, дурной. Чтобы ковырять, надо кучу терминалов открыть, потому что разные конфиги в куче разных мест, весьма далёких друг от друга. А ещё он сразу невзлюбил miredo. И второй интерфейс на компе тоже. А из-за него якобы networking не поднимается. То есть, по факту он всё-таки поднят. Но поскольку при его поднятии второй интерфейс обругал, что он и так уже запущен, то systemd его пометила как failed.
Так вот, задумался я, что Еид должен быть запущен перед privoxy, дабы прописать правильный адрес до того, как тот начнёт рассылать недостоверную информацию. Но тогда и transmission должен быть запущен только после privoxy. А privoxy должен быть запущен после tor. Ну, и так далее.
Сначала, конечно, накосячил :)
Во-первых, conntrack нельзя, оказывается, настраивать до того, как загружен модуль ;)
И transmission вообще не запустился. Может потому что загнал ему в after networking.target, а networking у меня, как помните, failed.
Зато потом, внимательно поразмыслив кто после кого должен запускаться и удалив некоторые избыточные (и, видимо, запутывающие) зависимости, довёл до нужного вида. В результате чего, даже networking стал подниматься без fail.
Сегодня была как раз вторая (внеплановая) перезагрузка и в этот раз тоже всё поднялось как нужно.
crower: (Default)
Давняя загадка, похоже, разрешилась.
Помнится, в процессе бодания с magnetico обнаружил "nf_conntrack: table full, dropping packet". Так вот, после тогдашнего редактирования sysctl больше подобных проблем не наблюдалось. Выходит, недосмотрел, давно не заглядывал в syslog/dmesg. А, началось, кстати, где-то как раз после апгрейда.
crower: (Default)

Давно уже поглядывал на transmission, статистику на форуме и мучился вопросом: "А какие-же всё-таки раздачи самые активные/востребованные?" На форуме только суммарные цифры сегодня, вчера и за всё время; в клиенте по раздачам, но только суммарные - на текущий момент. А хотелось увидеть статистику. Почему-то в первую очередь пришла мысль повесить локальный аннонсер, который добавить в раздачи и на её собирать. Но как-то там всё получалось сложно и мутно. А тут как раз одновременно "на ура" параллельная ветка общения с клиентом через api. Можно напрямую, а можно через готовый модуль Transmission::Client. И подумал, почему бы и нет?

Вот только некоторая путаница сущностях. Но этот вопрос уже немного прояснился: хеш — это про конкретный торрент, имя — конкретная раздача, которую можно идентифицировать по топику. Итого, пишем скрипт: обойти торренты, узнать сколько загружено и затолкать в БД. Тут даже всплывала идея с rrd, но для каждого торрента генерить свой файл как-то не хочется. Скормить кактусу? Было бы интересно, тем более, что он и графики умеет рисовать. Но там тоже на каждый объект свой файл. И с кириллицей тонкости. В общем, не стал заморачиваться, ограничился мускулем. В итоге получилось просто, шустро и эффективно. Сложнее оказалось сообразить чего хочу увидеть и как отобразить. Пока устраивает то, что получилось: вывод агрегируется по именам. Для этого отдельная таблица с информацией имя-хэш- и прочие атрибуты торрента, которые могут быть интересны. В основной таблице только хэш, время и "отдано". Лучше, конечно, было бы хранить сразу разницу, но побоялся что тормозить будет в процессе вставки. лучше я подожду в процессе выборки секунд пять.
Сразу заложил показатели: отдано сегодня, за неделю, за месяц. Потом аппетит появился и добавил "всего" и размер. Затем на имя раздачи повесил линк из поля комментария на топик на форум.

Получилось довольно недурно.

Надо будет ещё автоматическое добавление нового торрента добавлять при скачивании и автообновлении раздачи. А пока ручками и полностью.

Может быть ещё графики были бы интересны.

Хочется ещё пиров увидеть, но, боюсь, этого мне transmission уже не сможет обеспечить.

Profile

crower: (Default)
crower

October 2017

S M T W T F S
1234567
89101112 1314
1516 1718192021
22232425262728
293031    

Style Credit

Expand Cut Tags

No cut tags
Page generated Oct. 22nd, 2017 08:23 am
Powered by Dreamwidth Studios