Guide on installing shadowsocks+v2ray server with traffic obfuscation (Cloudflare) over TLS in Debian 10

English translation of my post, original version in Russian is here.

Just a few words before we get started. You can skip this part if you want.

Introduction.

With internet regulation and censorship on the rise, states increasingly engaging in online surveillance, and state cyber-policing capabilities rapidly evolving globally, concerns about regulatory “chilling effects” online – the idea that laws, regulations, or state surveillance can deter people from exercising their freedoms or engaging in legal activities on the internet have taken on greater urgency and public importance [1]. Today, the most popular way to bypass Internet censorship are VPN services. However, they have quite significant drawbacks, which are completely or partially solved by setting up your own shadowsocks server. In this guide I will teach how to do it. 

You can ask a reasonable question: why bother so much when there is a VPN services? So, to begin with, I will list the pros and cons of a VPN over a shadowsocks server:

Pros of VPN services:

The user does not need any technical knowledge and time-consuming configuration, just install a VPN client and use it. Setting up an SS server, especially with traffic obfuscation, requires some skills and knowledge that most users do not have.

Cons:

– VPN services can be slow, including the paid ones. I won’t even mention the free ones, as they are often extremely slow and may not provide adequate privacy protection. ISPs may intentionally throttle the speed of suspicious encrypted traffic originating from VPNs. This issue can be addressed by employing traffic obfuscation through basic TLS encryption, which appears legitimate to your ISP.

– VPNs are not entirely secure. If someone is determined, they can find you relatively quickly: either the VPN service might hand over your information to authorities, or your ISP could track you using a so-called “correlation attack.” This is when an ISP compares the IP address a user utilizes to access certain online content or visit a restricted website with the IP addresses connected at that time, enabling the ISP to potentially identify an internet dissident’s real IP address. In this context, SS + v2ray + tls is a safer option for users residing in totalitarian countries like Russia or China. By the way, the Shadowsocks protocol and v2ray were developed by users in China.

Besides speed and security, circumventing internet censorship and surveillance with SS+v2ray can be absolutely free! You just need to find a shareware virtual server (for example, Oracle Cloud, which has an unlimited trial period) and a free domain (such as a .tk domain provided by Freenom). However, using free services can be somewhat risky since you don’t have full ownership, and both the VPS and domain could be taken away from you at any moment.

 

Steps to set up your SS server:

– Getting a virtual server (VPS) running on Debian (you can use any distro you want, but in this tutorial I’m using Debian 10)

– Getting a domain (you can go with any domain, Freenom’s .tk for example)

– Signing up on Cloudflare and linking the domain there

– Deploying the shadowsocks and a web server on the VPS

– Getting a free SSL certificate and setting up traffic obfuscation

– Setting up a client for windows/android/ios/linux.

Let’s get started.

Getting a virtual server (VPS)

Any inexpensive virtual server provider will do. Oracle Cloud and Microsoft Azure are fine and they’re free too! (though, there is a limit on the amount of traffic). There is nothing complicated in getting a virtual server, just make sure that you are provided with a dedicated static IP address and have open ports 80, 443 and 22 (usually they are opened by default). You can also choose a suitable VPS from this list: https://bitcoin-vps.com/

Getting a domain

Get any domain you want, .tk domains are free (you can get one here: https://www.freenom.com)

Signing up on Cloudflare and linking the domain (adding DNS records)

As an example, let’s take the bernd32.xyz domain. To do this, in the cloudflare, specify the IP address of our SS server, one is just bernd32.xyz, the second is www.bernd32.xyz, click next.

In this guide I’ll use one of my domains bernd32.xyz, replace with your own. We need to make two DNS records:

1) “A” record with the name “www” and IP address of your VPS

2) “A” record with the name “bernd32.xyz” and IP address of your VPS

Next, click “Continue.” Afterward, Cloudflare will generate name servers that should be entered into the control panel of your domain registrar. If you obtained your free .tk domain from Freenom, the control panel page might look something like this:

Wait for a few hours for the DNS records to update. In the meantime, let’s navigate to the Cloudflare Firewall settings and change the Security level to “Essentially Off”:

Read more

Nagi no Asu kara

Нормальное аниме, но немного переоцененное. Эмоции от просмотра получил, но в небольших количествах. Главный минус – здесь очень много вещей, которые сценарист впихнул чисто для создания драмы, но при этом не позаботившись о том, чтобы у этих вещей был логически обоснованный контекст. Поэтому многое здесь кажется искусственным, а искусственному искренне переживать получается с трудом, увы.
Концовка неплоха, но слабовата, хотя любителям хэппиэндов зайдёт.
Ну и с количеством любовных треугольников вышел перебор. Некоторые персонажи, как по мне, вообще лишние и не несут большого смысла в повествовании, а только нагромождают сюжет. Да, я про Миуну и Саю. Что бы изменилось, если бы их не было в сюжете? Да по-большому счёту ничего.
Написал одни минусы и наверное теперь кажется, что это отстойный тайтл. Но нет, аниме неплохое, просто не нужно ожидать, что это будет какой-то шедевр.
Поставил 7/10 но только потому что я любитель жанра школьной романтоты. В целом, не пожалел о просмотре.

Kareshi Kanojo no Jijou

Kareshi Kanojo no Jijou

***

Неплохое сёдзё с какой-то неуверенной попыткой режиссёра привнести налёт претенциозности.
Единственный и самый главный минус – это низкобюджетность. Отсюда проистекают все побочные минусы: отвратительного качества графика, странный выбор сэйю, постоянные рекапы и повторение одной и той же мысли тысячу раз, чтобы хоть как-то растянуть хронометраж, отсутствие нормального звукового сопровождения и т.д..
Впрочем, к самим сюжетным линиям претензий особо нет (хотя сюжетную линию с Тонами и Сакурой сделали очень халтурной и блеклой, видимо деньги к концу совсем кончились), к персонажам тоже испытал тёплые чувства. В общем, норм. Посмотреть разок можно.

Если бы у этого аниме было хорошее финансирование, то получилось бы здорово. Но увы.

Shinsekai yori

Shinsekai yori

Общем-то очень неплохо. Здесь есть сюжет со смысловой нагрузкой, нет чёрно-белых антагонистов и протагонистов (по обе стороны конфликта нет однозначно плохих и однозначно хороших, что всегда радует), отличная концовка – не сильно предсказуемая (я боялся, что будет очередная мир-дружба-жвачка), со смыслом и посылом, без подросткового максимализма. Пожалуй, единственный главный минус – это излишняя растянутость и довольно бледные главные герои, которые мало чем выделяются из тысяч других. Вообще, главный смысл Shinsekai yori не в персонажах и межличностных отношениях, а в идее о том, что человечество жестоко по своей сути, что это его имманентное свойство. Что никакие, даже самые жестокие уроки истории, этого не изменят.

Идея сеттинга отличная (люблю постакалиптику), но реализация не самая лучшая, потому атмосферу особенно прочувствовать не удалось. Но есть исключение – последние 5 серий, где протагонисты оказались на руинах бывшего Токио. Поэтому ещё раз повторюсь – последние 5-8 серий были шикарны и ради них стоило отсмотреть весь тайтл.

Первые люди на луне

Классика жанра sci-fi, написанная в самом начале ХХ-го века, поэтому сильно критиковать было бы не очень красивым. Для того времени этот роман просто божественен да и в наше время читается с интересом. Конечно, спустя сотню лет непрерывного научного прогресса, в частности прогресса в изучении Луны, представления и спекуляции Уэллса об этом спутнике выглядят очень наивно. Впрочем, если представить, что речь идёт не о Луне, а о какой-то далёкой экзопланете, то наивность описание Луны уже не бросается в глаза и роман читается бодрее. Больше всего мне понравилось описание внутренних переживаний и рефлексий главного героя, оказавшегося один, на чужой и опасной планете. Увы, эта часть была довольно короткой. Еще из минусов можно отметить то, что книга слишком затянута. Был момент, когда напрашивался логичный конец, но Уэллс зачем-то решил дать волю своей фантазии и написать еще 4 главы, которые выглядели высосанными из пальца. Но, впрочем, даже эти филлеры было интересно читать – всё же в писательском таланте Уэллсу не откажешь. В общем, не знаю, стоило ли эта книга столь долгого чтения.

The Time Machine by H. G. Wells

Прочитал то, что должен был прочесть еще давно – роман Герберта Уэллса “Машина Времени”.

Сюжет описывает деградацию и упадок человечества далёкого будушего – к 800 000 году люди пришли к двум разным эволюционным путям: к элоям – расе добрых беспечных, глупых беспомощных существ, которые весь день поют, танцуют и смеются, не работая и не имея никаких забот. И к морлокам – злобным жестоким подземным тварям, живущим в ночи и питающимися элоями (в буквальном смысле). Роман считается классикой научно-фантастического жанра, хотя на мой взгляд, в нём больше политико философского.
Новелла написана в далёком 19 веке, в контексте классового расслоения того времени между рабочими и буржуазной элитой в британском обществе, но в наше время она выглядит ещё более актуальной, на мой взгляд.
Сейчас, по прошествии времени, стало очевидно, что в постиндустриальном обществе классовые различия в странах первого мира стираются с каждым поколением, и рабочий класс уже перестал быть низшим, перейдя на ступень среднего класса. Сейчас роли морлоков и элоев отведены не классам, а цивилизациям. Элои сегодняшнего времени – это население золотого миллиарда, представители европейской цивилизации. Так же, как в романе, они беспечны, наивны, слишком добры,  миролюбивы, склонны к травоядной жизни, трусости и к моральному упадку. С другой стороны мы имеем другие цивилизации – русскую (которая отдаляется от европейской вот уже 100 лет подряд), африканскую, исламскую и китайскую. Это и есть те самые морлоки, описанные Уэллсом, которые постепенно пожирают представителей деградировавшего золотого миллиарда.
Во время чтения у меня не было пиета ни в сторону злобных ночных каннибалов, ни в сторону улыбчивых солнечных дегенератов.  Две эти эволюционные ветви человечества имели один вектор направления – направление в пропасть.  К “элоям” и “морлокам” нашего времени у меня точно такое же отношение.

Генерирование случайных слов в JS

Допустим, у нас возникла идея создать скрипт на JS, который бы генерировал случайные слова (никнеймы).

Начнём для начала с самого простого подхода. Если мы просто будем брать случайные буквы и составлять их них слова, то они будут выглядеть неестественно и неприглядно. Примеры сгенерированных слов:

  • srjxdq
  • moyssj
  • ywtckmw
  • wjvzw
  • xtwey

и т.д.

Как видим, такой подход не позволяет нам генерировать слова, которые хотя бы отдалённо напоминали обычные – получается просто набор бессмысленных букв, который больше походит на пароли. Чтобы придать словам натуральность и “человечность”, нам нужно сделать как минимум две вещи (на мой взгляд):

  1. Исключить появления более двух гласных/согласных при генерировании слова. Данная задача является тривиальной и ее не имеет смысла рассматривать.
  2. Подбирать случайные буквы для слова с учётом их веса. Весами в данном случае будут являться частотность букв в английском языке. Таким образом мы должны уменьшить/увеличить шанс того, что определенная буква попадёт в наше генерируемое слово, и таких редко используемых букв, как, например, Q, Z и X будут встречаться в наших словах гораздо реже, чем E, T, A, O, I, которые по статистике являются самыми частыми в английских словах.

Используя всего два этих подхода, мы генерируем гораздо более “натуральные” слова. Примеры:

screenshot_0.png

Разберём 2-й пункт поподробнее.

Алгоритм выбора случайных элементов массива на основе весов в JS

Относительно простой имплементацией подобного алгоритма является преобразование ряда рациональных чисел s1 (массива), являющимися весами для элементов, в ряд чисел s2, который получается посредством кумулятивного сложения чисел:

equation

const items = [ 'a', 'b', 'c' ]; 
const weights = [ 3, 7, 1 ];
  • Подготавливаем массив весов посредством кумулятивного сложения (то есть список cumulativeWeights, который будет иметь то же количество элементов, что и исходный список весов weights). В нашем случае такой массив будет выглядеть следующим образом:
cumulativeWeights = [3, 3 + 7, 3 + 7 + 1] = [3, 10, 11]
  • Генерируем случайное число randomNumber от 0 до самого высокого кумулятивного значения веса. В нашем случае случайное число будет находиться в диапазоне [0..11]. Допустим, что randomNumber = 8.

  • Проходим с помощью цикла по массиву cumulativeWeights слева направо и выбираем первый элемент, который больше или равен randomNumber. Индекс такого элемента мы будем использовать для выбора элемента из массива элементов

Идея этого подхода заключается в том, что более высокие веса будут “занимать” больше числового пространства. Следовательно, существует более высокая вероятность того, что случайное число попадет в “числовое ведро” с более высоким весом.

Попробую наглядно показать это на примере своего скрипта:

Read more

Быстрый, безопастный и бесплатный(*) shadowsocks+v2ray-сервер с обфускацией трафика через TLS

English version is here.

Преамбула.

В свете нынешних событий в России, тема блокировок интернета стала актуальной, как никогда. На сегодняшний день самым популярным способом обхода блокировок являются VPN-сервисы. Однако они имеют довольно значительные недостатки, которые полностью или частично решаются поднятием своего собственного shadowsocks-сервера. В этом гайде я опишу, как это сделать.

Сразу возникает резонный воппрос – а зачем так заморачиваться, когда есть VPN? Итак, для начала перечислю плюсы и минусы VPN перед shadowsocks-сервером:

+ От пользователя не требуется никаких технических знаний и траты времени на настройку – поставил ВПН и забыл. Настройка же SS-сервера, тем более с обфускацией трафика, требует некоторых умений и знаний, которых нет у большинства пользователей.

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

– VPN небезопасен для пользователя. При желании товарища майора, вас очень быстро найдут: либо вас сольёт сам ВПН-провайдер, либо вас вычислят с помощью т.н. атаки сравнений – это когда товарищ майор, имея пакет яровой и данные о трафике, а так же данные с серверов (что актуально для всего рунета) для того, чтобы найти злобного оппозиционера, который пишет плохие вещи про власть через впн, сравнивает, с какого айпи пользователь это писал и кто в этот момент времени подключался к айпи-адресу, с которого это писали, и вычисляет мамкиного копротивленца.  SS+v2ray+tls в этом плане гораздо безопаснее для пользователя, живущего в таких тоталитарных странах, как Россия и Китай, к примеру. Поэтому вполне естественно, что протокол shadowsocks и v2ray были созданы в КНР.

– (*) Помимо скорости и безопасности, обход блокировок с помощью SS+v2ray может быть абсолютно бесплатным! Для этого нужно найти какой-нибудь условно-бесплатный виртуальный сервер (например Oracle Cloud) и бесплатный домен (например, .tk, который предоставляет freenom). О том, как получить бесплатную VPS-ку, можно почитать эту статью на Хабре, но есть одно но – свете последних событий Oracle не предоставляет услуги россиянам, поэтому просто так там зарегистрироваться не получится – только если у вас нет иностранной симки и иностранной банковской карты, с которой единоразово снимается 1 доллар в качестве проверки.

– VPN провайдеры ограничивают трафик/количество устройств и как правило используют стоковый OpenVPN или немного модифицированный.

Краткий план действий.

Read more