Размещение веб-сайтов в Tor и в Yggdrasil

Александр Котов tor yggdrasil децентрализация цензура Medium VK

Администраторы веб-сайтов находятся в условиях растущей цензуры. Она проявляется по-разному в разных странах. Где-то это блокировки со стороны государства. Где-то это отказ в обслуживании серверов со стороны корпораций. Нынче важно быть готовым дать отпор цензуре. Для этого можно использовать сети Tor и Yggdrasil. В первом случае они помогут обойти государственные механизмы блокировок. Во втором случае они позволят скрыть факт размещения сервера у конкретного поставщика услуг.

Логотипы Tor и Yggdrasil.
Логотипы Tor и Yggdrasil.

Для следования инструкциям в данной статье вам понадобится веб-сервер с операционной системой Ubuntu 21.04 или подобной. Статический внешний IP-адрес не обязателен. Главное иметь доступ к терминалу, например по SSH. Можно использовать ваш домашний компьютер. Можно купить виртуальный сервер, например на DigitalOcean (партнёрская ссылка).

Также необходимо владеть навыками работы в консольном текстовом редакторе. Можно использовать Vim или Emacs, но они требуют изучения. Самым простым вариантом для новичков будет Nano. Устанавливается командой sudo apt install nano. Вызывается командой sudo nano, которой можно дополнительно передать имя файла: sudo nano /foo/bar. Далее можно разобраться по подсказкам в нижней части экрана. Они означают сочетания клавиши Ctrl с другими клавишами. Только если вы используете ваш домашний компьютер, то можно редактировать файлы в обычном текстовом редакторе с графическим интерфейсом.

Учтите, что в данной статье мы создаём лишь рабочий прототип. Для реального использования требуется ещё настройка сетевого экрана и сетевой безопасности операционной системы.

Создаём веб-сайт

Наш веб-сайт будет простой веб-страницей, отдаваемой с помощью сервера Nginx. Для начала установим Nginx:

$ sudo apt install nginx

Выключим стандартную конфигурацию:

$ sudo rm /etc/nginx/sites-enabled/default

С помощью текстового редактора создадим новую конфигурацию в файле /etc/nginx/sites-available/tor_yggdrasil:

server {
  listen 80 default_server;
  listen [::]:80 default_server;

  root /var/www/html;

  index index.html;

  server_name _;

  location / {
    try_files $uri $uri/ =404;
  }
}

Далее необходимо включить эту конфигурацию, создав символическую ссылку на неё из другой директории:

$ sudo ln -s /etc/nginx/sites-available/tor_yggdrasil /etc/nginx/sites-enabled/tor_yggdrasil

Теперь перезапустим веб-сервер:

$ sudo systemctl restart nginx.service

Уже сейчас при обращении к вашему веб-серверу по IP-адресу (если такая возможность есть) вы должны увидеть ошибку 403 и название сервера Nginx. Теперь создадим файл /var/www/html/index.html со следующим содержанием:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8"/>
    <title>Tor & Yggdrasil</title>
  </head>
  <body>
    <h1>Tor & Yggdrasil</h1>
    <p>Hello from Tor or Yggdrasil!</p>
  </body>
</html>

Теперь при обращении к вашему веб-серверу по IP-адресу вы увидите веб-страницу:

Наша тестовая веб-страница.
Наша тестовая веб-страница.

Если вы работаете на домашнем компьютере, то адресом будет 127.0.0.1. Если по какой-то причине у вашего веб-сервера вообще нет IP-адреса, то вы сможете увидеть созданную вами веб-страницу позже, когда подключите Tor или Yggdrasil.

Подключаем Tor

Tor (от англ. The Onion Router) – это оверлейная сеть (то есть построенная поверх другой сети) с так называемой луковичной маршрутизацией. TCP-пакеты в ней проходят через несколько узлов. Каждый узел снимает с пакета предназначенный для него слой шифрования, чтобы получить информацию о том, куда направить пакет дальше. Отсюда аналогия с луком. Такой механизм обеспечивает приватность и анонимность – промежуточный узел не знает, что находится внутри пакета, каков его первоначальный источник и конечное место назначения.

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

Однако также в Tor существуют внутренние скрытые сервисы. Установить местонахождение такого сервиса невозможно. Именно такой сервис мы и запустим. К нему невозможно получить доступ обычным способом. Для этого нужно установить Tor Browser. Скрытый сервис имеет специальный адрес. Например, зеркало нашего веб-сайта доступно по адресу http://a4xu7f2nwqxrraaj3qfiao5cgfyrkpuxainvrjszvnzf3y7gzslcu7qd.onion.

Для начала установим программное обеспечение Tor:

$ sudo apt install tor

Отредактируйте файл настроек /etc/tor/torrc. Всё имеющееся содержимое можно удалить и заменить следующим:

SocksPort 0
HiddenServiceDir /var/lib/tor/hidden_service/
HiddenServicePort 80 127.0.0.1:80
ExitPolicy reject *:*

Перезапустите Tor:

$ sudo systemctl restart tor.service

Теперь нужно узнать доменное имя нашего сервиса:

$ sudo cat /var/lib/tor/hidden_service/hostname

Вы должны увидеть строку, оканчивающуюся на .onion. Если открыть этот адрес в Tor Browser, то вы увидите вашу веб-страницу. Это всё, что нужно для настройки скрытого сервиса в Tor.

Подключаем Yggdrasil

Yggdrasil – это тоже оверлейная сеть. В то время как Tor лишь устанавливает туннель от одного узла к другому, Yggdrasil обеспечивает целую частную сеть (VPN; от англ. Virtual Private Network) на основе протокола IPv6. Пакеты в сети всегда зашифрованы, а публичным ключом является сам адрес IPv6, что возможно за счёт его большой длины (128 бит). Помимо использования в качестве VPN, Yggdrasil разрабатывается для создания сетей с ячеистой топологией поверх самых разных каналов связи (не обязательно через Интернет), что может быть полезно для создания альтернативных поставщиков услуг связи, неподконтрольных правительствам.

Хотя сеть Yggdrasil может быть частной, также существует публичная сеть, узлы которой перечислены в специальном репозитории. Именно в этой сети мы и разместим наш веб-сайт. Для доступа к сервисам в этой сети нужно настроить Yggdrasil на вашем домашнем компьютере тем же способом, что описан далее для веб-сервера. Если вы итак используете в этом качестве домашний компьютер, то дополнительные действия не потребуются. Если вы боитесь устанавливать Yggdrasil на домашний компьютер (программное обеспечение ещё не прошло аудит безопасности), то можно также установить его на смартфон с операционной системой Android, сборки под которую публикуются в Telegram. Android обеспечивает более сильную изоляцию приложений. Узел в Yggdrasil имеет специальный адрес IPv6. Например, зеркало нашего веб-сайта доступно по адресу http://[200:f0a1:c2ef:37a2:467f:9f74:ae64:9954].

Для начала установим программное обеспечение Yggdrasil:

$ gpg --fetch-keys https://neilalexander.s3.dualstack.eu-west-2.amazonaws.com/deb/key.txt
$ gpg --export 569130E8CA20FBC4CB3FDE555898470A764B32C9 | sudo apt-key add -
$ echo 'deb http://neilalexander.s3.dualstack.eu-west-2.amazonaws.com/deb/ debian yggdrasil' | sudo tee /etc/apt/sources.list.d/yggdrasil.list
$ sudo apt update
$ sudo apt install yggdrasil
$ sudo systemctl start yggdrasil.service
$ sudo systemctl enable yggdrasil.service

Отредактируйте файл настроек /etc/yggdrasil.conf. Строку Peers: [] замените следующими строками (или можете выбрать любые другие узлы из репозитория):

  Peers: [
    "tcp://188.226.125.64:54321"
    "tcp://46.151.26.194:60575"
    "tcp://ygg.tomasgl.ru:61933"
    "tcp://yggnode.cf:18226"
    "tcp://95.165.99.73:5353"
    "tcp://ygg.loskiq.dev:17313"
  ]

Перезапустите Yggdrasil:

$ sudo systemctl restart yggdrasil.service

Теперь нужно узнать IPv6-адрес нашего узла:

$ sudo journalctl -xe --unit yggdrasil.service

Среди выведенных строк будет строка вроде этой:

Jul 07 12:41:23 tor-yggdrasil yggdrasil[3969]: 2021/07/07 12:41:23 Your IPv6 address is 200:f0a1:c2ef:37a2:467f:9f74:ae64:9954

Здесь 200:f0a1:c2ef:37a2:467f:9f74:ae64:9954 – это ваш адрес. Нужно добавить к нему слева http://[, а справа ]. Получится http://[200:f0a1:c2ef:37a2:467f:9f74:ae64:9954]. Если открыть этот адрес в веб-браузере при включенном Yggdrasil, то вы увидите вашу веб-страницу (по какой-то причине Mozilla Firefox на Android не умеет открывать такие адреса при вставке в адресную строку). Это всё, что нужно для настройки веб-сайта в Yggdrasil.