В целях самообразования решил познакомится с анонимизаторами tor/i2p, но каждый раз менять для этого прокси в настройках браузера быстро надоело, но под рукой уже был настроенный роутер. Появилась идея настроить на нём прозрачное проксирование. Ну, вернее полупрозрачное - для подключения к анонимизаторам используется отдельная учётная запись PPTP. Такой вариант показался наиболее удобным - доступ к tor/i2p требуется далеко не всегда.
Установка производилась в Ubuntu 13.10. Сам роутер имеет адрес 10.0.0.1, tor/i2p вынесены в целях эксперимента на отдельный lxc контейнер с ip адресом 10.0.1.160. Ресурсы i2p/tor имеют виртуальный IP адрес 10.0.1.200, который используется для "заворота" трафика в цепочку проксей (увы, обойтись без них не удалось). Адрес 192.168.0.0/16 используется при подключении PPTP клиента
Итак, приступим к установке.
В репозитарии ubuntu почему-то нет i2p, поэтому придётся добавить репозитарий:
$ sudo apt-add-repository ppa:i2p-maintainers/i2p
$ sudo apt-get update
Устанавливаем анонимизаторы
$ sudo apt-get install i2p tor
Сразу меняем настройки автозапуска i2p роутера:
/etc/default/i2p
RUN_DAEMON="true"
Устанавливаем прокси-серверы:
$ sudo apt-get install tinyproxy polipo
И настраиваем конфиги. Прокси сервер tinyproxy при такой настройке является основным и прозрачным:
/etc/tinyproxy.conf
User nobodyGroup nogroupPort 8888Timeout 600DefaultErrorFile "/usr/share/tinyproxy/default.html"StatFile "/usr/share/tinyproxy/stats.html"Logfile "/var/log/tinyproxy/tinyproxy.log"LogLevel InfoPidFile "/var/run/tinyproxy/tinyproxy.pid"MaxClients 100MinSpareServers 5MaxSpareServers 20StartServers 10MaxRequestsPerChild 0Allow 127.0.0.1Allow 192.168.0.0/16ViaProxyName "tinyproxy"ConnectPort 443ConnectPort 563upstream 127.0.0.1:4444 ".i2p"upstream 127.0.0.1:8124 ".onion"
Polipo - дополнительный. Его основная задача - переконвертить http proxy в предоставляемый tor'ом socks proxy.
/etc/polipo/config
socksParentProxy = "127.0.0.1:9050"socksProxyType = socks5allowedClients = 127.0.0.1proxyPort = 8124
Устанавливаем DNS сервер. В принципе, можно наверное любой, но последнее время как-то больше нравится dnsmasq.
$ sudo apt-get install dnsmasq
/etc/dnsmasq
address=/.i2p/10.0.1.200
address=/.onion/10.0.1.200
Не забываем перезапустить (или заставить перечитать настройки) установленное после изменения конфигов.
Ввиду особенностей настройки у меня при подключении по PPTP вместо включения маскарада/ната включается примерно такой скрипт ($2 - имя интерфейса):
$ sudo iptables -t nat -A PREROUTING -i $2 -d 10.0.1.200 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.0.1.160:9040
$ sudo iptables -t nat -A PREROUTING -i $2 -m udp -p udp --dport 53 -j DNAT --to-destination 10.0.1.160:53
Но никто не запрещает сделать это же на постоянной основе.
При написании этой пародии на статью использовались материалы:
http://help.ubuntu.ru/wiki/i2p
http://habrahabr.ru/post/122835/
пиво Scarecrow