Обход блокировок через Tor
Обход блокировок через Tor

Если запустить Tor в Docker, то его можно использовать как прокси-сервер для обхода блокировок с разных сторон.

В этой инструкции мы запустим сам прокси-сервер. Настроим локальный компьютер для серфинга в интернете, минуя внутреннюю блокировку. И настроим сеть для другого контейнера, чтобы он мог получать данные, например антивирусные базы, минуя внешнюю блокировку.

Для запуска нам понадобится Ubuntu с установленными: git, make и docker.

Скопируем проект tor-docker:

git clone https://github.com/HardAndHeavy/tor-docker
cd tor-docker

Получаем Tor-мосты у Телеграм-бота @GetBridgesBot:

Получение Tor-мостов у Телеграм-бота Tor Bridges.
Получение Tor-мостов у Телеграм-бота Tor Bridges.

Инициализируем файл torrc командой make gen :

Создание файла torrc командой make gen
Создание файла torrc командой make gen

Запускаем прокси-сервер командой make run.

Настройка локального компьютера

На примере Ubuntu 24.04. В настройках сети (Settings — Network) настраиваем работу с прокси:

  • Network Proxy переводим в положение On;

  • Configuration устанавливаем в Manual;

  • SOCKS Host:

    • URL — 127.0.0.1;

    • Port — 9150.

Теперь можно спокойно серфить интернет, минуя внутреннюю блокировку.

Настройка других контейнеров

Для демонстрации возьмём тестовое приложение, которое показывает текущий IP-адрес. В папке проекта (tor-docker) перейдём в каталог examples/what-is-my-ip и выполним команду make pure-test. По адресу http://localhost:3000/ поднимется приложение, которое покажет текущий IP-адрес. Остановим приложение (Ctrl+C).

Для проксирования приложения необходимо добавить в общую сеть контейнер с Tor. И установить переменную HTTPS_PROXY. В текущем каталоге эта настройка описана в файле docker-compose.yaml:

services:
  tor-test:
    image: hardandheavy/tor:8
    container_name: tor-test
    volumes:
      - ../../torrc:/etc/tor/torrc

  app-test:
    image: hardandheavy/example-for-tor:1
    container_name: app-test
    depends_on:
      - tor-test
    ports:
      - 3000:3000
    environment:
      - HTTPS_PROXY=socks5://tor-test:9150

Такая настройка запускается командой make tor-test . По адресу http://localhost:3000/ на этот раз будет IP-адрес предоставленный Tor. А значит, наше приложение теперь работает минуя внешнюю блокировку.

Необходимо создать общую сеть в которой будет прокси-сервер с Tor (tor_network="tor-net"). А при запуске контейнера в HTTPS_PROXY укажем наш прокси-сервер.

Дополнительный пример

Пример из рабочего проекта без демонстрации. Здесь представлены ключевые моменты настройки файлов Ansible для запуска приложения по обнаружению вредоносных программ. После данной настройки антивирусные базы качаются без внешней блокировки.

Инициализация переменных:

tor_image: hardandheavy/tor:8
tor_network: tor-net
tor_https_proxy: socks5://tor:9150

Настройка Tor:

- name: Создание сети tor
  community.docker.docker_network:
    name: '{{ tor_network }}'

- name: Запуск tor
  community.docker.docker_container:
    name: tor
    image: '{{ tor_image }}'
    restart_policy: always
    volumes:
      - '{{ tor_file }}:/etc/tor/torrc'
    networks:
      - name: '{{ tor_network }}'

Настройка приложения:

- name: Запуск обнаружения вирусов и вредноносных по для почты
  community.docker.docker_container:
    name: mail-virus
    image: '{{ mail_virus_image }}'
    restart_policy: always
    env_file: '{{ mail_env_file }}'
    env:
      HTTPS_PROXY: '{{ tor_https_proxy }}'
    volumes:
      - '{{ mail_clamav_path }}:/var/lib/clamav'
    networks:
      - name: '{{ mail_network }}'
        aliases:
          - virus
      - name: '{{ tor_network }}'

Комментарии (9)


  1. hurtavy
    10.11.2024 23:06

    Маловато :)) Предлагаю установить винду в виртуалку, там установить WSL, где поднять докер с тор


    1. Soloist Автор
      10.11.2024 23:06

      Согласен, у меня просто изначально стояла задача дать доступ к заблокированным ресурсам приложению в контейнере. Я её сделал. А дальше уже приспособил под личные нужды. Учитывая, что я не люблю зоопарк из программ на своём компьютере, для себя завёл правило всё оборачивать в контейнер. Поэтому данный вариант для себя вижу как вполне рабочий. На всех своих машинах держу буквально docker.


  1. tolyanski
    10.11.2024 23:06

    Еще настроить hidden service, который смотрит на локальный nginx который выступает в роли прокси до прокси tor'a, и все это в WSL как подсказали выше)


    1. Soloist Автор
      10.11.2024 23:06

      Навернуть можно, я даже за!:) Сама схема родилась по принципу: минимум программ на машине и минимум работы руками. Поэтому я стараюсь всё оборачивать в контейнеры.

      Как итог, для Tor я имею 2 команды: make gen && make run. И немного настроек сети.


  1. Andrusha
    10.11.2024 23:06

    Если запустить Tor в Docker, то его можно использовать как прокси-сервер для обхода блокировок с разных сторон.

    А если просто скачать бинарник Tor с официального сайта, то можно сделать всё то же самое без докера.


    1. tolyanski
      10.11.2024 23:06

      много чего можно так-то)


  1. fiexagon
    10.11.2024 23:06


  1. multisu
    10.11.2024 23:06

    С подключением:)

    Tor кстати поднимает только socks прокси, с которым не все клиенты умеют работать. Поэтому тут еще отдельной прокси не хватает, типа privoxy + файл автоконфигурации сети, для которого нужен вебсервер.

    А самый продвинутый уровень, настройка маршрутизации через transparent порт с получение списка ipset из dnsmasq. Так вообще на клиенте не требует никаких настроек.


    1. Soloist Автор
      10.11.2024 23:06

      Спасибо, буду копать:)