Pull to refresh

Создаём на wifi-роутере за-tor-енную точку доступа

Reading time 6 min
Views 39K
Многие современные домашние роутеры по сути представляют собой мини-компьютер — у которого разве что нет монитора и мыши/клавиатуры. Впрочем, учитывая назначение этих самых железяк, последнее — вовсе не проблема.

Как правило, в базовой прошивке роутер умеет раздавать интернет на один или несколько 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:

root@DD-WRT:~# 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).

Для этого в конфиге прописаны следующие локальные параметры:
Для домашней сети:

SockListenAddress 192.168.1.5:9100


По сути это означает, что для того, чтобы попасть анонимно в интернет я должен настроить браузер на подключение через socks5-прокси с указанным адресом (это внутренний адрес роутера).

Для анонимной сети:

TransPort 9040
TransListenAddress 192.168.2.1
DNSPort 9053
DNSListenAddress 192.168.2.1


В анонимной сети клиенты никуда подключаться не будут, а указанные порты и адрес нужны лишь для настройки правил iptables.

Помимо этих настроек также имеет смысл назначить адрес виртуальной сети:

VirtualAddrNetwork 10.192.0.0/10


Этот адрес необходим в случае перехода по внутренним анонимным сервисам (т.н. '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' и тем самым автоматически оказываемся скрыты за многослойным прокси-анонимайзером.

В качестве дополнительного бонуса — изначально повышенная анонимность, поскольку демон, работающий на железячном роутере по умолчанию не пишет никуда никаких логов и не оставляет следов в системе
Tags:
Hubs:
+47
Comments 13
Comments Comments 13

Articles