tor

Все мы слышали новости про блокировку сайтов роскомнадзором в России. Как бы понятно что это плохо, так нельзя и все они плохие люди (это если разговаривать добрыми, спокойными словами). На рутрекере даже было голосование, где спрашивалось, что делать - пытаться ли удалить раздачи во избежание блокировки, насколько я помню, большинство, как и я, ответили что раздачи категорически оставить - мы как-нибудь порешаем с блокировкой.

И вот в один прекрасный (вообще то не очень) момент я обнаружил что у меня не открываются небезызвестный http://www.nyaa.se/ (анимешники, к коим я себя уже не отношу, поймут). Беда-печаль. Конечно, под рукой всегда есть tor browser. Но неудобно ведь. А как должно быть, чтобы было удобно? Чтобы все само, ну! Хорошо, надо всего лишь что-то поднять, потом это настроить, потом сделать туда маршруты IP адресов нужных ресурсов, как-то так.

Варианта я видел два: 1-й попроще - поднять прокси-сервер на VPS, и как-нибудь через iptables на роутере завернуть на него нужный трафик. 2-й - поднять на роутере tor, и перенаправлять на него то, что нужно. После небольших раздумий, решил попробовать настроить по второму варианту, о чем тут и напишу, он все-таки более универсальный (хоть и более тормозной). Однако, следует учесть, что тор довольно требователен к ресурсам роутера. 

В интернете куча статей по настройкам, но там в основном о полном проксировании отдельной wifi точки, а мне не хотелось забивать себе голову, поэтому пошел по знакомой схеме (tor+privoxy).

Итак в openwrt ставим пакеты tor и privoxy:

opkg install tor privoxy

tor в состоянии работать из коробки, поэтому можно сразу запускать (и делать enable если нужен автостарт):

/etc/init.d/tor start
/etc/init.d/tor enable

У privoxy нужно подправить конфиг:

vim /etc/privoxy/config

Тут нужно заменить строку с параметром listen-address:

listen-address  192.168.1.1:8118

И добавить еще одну в конец конфига:

forward-socks4a / localhost:9050 .

192.168.1.1 - адрес роутера, если у вас другая подсеть нужно будет поменять и опцию permit-access; 
9050 - стандартный порт tor-a

Обратите внимание, что если у вас нет такой папки с конфигом privoxy, значит у вас другая версия, см. на вики.

Запускаем все это дело:

/etc/init.d/privoxy start
/etc/init.d/privoxy enable

Теперь можно проверить, работает ли эта связка. Для этого в браузере можно включить HTTP прокси: 192.168.1.1:8118. У меня все заработало не с первого раза, т.к. я пытался использовать ExitNodes, но из-за лени не стал разбираться почему не заработало. 

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

function FindProxyForURL(url, host) {
    if (shExpMatch(host, "*.nyaa.se"))
    {
        return "PROXY 192.168.1.1:8118";
    }
    return "DIRECT";
}

Файл нужно назвать proxy.pac. Я повесил его отдавать на апач, чтобы если что, можно было использовать на разных машинах и системах. В .htaccess нужно добавить строку:

AddType application/x-ns-proxy-autoconfig .pac

Chromium умеет принимать этот файл через параметр командной строки --proxy-pac-url="http://text.com/proxy.pac". Не очень удобно, если честно. Открыв файл /usr/bin/chromium редактором, нашел там строку, где пользовательские флаги считываются из файла, хм, вот это уже удобно. Добавляем в файл ~/.config/chromium-flags.conf строку выше (вместе с двумя черточками вначале) и voila, все работает.

В общем я оказался весьма удивлен, что нет способа сделать то что я хотел как-нибудь 'попроще'. Если кто-нибудь подскажет другие варианты, буду признателен!