За последние несколько месяцев мне несколько раз пришлось решать довольно однотипные задачи — регулярно получать доступ на компьютеры, «спрятанные» за NAT. Пока это был один стационарный компьютер, все решалось пробросом порта на домашнем роутере плюс DynDNS. Потом добавился ноутбук. И еще один. Ноутбуки могли подключаться к домашнему WiFi, а могли оказаться, например, на рабочем месте. Наша компания предоставляет услуги VPN, но именно в этот период VPN по каким-то причинам работал не стабильно. В ход пошли
Как известно, 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 подряд).
Автор: lumag