Tor Hidden Service как техника Nat Traversal

За последние несколько месяцев мне несколько раз пришлось решать довольно однотипные задачи — регулярно получать доступ на компьютеры, «спрятанные» за NAT. Пока это был один стационарный компьютер, все решалось пробросом порта на домашнем роутере плюс DynDNS. Потом добавился ноутбук. И еще один. Ноутбуки могли подключаться к домашнему WiFi, а могли оказаться, например, на рабочем месте. Наша компания предоставляет услуги VPN, но именно в этот период VPN по каким-то причинам работал не стабильно. В ход пошли VPS, обратные ssh-тоннели. Когда конфигурация перестала помещаться в голове, пришла идея сократить количество сущностей, используя Tor Hidden Service.Как известно, Tor предоставляет возможность создавать «скрытые» сервисы — сетевые имена из пространства .onion, подключение к которым возможно через любой клиент сети Tor. При этом с целью анонимизации сервера, на котором расположены эти сервисы, подключение происходит через «места встречи» (rendezvous points) — компьютеры, не закрытые NAT. Сам компьютер, на котором расположен скрытый сервис, может находиться за NAT, брандмауэром и т. п., но через сеть Tor к нему все равно можно получить доступ.Сказано — сделано. Устанавливаем Tor-клиент. В конфигурационный файл добавляем две строчки:

HiddenServiceDir /var/lib/tor/hidden_service/ HiddenServicePort 22 127.0.0.1:22 В качестве HiddenServiceDir указываем любое место, в котором Tor сможет создать сам каталог (если его нет) и несколько конфигурационных файлов.В строчке HiddenServicePort первое число — это номер порта, к которому мы получаем доступ через Tor. Теоретически можно указать не 22, а, например, 1234.

Перезапускаем Tor. В каталоге появятся два файла:

private_key — секретный ключ вашего сервиса. Tor использует этот ключ из этого файла для работы. Обратите внимание, зная этот ключ, злоумышленник может представиться вашим сервисом и никто ничего не поймет; hostname — автоматически сгенерированный файл с именем вашего сервиса. Если вы удалите или поменяете это файл, все по-прежнему будет работать. В файле hostname находится имя вашего сервиса вида xxxxxxxxxxxxxxxx.onion.После этого я на любой машине могу сказать torsocks ssh xxxxxxxxxxxxxxxx.onion и попасть на свой ноутбук.

Для скрытого сервиса можно подобрать менее случайное имя. Для этого используется программа Scallion. Сгенерированный ключ кладется в папку, соответствующую скрытому сервису.

Один Tor-клиент может обслуживать несколько скрытых сервисов (достаточно указать эти строчки несколько раз). Каждый скрытый сервис «обслуживает» один или более портов, пробрасываемых через Tor (указываем несколько строк с HiddenServicePort подряд).

© Habrahabr.ru