---
title: 'Делай добро и бросай его в воду: бесплатно поднимаем obfs4-бриджи в Oracle Cloud'
url: 'https://ky0uraku.xyz/blog/20220118-delay-dobro-obfs4-bridzhi'
markdown: 'https://ky0uraku.xyz/blog/20220118-delay-dobro-obfs4-bridzhi.md'
date: '2022-01-18'
description: 'Этот текст был опубликован 13/01/2022 на Хабре - https://habr.com/ru/post/645413/. Здесь представлена его оригинальная версия, без каких-либо правок модераторами. Привет, Хабр! Надеюсь, ты уже слегка отошёл от новогодних праздников и возвращаешься в привычную колею. Лично я эти длинные выходные…'
taxonomy:
  tag:
    - tech
    - privacy
    - habr
  category:
    - articles
---

# Делай добро и бросай его в воду: бесплатно поднимаем obfs4-бриджи в Oracle Cloud

  [Тексты](https://ky0uraku.xyz/blog) / 18 января 2022   [tech](https://ky0uraku.xyz/blog/tag:tech) [privacy](https://ky0uraku.xyz/blog/tag:privacy) [habr](https://ky0uraku.xyz/blog/tag:habr)  

 Этот текст был опубликован 13/01/2022 на Хабре - <https://habr.com/ru/post/645413/>. Здесь представлена его оригинальная версия, без каких-либо правок модераторами. 

Привет, Хабр!

Надеюсь, ты уже слегка отошёл от новогодних праздников и возвращаешься в привычную колею. Лично я эти длинные выходные терпеть ненавижу и, посмотрев, по традиции, "Хоббита" с "Властелином Колец" дня за 3-4, начинаю от скуки лезть на стену и остервенело искать, чем бы себя занять. Не стал исключением и прошедший год - в этот раз сердце успокоилось с помощью бриджей Тора, ораклового облака и вполне реальной возможности заполучить ценный лут.

### Но давайте обо всём по порядку.

Вряд ли кто-то за прошедший месяц успел забыть, что в РФ, на минуточку, блокируется Тор. Меня, как пользователя сети интернет, этот факт категорически не устраивает - причём в данном случае дело даже не столько в самом факте блокировок, а в том, как организационно и технически реализован (а точнее - НЕ реализован) данный процесс.

[![](https://ky0uraku.xyz/blog/20220118-delay-dobro-obfs4-bridzhi/12.webp)](https://ky0uraku.xyz/blog/20220118-delay-dobro-obfs4-bridzhi/12.webp)

Напомню, что пресловутый РКН, ответственный за "регулирование" интернета подобными методами, доселе в основном занимался веб-сайтами - и демонстрировал при этом хоть какое-то подобие обратной связи, давая возможность зайти на [соответствующий ресурс](https://blocklist.rkn.gov.ru/) и увидеть, что вообще происходит. Ну, такие мелочи, как, скажем, основание блокировки, номер постановления и само состояние "заблокирован/ не заблокирован". Хоть какая-то информация.

В случае же Тора всё совершенно по-другому. Использование печально известных ТСПУ, ответственных за периодические "штормления" рунета, даёт возможности творить с проходящим трафиком что угодно - и не перед кем за это не отчитываться. Ну, скажем, сломать ненадолго известные популярные [DNS-серверы](https://habr.com/ru/news/t/577108/). Или вот начать [блокировать Тор](https://habr.com/ru/news/t/593311/). Каким образом технически реализована эта блокировка, на основании чего, какие IP-адреса затронуты - всё это тайны, покрытые мраком. Сочувствую саппортам интернет-провайдеров, к которым наверняка образовался тогда шквал звонков.

Началось всё с банального - блокировки всех или большей части входных узлов Тора. Дело это нехитрое, так как списки этих нод, так же, кстати, как и выходных - секретом не являются и [доступны публично](https://www.dan.me.uk/tornodes). Но Тор не позиционировался бы как инструмент обхода цензуры, если бы его так легко можно было поломать. Для таких вот случаев, когда государство или какой-то особенно упоротый провайдер начинает с ним борьбу, у Тора есть некоторое количество встроенных методов обхода - с помощью так называемых [бриджей](https://tb-manual.torproject.org/bridges/). Именно на них практически сразу и нацелились наши "регуляторы".

К сожалению, какого-то гарантированно рабочего технического способа противостоять блокировкам у Тора нет - поэтому приходится полагаться на меры организационного характера, максимально затрудняя составление полного списка бриджей. Это, например, выдача настроек [с сайта](https://bridges.torproject.org/) или прямо из Тор Браузера после разгадывания капчи; получение бриджа по почте в ответ на входящее письмо. Как вы понимаете, при наличии достаточного админресурса все эти методы успешно компенсируются, как выразились в одном из комментариев, "ротой курсантов ФСБ, мануально перебирающих бриджи". Именно поэтому важно постоянно пополнять список бриджей, добавляя новые.

### Этим, завершая слегка затянувшуюся художественную ремарку, я и решил заняться на новогодних праздниках.

Сами разработчики Тора, похоже, были совершенно со мной согласны в этом плане и до блокировок в России. Именно поэтому они ещё в середине прошлого ноября организовани кампанию "[Help Censored Users, Run a Tor Bridge](https://blog.torproject.org/run-a-bridge-campaign/)", направленную именно на увеличение числа бриджей. Целью было анонсировано 200 штук - и, глядя на статистику, можно сказать, что эта цель была достигнута с лихвой: за последние два месяца количество бриджей увеличилось примерно вдвое, с 1200 до 2300:

[![](https://ky0uraku.xyz/blog/20220118-delay-dobro-obfs4-bridzhi/10-1k.webp)](https://ky0uraku.xyz/blog/20220118-delay-dobro-obfs4-bridzhi/10.webp)

В качестве поощрения "мостоводам" они предлагают различного вида мерч - наклейки, футболки и даже худи. Этот тот самый ценный лут, о котором я говорил в первом абзаце. Но получение лута, даже от таких крутых ребят, как The Tor Project, само по себе на статью не тянет. В самом деле - кто угодно ведь может арендовать десяток виртуалок на каком-нибудь Digital Ocean или Scaleway, особого подвига в этом нет. Мне показалось интересным усложнить себе задачу, попытавшись проделать то же самое, но без каких-либо финансовых вложений.

На этом этапе я припомнил, что в середине прошлого года Oracle анонсировал расширение линейки инстансов, доступных по программе Always Free, виртуалками на базе ARM-процессоров Ampere (на Хабре про это [даже писали](https://habr.com/ru/company/itsumma/news/t/595151/)). Интересность новых инстансов заключается в том, что они, в отличие от предлагаемых ранее, обладают не всего одним гигабайтом ОЗУ, а целыми шестью. Кроме того - вместо двух экземпляров x86-виртуалок, "армовских" можно запустить целых четыре (или две двойных, или одну мега-квадро-виртуалку с 4 ядрами и 24 ГБ ОЗУ).

Процесс регистрации, ограничения и неочевидные моменты программы Always Free Tier неплохо расписаны в статье по линку в прошлом параграфе, дублировать информацию я не буду. Заполнив все необходимые поля, подтвердив почтовый адрес и привязав банковскую карту (для людей с повышенной тревожностью - её в любой момент можно отвязать, ничего не потеряв), вы оказываетесь в панели управления облаком, где нас в первую очередь интересует раздел **Compute > Instances**. Он, разумеется, девственно чист - но это ненадолго. Без сомнений кликайте кнопку "Create instance" - и поехали!

[![](https://ky0uraku.xyz/blog/20220118-delay-dobro-obfs4-bridzhi/11-1k.webp)](https://ky0uraku.xyz/blog/20220118-delay-dobro-obfs4-bridzhi/11.webp)

По умолчанию нам предлагают совсем не ту "форму" виртуалки, как это называется у Оракла, которую хотелось бы. Меняем в настройках вид процессора на Ampere, shape - на **VM.Standard.A1.Flex**, а ОС - на ту, которая вам ближе. Я, поскольку вожу давнюю дружбу с Дебианом (но его в списке нет), выбрал банальную Убунту, имейте этот факт в виду при дальнейшем чтении. Не забудьте при создании скачать SSH-ключ для доступа или закинуть собственный публичный.

Кажется, что уже можно ломиться в консоль новорожденного сервера и творить непотребства - но перед этим придётся задержаться в браузере ещё на минуту, чтобы заранее открыть нужные для функционирования бриджа порты (а также, по желанию, ограничить SSH-доступ доверенными адресами). Делается это в разделе **Networking > Virtual Cloud Networks**, после чего необходимо зайти в единственную доступную сеть, и далее в **Security Lists**, где нужно добавить ingress-правило, открыв два любых незанятых TCP-порта на 0.0.0.0/0. В моём случае это 8443 и 443.

Вот теперь ничто не мешает нам залогиниться на виртуалку, где нужно проделать буквально несколько манипуляций из-под рута:

- Установить нужные для Докера зависимости и добавить его репозиторий в ОС.

```

apt update
apt install -y ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
```

- Установить зависимости для docker-compose и установить его самого с помощью pip.

```

apt update
apt install -y curl python3-pip libffi-dev python-openssl libssl-dev zlib1g-dev gcc g++ make docker-ce iptables-persistent
pip3 install docker-compose
```

Внимательные читатели наверняка заметили, что мы зачем-то установили кажущийся лишним пакет `iptables-persistent`. Это не просто так, нюанс в том, что в Oracle Cloud на виртуалках по умолчанию фаерволл работает не только на уровне всей сети, но и на самих серверах (при этом хостер добавляет пачку своих правил - в такой ситуации просто обнулять iptables я не решился) - поэтому нам нужно будет открыть наши порты ещё и внутри. Делается это элементарно - достаточно добавить два соответствующих правила в начало цепочки INPUT, например, скопировав их в **/etc/iptables/rules.v4** и обновить конфигурацию iptables:

```

-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8443 -j ACCEPT
```

После данной манипуляции нужно не забыть обновить настройки фаерволла и рестартовать сервис контейнеризации:

```

iptables-restore /etc/iptables/rules.v4
service docker restart>
```

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

```

wget https://gitlab.torproject.org/tpo/anti-censorship/docker-obfs4-bridge/-/raw/main/docker-compose.yml
wget https://gitlab.torproject.org/tpo/anti-censorship/docker-obfs4-bridge/-/raw/main/.env
```

Первый представляет собой шаблон для Докера, описывающий загрузку и конфигурацию контейнера, его трогать не придётся. Второй - файл с настройками, который нужно будет заполнить вручную, введя такие данные, как номера портов и почту для связи с владельцем ноды. При желании бридж можно как-то назвать. Кроме того, в разделе с параметрами, пробрасываемыми Тору, нужно будет отключить IPv6 и явным образом указать внешний адрес виртуалки (по идее, он должен определяться автоматически, но у меня почему-то не заработало, а разобраться руки не дошли). В результате наш **.env** должен принять примерно такой вид:

```

# Set required variables
OR_PORT=8443
PT_PORT=443
EMAIL=changeme@gmail.com
# If you want, you could change the nickname of your bridge
NICKNAME=helloandgtforkn1
# If needed, activate additional variables processing
OBFS4_ENABLE_ADDITIONAL_VARIABLES=1
OBFS4V_AddressDisableIPv6=1
OBFS4V_Address=81.177.103.94
```

Проделав всё это, вполне можно попробовать запустить ваш бридж:

```

docker-compose up -d
```

Если всё в порядке, спустя несколько секунд, проверив с помощью `docker-compose logs` логи, вы должны увидеть радостную надпись *"Self-testing indicates your ORPort 81.177.103.94:8443 is reachable from the outside. Excellent. Publishing server descriptor"*.

В принципе, на этом можно было бы и закончить, поскольку бридж в таком состоянии уже полностью работоспособен. Но если вы, так же, как и я, возжелаете халявного мерча от The Tor Project, то придётся выполнить ещё пару шагов. Во-первых, нужно получить данные бриджа - делается это командой `docker exec %container-id% get-bridge-line` (идентификатор контейнера можно посмотреть в первой колонке вывода `docker ps`). Полученную строку (или строки, если вы решили запустить несколько бриджей) в соответствии [с правилами эвента](https://blog.torproject.org/run-a-bridge-campaign/) необходимо отправить с той почты, которую вы указали в настройках, на frontdesk@torproject.org. Кроме того, зачем-то нужно отписаться на форуме [в соответствующей теме](https://forum.torproject.net/t/help-censored-users-run-a-tor-bridge/704), скопировав туда хэшированный (не перепутайте, это важно!) ключ вашей ноды. Сделать это можно, погрепав лог контейнера по фразе *"Your Tor bridge's hashed identity key"*.

Если get-bridge-line у вас, как и у меня, почему-то не заработал (подозреваю, что это [вот этот баг](https://gitlab.torproject.org/tpo/anti-censorship/docker-obfs4-bridge/-/issues/4), но скорее рано, чем поздно, его починят), можно получить те же данные руками:

Скопировать из лога контейнера фингерпринт сервера, погрепав его по фразе *"Your Tor server's identity key fingerprint"* - это строка из 40 символов вида `50065F50AB29D4F5FCA70314A8D8EBE6B9C9F87B`.

Скопировать последнюю строку вывода команды `docker exec %container-id% cat /var/lib/tor/pt_state/obfs4_bridgeline.txt`, отчекрыжить слово *Bridge* и заменить поля **:** и  на внешний адрес вашей виртуалки, порт obfs4-бриджа (в моём конфиге это 443, переменная PT\_PORT) и нагрепанный из лога фингерпринт. Получиться должно вот такое:

```
obfs4 81.177.103.94:443 50065F50AB29D4F5FCA70314A8D8EBE6B9C9F87B cert=MEbrh3SdwDIPnVqnw+A6BMylU6IjGIG2mitDeZrNtnhN6CyQXOOHj2VvZpV3TRU6fHLzJw iat-mode=0
```

На этом наши манипуляции завершены - мы получили работающий obfs4-бридж, который хоть немного, возможно ненадолго, но поможет пользователям Тора в РФ и других странах, где "регулируют интернет". Если награды от разработчиков вас не прельщают, просто запустите несколько инстансов, никуда ничего не отправляя - бридж самостоятельно зарегистрируется в сети и через некоторое время можно будет посмотреть на него по ссылке вида <https://bridges.torproject.org/status?id=%hashed-server-id%>. А вы после такого непременно получите жирный плюс в карму.

Благодарю за внимание, хорошей вам связности и стабильного резолва.

---

## Navigation

- Parent: [Последние тексты](https://ky0uraku.xyz/blog.md)
- Previous: [Пожалуйста, прекратите называть админов девопсами](https://ky0uraku.xyz/blog/20220219-admin-ne-devops.md)
- Next: [Осада рунета: битва за DNS](https://ky0uraku.xyz/blog/20220103-osada-runeta-bitva-za-dns.md)
