Доступ по SSH за NAT через TOR

Материал из ALT Linux Wiki

По материалу Михаила Новосёлова — спасибо, добрый человек!

На сервере

  1. В /etc/openssh/sshd_config изменить порт на непривилегированный, иначе TOR не запустится. Например:
    Port 2222
    
  2. Cоздать каталог для скрытого сервиса SSH:
    # install -m 700 -o _tor -g _tor -d /var/lib/tor/ssh
    
  3. В файле настроек TOR /etc/tor/torrc:
    • закомментировать опцию BridgeRelay,
    • добавить опции:
      DisableNetwork    0
      Schedulers        KISTLite
      NewCircuitPeriod  30
      Sandbox           0                   # '1' doesn't work sometimes (experimental feature)
      ClientOnly        1                   # Disallow being a proxy for traffic
      HiddenServiceDir  /var/lib/tor/ssh    # Hidden service for SSH over NAT
      HiddenServicePort 2222 127.0.0.1:2222 # Map external virtual port 2222 to local port 2222
      
  4. Перезапустить оба сервиса:
    # systemctl restart sshd tor
    
  5. Получить имя хоста в сети TOR:
    # cat /var/lib/tor/ssh/hostname
    имя_в_56_буквоцифр_длиной.onion
    

На клиенте

  1. Запустить хотя бы минимально настроенный TOR.
  2. Добавить в ~/.ssh/config секцию:
    Host *.onion
        ProxyCommand nc -x localhost:9050 -X 5 %h %p
        VerifyHostKeyDNS no
        Port 2222
    
  3. Пробовать подключиться:
    $ ssh username@имя_в_56_буквоцифр_длиной.onion
    

Работа через прокси

Если узел не только за NAT, а ещё и за прокси, запуск TOR через proxychains не позволит достукиваться на него снаружи. Вместо этого следует добавить в его конфиг одну/все из опций, позволяющих выход в мир через этот конкретный прокси:

SOCKSProxy ip.add.re.ss:port
HTTPSProxy ip.add.re.ss:port
HTTPProxy  ip.add.re.ss:port # На эту ругается: дескать, устарела и из новых версий её уберут.

Однако не факт, что и с ними получится: всё зависит от настроек самого прокси. К примеру, из школ через ростелекомовский прокси этот трюк не срабатывает — плотно забаррикадировались.