Некоторые думают, что те, кто используют Tor, обязательно преследуют какие-то мутные и незаконные цели. Однако у этой технологии есть и вполне безобидные применения.
Проблема: нужно быстро открыть локальный порт для подключения к устройству извне. Пусть это будет для примера порт ssh и web. На пути куча NAT, а выделенного сервера у нас просто нет.
Решение:
# Ставим Tor через стандартные репозитории sudo su apt-get install tor # Правим /etc/tor/torrc # И туда # HiddenServiceDir /var/lib/tor/myhiddenservice/ # HiddenServicePort 22 127.0.0.1:22 # HiddenServicePort 8080 127.0.0.1:80 # Перезапускаем Tor systemctl restart tor # или как-то по-другому
Вот мы открыли в сеть Tor локальный порт 22 и 80 (через Tor 8080). Вообще, держать ssh на стандартном порту - это довольно плохо, но это был просто пример.
Теперь в каталоге /var/lib/tor/myhiddenservice/ будут лежать 2 файла: hostname и private_key.
Делаем их бэкапы.
Открыв файл hostname, обнаруживаем ваш длинный хост .onion. Переносим его на второй компьютер и сохраняем. Можно даже вот так:
Правим файл ~/.ssh/config на клиенте
Host mykomp HostName blablablabla.onion PubkeyAuthentication yes PasswordAuthentication no Port 22
Здесь же устанавливаем программу proxychains-ng или просто proxychains. Обычно она есть в официальных репозиториях (на Арче точно есть). Если что, её очень просто скомпилировать из исходников: https://github.com/rofl0r/proxychains-ng
Правим конфиг /etc/proxychains.conf
Там должны быть такие параметры
proxy_dns [ProxyList] socks5 127.0.0.1 9150 # или socks4 127.0.0.1 9050
Можно подключаться:
proxychains ssh mykomp
Не забываем проверить ssh fingerprint, потому что в Tor вероятность MITM заметно выше.
Также можно получить доступ к веб-серверу через http://blablablabla.onion:8080, который мы тоже пробросили.
ВСЁ!
Чем это лучше ssh port forwarding?
1. Очень просто. Надо поправить всего пару конфигов, и уже можно пользоваться на постоянной основе
2. Нет проблем с открытием сразу нескольких локальных портов
3. Tor устойчив к обрывам сети. SSH P.F. же часто обрывает весь канал (особенно при неправильной настройке TCP KeepAlive) из-за малейшего сбоя.
4. Не нужен собственный сервер с белым IP
5. Контролируется с помощью обычных сервисов-юнитов (тот же systemd), работает в фоновом режиме. Удобно настроить на автозапуск.
Чем ssh port forwarding лучше этого подхода?
1. Большая скорость.
2. Поддерживается абсолютно везде.
Настроил себе ssh через Tor на домашней машине. Теперь, если срочно надо куда-то уйти, запускаю Tor одной командой и могу не беспокоиться насчёт потерянного доступа. Беру и подключаюсь к домашней консоли через телефон. Для андроида есть официальное Tor-приложение Orbot, которое умеет делать прозрачную проксификацию для любого приложения и вообще очень удобное.