Живет у меня в доме соседка: очень хорошая женщина, пенсионерка, ветеран труда, бывший медицинский работник, отработавший всю жизнь медсестрой в больнице. В настоящее время на пенсии. Я ей помогаю, чем могу, но сказ не про соседку, а про то, что подарила ей дирекция больницы, где она раньше работала планшет. Все бы ничего в этом планшете (WIFI есть, 3G нету, диагональ экрана 7 дюймов, на алиэкспрессе такие по 45 долларов с доставкой), но вот что делать с этим планшетом, естественно, не объяснили. И пришлось мне отвечать на вопрос, что делаю со своим планшетом я, а я на планшете книжки читаю, в основном Ясинского и Эльтерруса.
Естественно я подключил планшет к своему ноутбуку и перекинул апкашку CoolReader, а также свою библиотеку. К сожалению, через два дня выяснилось, что литературные пристрастия у нас разные и мои книжки соседке неинтересны. Пришлось поделиться паролем от своего вайфая и настроить opds «Флибусты», так как что такое Интренет соседка знала весьма приблизительно и ни компьютера, ни интренет-соединения у нее нет и никогда не было.
После выходных меня огорошили тем фактом, что нужные книжки с Флибусты не скачиваются. Сказать, что я был в недоумении — ничего не сказать — вся интересующая меня литература всегда была в свободном доступе, но соседка хотела Дарью Донцову и «50 оттенков серого» и, к моему удивлению, они действительно не скачивались.
Погуглив по сети, я выяснил, что в сети TOR добрые люди сделали зеркало Флибусты, с которого все прекрасно скачивается, однако все попытки объяснить CoolReader, что нужно заходить по .onion адресу, наткнулись на его стойкое нежелание коннектиться по .onion адресам в принципе. Что, в принципе, логично. Попытка объяснить принципы современного копирайта и покупки книг на «Литресе» была мною благополучно провалена: карточки, как и компьютера, у соседки нет, а противостоять наивному «а за что платить-то, если книжки у меня так и не будет?» и «где магазин, в который можно прийти и получить книжку на планшет?» оказалось выше моих скромных сил, поэтому пришлось решать эту проблему методами техническими, ибо не умею я людям говорить «нет», особенно тем, кто нуждается в помощи и защите.
К счастью, у меня уже был VRS (virtual root server), на котором крутился мой маленький проект по управлением Ubuntu и Apache.
Шаг 1. Устанавливаем на Ubuntu tor
apt-get install tor
Настройки «по-умолчанию» меня вполне устроили.
Шаг 2. Пишем скрипт для апача, назвав его, например: /home/user/flibusta/nph-flibusta.pl. Префикс nph- в имени файла очень важен, ибо влияет на то, как скрипт будет обрабатываться апачем.
#!/usr/bin/perl
use warnings;
use HTTP::Proxy;
use LWP::UserAgent;
use LWP::Protocol::socks;
use CGI qw(:standard -nph);
my $q = new CGI;
my $ua = LWP::UserAgent->new(max_redirect => 0, agent => $q->user_agent(),);
$ua->timeout(60);
$ua->proxy([qw/ http https /] => 'socks://127.0.0.1:9050'); # Tor proxy
my $refer = $q->referer();
$refer = "" unless defined($refer);
$refer =~ s/proxy.flibusta.net/flibustahezeous3.onion/g;
my $rsp = $ua->get('http://flibustahezeous3.onion'.$q->param('url'), 'Referer'=>$refer, 'Accept'=>$q->http('Accept'),
'Accept-Language'=>$q->http('Accept-Language'),
'Accept-Encoding'=>'identity',
'Cookie'=>$q->http('Cookie')
);
my $fstr = $rsp->as_string;
$fstr =~ s/flibustahezeous3.onion/proxy.flibusta.net/g;
#define templates
my $nbl = <<DATA1;
<link href="/b/BOOOOOOOK/fb2" rel="http://opds-spec.org/acquisition/open-access" type="application/fb2+zip" />
<link href="/b/BOOOOOOOK/html" rel="http://opds-spec.org/acquisition/open-access" type="application/html+zip" />
<link href="/b/BOOOOOOOK/txt" rel="http://opds-spec.org/acquisition/open-access" type="application/txt+zip" />
<link href="/b/BOOOOOOOK/rtf" rel="http://opds-spec.org/acquisition/open-access" type="application/rtf+zip" />
<link href="/b/BOOOOOOOK/epub" rel="http://opds-spec.org/acquisition/open-access" type="application/epub+zip" />
<link href="/b/BOOOOOOOK/mobi" rel="http://opds-spec.org/acquisition/open-access" type="application/x-mobipocket-ebook" />
DATA1
my $olb = quotemeta <<DATA2;
<link href="/b/BOOOOOOOK/download" rel="http://opds-spec.org/acquisition/disabled" type="disabled/fb2+zip" />
DATA2
#get all book IDs
my @IDs = $fstr =~ //b/(d+)/download/g;
foreach my $id (@IDs)
{
# prepare search and replace strings
my $ao = $olb;
$ao =~ s/BOOOOOOOK/$id/g;
my $an= $nbl;
$an =~ s/BOOOOOOOK/$id/g;
# do replace to fix format for cool reader
$fstr =~ s/$ao/$an/g;
}
print $fstr;
Что делает скрипт: получает параметр скрипт $url, переделывает имя хоста на торовское, отправляет запрос через TOR и подправляет пришедший ответ в ту форму, в какой его хочет видеть CoolReader.
Шаг 3. Настравиваем апач.
Создаем файл /etc/apache2/sites-available/proxy.flibusta.net с примерно таким содержимым:
<VirtualHost *:80>
ServerAdmin webmaster@flibusta.net
ServerName proxy.flibusta.net
DirectoryIndex /home/user/flibusta/nph-flibusta.pl
DocumentRoot /home/user/flibusta/
<Directory /home/user/flibusta/ >
AllowOverride None
Options -Indexes +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
RewriteEngine On
RewriteCond %{HTTP_HOST} =proxy.flibusta.net
RewriteRule ^(.*)$ /nph-flibusta.pl?url=$1 [H=cgi-script,L]
LogLevel warn
CustomLog /var/log/apache2/access.log combined
</VirtualHost>
И даем команду:
a2ensite proxy.flibusta.net
Перезапуская попутно апач:
service apache2 restart
Что тут происходит: все запросы к сайту proxy.flibusta.net отправляются на наш магический скрипт.
Шаг 4. Исправляем конфигурацию DNS на роутере.
У меня роутер ASUS RT-N66U, поэтому для того, чтобы была возможность провести необходимую модификацию, была проставлена прошивка MerlinWRT, использующая DNSmasq, c сайта разработчика. Включен раздел JFFS и в файл /jffs/configs/dnsmasq.conf.add была внесена строка:
address=/proxy.flibusta.net/99.99.99.99
Где 99.99.99.99 — IP-адрес моей VRSки (специально изменен во избежание хабраэфффекта) с учетом того факта, что адрес у меня динамический и никакой фильтрации IP-адресов на сервере при обращении к скрипту у меня нет. Очевидно, что для другой модели роутера шаг 4 будет иным, но аналогичным.
Шаг последний. Добавляем адрес proxy.flibusta.net/opds в список электронных библиотек в программе CoolReader. Тут ничего пояснять, думаю, не надо. Просто используем соответствующее меню в интрефейсе CoolReader~а.
Надеюсь, мой опыт пригодится другим людям и поможет сделать не только мою соседку счастливей, но и кого-либо еще в этом мире. Отдельное спасибо человеку, который сделал возможность скачивания книг через сеть Тor и автору программы CoolReader, которой пользуются «и пионеры и пенсионеры».
PS: Через две недели я узнал, что «Донцова отличный писатель, а „50 оттенков серого“ чернуха, которую не стоит читать таким воспитанным и вежливым молодым людям как я.», а также мне почти насильно впихнули шоколадный батончик Аленка вместе с просьбой удалить из меню CoolReader~а Litres, который почему-то «постоянно просит регистрации». Очевидно, что данный метод можно использовать и для организации доступа любого другого программного обеспечения к .onion и .i2p сайтам.
Автор: miriarder