Создаём на wifi-роутере за-tor-енную точку доступа
Многие современные домашние роутеры по сути представляют собой мини-компьютер — у которого разве что нет монитора и мыши/клавиатуры. Впрочем, учитывая назначение этих самых железяк, последнее — вовсе не проблема.
Как правило, в базовой прошивке роутер умеет раздавать интернет на один или несколько LAN-портов, а также обслуживать собственную беспроводную сеть. Более продвинутые модели зачастую включают один или несколько портов USB, куда можно подключить, например, принтер или флэшку с файлами.
Однако всё богатство возможностей этого железа открывается при использовании открытых прошивок. Для новичков — dd-wrt, для более продвинутых — серия open-wrt и прочие wrt-based.
В настоящей статье речь пойдёт о настройке анонимизированной wifi-точки на базе роутера Asus RT-N16 с прошивкой dd-wrt и optware.
Изначальная идея не нова — она давно витает в воздухе, и одна из реализаций даже как-то анонсировалась на Хабре. Тем не менее, что касается деталей — то их, как правило, не найти. В рядовых «how-to» я этого не нашёл, а явно знающим гуру, видимо, не до написания подобных инструкций. Поэтому пришлось во всём разбираться самому. Ну и заодно фиксировать сделанное — на будущее.
Итак, имеем роутер с прошитым dd-wrt. У этой специфической модели, увы, нет поддержки Open-wrt (или, по крайней мере, не было на тот момент, когда это потребовалось. Сейчас уже появилась бета, но она пока что не претендует на стабильность).
Что потребуется ещё? Если ограничиться только лишь tor, то, возможно, ничего. Можно обойтись без всего optware и даже без внешней флэшки. Нужно лишь найти, куда упихать в роутер около 1,5Мб бинарника. Я, тем не менее, поднимал у себя не только лишь точку доступа, а полноценный домашний сервер, основной задачей которого было поддерживать сеть (основные службы — DNS, DHCP), раздавать интернет, содержать небольшую (гигабайт этак на 500) файлопомойку с доступом по NFS (ну, звиняйте. Windows не использую, поэтому SAMBA не нужна), самостоятельно пополнять эту файлопомойку свежими торрентами, хостить несколько веб-морд для разных поделок (весь фарш: — lighttpd, php, mysql и даже sphinx), служить failsafe-сервером для загрузки Ubuntu по сети (чтобы при надобности в «мёртвое тело» вставлять не флэшку с образом, а сетевой кабель). И, видимо, всё (а может и забыл чего). Для того, чтобы внешне всё было красиво и с минимумом проводов — жёсткий диск на 640гб для всего задуманного был помещён прямо внутрь роутера, и свободного места тем самым существенно прибавилось. А tor на роутере ставился, скорее, из любопытства. Однако — прижился и стабильно работает.
Для установки и настройки необходим доступ к роутеру через telnet или (что гораздо безопаснее) через ssh. Доступ можно устроить (или подсмотреть) в веб-интерфейсе dd-wrt.
Сперва устанавливаем tor:
# ipkg install tor
Затем правим его конфиг. В случае с optware он располагается в /opt/etc/torrc. Опять же, замечу, что путь к конфигу по умолчанию вовсе не является обязательным. Программу всегда можно запустить с другим файлом конфигурации, но его придётся явно указывать в опциях запуска. В этом плане путь по умолчанию всё же проще, покуда делает запуск программы более лаконичным.
Конфиг по умолчанию хорошо прокомментирован, и основную настройку можно произвести, просто читая эти комментарии, без всяких сторонних руководств. В моём случае роутер обслуживает домашнюю сеть 192.168.1.0/24. В ней я решил сделать классический tor с доступом как через прокси socks5 на порту 9100. Помимо этого я решил сделать анонимизированную точку доступа, которая пустит пользователей в сеть 192.168.2.0/24, где вся связь с внешним миром будет лишь через tor (прозрачный прокси), либо просто обрублена. Иными словами — мы имеем wifi-точку, подключившись к которой мы никак не попадём ни к соседям из той же сети (192.168.2.0/24), ни в мою домашнюю сеть (192.168.1.0/24), ни на локальные сервисы роутера. А можем попасть только в интернет, причём только анонимным образом (через tor).
Для этого в конфиге прописаны следующие локальные параметры:
Для домашней сети:
По сути это означает, что для того, чтобы попасть анонимно в интернет я должен настроить браузер на подключение через socks5-прокси с указанным адресом (это внутренний адрес роутера).
Для анонимной сети:
TransPort 9040
TransListenAddress 192.168.2.1
DNSPort 9053
DNSListenAddress 192.168.2.1
В анонимной сети клиенты никуда подключаться не будут, а указанные порты и адрес нужны лишь для настройки правил iptables.
Помимо этих настроек также имеет смысл назначить адрес виртуальной сети:
Этот адрес необходим в случае перехода по внутренним анонимным сервисам (т.н. ‘hidden service’) тор-сети. Это адреса сайтов, располагающиеся в домене .onion. Такого домена в реальной жизни нет; однако будучи в tor, их собственный DNS распознаёт такие адреса и выводит вас к нужному ресурсу, спрятанному где-то в глубине сети. При этом фактический ip-адрес такого сайта скрыт, и узнать его невозможно. В этом случае для программ, которые сперва разрешают адрес узла через DNS, а потом подключаются к полученному ip-адресу, tor-демон создаёт временный адрес из указанной маски виртуальной сети. Иными словами, при попытке подключиться к какому-нибудь узлу superpuper.onion он «разрешится» в адрес, например, 10.192.0.1. И программа, подключаясь к этому адресу, будет через «луковые слои» tor-шифрования достигать нужного ресурса.
Что касается настройки «публичной» части конфига — там всё, согласно комментариям в самом файле.
В результате этих настроек мы получим демона, который
1) является proxy-socks с адресом 192.168.1.5:9100
2) является прозрачным proxy с адресом 192.168.2.1, причём помимо tcp-трафика умеет обрабатывать DNS-запросы.
С локальным socks-прокси всё ясно. Просто настраиваем любой браузер в домашней сети на выход в интернет через указанный прокси — и всё работает.
Ничуть не сложнее доступ с удалённой машины (у нас же есть ssh-консоль на роутер — значит, ничего не мешает просто пробросить порт:
ssh -L localhost:9100:192.168.1.5:9100 homerouter
— и после этого на той машине заработает Socks5 по адресу localhost:9100.
Теперь настраиваем точку доступа.
Для этого в gui dd-wrt заходим во вкладку wireless и там добавляем виртуальный интерфейс. Имя придумайте сами (я назвал бесхитростно: tor_network). Конфигурация сети — unbridged (т.е. точка не имеет связи с другими интерфейсами и как бы образует свой собственный замкнутый мирок). Запрещаем там же маскарадинг и мультикаст и назначаем адрес сети: 192.168.2.1/255.255.255.0. Затем на вкладке wireless security настраиваем, если нужно, доступ к точке. Я в своём случае поставил «disabled», т.е. создал открытую точку.
Таким образом у нас на роутере работают одновременно две разные сети: домашняя (защищённая WPA2) и вновь созданная tor_network, которая изначально открыта. Впрочем, это не даёт никому никаких привилегий, поскольку подключившись к этой открытой сети мы никуда не попадём 🙂
Двигаемся дальше. На вкладке Setup/Networking ищем в самом низу раздел DHCPD и добавляем запись для интерфейса wl0.1 (это, собственно, и есть железячное имя нового виртуального wifi-интерфейса), чтобы он назначал адреса из подсети 192.168.2.0/24. Скажем, 50 адресов начиная со 100 вполне хватит.
Теперь подключаясь к нашей открытой точке мы получим внутренний ip-адрес.
Осталось лишь подключить эту точку к прозрачному tor.
Это делается с помощью iptables:
CRNET=»192.168.2.0/24″
TORCMD=»iptables -t nat -A PREROUTING -i wl0.1″
TORPORT=»9040″
TORDNS=»9053″
# transparent tor for tor_network wireless
$TORCMD -p udp —dport 53 -j REDIRECT —to-ports $TORDNS
$TORCMD -p udp —dport 67 -j RETURN
$TORCMD -d $CRNET -j DROP
$TORCMD -p tcp —syn -j REDIRECT —to-ports $TORPORT
$TORCMD -j DROP
Что делаем?
1. Редиректим весь udp-трафик на 53-й порт (dns) на порт нашего демона.
2. Пропускаем спокойно весь udp-трафик на 67-й порт (там висит dhcp)
3. Весь остальной трафик во внутреннюю открытую сеть, откуда бы он ни был, отсекаем.
4. Редиректим весь tcp-трафик на порт прозрачного прокси нашего демона.
5. Весь остальной трафик открытой сети отсекаем.
Этот скрипт можно вставить в Administration/commands и сохранить как firewall-скрипт.
Проверяем работу: подключаемся к точке tor_network и открываем адрес check.torproject.org/. Мы должны увидеть зелёную луковицу и поздравления с успешной настройкой. Далее — пробуем открыть адрес duskgytldkxiuqc6.onion/. Если всё в порядке — то после некоторой задержки адрес откроется. При этом совершенно никаких настроек со стороны клиента не требуется; мы просто подключаемся к открытой wifi-сети ‘tor_network’ и тем самым автоматически оказываемся скрыты за многослойным прокси-анонимайзером.
В качестве дополнительного бонуса — изначально повышенная анонимность, поскольку демон, работающий на железячном роутере по умолчанию не пишет никуда никаких логов и не оставляет следов в системе
Источник
установка Tor на роутер
Admin
Администратор
Мы уже писали что использовать TOR не есть хорошо но пользователи все равно спрашивают как его лучше настроить. Исходя из таких просьб я решил выложить статью как установить и настроить TOR на роутер. Для этого необходимо купить любой роутер на который можно установить OpenWRT, многие роутеры серии TP-Link, которые имеют свободное место в памяти, позволяют это сделать. Сам много писать не люблю поэтому сделаю копипаст))
Установка TOR на OpenWRT
Для установки tor на OpenWrt достаточно выполнить
opkg install tor
Если вы собираете пакеты для себя вручную, либо хотите встроить этот пакет прямо в прошивку то на этапе конфигурации прошивки OpenWRT нужно выбрать:
для сборки в виде пакета, или
для того чтобы встроить пакет прямо в прошивку.
Несколько подводных камней, которые могут возникнуть после инсталляции пакета.
1. Обязательно настройте и синхронизируйте время чеpез ntp. Tor использует системное время для каких то своих действий. Неправильная дата может привести к проблемам при старте tor или к его не корректной работе.
2. При установке tor должен создать пользователя tor и группу tor. При создании группы инсталлятор у меня допустил ошибку и в файле /etc/group не поставил перенос строки для группы tor. Скорее всего это у меня единичный баг, однако будьте внимательны.
3. Проверьте все права на файлы необходимые tor они должны иметь маску 755 и принадлежать tor:tor
Настройка TOR.
Открываем конфигурационный файл /etc/tor/torrc и правим:
1. Если вы хотите чтобы все компьютеры которые подключены к роутеру (неважно по кабелю или wifi) имели возможность получить доступ к TOR через SOCKS proxy необходимо раскоментировать и проправить строку:
SocksListenAddress 192.168.120.1:9100 # listen on this IP ort also
Где 192.168.120.1 – ip адрес вашего роутера для локальной сети, а 9100 – порт на котором будет socks сервер для сети tor.
2. Опциями SocksPolicy можно явно указать какие ip адреса будут иметь (или не иметь) доступ к socks серверу. В файле конфигурации эти опции закомментированы – рекомендую их раскомментировать и настроить под себя.
3. Если по каким то причинам tor не стартует воспользуетсь опцией Log для выяснения проблемы.
Собственно больше никаких настроек не нужно, и можно запускать tor.
Запуск Tor
Запускаем тор следующей командой:
Если tor уже запущен либо при старте возникают ошибки вида:
[warn] Could not bind to 127.0.0.1:9050: Address already in use. Is Tor already running?
необходимо остановить tor:
И запустить его заново как написано выше.
Если лог включен, то признаком успешного запуска и подключения к сети tor будет строка:
Feb 21 19:12:17.034 [notice] Tor has successfully opened a circuit. Looks like client functionality is working.
Feb 21 19:12:17.035 [notice] Bootstrapped 100%: Done.
Далее достаточно прописать адрес и порт указанный опцией SocksListenAddress как socks сервер в браузере или любой другой программе на вашем ПК.
Однако есть ряд программ которые не умеют работать с socks протоколом. Эту проблему можно решить средствами самого tor + iptables. Для этого необходимо включить в tor режим прозрачного проксирования. В таком случае на подключенных к роутеру машинах вообще никаких настроек делать не нужно. Весь трафик будет сразу проходить через tor.
Использование прозрачного прокси в Tor
Для этого в конфигурационном файле /etc/tor/torrc правим:
AutomapHostsOnResolve 1
TransPort 9040
DNSPort 53
Тем самым прозрачный прокси будет слушать порт 9040.
killall -9 tor
/etc/init.d/tor start
Далее необходимо весь трафик завернуть на этот порт. Для этого необходимо использовать iptables с опцией REDIRECT –to-port. Для использования этой опции необходимо дополнительно собрать и установить пакет iptables-mod-nat-extra. В противном случае вы получите ошибку вида:
iptables v1.4.6: unknown option `—to-ports’
Установить пакет можно тривиально выполнив
opkg install kmod-ipt-nat-extra
А можно собрать в своем репозитории или включить этот пакет сразу в прошивку. В конфигураторе OpenWrt этот пакет находится в
-> Network
-> iptables
iptables-mod-nat-extra
После установки пакета необходимо “завернуть” трафик на прозрачный прокси сервер:
iptables -t nat -A PREROUTING -p tcp -d ! 192.168.120.1 —dport 80 -j REDIRECT —to-ports 9040
Что означает – перебрасывать весь трафик идущий на 80-й порт (и не адресованый для 192.168.120.1) на порт 9040, на котором как раз и находится прозрачный прокси.
Тоже делаем и для dns запросов:
iptables -t nat -A PREROUTING -p udp —dport 53 -j REDIRECT —to-ports 53
Остальной udp трафик прийдется либо пропускать без анонимизации, либо резать.
Собственно все. Весь трафик приходящий на роутер будет перенаправлен в сеть tor без каких – либо настроек компьютеров в вашей локальной сети! Все ваши действия в сети будут анонимны.
Источник
TOR роутер на базе Raspberry с поддержкой VPN.
В этой статье будет рассказано об одном из вариантов получения переносного решения с Tor, VPN и обфускацией, к которому можно подключить свои мобильные устройства, ПК или ноутбук. Постановка задачи: получить одноплатный компьютер, который можно подключить к своему ноутбуку/ПК/мобильному устройству и который будет заворачивать трафик сначала в VPN, затем в Tor, обфусцировать с помощью obfs-proxy и отправлять на удаленный VPN-сервер.
Постановка задачи: получить одноплатный компьютер, который можно подключить к своему ноутбуку/ПК/мобильному устройству и который будет заворачивать трафик сначала в VPN, затем в Tor, обфусцировать с помощью obfs-proxy и отправлять на удаленный VPN-сервер.
1) Одноплатный компьютер. В моем случае это Raspberry Pi модель B+;
2) ОС Raspbian. Для данной статьи использовалась Raspbian Jessie, билд от 18-03-2016;
3) Карта памяти (Micro SD);
4) Картридер;
5) Беспроводной адаптер или переходник ethernet to usb;
6) Удаленный OpenVPN сервер.
1) eth-eth
2) wlan-eth
3) wlan-wlan
4) eth-wlan
1. SBC — одноплатный компьютер;
2. CR — устройство, через которое осуществляется доступ в Интернет. Устройство не обязательно может быть подключено напрямую в порт SBC;
3. PC — какой-либо компьютер (или мобильное устройство) подключаемое к SBC;
4. VPN-server — целевой VPN сервер;
5. Входной интерфейс — физический интерфейс, куда поступает клиентский трафик;
6. Выходной интерфейс — физический интерфейс, с которого трафик уходит в Интернет.
В статье рассматривается случай, когда параметры для линка в интернет приходят по DHCP или задаются статически. Для случаев с получением параметров для линка по L2TP, PPPoE или иных ситуаций настройка будет отличаться. Также будем считать, что для удобной работы VPN-сервер выступает как DNS-relay.
Установка системы и подключение
На официальном сайте Rasbian присутствуют очень подробные инструкции для записи образа для Linux, Mac OS и Windows, поэтому я не буду описывать процесс записи образа ОС на карту памяти, чтобы не загромождать статью. По своим наблюдением могу сказать, что лучше брать карту от 16 Гб, чтобы избежать в будущем проблем с нехваткой памяти.
С подключением к плате после записи образа и включения может быть несколько вариантов:
1) Если у вас есть специальный экран/монитор/телевизор c поддержкой hdmi, то достаточно его подключить по hdmi;
2) Если экрана нет, но параметры на физический интерфейс приходят по DHCP, то можно просканировать сеть nmap-ом с другого компьютера и подключиться по ssh. Пользователь pi, пароль raspberry;
3) Если нет DHCP, то можно отредактировать файл /etc/network/interfaces и прописать туда адреса вручную.
Форвардинг трафика
Для того, чтобы трафик пересылался с одного интерфейса на другой, необходимо, чтобы был включен соответствующий параметр ядра Linux. Это можно сделать с помощью команды:
Для проверки можно использовать команду:
Она должна вернуть «1».
iptables
Для того, чтобы упростить маршрутизацию трафика, включим маскардинг для туннельного интерфейса с помощью iptables:
Вместо этого можно было бы прописать статические маршруты и статический адрес для клиента. Или использовать ccd.
Установка пакетов
Обновить репозитории и получить обновления:
Установка из репозиториев:
Если вы хотите схему с точкой доступа, то помимо этого установим hostapd и DHCP-cервер:
Вместо isc-dhcp-server вполне может быть использован любой другой. В репозиториях часто содержаться не самые последние версии, поэтому можно собрать пакеты из исходников, но если вам нужно получить быстрое решение, то подойдет и установка из репозитория.
Настройка сетевого подключения
Данный вариант является самым простым. На физическом интерфейсе Raspberry Pi, к которому подключается ПК, достаточно настроить статический адрес. На ПК также задать параметры вручную. Также можно настроить isc-dhcp-server, чтобы он выдавал параметры. На клиентской машине на Linux для первоначальной настройки достаточно выполнить команды:
А в файл /etc/resolv.conf добавить запись:
В данной схеме входным интерфейсом будет беспроводной интерфейс, работающий в режиме точки доступа. Вместо режима полноценной точки доступа можно настроить режим Ad-hoc.
Для организации wi-fi точки доступа с DHCP я использовал связку hostapd и isc-dhcp-server, но не обязательно использовать именно эту связку. На хабре есть несколько очень подробных статей по настройке различных вариантов в Linux. Ссылки я привел в источниках.
Привожу пример своих настроек:
Сразу стоит оговориться, что у некоторых могут возникнуть проблемы с драйверами и работой беспроводной карточки в режиме точки доступа. Лучше поинтересоваться такими вещами заранее. У меня была такая проблема для одной из моих карт при работе вместе с hostapd из репозитория. Проблема решилась патчем hostapd.
Часть с настройкой входного интерфейса ничем не отличается от предыдущей схемы. Выходной интерфейс необходимо подключить к точке доступа. Пример подключения с использованием утилиты nmcli:
Настройка входного интерфейса происходит как в схеме eth-eth, выходного — как в wlan-wlan.
Tor + obfsproxy
Для маскировки Tor трафика будем использовать obfsproxy.
Привожу пример настройки Tor:
Данные для подключения к серверам obfsproxy можно взять здесь.
OpenVPN
Для организации VPN будем использовать OpenVPN через TCP и в режиме L3 (tap-интерфейс). Используется TCP, поскольку Tor работает только TCP-трафиком. В сам же VPN-туннель можно пускать любой трафик. Для того, чтобы направить VPN трафик в Tor, будем «проксировать» весь VPN-трафик через Tor. OpenVPN поддерживает такую возможность.
Привожу пример настройки клиентской части OpenVPN с подробными комментариями:
По настройке сервера есть достаточно много инструкцией в интернете. Ссылки я привел в «источниках» в конце статьи. Ключевым в настройке является совпадение параметров и наличие в конфиге сервера строчки «push «redirect-gateway def»». Она необходима, чтобы на клиенте установился маршрут по-умолчанию для проходящего трафика, который указывает на VPN сервер.
Тестирование
Для теста правильности работы пустим ping от подключенного ПК до tun-интерфейса VPN-сервера, будем снимать трафик с помощью tcpdump и анализировать в Wireshark для наглядности.
1) ICMP-запрос приходит на входной интерфейс Raspberry Pi.
Стоит обратить внимание на идентификаторы BE, LE и временную метку. Далее они нужны будут для того, чтобы опознать ICMP-запрос на стороне сервера.
2) ICMP-пакет прошёл процедуру обработки в OpenVPN и направился на порт 9050, который «слушается» Tor. Снимок трафика происходит на loopback интерфейсе Raspberry Pi.
3) Пакет выходит из Raspberry Pi и направляется на один из узлов сети Tor с серверной частью obfsproxy:
4) И снимок трафика уже на туннельном интерфейсе VPN-сервера. Тут же можно заметить, что сервер послал ответ.
Идентификаторы BE, LE и временная метка совпадают с теми, которые были в отправленном пакете.
5) На этом скриншоте представлен пакет, выходящий с VPN-сервера, в котором содержиться ICMP-reply.
Также я произвел тестирование пропускной способности этого решения с помощью iperf для TCP и UDP трафика до сервера. Тестирование проводилось с использованием Raspberry Pi model B+ и ОС Raspbian в домашней сети, так что цифры для других одноплатных компьютеров с другими ОС или другой сетевой средой могут отличаться.
Заключение
Потенциальные подводные камни:
1) Синхронизация времени. Поскольку tor выполняет криптооперации с проверкой временных меток, то время должно быть синхронизировано. К сожалению, время нужно будет синхронизировать каждый раз после выключения платы.
2) Размер mtu. DF-бит в отправляемых пакетах может привести к тому, что трафик будет «резаться», если где-то по пути запрещена фрагментация пакетов, а значение mtu меньше вашего.
3) Использование VPN throught Tor и obfsproxy не панацея от всего.
Если вы найдете или уже сталкивались с каким-то иными проблемами, то пиши в комментариях — я добавлю в статью.
Источник