Прокси сервер для свободного интернета

Однажды мне окончательно надоели странички вроде «данный ресурс заблокирован по требованию», которые стали попадаться все чаще и чаще. А еще все больше стало упоминаний про «глубинный интернет», i2p, tor, onion, анонимные p2p сети и вообще повеяло хакерской романтикой детства, когда интернет был чем-то загадочным и был доступен только с двух часов ночи со скоростью 31200…

В общем, была поставлена цель: сделать прокси сервер, через который можно заходить на любые сайты (включая сайты в доменах .i2p и .onion) в обход любых блокировок. Цель обеспечения анонимности не ставилась.

Ужа с ежом удалось скрестить, и вот теперь я, как и 17 лет назад, исследую глубинные слои интернета. Кстати, если говорить про i2p, то скорость по ощущениям не намного больше, чем у интернета 17 лет назад. История циклична.

Статья не призывает к каким-либо действиям политического или криминального характера и предназначена для тех, кто не любит рамок и ограничений и сам выбирает что и как читать.

Как это работает:

Основным прокси сервером явлется squid.
Через cache_peer (вышестоящий прокси) squid подключается к i2p и tor. tor является Socks прокси, а squid — http прокси, поэтому между squid и tor встраивается прослойка privoxy.
Также мы имеем обновляемый ACL список всех заблокированных ресурсов в русском интернете.
Squid обрабатывает запросы от браузеров следующим образом:
Если запрашивается URL в домене .i2p, то запрос передается по цепочке в i2p.
Если запрашивается URL в домене .onion, то запрос передается по цепочке в tor.
Если запрашивается запрещенный URL, то запрос передается по цепочке в tor.
Все остальные запросы отправляются напрямую самим squid.

Инструкция как сделать интернет без ограничений своими руками:

В качестве ОС использовалась FreeBSD 10. При наличии рук можно то же самое реализовать на любой *NIX системе
ПО: Squid, tor, i2p, git (не обязательно).
Для работы I2P может потребоваться пробросить порты с шлюза, если ваш прокси не имеет публичного IP адреса.
В системе только один сетевой интерфейс с ip адресом 192.168.33.192

Для начала убеждаемся, что у нас стоят все обновления на систему и порты, выставлен правильный часовой пояс и время синхронизировано с мировым.

Ставим программы из портов
Установленные порты до начала установки:
compat6x-amd64-6.4.604000.200810_3 Convenience package to install the compat6x libraries
dialog4ports-0.1.5_2 Console Interface to configure ports
perl5.16-5.16.3_18 Practical Extraction and Report Language
pkg-1.4.4 Package manager
portmaster-3.17.7 Manage your ports without external databases or languages

Установка, для всех портов все опции по умолчанию. Возможно потребуется вручную скачать дистрибутив java. Также желающие могут поставить через pkg install.
root@freedom_proxy:~ # portmaster -D www/squid
root@freedom_proxy:~ # portmaster -D security/tor
root@freedom_proxy:~ # portmaster -D security/i2p
root@freedom_proxy:~ # portmaster -D www/privoxy

Если будем использовать GIT, то в дополнение ставим:
root@freedom_proxy:~ # portmaster -D textproc/xmlcatmgr
root@freedom_proxy:~ # portmaster -D devel/git

Получаем установленные версии программ:
squid-3.4.10_2
tor-0.2.5.10_1
i2p-0.9.16
privoxy-3.0.22

В файл /etc/rc.conf прописываем:
i2p_enable="YES"
i2p_user="i2p"
squid_enable="YES"
tor_enable="YES"
privoxy_enable="YES"

Настраиваем i2p:
Создаем пользователя i2p:
root@freedom_proxy:~ # adduser
Username: i2p
Full name: i2p
Uid (Leave empty for default):
Login group [i2p]:
Login group is i2p. Invite i2p into other groups? []:
Login class [default]:
Shell (sh csh tcsh nologin) [sh]:
Home directory [/home/i2p]:
Home directory permissions (Leave empty for default):
Use password-based authentication? [yes]:
Use an empty password? (yes/no) [no]:
Use a random password? (yes/no) [no]: yes
Lock out the account after creation? [no]:

Становимся пользователем i2p и делаем первичную настройку:
root@freedom_proxy:~ # su - i2p
$ /usr/local/sbin/i2prouter install
$ exit

В FreeBSD 10 i2p правильно не заработает, выдаст ошибку “The current version of the Tanuki wrapper does not support FreeBSD 10”, поэтому в файле /usr/local/etc/rc.d/i2p
меняем строчку
command="/usr/local/sbin/i2prouter"

на строчку
command="/home/i2p/i2p/runplain.sh"

а в файле /home/i2p/i2p/runplain.sh
меняем строчку
I2PTEMP="%SYSTEM_java_io_tmpdir"

на
I2PTEMP="/tmp"

Запускаем i2p:
root@freedom_proxy:~ # /usr/local/etc/rc.d/i2p start

Проверяем, что процесс запустился, в списке процессов должна присутствовать java:
root@freedom_proxy:~ # ps -au | grep java
i2p      26809  3.0  3.3 1255096 139080  0  S     1:15PM 0:10.15 /usr/local/openjdk7/bin/java 

в файл /etc/hosts прописываем
127.0.0.1               localhost localhost.my.domain i2pconsole

Эта строчка нужна для доступа к консоли управления i2p из браузера.

Настраиваем TOR
в файле /usr/local/etc/tor/torrc раскомментируем строчку
RunAsDaemon 1

Создадим недостающие каталоги и запустим tor:
root@freedom_proxy:~ # touch /var/log/tor
root@freedom_proxy:~ # chmod 666 /var/log/tor
root@freedom_proxy:~ # mkdir /var/run/tor/
root@freedom_proxy:~ # /usr/local/etc/rc.d/tor start

Настраиваем Privoxy
privoxy нам нужен в качестве моста между Squid и Tor
в файле /usr/local/etc/privoxy/config
меняем
listen-address  127.0.0.1:8118

на
listen-address  192.168.33.192:8118

Эта замена необходима для squid. squid привязывает cache-peer к ip адресу и не может иметь больше одного cache-peer на адресе 127.0.0.1

Затем находим фрагмент с примерами forward и добавляем строку
forward-socks4a   /               127.0.0.1:9050 .

Точка в конце строки обязательна!

Запускаем privoxy:
root@freedom_proxy:~ # /usr/local/etc/rc.d/privoxy start

Настраиваем Squid
В начало файла /usr/local/etc/squid/squid.conf прописываем строки:

acl russia_block_urls url_regex "/usr/local/etc/squid/zapret-urls.txt"
acl i2p_urls url_regex -i .*://.*\.i2p\/.*
acl onion_urls url_regex -i .*://.*\.onion\/.*

cache_peer 127.0.0.1  parent    4444  4444  no-digest allow-miss no-query
cache_peer_access 127.0.0.1 allow i2p_urls

cache_peer 192.168.33.192 parent 8118 8118 no-digest allow-miss no-query
cache_peer_access 192.168.33.192 allow onion_urls
cache_peer_access 192.168.33.192 allow russia_block_urls

never_direct allow onion_urls
never_direct allow i2p_urls
never_direct allow russia_block_urls
never_direct deny all
always_direct deny onion_urls
always_direct deny i2p_urls
always_direct deny russia_block_urls
always_direct allow all

Создаем пустой файл /usr/local/etc/squid/zapret-urls.txt
root@freedom_proxy:~ # touch /usr/local/etc/squid/zapret-urls.txt

Запускаем squid.
root@freedom_proxy:~ # /usr/local/etc/rc.d/squid start

Настраиваем закачку списка запрещенных URL
Будем использовать в качестве источника сайт https://antizapret.info, а вернее регулярно обновляемый csv список, доступный через git-hub https://github.com/zapret-info/z-i

Вариант с использованием git
root@freedom_proxy:~ # mkdir /root/zapret-info
Создаем файл /root/zapret-info/getzapretinfo.sh
#!/bin/sh
cd /root/zapret-info/zapret-info
rm -rf z-i
/usr/local/bin/git clone https://github.com/zapret-info/z-i.git
cat z-i/dump.csv | sed 1d | cut -d ';' -f 3 | tr "\|" "\n" |sed 's/^[ \t]*//;s/[ \t]*$//' |uniq > /usr/local/etc/squid/zapret-urls.txt

Делаем файл исполняемым:
root@freedom_proxy:~ # chmod +x /root/zapret-info/getzapretinfo.sh

Вариант без git и временных файлов:
fetch -o - https://raw.githubusercontent.com/zapret-info/z-i/master/dump.csv | sed 1d | cut -d ';' -f 3 | tr "\|" "\n" |sed 's/^[ \t]*//;s/[ \t]*$//' |uniq > /usr/local/etc/squid/zapret-urls.txt

В обоих вариантах мы получаем из интернета файл dump.csv, затем производим с ним действия:
“sed 1d” — отрезаем первую строку
“cut -d ';' -f 3“ — вырезаем все, кроме третьей колонки.
tr "\|" "\n" — заменяем символ | на символ переноса строки
sed 's/^[ \t]*//;s/[ \t]*$//' — обрезаем пробелы и табуляцию
uniq — удаляем дублирующиеся строки.
Результат записываем в /usr/local/etc/squid/zapret-urls.txt

в crontab прописываем резулярное обновление файла:
1       2       *       *       *       root    fetch -o - https://raw.githubusercontent.com/zapret-info/z-i/master/dump.csv | sed 1d | cut -d ';' -f 3 | tr "\|" "\n" |sed 's/^[ \t]*//;s/[ \t]*$//' |uniq > /usr/local/etc/squid/zapret-urls.txt


Проверяем работу прокси:
В любимом браузере прописываем прокси сервер 192.168.33.192 порт 3128 и начинаем проверять.

Заходим на адрес http://hideme.ru/ip/ и смотрим что указано в пункте прокси, должно быть что-то вроде “Вы используете прокси-сервер 1.1 localhost (squid/3.4.10) и ваш настоящий IP: XX.XX.XX.XX”
Squid работает.

Теперь проверяем работу TOR.
Заходим на сайт http://thehiddenwiki.org или гуглим адрес на котором сейчас живет hidden wiki и затем пытаемся зайти по любой из ссылок .onion, например http://3g2upl4pq6kufc4m.onion/ — это поисковая система.
http://zqktlwi4fecvo6ri.onion/wiki/index.php/Main_Page — нецензурированный каталог onion сайтов c преферансомъ и куртизанками.
Если все настроено правильно, мы увидим искомую страницу.
Если прокси выдал ошибку “Соединение с 192.168.33.192 не удалось” — у нас не запущен privoxy, либо некорректно настроена связка squid — privoxy.
Если мы видим ошибку 503 от privoxy (Privoxy was unable to socks4a-forward your request ), то возможны два варианта: мы ввели адрес несуществующего сервера, либо проблемы с tor. Для точной диагностики рекомендуется проверить десяток onion ссылок. Если ни одна на работает — внимательно читаем файл ошибок tor.

Проверяем работу i2p:
Заходим по адресу http://i2pconsole:7657/home
Слева под логотипом i2p указан статус сети. Если статус OK или Firewalled — можно работать. Статус Testing держится некоторое время после запуска i2p.

Cмотрим внизу список рекомендуемых сайтов в разделе Eepsites of Interest.
Пробуем зайти по ссылкам:
http://plugins.i2p/
http://anoncoin.i2p/

Для настройки i2p заходим на адрес http://i2pconsole:7657/console

Финальным этапом тестирования проверяем обход блокировок:
идем на сайт https://antizapret.info/, смотрим список запрещенных ресурсов и пытаемся зайти на несколько выборочных. Страницы должны грузиться без каких-либо проблем.

Ура! Теперь интернет стал больше!
Share post

Similar posts

Comments 48

    –2
    cut -d ';' -f 3 | tr "\|" "\n" |sed 's/^[ \t]*//;s/[ \t]*$//'

    за одно за это готов влюбиться в вас!
      +2
      А я просто включил несколько exit node для tor'а и держу релей для i2p.
        –2
        exit-ноды держите в России? Что-то логируете не случай если напишут люди из органов?
        –16
        «Однажды мне окончательно надоели странички вроде «данный ресурс заблокирован по требованию»» при отсутствии в голове информации о блокировках gihub, steam и др. полезных сайтов, эта фраза наводит некоторые мысли о предпочтениях автора ;)
          +3
          Сайты, посвященные биткоину, тоже блокируют, хотя на них нет запрещенной информации.
            –3
            эта фраза наводит некоторые мысли о предпочтениях автора

            Не расскажите на какие?
              –11
              Ну теперь уж за слитую карму обязательно расскажу, что я с такими сайтами встречаюсь раз в пол года и обычно это торрент трекеры. А уж гитхаб мой провайдер так и не успел заблокировать. И коли автор «постоянно» сталкивается с таким я делаю вывод, что автор вероятно любит детскую клубничку, варить «мет», и спонсировать терроризм. Это о
                +8
                Г-жа Мизуллина, перелогиньтесь.
                  +4
                  Вас что, подстрелил снай
                0
                Вы наверное не очень следите за политической ситуацией в России. Я привык сам составлять мнение о текстах с политическим уклоном, а большинство таких текстов в данный момент заблокировано.
                  +2
                  Я наверно пошутил неудачно, впредь шутить не буду.
                    0
                    Дело в том, что в ваших шутках не было ни намека на шутку.
                    Мы живем в эпоху, когда для госорганов нет рамок в блокировании информации самого широкого спектра.
                      0
                      Не знаю видимо сайты, которые я посещаю, не попадают в столь «широкий спектр». Как только начнут блокировать IT ресурсы, сайты всевозможных linux дистрибутивов, новостные сайты, популярные соц. сети, sourceforge, github(сам github, а не репозиторий с суицидом) тогда наверно столь широкий спектр дойдет и до меня. А пока я позволю себе шутить на эту тему.
                        +1
                        чем больше будет решений, подобных описанному, тем скорее.

                        1. шутка-ли — возможность любому более-менее грамотному специалисту, за 15 минут ликвидировать 1.5 года законодательной деятельности?

                        2. чем больше люди будут использовать подобные решения, тем невнимательнее они будут к власти. если раньше специалисты охотно шли на диалог с властью, то теперь проще будет настроить bypass и не обращать внимания на любых подневольных халтурщиков, в плане законодательства.
                          +1
                          А ведь вы правы. Если постоянно сидишь через VPN, то о блокировках гитхаба и прочем мракобесии узнаешь с хабра или от знакомых. Так ведь наша лень доведёт до того, что VPN банить начнут.
                          0
                          новостные сайты
                          В Беларуси под регулярную негласную блокировку с середины декабря попадают belapan.com/ (крупнейшее негосударственное агенство новостей) и их дочка naviny.by/
                          Так что попасть в «широкий спектр» шансы весьма велики.
                            0
                            Вам просто повезло с провайдером, который блочит видать постранично, а не по IP, вырубая сразу десятки тысяч сайтов самой различной тематики.
                            Или еще неплохо, когда госорганы вносят в реестр IP-адреса Cloudflare, например. Как вы думаете, какого рода ресурсы в том числе страдают от этого?
                              –1
                              Может расскажете как заблокировать не сам github, а только репозиторий? А то провайдеры что-то ничего хорошего не придумали.
                                0
                                По урлу внезапно. Ах да для наших провайдеров это магия не подвластная пониманию.
                                  0
                                  Магия действительно провайдерам неподвластна, т.к. браузер url-ы на github отправляет в шифрованном https-канале.
                      +3
                      Парочка нудных дополнений:
                      1. Вместо регексов ".*://.*\.onion\/.*" можно использовать:
                      cache_peer_domain 127.0.0.1 .onion
                      2. Privoxy можно повесить на 127.0.0.2.
                      3. Такой доступ к «приватным сетям» вреден, ибо теоретически позволяет легко деанонимизировать пользователя (ну в данном случае прокси), размещением ссылки на приватной странице, ведущей на обычный http.
                        +1
                        3. а на privoxy можно чистить заголовки при переходе из darknet в интернет и обратно?
                          0
                          Можно в squid — RTFM rewrite_program (url_rewrite_program)
                            0
                            В относительно новых Squid есть директива url_rewrite_program, где кроме URL и SOURCE_ADDRESS можно ещё получать ещё что–то. Мне кажется, можно получать и заголовки, например, Referer.

                            Если у нас скрытый сайт ведёт не на скрытый (это может быть LINK REL, IFRAME, IMG, A), можно сначала 303м перенаправить на свой сервер, а потом JavaScript'ом проверить, является ли окно окном верхего уровня, и если да, то по таймеру перенаправить на желаемый адрес. Это на случай, если мы просто перешли по ссылке A. Остальные способы (IMG, IFRAME) в этом случае должны ломаться.

                            А rewrite_program можно обойти, написав так, что скрипт rewrite_program ничего не увидит.
                              0
                              В относительно новых Squid

                              Ещё в 2008 году использовал этот параметр для подключения sams к squid. В сквиде вообще много фишек которые мало кто использует.
                              «Ты суслика видишь? — Нет. — И я не вижу. А он есть!» (с)
                            0
                            1. Согласен.
                            2. У меня не получилось, но нужно попробовать.
                            3. Задача анонимности не ставилась изначально.
                            +6
                            А можете Docker-контейнер сделать, чтоб можно было быстро поставить и попробовать?
                              +4
                              То, что половина мануала специфична для FreeBSD, вас не смутило?
                                0
                                Поставьте lxc/openvz, с убунтой, проверьте с учетом пирвязки к убунте работу описанной конфигурации, сделайте скрипт с этими командами дописав RUN перед ними и выбор дистрибутива в начале, Dockerfile готов.
                                0
                                1. Если оставить в стороне I2P, то чем ваше решение превосходит Tor Browser, который запустить не сложнее, чем обычный браузер?
                                2. Пожалуйста, пишите Tor, а не TOR. Эта ошибка встречается в каждой второй статье, где упоминается Tor, поэтому не обессудьте, что пишу не в личку.
                                3. Скрытые сайты тора без анонимности можно просматривать через tor2web-шлюзы. Я писал про них и сделал один сам: припишите к адресу .gq и сайт откроется.
                                  0
                                  1. можно настроить прозрачное проксирование для шлюза, чтобы любой хост за шлюзом прозрачно работал с данным решением — и планшет, и смартфон, и виртуалка и т.д. и т.п.
                                  2. с таким прокси очень удобна автоматическая агрегация новостей с заблокированных сайтов (например, в TT-RSS есть замечательная опция '_CURL_HTTP_PROXY' )
                                    0
                                    3. само-собой, агрегация новостей из даркнетов, тоже, вещь полезная.
                                      0
                                      1. В Tor Browser через сеть Tor идут запросы ко всем сайтам. Не знаю как у Вас, а у меня на 100мб канале наблюдаются значительное замедление. В моем варианте через Tor идут только запросы на .onion сайты и на заблокированные. Запросы на остальные сайты идут классическим способом.
                                      2. Ок. Терминология это важно.
                                      3. Задача ставилась другая: Открывать любые сайты, без манипуляций с адресной строкой, одним кликом.
                                      +1
                                      У меня примерно то же самое сделано на простовпне и антизапрете по-отдельности, только на простовпне .i2p и .onion-адреса резолвятся в фейковый IP 192.168.99.98, который потом маршрутизируется на прокси-сервер, работающий в режиме прозрачного проксирования. Плюс в том, что указывать прокси-сервер в браузере не требуется. Собственно, я об этом писал пару лет назад: Прозрачное проксирование в I2P и TOR
                                      Вот исходники антизапрета, если кому нужно: bitbucket.org/ValdikSS/antizapret.
                                        +1
                                        Кстати, для I2P есть замечательный плагин Orchid — реализация Tor на Java. Можно не ставить Tor, а использовать плагин.
                                        +1
                                        Спасибо.
                                        Отметил ваш топик как решение моего вопроса toster.ru/q/178681
                                          0
                                          Там, пожалуй, в настройки tor ещё стоит поставить запрет на российские exit-ноды.
                                          Ну или запустить два инстанса — один (без ограничений) — для .onion (и ему же надо обязательно VirtualAddrNetwork задать).
                                          А второй — с ограничением на российские exit-ноды, и можно вообще без VAN — чтоб ходить на заблокированные сайты.
                                          (просто в противном случае вполне можно попасть в ситуацию, когда tor решит выйти наружу через российский айпишник, и нужный сайт с его точки зрения может оказаться ровно так же заблокированным)
                                            0
                                            можно попасть в ситуацию, когда tor решит выйти наружу через российский айпишник, и нужный сайт с его точки зрения может оказаться ровно так же заблокированным
                                            Ни разу не сталкивался с таким. Российских exit-нод так мало и они пропускают так мало трафика, что вероятность данного события очень мала. Намного вероятней напороться на блокировки сайтов провайдерами в других странах (случалось и не раз).

                                            Ну или запустить два инстанса — один (без ограничений) — для .onion
                                            Трафик к onion-сайтам может идти через любые ноды, не важно exit или не-exit. Поэтому второй тор уж точно не нужно запускать.
                                            0
                                            Сорь, за некоторый оффтоп, но пользуясь подходящей тематикой статьи хотел бы поинтересоваться — в 2011 Tor(если не ошибаюсь с релиза 0.2.2.32) объявил войну подключенцам one-hop proxies а ля tortunnel. Такие подключения действительно сейчас не работают?
                                              0
                                              Squid — это, конечно, хорошо, но мне как-то не хотелось ради нескольких запросов в месяц гонять весь трафик через лишний прокси (напрасная трата процессорного времени :), поэтому я автоматически генерирую файл wpad.dat, который проcто должен лежать на сервере wpad в локальной сети по адресу
                                              http://wpad/wpad.dat

                                              Бонус — не надо настраивать браузер, т.к. WPAD сейчас везде стоит по умолчанию.
                                                0
                                                Эта замена необходима для squid. squid привязывает cache-peer к ip адресу и не может иметь больше одного cache-peer на адресе 127.0.0.1


                                                На 127.0.0.1 свет клином не сошёлся, берите любой адрес из сети 127.0.0.0/8.
                                                Конечно, в случае сервера в LAN это не существенно, но в общем случае наружу не должно торчать ничего лишнего.

                                                Ещё один момент: squid ради такой задачи — явный overhead, можно взять что-нибудь попроще.
                                                  0
                                                  Скрипт в статье каждый раз перекачивает целиком весь репозиторий, удаляя локальную копию, а также оставляет некоторые некорректные регулярные выражения (Squid рассматривает каждую строку в итоговом файле как регекс). Первое исправляется легко. В качестве полумеры для исправления второго можно добавить ещё пару sed-фильтров. Вместо

                                                  #!/bin/sh
                                                  cd /root/zapret-info/zapret-info
                                                  rm -rf z-i
                                                  /usr/local/bin/git clone https://github.com/zapret-info/z-i.git
                                                  cat z-i/dump.csv | sed 1d | cut -d ';' -f 3 | tr "\|" "\n" |sed 's/^[ \t]*//;s/[ \t]*$//' |uniq > /usr/local/etc/squid/zapret-urls.txt
                                                  

                                                  использовать

                                                  #!/bin/sh                                                                                                                                                                                                                        
                                                  cd /root/zapret-info/                                                                                                                                                                                                            
                                                  if [ -d "z-i" ]; then                                                                                                                                                                                                            
                                                          cd "z-i"                                                                                                                                                                                                                 
                                                          git pull                                                                                                                                                                                                                 
                                                          cd ".."                                                                                                                                                                                                                  
                                                  else                                                                                                                                                                                                                             
                                                          git clone https://github.com/zapret-info/z-i.git                                                                                                                                                                         
                                                  fi                                                                                                                                                                                                                               
                                                  cat z-i/dump.csv | sed 1d | cut -d ';' -f 3 | tr "\|" "\n" | sed 's/^[ \t]*//;s/[ \t]*$//' | sed 's/\[/\\\[/;s/\]/\\\]/' | uniq > /etc/squid/zapret-urls.txt
                                                  
                                                    +1
                                                    А я просто беру раз в полчаса csv c сайта antizapret.info/api.php и парсю его.
                                                      0
                                                      Это либо неэффективно, либо неудобно. Вы раз в полчаса перекачиваете целиком весь список, который сейчас уже немаленький, либо парсите diff, который выдаёт API. Идея из статьи применить git, на мой взгляд, — самая удачная.
                                                        0
                                                        1395941 байта на 22:47. По-моему, сущие копейки :) Я потратил явно меньше времени на написание пары строк, к тому же обошелся простым wget`ом, а гит вообще не установлен на шлюзе. По-моему это и удобно и эффективно.
                                                          0
                                                          Если git не установлен, то конечно. Но у меня всё это развёрнуто на обычном десктопе, и я решил лишний раз не писать ничего на диск.
                                                          А парсите так же, как в статье? Способ из неё не подходит для HTTPS, а также если провайдер блокирует целиком весь домен, а не отдельный URL.
                                                            0
                                                            Почему должно не работать для HTTPS? Все работает. И да, я так же вырезаю третью колонку с именем домена и убираю дубли. Если домен в списке или в .onion, то роутится через Tor.
                                                              0
                                                              Действительно, HTTPS работает. А вот Websockets в такой связке, по-видимому, не работает в принципе. Например, на Github в консоли Chrome появляется:

                                                              WebSocket connection to 'wss://live.github.com/_sockets/<long id>' failed: WebSocket is closed before the connection is established.

                                                  Only users with full accounts can post comments. Log in, please.