В этой статье будет рассказано, как пробросить весь трафик операционной системы через TOR так, чтобы о наличии TOR-а операционная система даже не подозревала.
Это поможет не думать о бесконечных настройках прокси и onion, перестать бояться на тему «а не сливает ли торрент клиент мой реальный IP адрес, так как не полностью поддерживает прокси?» и, наконец, быть застрахованным от законодательного запрета TOR-а в России.
Когда я говорю «TOR», я подразумеваю «TOR и I2P». По схожей методике сюда можно подключить любой даркнет.
Постановка задачи
1. Мой компьютер должен по нажатию одной кнопки переходить в режим «весь трафик — не русский».
2. По нажатию второй кнопки он должен переходить в режим «весь траффик идет через TOR»
3. Третья кнопка — для I2P.
4. Входная TOR-нода должна находиться за рубежом.
5. Все это должно работать под linux, windows, android. Заранее: с OS X и iPhone тоже все в порядке, просто у меня их нету, так что протестить не смогу.
Хостинг
Первым делом нам понадобится сравнительно дешевая VPS-ка, владельцы которой не против, чтобы там крутился TOR (и не русская, разумеется). Лично я использую DigitalOcean. В их ToS не специфицирован запрещенный трафик (хотя если будете качать пиратские торренты прямо с их IP — заблокируют на раз. Ну, собственно, нам для этого и нужен TOR...). Стоит это 5$ в месяц.
Регистрироваться можно прямо тут:
Если Вы знаете лучшие или хотя бы не худшие варианты хостинга под такие цели — пишите в комменты, обновлю статью.
Я не буду описывать конкретную процедуру создания VPS-ки, так как это зависит от хостинга и просто. Давайте предположим, что вы в итоге можете выполнить команду,
и получить shell на VPS-ку. Я буду считать, что на VPS-ке крутится debian 7. По крайней мере, эта статья тестировалась на debian 7. На убунте тоже заработает, наверное.
Установка пакетов
Сначала немного приложений, которые облегчают нам жизнь. Не забудьте поставить ваш любимый редактор, mc если нужно и т.п.
I2P нету в репозитории debian, так что придется добавить новый источник.
Теперь поставим основные пакеты — TOR, VPN и I2P. Также нам пригодится DNS сервер. Я использую unbound.
Настройка VPN
Я буду держать все настройки VPN в /opt/vpn. Для начала следует сгенерировать сертификаты для сервера и клиента.
N.B. Мы будем запускать несколько серверов (один под tor, второй под обычный трафик) и использовать для них один и тот же сертификат. Это не обязательно. Вполне можно (и нужно) генерировать независимый сертификат или даже свою CA для каждого из openvpn серверов.
Теперь сгенерируем новую CA и необходимые сертификаты.
Изучите папку /opt/vpn/rsa/keys. Теперь там есть несколько пар ключ+сертификат.
ca.{crt,key} — certificate authority
server.{crt,key} — ключ сервера
client.{crt,key} — ключ клиента.
Клиенту нужно отдать только ca.crt, client.crt и client.key, остальные файлы должны оставаться только на сервере.
Пора писать конфигурационный файл для сервера. Положите его в /etc/openvpn/00-standard.conf
Попробуйте запустить openVPN
Если не получилось — у вас баг:
ОК, VPN работает. Самое время подключиться к нему. Для этого на клиенте напишем конфиг-файл:
Теперь попробуйте подключиться
После появления надписи «Initialization Sequence Completed» вы подключены и должны успешно пинговать 10.8.1.1. Интернет пропадет, это нормально.
Настройка интернета
Допустим, мы не хотим использовать TOR, а просто хотим себе не русский внешний IP. В этом случае при помощи вот этого скрипта:
вы достигнете желаемого. Перепишите это в /etc/rc.local.
Настройка TOR
Если вы прочитали и выполнили предыдущую часть — не забудьте очистить iptables
Теперь допустим, что вы таки хотите VPN через TOR (и предыдущий пункт не выполняли). Тогда:
допишите в конец /etc/tor/torrc следующее:
также изменим наш конфиг-файл сервера /etc/openvpn/00-standard.conf. Измените DNS с гугловского на локальный. Не забудьте перезапустить openvpn.
Наконец, следующая конструкция на bash перенаправит весь входящий трафик vpn через tor
Кстати, запомните эту конструкцию. Это универсальный способ перенаправить весь трафик с заданной сетевой карты через прозрачный прокси. I2P будем добавлять точно так же.
Готово. Подключитесь к VPN. Убедитесь, что у Вас TOR-овский IP-шник. Зайдите на какой-нибудь .onion сайт, чтобы проверить: dns тоже работает.
Настройка I2P
С I2P сложности. У них нет собственного DNS сервера, так что придется делать свой.
Откройте /etc/unbound/unbound.conf и допишите в конец:
После этого любой (!) домен будет раскрываться в заведомо несуществующий IP адрес 10.191.0.1. Осталось «ловить» такой трафик и перенаправлять на localhost:8118 — именно тут слушает I2P.
Кстати говоря, пока что не слушает. Выполните
и выставьте флаг, чтобы стартовал при загрузке.
Остановите tor. Запустите unbound.
Теперь настроим privoxy в связке в I2P. Допишите в конец /etc/privoxy/config
и рестартаните privoxy
Точно так же, как и в случае с TOR, смените DNS на локальный в конфигурации vpn-сервера:
Если вы уже пробовали редиректить TOR — не забудьте почистить iptables:
Осталось выполнить переадресацию:
Знакомо, правда? Единственное отличие — номер порта прокси.
Подключитесь к VPN. Вы в I2P. Откройте epsilon.i2p, убедитесь, что сеть работает.
Что дальше?
Дальше Вам пора сделать так, чтобы они не конфликтовали. Вместо одного сервера /etc/openvpn/00-standard сделать три: 00-standard для обычного трафика, 01-tor для tor-а, и 02-i2p для i2p. Назначьте им разные подсети (например, 10.8.2.* для tor и 10.8.3.* для i2p). После этого tor и unbound перестанут конфликтовать и вы сможете подключаться к любой из трех одновременно работающих сетей.
Кроме того, сейчас клиент не проверяет сертификат сервера. Это можно поправить.
А еще можно запилить виртуалку, для которой выкатить tun0, трафик которого идет через TOR, после чего виртуалка не будет знать даже про VPN. А в хосте этой виртуалки прописать роутинг так, чтобы без VPN не подключалось вообще.
А еще надо лимит скорости в I2P поставить. И логи у VPN не ротируются. И веб-морды нет.
А еще… а еще я все это обязательно опишу — в других статьях. Засим — спасибо за внимание!
Использованные источники
Это поможет не думать о бесконечных настройках прокси и onion, перестать бояться на тему «а не сливает ли торрент клиент мой реальный IP адрес, так как не полностью поддерживает прокси?» и, наконец, быть застрахованным от законодательного запрета TOR-а в России.
Когда я говорю «TOR», я подразумеваю «TOR и I2P». По схожей методике сюда можно подключить любой даркнет.
Постановка задачи
1. Мой компьютер должен по нажатию одной кнопки переходить в режим «весь трафик — не русский».
2. По нажатию второй кнопки он должен переходить в режим «весь траффик идет через TOR»
3. Третья кнопка — для I2P.
4. Входная TOR-нода должна находиться за рубежом.
5. Все это должно работать под linux, windows, android. Заранее: с OS X и iPhone тоже все в порядке, просто у меня их нету, так что протестить не смогу.
Пожалуйста,
Вход
или
Регистрация
для просмотра содержимого URL-адресов!
. В данной статье описывается средство, которое, тем не менее, нужно применять с умом. Хостинг
Первым делом нам понадобится сравнительно дешевая VPS-ка, владельцы которой не против, чтобы там крутился TOR (и не русская, разумеется). Лично я использую DigitalOcean. В их ToS не специфицирован запрещенный трафик (хотя если будете качать пиратские торренты прямо с их IP — заблокируют на раз. Ну, собственно, нам для этого и нужен TOR...). Стоит это 5$ в месяц.
Регистрироваться можно прямо тут:
Пожалуйста,
Вход
или
Регистрация
для просмотра содержимого URL-адресов!
(ссылка реферальная, вам $10, мне $25. Не хотите играть в это дело — уберите refcode).Если Вы знаете лучшие или хотя бы не худшие варианты хостинга под такие цели — пишите в комменты, обновлю статью.
Я не буду описывать конкретную процедуру создания VPS-ки, так как это зависит от хостинга и просто. Давайте предположим, что вы в итоге можете выполнить команду,
и получить shell на VPS-ку. Я буду считать, что на VPS-ке крутится debian 7. По крайней мере, эта статья тестировалась на debian 7. На убунте тоже заработает, наверное.
Установка пакетов
Сначала немного приложений, которые облегчают нам жизнь. Не забудьте поставить ваш любимый редактор, mc если нужно и т.п.
Код:
apt-get update
apt-get upgrade # Если с обновлением придет новое ядро -- перезагрузитесь!
apt-get install fail2ban unattended-upgrades etckeeper # я всегда ставлю это на новый сервер
Код:
echo "deb http://deb.i2p2.no/ wheezy main" >> /etc/apt/sources.list.d/i2p.list
echo "deb-src http://deb.i2p2.no/ wheezy main" >> /etc/apt/sources.list.d/i2p.list
apt-get update
apt-get install i2p-keyring
apt-get update
Код:
apt-get install tor i2p unbound openvpn privoxy
Я буду держать все настройки VPN в /opt/vpn. Для начала следует сгенерировать сертификаты для сервера и клиента.
N.B. Мы будем запускать несколько серверов (один под tor, второй под обычный трафик) и использовать для них один и тот же сертификат. Это не обязательно. Вполне можно (и нужно) генерировать независимый сертификат или даже свою CA для каждого из openvpn серверов.
Код:
mkdir /opt/vpn
mkdir /opt/vpn/log
cp -rf /usr/share/doc/openvpn/examples/easy-rsa/2.0/ /opt/vpn/rsa # Это набор скриптов для создания ключей. Можно и без них, но сложно.
Код:
cd /opt/vpn/rsa
. ./vars
./clean-all
./build-ca # Спросит кучу вопросов. Отвечайте что угодно.
./build-key-server server # Опять куча вопросов. Пароля не вводите. На забудьте подписать сертификат в конце
./build-key --batch client # Уффф. Хоть тут не спрашивает ничего.
./build-dh
ca.{crt,key} — certificate authority
server.{crt,key} — ключ сервера
client.{crt,key} — ключ клиента.
Клиенту нужно отдать только ca.crt, client.crt и client.key, остальные файлы должны оставаться только на сервере.
Пора писать конфигурационный файл для сервера. Положите его в /etc/openvpn/00-standard.conf
Код:
port 1201
proto udp
dev tun
ca /opt/vpn/rsa/keys/ca.crt
cert /opt/vpn/rsa/keys/server.crt
key /opt/vpn/rsa/keys/server.key
dh /opt/vpn/rsa/keys/dh1024.pem
# Server Routing
# server-bridge 10.8.1.1 255.255.255.0 10.8.1.50 10.8.1.100
server 10.8.1.0 255.255.255.0
#Client configuration
push "redirect-gateway def1"
push "dhcp-option DNS 8.8.8.8"
keepalive 10 120
comp-lzo
persist-key
persist-tun
log /opt/vpn/log/server-standard.log
status /opt/vpn/log/status-standard.log
verb 3
Код:
/etc/init.d/openvpn restart
Пожалуйста,
Вход
или
Регистрация
для просмотра содержимого URL-адресов!
Поправьте согласно инструкции и добейтесь успешного запуска сервера.ОК, VPN работает. Самое время подключиться к нему. Для этого на клиенте напишем конфиг-файл:
Код:
client
dev tun
proto udp
# Тут должен быть реальный внешний IP адрес сервера
remote 1.2.3.4 1201
resolv-retry infinite
nobind
persist-key
persist-tun
comp-lzo
verb 3
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
<ca>
[Вставьте сюда содержимое ca.crt]
</ca>
<cert>
[Вставьте сюда содержимое client.crt]
</cert>
<key>
[Вставьте сюда содержимое client.key]
</key>
Код:
sudo openvpn --config client.conf --script-security 2
Настройка интернета
Допустим, мы не хотим использовать TOR, а просто хотим себе не русский внешний IP. В этом случае при помощи вот этого скрипта:
Код:
#!/bin/bash
SUBNET=10.8.1.0/24
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s $SUBNET -o eth0 -j MASQUERADE
Настройка TOR
Если вы прочитали и выполнили предыдущую часть — не забудьте очистить iptables
Код:
iptables -F
iptables -t nat -F
допишите в конец /etc/tor/torrc следующее:
Код:
VirtualAddrNetworkIPv4 10.192.0.0/10
AutomapHostsOnResolve 1
TransPort 9040
TransListenAddress 10.8.1.1
DNSPort 53
DNSListenAddress 10.8.1.1
AccountingStart day 0:00
AccountingMax 10 GBytes
RelayBandwidthRate 100 KBytes
RelayBandwidthBurst 500 KBytes
Код:
VirtualAddrNetworkIPv4 10.192.0.0/10
AutomapHostsOnResolve 1
TransPort 9040
TransListenAddress 10.8.1.1
DNSPort 53
DNSListenAddress 10.8.1.1
AccountingStart day 0:00
AccountingMax 10 GBytes
RelayBandwidthRate 100 KBytes
RelayBandwidthBurst 500 KBytes
Код:
push "dhcp-option DNS 10.8.1.1"
Код:
#!/bin/sh
_trans_port="9040"
_int_if="tun0"
iptables -t nat -A PREROUTING -i $_int_if -p udp --dport 53 -j REDIRECT --to-ports 53
iptables -t nat -A PREROUTING -i $_int_if -p tcp --syn -j REDIRECT --to-ports $_trans_port
/etc/init.d/tor restart
Готово. Подключитесь к VPN. Убедитесь, что у Вас TOR-овский IP-шник. Зайдите на какой-нибудь .onion сайт, чтобы проверить: dns тоже работает.
Настройка I2P
С I2P сложности. У них нет собственного DNS сервера, так что придется делать свой.
Откройте /etc/unbound/unbound.conf и допишите в конец:
Код:
interface: 10.8.1.1
logfile: "/etc/unbound/unbound.log"
local-zone: "i2p" redirect
local-data: "i2p A 10.191.0.1"
access-control: 127.0.0.0/8 allow
access-control: 10.0.0.0/8 allow
local-zone: "." redirect
local-data: ". A 10.191.0.1"
local-zone: "*" redirect
local-data: "* A 10.191.0.1"
Кстати говоря, пока что не слушает. Выполните
Код:
dpkg-reconfigure i2p
Остановите tor. Запустите unbound.
Код:
/etc/init.d/tor stop
/etc/init.d/unbound restart
Код:
accept-intercepted-requests 1
forward / 127.0.0.1:4444
listen-address 10.8.1.1:8118
Точно так же, как и в случае с TOR, смените DNS на локальный в конфигурации vpn-сервера:
Код:
push "dhcp-option DNS 10.8.1.1"
Код:
iptables -F
iptables -t nat -F
Код:
#!/bin/sh
_trans_port="8118"
_int_if="tun0"
iptables -t nat -A PREROUTING -i $_int_if -p udp --dport 53 -j REDIRECT --to-ports 53
iptables -t nat -A PREROUTING -i $_int_if -p tcp --syn -j REDIRECT --to-ports $_trans_port
Подключитесь к VPN. Вы в I2P. Откройте epsilon.i2p, убедитесь, что сеть работает.
Что дальше?
Дальше Вам пора сделать так, чтобы они не конфликтовали. Вместо одного сервера /etc/openvpn/00-standard сделать три: 00-standard для обычного трафика, 01-tor для tor-а, и 02-i2p для i2p. Назначьте им разные подсети (например, 10.8.2.* для tor и 10.8.3.* для i2p). После этого tor и unbound перестанут конфликтовать и вы сможете подключаться к любой из трех одновременно работающих сетей.
Кроме того, сейчас клиент не проверяет сертификат сервера. Это можно поправить.
А еще можно запилить виртуалку, для которой выкатить tun0, трафик которого идет через TOR, после чего виртуалка не будет знать даже про VPN. А в хосте этой виртуалки прописать роутинг так, чтобы без VPN не подключалось вообще.
А еще надо лимит скорости в I2P поставить. И логи у VPN не ротируются. И веб-морды нет.
А еще… а еще я все это обязательно опишу — в других статьях. Засим — спасибо за внимание!
Использованные источники
Пожалуйста,
Вход
или
Регистрация
для просмотра содержимого URL-адресов!
Пожалуйста,
Вход
или
Регистрация
для просмотра содержимого URL-адресов!