I2P-прокси на хостинге

    Сейчас потихоньку начинается переползание некоторых ресурсов в i2p, потому возник вопрос об удобном доступе в эту сеть.
    Можно поставить i2p-роутер на своём компьютере. Кому хочется всю домашнюю сеть обеспечить доступом, поднимают прокси на домашнем же роутере.
    Но у меня вопрос стоял по другому. Хотелось иметь возможность получать доступ к i2p с любого компьютера без установки дополнительного ПО, пусть ценой безопасности — ибо мне не скрываться нужно, а просто что-то посмотреть. Если есть возможность запустить удаленный рабочий стол, то я со всяких интернет-кафе и из гостей предпочитаю подключаться к домашнему серверу, а там уже моё настроенное окружение. В случае же медленного подключения или закрытых портов пользоваться RDP становится затруднительно. Потому самый простой и нетребовательный вариант — поднять i2p-роутер на хостинге и настроить http-прокси.
    image

    Хостинг

    Тут никаких особых требований нет, VDS или просто арендованный сервер — в зависимости от потребностей и финансовых возможностей. Лишь бы была машинка с root-доступом, которая тянула бы java. ОС не критична, если сильно хочется, то можно и на windows прокси поднять. Но я делал на линуксе — дешевле и привычнее. Железо — AMD Athlon 64 5600+ X2, 2 GB RAM. Но это избыточно, я и на недорогом VDS с 256 оперативки такой прокси поднимал. Правда работало не то чтобы очень быстро и ресурсов занимало приличный процент.

    Установка i2p

    ОС — debian wheezy. Выбор дистрибутива роли не играет, просто привык к debian за последние 15 лет.
    Сперва добавляем в sources.list репозиторий i2p:
    deb http://deb.i2p2.no/ stable main
    deb-src http://deb.i2p2.no/ stable main

    Скачиваем ключ репозитория www.i2p2.de/_static/debian-repo.pub и добавляем его в apt:
    apt-key add debian-repo.pub

    Обновляем базу пакетов и ставим i2p и пакет i2p-keyring (обновления ключа репозитория):
    apt-get update
    apt-get install i2p i2p-keyring

    Зависимости (включая java) вытянутся автоматом.

    Запускать ip2 можно просто набрав "i2prouter start" в консоли либо сервисом при старте системы. Удобнее, конечно, сервисом.
    Набираем "dpkg-reconfigure i2p" (от имени рута), на вопрос о запуске сервиса отвечаем «Да». Так же на этом шаге можно выставить размер выделяемой памяти, оставил 128МБ и создать пользователя для запуска i2p-роутера.

    Для убунты все настраивается аналогично, команда добавления репозитория только другая. Тут подробнее.
    Для других дистрибутивов надо поставить java (sunjava, openjdk), скачать архив отсюда и запустить консольный установщик "java -jar i2pinstall_ХХХХ.jar -console". Запуск в качестве сервиса остается на совести пользователя.

    Базовая настройка i2p

    Как человек ленивый, я предпочитаю веб-интерфейсы, а не файлы конфигурации. :)
    Изначально доступ к вебинтерфейсу разрешен только с локального компьютера. Так что будем делать первую дырку в безопасности — открывать доступ к админке с любого адреса. Но для начала надо хоть как-то до ней достучаться. Берем ssh и делаем туннель с порта 7657 хостинга на порт 7657 нашего компьютера.

    C:\>ssh user@ваш_сервер -L7657:127.0.0.1:7657
    user@ваш_сервер's password:
    Linux ваш_сервер 3.2.0-4-amd64 #1 SMP Debian 3.2.51-1 x86_64
    
    You have mail.
    Last login: Tue Dec 24 06:18:58 2013 
    ваш_сервер:~>
    


    Если видим приглашение шелла, то по ссылке http://127.0.0.1:7657/ становится доступна админка i2p-роутера.
    Во-первых, на закладке UI ставим английский язык. Потому что если что-то понадобится найти, то проще искать по английским названиям терминов, а не по русским. К примеру, так сразу не догадаешься, что «транзитный трафик» — это «share bandwidth».
    image
    Закладка Bandwidth — я выставил IN — 512, OUT — 256 и 50% share (тот самый транзитный трафик через ваш сервер).
    Хостинг с ограничениями по трафику (пусть и десять терабайт), но много тратить на посторонних не хочется, у меня и свои нужды есть. Конечно, страдает анонимность и, потенциально, скорость. Хочется анонимности — share на 100%. Скорости же надо настраивать в зависимости от канала вашего сервера и ваших нужд.
    image
    Дальше настраиваем адресную книгу — идем в http://127.0.0.1:7657/dns, там закладка Subscriptions. Изначально там только www.i2p2.i2p/hosts.txt, который редко обновляется.
    Добавляем
    http://i2host.i2p/cgi-bin/i2hostetag
    http://stats.i2p/cgi-bin/newhosts.txt
    http://no.i2p/export/alive-hosts.txt

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

    Доступ к админке с любого компьютера

    Начинаем добавлять первую дырку — делаем доступ к админке с любого хоста, без туннелей
    1. http://127.0.0.1:7657/configclients, поле "I2P Router Console", нажимаем Edit и меняем clientApp.0.args=7657 ::1,127.0.0.1 ./webapps/ на clientApp.0.args=7657 0.0.0.0 ./webapps/
      image
    2. http://127.0.0.1:7657/configui, внизу, под списком языков, поля для ввода имени и пароля для админки.
      image
    3. Перезагружаем i2p router (например кнопкой Restart слева).
      image

    После этого вход в админку должен стать доступен по ссылке http://ваш_сервер:7657, при входе должен запрашиваться пароль
    Кстати, для порядку еще можно сменить порт на какой-нибудь другой, от направленной атаки не защитит, но от случайно забегающих ботов может. Хотя лучше бы вообще доступ не открывать, но я человек ленивый и каждый раз для захода в настройки поднимать ssh-туннель не хочется. А заходить иногда приходится для перезапуска сервиса.

    Настройка http-прокси

    Открываем доступ к прокси с любых IP. Конечно, правильный вариант — просто прокинуть ssh-туннель на нужный порт:
    C:\>ssh user@ваш_сервер -L4444:127.0.0.1:4444
    user@ваш_сервер's password:
    Linux ваш_сервер 3.2.0-4-amd64 #1 SMP Debian 3.2.51-1 x86_64
    
    You have mail.
    Last login: Tue Dec 24 07:37:52 2013 
    ваш_сервер:~>
    

    И в настройках браузера выставить прокси 127.0.0.1:4444
    image

    Но, как сказал выше, всё это затевается не ради безопасности, а ради удобства, так что просто открою порт на прокси.
    1. Идем на http://ваш_сервер:7657/i2ptunnelmgr, ищем там туннель под названием "I2P HTTP Proxy", заходим в его настройки.
      image
    2. В пункте Access Point — Reachable by выбираем 0.0.0.0
      image
    3. Затем ставим пароль. Поле Local Authorization, галку в Enable, задаем имя и пароль и нажимаем Save.
      image

    Перезапускаем сервер, ждем пару-тройку минут, пока поднимутся туннели.
    Если надо, то можно аналогично настроить https-прокси, на той же странице.

    Настройка браузера

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

    Скрипт настройки браузера лежит в /usr/share/doc/i2p-router/examples/scripts/i2pProxy.pac.gz
    Распаковываем и кладем куда-нибудь в папку вебсервера (у вас же стоит на хостинге вебсервер? :)).
    Если же ставили с сайта ручками, то скрипт лежит в папке script/i2pProxy.pac.
    Ищем в файле строчку var i2pProxy = "PROXY 127.0.0.1:4444"; и меняем IP-адрес и порт на ваши.
    Сохраняем, в браузере идем в настройки прокси в поле «сценарий автоматической настройки» прописываем имя_вашего_сервера/путь_к_i2pProxy.pac
    image

    Всё. Ходить по сети будете как обычно, но при обращении к i2p браузер автоматом пойдет через ваш i2p-прокси, спросив пароль.
    Решение несложное, платформонезависимое и не требующее установки дополнительного ПО. Должно работать даже на андроидах и прочих iOS, если тамошний браузер поддерживает прокси.

    Но на своих постоянных компьютерах я предпочитаю через плагин FoxyProxy переключать каналы доступа — у меня более сложные правила выбора прокси, чем i2p/весь остальной интернет. :)
    FoxyProxy для файрфокса: addons.mozilla.org/en-US/firefox/addon/foxyproxy-standard
    Для хрома: chrome.google.com/webstore/detail/foxyproxy-standard/gcknhkkoolaabfmlnjonogaaifnjlfnp
    Для IE: getfoxyproxy.org/downloads/FoxyProxy-Standard-IE-1.0.8.exe (в IE11 у меня не заработало).

    Заключение

    Получился удобный, но небезопасный персональный прокси для доступа в i2p сеть, которым можно воспользоваться практически из любого места и из любой ОС. Но для личной безопасности всё же надо шифровать канал от вашего компьютера до сервера — либо ssh-туннель, либо vpn.
    Поделиться публикацией

    Комментарии 49

      0
      Скажите, а существуют ли не java прокси?
        0
        Было несколько попыток реализовать его на С++, но, насколько знаю, до пригодного к использованию состояния не дожила ни одна.
        Хотя некоторые вроде бы еще трепыхаются. Например вот этот: git.repo.i2p/w/i2pcpp.git
        Но для того, чтобы понять, что это такое, надо собирать его из исходников (да еще почитать сами исходники, чтобы понять, что вообще собираешь :)).

        PS. github.com/majestrate/i2pcpp/ — линк в обычном интернете
          0
          вот тут вроде человек взялся за написание оного, но там я так понял далеко еще до финиша
          0
          а можно отключить загрузку картинок?
            +2
            Где?
            0
            Он у вас floodfill? Поскольку все равно запущен 24 часа в сутки с достаточно приличной скоростью.
              0
              Руками не включал. Если автоматом захочет стать, то мешать не буду. :)
              Но именно 24/7 включенным не держу, я перезагружаю его периодически. Иногда перестает сайты открывать (eepsite not found), после перезагрузки начинает.
              0
              Подскажите пожайлуста в чем может быть дело: веб интерфейс i2p роутера недоступен при попытке доступа к нему по адресу ipaddress:7657. Надо ли каким либо образом явно разрешать доступ к веб интерфейсу не только из локалхоста?
                +1
                Надо. Читаем от слов " Начинаем добавлять первую дырку — делаем доступ к админке с любого хоста, без туннелей"
                  0
                  Спасибо! я как то упустил этот участок статьи:)
                    0
                    Я там теперь отдельный заголовок добавил, чтобы заметнее стало. :)
                0
                Через i2p не проходят гигазы трафика. Ну никак не проходят. Я уж и сто мегабит давал, и гигабит. Свободного сервера с 10кой пока нет, хотя есть острое желание попробовать. Не берут такой полосы. Дай бог, 300-400 килобит.

                Например, с последнего апдейта (вчера ставил) прошли примерно сутки. Вот статистика:

                3 с.: 0,79 / 0,66 KBps
                5 мин.: 1,36 / 1,32 KBps
                Всего: 1,91 / 1,91 KBps
                Объем: 137,26 MB / 136,24 MB

                Ну и кого с более-менее терпимыми интернетами это смущает? 136Мб/день, 4-5Гб месяц. Ни о чём. Так что пускайте сколько есть.

                Кстати, позиция «мне бы только посмотреть» с одной стороны понятна (сам с этого начинал) с другой стороны несколько размывает идею чистой анонимности. Я бы всё-таки предлагал для i2p описывать отдельный профиль FF с правильным конфигом. То есть FF у которого в ярлыке указано «юзать альтернативный профиль».

                Кстати, под линукс его было бы неплохо заворачивать в контейнер с отключенными сетевыми интерфейсами и принудительной проксизацией.
                  0
                  «Через i2p не проходят гигазы трафика. Ну никак не проходят. Я уж и сто мегабит давал, и гигабит. Свободного сервера с 10кой пока нет, хотя есть острое желание попробовать. Не берут такой полосы. Дай бог, 300-400 килобит.»

                  Floodfill включать не пробовали? Тогда всякая новая информация о каком либо узле будет обмениваться с вашими соседями, что резко повысит трафик.
                    +1
                    Нет, не пробовал. Да даже если бы и включил — это же служебная информация, а не трафик сети.

                    Я к тому, что i2p маленький, лагливый и медленный, прям как интернет во времена dialup и альтависты. И считать его крошки трафика в современных условиях можно только у экстремальных провайдеров (мобильный/спутниковый интернеты с оплатой по трафику).
                      0
                      Лагает он как раз по причине того что народ все время поднимает и опускает маршутизаторы.
                      Вот допустим вы остановили ваш маршутизатор, а через вас куча тоннелей шло. Создатели этих тоннелей продолжают их использовать, посылая данные в никуда и ожидая ниоткуда.
                      Прямого способа узнать что тоннель уже не функционирует нет.
                      Правильным решением, по моему разумению, было бы сообщение, аналогичное сообщению для создания тоннеля, которое бы узел рассылал через все свои тоннели, что он отключается.
                        0
                        jfyi, это было обновление рутера вместе с системой. До этого было 62 дня аптайма без единого сбоя.
                          0
                          Кстати у них если такое дело, что обновляют версию и у маршутизатора меняется I2P адрес, в итоге те кто коннектятся по старым IP адресам получают отлуп.
                    0
                    136Мб/день

                    Так это же хорошо. :)

                    размывает идею чистой анонимности

                    У меня этой идеи и нет. Пока, по крайней мере. Смотри заглавную картинку.
                    А чистую анонимность надо начинать вообще с добычи отдельного компьютера — чтобы даже из буфера обмена ничего лишнего в браузер не просочилось. :)

                      0
                      При выключенном JS'е клипбоард недоступен сайту.
                        0
                        От дырок в ПО и ошибок никто не застрахован.
                          0
                          В этом случае «отдельный комп» не спасёт никаким образом — один запрос по http, и от всей анонимности остаётся СОРМ с прихвостиком. Контейнеры в этом смысле лучше, т.к. network namespace полностью изолирует приложение от «лишних» сетевых интерфейсов. То есть дырка в ядре или i2p-роутере остаётся, но тривиальный http мимо прокси уже не уйдёт подлому экстремистки-суициидальному детско-порнографическому авторскоправа-нарушающему гуглу.
                            0
                            У меня для этого есть иная идея: все http запросы в I2P через встроенный web-сервер, который используется для администирования, работающий по принципу анонимайзера. И все ссылки в получаемых страницах заменяются на него и адрес в качестве параметров.
                            Тогда все обращения к I2P адресам будут обеспечивать должную анонимность, а обращения к обычным адресам дальше собственного узла не уйдут.
                              0
                              Слишком тонкая и сложная изоляция. Много мест, где можно сделать «не так» и пропустить какой-то тип запросов. Favicon, там, или gopher, или хитрый композитный url в веб-шрифтах в media в css.

                              Закрыть доступ приложению к сети (кроме tun-интерфейса до i2p-router'а) куда грубее и надёжнее. (тюк — и нет проблемы).
                                0
                                На самом деле эта идея продиктована в первую очередь упрощением работы с I2P.
                                Надо вам попасть на какой то ресурс внутри сети, вы не заморачиваетесь с прокси, а запускаете маршутизатора и с той же страницы, где у вас настройки идете по нужному вам I2P адресу.
                                  0
                                  Если мы всё-таки думаем про анонимость, то лучше запускать браузер в браузере. Что-то типа браузера на canvas/js. Будет изолировано. Сколько-то.
                              0
                              Спасет от вставки случайно оставшейся в буфере приватной информации. Я имел ввиду глюки браузера и юзера, а не i2p.

                              Кстати, дополнительное звено для безопасности — на том же самом хостинге поднимаем сервер терминалов (если железка позволяет) и запускаем браузер непосредственно на нём. В таком случае ваш клиентский компьютер светиться вообще не должен никаким образом.
                                0
                                Можешь чуть более подробно описать организацию такой схемы?

                                Я тут на днях разжился домашним сервером, как раз есть возможность для экспериментов. Насколько я понял, ставим гипервизор и несколько виртуалок:
                                первая — i2p роутер, тут основная трабла, кого, как и чем ограничивать.
                                вторая — браузер, в котором выключен JS, настроен прокси на первую виртуалку.
                                  0
                                  Я попробую написать гвайд по конфигурации вокруг i2p, пока что набираюсь опыта. Не раньше лета-осени.
                                    0
                                    Очень жду!
                          0
                          Со скоростью там чтото странное. Несколько недель назад держалась в районе 300-700KBps. Потом после очередной перезагрузки сервера стала ниже 100.
                          Последнее время средняя скорость примерно как на скриншоте:
                            0
                            Через i2p не проходят гигазы трафика. Ну никак не проходят. Я уж и сто мегабит давал, и гигабит.
                            ну не знаю… 200Gb туда обратно за 9 дней аптайма.
                            habrastorage.org/storage3/a67/6f1/ece/a676f1ecefaa73f37e2ec531aff2e413.png
                            habrastorage.org/storage3/2e2/d3c/d71/2e2d3cd7100613c59497b9c6cdcfb00d.png

                            хабр почему-то не дает разместить пруфпики, поэтому только ссылки.
                              0
                              Uptime: 6 days
                              Used: 1,54 GB / 1,41 GB

                              Никаких лимитов не выставлял.
                                0
                                извините, хабрасторадж еще и попортил вторую картинку
                                s020.radikal.ru/i709/1312/7e/2ba260a0cf22.jpg
                                  0
                                  У меня сейчас аптайм 6 дней. Трафик «Used: 25,68 GB / 25,18 GB».
                                  Так что разрешенные 128 килобит утилизируются почти полностью.
                                    0
                                    128 кбит -да, однако если чуть побольше выставить такой нагрузки просто нет, и никакой утилизации тоже нет.
                                0
                                «Тут никаких особых требований нет, VDS или просто арендованный сервер — в зависимости от потребностей и финансовых возможностей. Лишь бы была машинка с root-доступом, которая тянула бы java.»

                                Вопрос заключается в том будет ли VDS поддерживать инструкции процессора AES-NI, а то без них все станет весьма нерадостно, поскольку I2P это по сути своей многослойное AES шифрование.
                                  0
                                  Сколько там этого шифрования в секунду? проценты от загрузки процессора. Кроме того, доверять интеловскому шифрованию в наше время, мягко говоря, не есть быть хорошая идея.
                                    0
                                    Зависит от трафика, вестимо. Каждый пакет фактически шифруется 5 раз: чеснок, стандартный 3-узловой тоннель и транспорт, ну и соответственно в другую сторону.
                                    Чем плохо интеловское шифрование не в плане спрятаться от всех, а в плане обхода цензуры?
                                      0
                                      Это копейки по процессору. На моём стареньком core 2 quad вся ява кушает 10% CPU. На современных процессорах это будет меньше 7-8%, то есть ни о чём.

                                      Интел плох тем, что это не шифрование, а филькина грамота. Для обхода цензуры достаточно прокси, i2p — анонимность.
                                        0
                                        >Это копейки по процессору. На моём стареньком core 2 quad вся ява кушает 10% CPU. На современных процессорах это будет меньше 7-8%, то есть ни о чём

                                        Я полагаю, это зависит от того, что вы запускаете. Кроме того мало знаком с джавой, возможно там ограничивается принудительно. Обычным же бинарным приложением я забью все доступные ядра процессора вмиг.
                                        По поводу «копеек», я наглядно вижу как мой Raspberry PI все время тратит на шифрование при интенсивной работе с I2P.

                                        >Интел плох тем, что это не шифрование, а филькина грамота.

                                        Обоснуйте. Хотите сказать что на выходе команда aesenc будет выдавать другие данные чем если бы это было реализовано программно? Тогда как же другая сторона с тем же самым ключом и другой реализацией AES успешно расшифровывает?
                                        Я вполне могу поверить что есть некая закладка «срисовывающая» содержимое некоторых регистров при выполнении этой команда и передающая «куда нужно», но вот в то, что там какой то другой AES — нет.
                                          0
                                          Чтобы забить «все ядра в миг» надо иметь столько байтов для шифрования, а где вы столько байтов возьмёте в потоке в i2p?

                                          Сравнивать производительность i2p и интеловских процессоров (выше атома) просто нелепо, там разница на порядки.

                                          Никто не знает, что происходит внутри интеловского проца. Этого одного достаточно, чтобы не доверять его шифрованию. Как и любому другому аппаратному, без доступной принципиальной и электронных схем.
                                            0
                                            >а где вы столько байтов возьмёте в потоке в i2p?
                                            Активным зондированием, запрашивая одновременно сотни floodfill-ов, например.

                                            А когда -нибудь начнут распространять торренты, тут аппаратное шифрование весьма пригодится.
                                  0
                                  Спасибо, отлично все заработало. Правда вместо настройки правил в плагине foxyproxy, я использовал privoxy, как описано здесь help.ubuntu.com/community/I2P
                                    0
                                    Скажите, aik, если вы все равно держите I2P на хостинге, не хотели бы вы помочь всей сети подняв также и обновляемую страницу со списком узлов, с которой бы вновь подключающиеся участники получали этот список. Как оказалось, в России нет ни одного такого узла.
                                      0
                                      Я бы сделал, но у меня ADSL и очень низкая скорость отдачи. КПД низкий.
                                        0
                                        Тут главное не скорость отдачи, а доступность 24/7.
                                          0
                                          Согласен, но если я буду кроме транзитного трафика отдавать еще и адресные книги, то мне будет проблематично пользоваться «обычным» интернетом.
                                          Speedtest
                                          Сегодня вообще не айс, обычно Download 15 мб/с, а вот Upload всегда такой.

                                        0
                                        Мой хостинг не в России.
                                        0
                                        Добавьте проброс порта на удаленный сервер через plink

                                        plink -ssh user@server -P порт_ssh -l пользователь -pw пароль -L локальный порт:127.0.0.1:удаленный порт
                                        


                                        Можно еще опции -С (компрессия) и -N (не запускать shell) использовать.

                                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                        Самое читаемое