<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wiki.mywolfram.ru/index.php?action=history&amp;feed=atom&amp;title=Hysteria_2_%D0%BA%D0%B0%D1%81%D0%BA%D0%B0%D0%B4</id>
	<title>Hysteria 2 каскад - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.mywolfram.ru/index.php?action=history&amp;feed=atom&amp;title=Hysteria_2_%D0%BA%D0%B0%D1%81%D0%BA%D0%B0%D0%B4"/>
	<link rel="alternate" type="text/html" href="https://wiki.mywolfram.ru/index.php?title=Hysteria_2_%D0%BA%D0%B0%D1%81%D0%BA%D0%B0%D0%B4&amp;action=history"/>
	<updated>2026-05-28T20:53:57Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://wiki.mywolfram.ru/index.php?title=Hysteria_2_%D0%BA%D0%B0%D1%81%D0%BA%D0%B0%D0%B4&amp;diff=959&amp;oldid=prev</id>
		<title>Владимир: /* 3.4 Исходный код скрипта */</title>
		<link rel="alternate" type="text/html" href="https://wiki.mywolfram.ru/index.php?title=Hysteria_2_%D0%BA%D0%B0%D1%81%D0%BA%D0%B0%D0%B4&amp;diff=959&amp;oldid=prev"/>
		<updated>2026-04-26T10:14:44Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;3.4 Исходный код скрипта&lt;/span&gt;&lt;/p&gt;
&lt;a href=&quot;https://wiki.mywolfram.ru/index.php?title=Hysteria_2_%D0%BA%D0%B0%D1%81%D0%BA%D0%B0%D0%B4&amp;amp;diff=959&amp;amp;oldid=958&quot;&gt;Внесённые изменения&lt;/a&gt;</summary>
		<author><name>Владимир</name></author>
	</entry>
	<entry>
		<id>https://wiki.mywolfram.ru/index.php?title=Hysteria_2_%D0%BA%D0%B0%D1%81%D0%BA%D0%B0%D0%B4&amp;diff=958&amp;oldid=prev</id>
		<title>Владимир: /* Полная схема прохождения трафика */</title>
		<link rel="alternate" type="text/html" href="https://wiki.mywolfram.ru/index.php?title=Hysteria_2_%D0%BA%D0%B0%D1%81%D0%BA%D0%B0%D0%B4&amp;diff=958&amp;oldid=prev"/>
		<updated>2026-04-26T10:12:48Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Полная схема прохождения трафика&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 10:12, 26 апреля 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l82&quot;&gt;Строка 82:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 82:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Полная схема прохождения трафика ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Полная схема прохождения трафика ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[File:hysteria2-chain-traffic-flow.png|center|&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;900px&lt;/del&gt;|Схема трафика Hysteria2: Клиенты → RU Entry Node → EU Exit Node → WARP → Интернет]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[File:hysteria2-chain-traffic-flow.png|center|&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;768x768px&lt;/ins&gt;|Схема трафика Hysteria2: Клиенты → RU Entry Node → EU Exit Node → WARP → Интернет]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Протоколы на каждом участке цепочки ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Протоколы на каждом участке цепочки ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Владимир</name></author>
	</entry>
	<entry>
		<id>https://wiki.mywolfram.ru/index.php?title=Hysteria_2_%D0%BA%D0%B0%D1%81%D0%BA%D0%B0%D0%B4&amp;diff=956&amp;oldid=prev</id>
		<title>Владимир в 10:01, 26 апреля 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.mywolfram.ru/index.php?title=Hysteria_2_%D0%BA%D0%B0%D1%81%D0%BA%D0%B0%D0%B4&amp;diff=956&amp;oldid=prev"/>
		<updated>2026-04-26T10:01:45Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://wiki.mywolfram.ru/index.php?title=Hysteria_2_%D0%BA%D0%B0%D1%81%D0%BA%D0%B0%D0%B4&amp;amp;diff=956&amp;amp;oldid=929&quot;&gt;Внесённые изменения&lt;/a&gt;</summary>
		<author><name>Владимир</name></author>
	</entry>
	<entry>
		<id>https://wiki.mywolfram.ru/index.php?title=Hysteria_2_%D0%BA%D0%B0%D1%81%D0%BA%D0%B0%D0%B4&amp;diff=929&amp;oldid=prev</id>
		<title>Владимир: Новая страница: « = Hysteria 2: каскад РФ → EU — полная инструкция = Инструкция охватывает полный цикл: поднять **сервер Hysteria 2** на EU-VPS, настроить на нём **релей sing-box** на РФ-VPS, сгенерировать ссылки для клиентов и выполнить обслуживание серверов.  Все команды выполняются **по одно...»</title>
		<link rel="alternate" type="text/html" href="https://wiki.mywolfram.ru/index.php?title=Hysteria_2_%D0%BA%D0%B0%D1%81%D0%BA%D0%B0%D0%B4&amp;diff=929&amp;oldid=prev"/>
		<updated>2026-04-18T20:01:02Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: « = Hysteria 2: каскад РФ → EU — полная инструкция = Инструкция охватывает полный цикл: поднять **сервер Hysteria 2** на EU-VPS, настроить на нём **релей sing-box** на РФ-VPS, сгенерировать ссылки для клиентов и выполнить обслуживание серверов.  Все команды выполняются **по одно...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
= Hysteria 2: каскад РФ → EU — полная инструкция =&lt;br /&gt;
Инструкция охватывает полный цикл: поднять **сервер Hysteria 2** на EU-VPS, настроить на нём **релей sing-box** на РФ-VPS, сгенерировать ссылки для клиентов и выполнить обслуживание серверов.&lt;br /&gt;
&lt;br /&gt;
Все команды выполняются **по одной** (или одним логическим блоком — запись файла), результат после каждой шага — проверяемый.&lt;br /&gt;
&lt;br /&gt;
== Схема каскада ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 Клиент / роутер&lt;br /&gt;
       │  Hysteria 2  (пароль «клиент→РФ»)  UDP :40000&lt;br /&gt;
       ▼&lt;br /&gt;
 РФ-VPS  81.30.105.134   (sing-box)&lt;br /&gt;
   ├─ inbound: hysteria2  UDP :40000  ← от клиентов&lt;br /&gt;
   └─ outbound: hysteria2 → EU  UDP :40001  (пароль «РФ→EU»)&lt;br /&gt;
       │&lt;br /&gt;
       ▼&lt;br /&gt;
 EU-VPS  148.253.213.5   (hysteria server)&lt;br /&gt;
   └─ UDP :40001  → выход в интернет&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Почему два пароля&lt;br /&gt;
: &amp;#039;&amp;#039;&amp;#039;Пароль «клиент → РФ»&amp;#039;&amp;#039;&amp;#039; — знают только ваши устройства и sing-box РФ.&lt;br /&gt;
: &amp;#039;&amp;#039;&amp;#039;Пароль «РФ → EU»&amp;#039;&amp;#039;&amp;#039; — знают только sing-box РФ и hysteria EU. На клиентах он &amp;#039;&amp;#039;&amp;#039;не&amp;#039;&amp;#039;&amp;#039; нужен.&lt;br /&gt;
&lt;br /&gt;
== Параметры развёртывания ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Параметр&lt;br /&gt;
!Значение&lt;br /&gt;
!Примечание&lt;br /&gt;
|-&lt;br /&gt;
|ОС EU&lt;br /&gt;
|Ubuntu 24.04 LTS&lt;br /&gt;
|apt / systemd&lt;br /&gt;
|-&lt;br /&gt;
|IP EU (публичный)&lt;br /&gt;
|&amp;lt;code&amp;gt;148.253.213.5&amp;lt;/code&amp;gt;&lt;br /&gt;
|Изменить на свой&lt;br /&gt;
|-&lt;br /&gt;
|UDP-порт EU&lt;br /&gt;
|&amp;lt;code&amp;gt;40001&amp;lt;/code&amp;gt;&lt;br /&gt;
|Вход для РФ-релея&lt;br /&gt;
|-&lt;br /&gt;
|Бинарь EU&lt;br /&gt;
|&amp;lt;code&amp;gt;hysteria v2.8.1&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;/usr/local/bin/hysteria&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Конфиг EU&lt;br /&gt;
|&amp;lt;code&amp;gt;/etc/hysteria/server-eu.yaml&amp;lt;/code&amp;gt;&lt;br /&gt;
|Права 0640&lt;br /&gt;
|-&lt;br /&gt;
|TLS EU&lt;br /&gt;
|&amp;lt;code&amp;gt;/etc/hysteria/tls-eu/eu.crt&amp;lt;/code&amp;gt; + &amp;lt;code&amp;gt;eu.key&amp;lt;/code&amp;gt;&lt;br /&gt;
|Самоподпись на IPv4&lt;br /&gt;
|-&lt;br /&gt;
|Сервис EU&lt;br /&gt;
|&amp;lt;code&amp;gt;hysteria-eu-hy2test.service&amp;lt;/code&amp;gt;&lt;br /&gt;
|systemd&lt;br /&gt;
|-&lt;br /&gt;
|ОС РФ&lt;br /&gt;
|Debian 13 (trixie)&lt;br /&gt;
|apt / systemd&lt;br /&gt;
|-&lt;br /&gt;
|IP РФ (публичный)&lt;br /&gt;
|&amp;lt;code&amp;gt;81.30.105.134&amp;lt;/code&amp;gt;&lt;br /&gt;
|Изменить на свой&lt;br /&gt;
|-&lt;br /&gt;
|UDP-порт РФ (вход клиентов)&lt;br /&gt;
|&amp;lt;code&amp;gt;40000&amp;lt;/code&amp;gt;&lt;br /&gt;
|Не пересекаться с Xray&lt;br /&gt;
|-&lt;br /&gt;
|Бинарь РФ&lt;br /&gt;
|&amp;lt;code&amp;gt;sing-box v1.13.8&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;/usr/local/bin/sing-box&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Конфиг РФ&lt;br /&gt;
|&amp;lt;code&amp;gt;/etc/sing-box/config.json&amp;lt;/code&amp;gt;&lt;br /&gt;
|Права 0600&lt;br /&gt;
|-&lt;br /&gt;
|TLS РФ&lt;br /&gt;
|&amp;lt;code&amp;gt;/etc/sing-box/tls-ru/ru.crt&amp;lt;/code&amp;gt; + &amp;lt;code&amp;gt;ru.key&amp;lt;/code&amp;gt;&lt;br /&gt;
|Самоподпись на IPv4&lt;br /&gt;
|-&lt;br /&gt;
|Сервис РФ&lt;br /&gt;
|&amp;lt;code&amp;gt;sing-box-hy2relay-test.service&amp;lt;/code&amp;gt;&lt;br /&gt;
|systemd&lt;br /&gt;
|}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Часть 1. Сервер EU (Ubuntu 24.04) =&lt;br /&gt;
&lt;br /&gt;
== 1.1 Диагностика перед установкой ==&lt;br /&gt;
Выполнять на &amp;#039;&amp;#039;&amp;#039;EU-VPS&amp;#039;&amp;#039;&amp;#039; под root.&lt;br /&gt;
&lt;br /&gt;
=== 1.1.1 Дата и время ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
date -u&lt;br /&gt;
timedatectl status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;#039;&amp;#039;&amp;#039;Ожидаемо:&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;System clock synchronized: yes&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;NTP service: active&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== 1.1.2 Публичный IP и интерфейсы ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
curl -4sS --max-time 10 https://api.ipify.org; echo&lt;br /&gt;
ip -br a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 1.1.3 Занятые порты (не пересечься с Xray/Docker) ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ss -tulpen | head -n 50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 1.1.4 Проверить, что UDP-порт 40001 свободен ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ss -ulpen | grep &amp;#039;:40001&amp;#039; &amp;amp;&amp;amp; echo &amp;quot;ЗАНЯТ&amp;quot; || echo &amp;quot;OK: свободен&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 1.2 Установка Hysteria ==&lt;br /&gt;
&lt;br /&gt;
=== 1.2.1 Обновить пакеты ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get install -y ca-certificates curl openssl&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 1.2.2 Создать каталог конфигурации ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
install -d -m 0755 /etc/hysteria&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 1.2.3 Задать версию и URL ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export HY2_TAG=&amp;quot;app/v2.8.1&amp;quot;&lt;br /&gt;
export HY2_BIN_URL=&amp;quot;https://github.com/apernet/hysteria/releases/download/${HY2_TAG}/hysteria-linux-amd64&amp;quot;&lt;br /&gt;
echo &amp;quot;${HY2_BIN_URL}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 1.2.4 Скачать бинарь (с повторами при 504) ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
curl -4fL --connect-timeout 20 --max-time 300 --retry 8 --retry-delay 2 --retry-all-errors \&lt;br /&gt;
  -o /tmp/hysteria &amp;quot;${HY2_BIN_URL}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 1.2.5 Проверить размер (~15–17 МБ) ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -la /tmp/hysteria&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 1.2.6 Установить ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
install -m 0755 /tmp/hysteria /usr/local/bin/hysteria&lt;br /&gt;
rm -f /tmp/hysteria&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 1.2.7 Версия ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/usr/local/bin/hysteria version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;#039;&amp;#039;&amp;#039;Ожидаемо:&amp;#039;&amp;#039;&amp;#039; строка &amp;lt;code&amp;gt;Version: v2.8.1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== 1.3 TLS (самоподписанный сертификат на IPv4) ==&lt;br /&gt;
Используется, когда нет домена с DNS-записью. Клиент подключается с &amp;lt;code&amp;gt;insecure: true&amp;lt;/code&amp;gt; или по pin SHA-256.&lt;br /&gt;
&lt;br /&gt;
=== 1.3.1 Переменные ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export HY2_IP=&amp;quot;148.253.213.5&amp;quot;          # ← ваш публичный IP EU&lt;br /&gt;
export HY2_TLS_DIR=&amp;quot;/etc/hysteria/tls-eu&amp;quot;&lt;br /&gt;
install -d -m 0755 &amp;quot;${HY2_TLS_DIR}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 1.3.2 Сгенерировать сертификат EC P-256 с SAN=IP ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
openssl req -x509 -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 \&lt;br /&gt;
  -days 3650 -nodes \&lt;br /&gt;
  -keyout &amp;quot;${HY2_TLS_DIR}/eu.key&amp;quot; \&lt;br /&gt;
  -out  &amp;quot;${HY2_TLS_DIR}/eu.crt&amp;quot; \&lt;br /&gt;
  -subj &amp;quot;/CN=${HY2_IP}&amp;quot; \&lt;br /&gt;
  -addext &amp;quot;subjectAltName=IP:${HY2_IP}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 1.3.3 Права ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 0640 &amp;quot;${HY2_TLS_DIR}/eu.key&amp;quot;&lt;br /&gt;
chmod 0644 &amp;quot;${HY2_TLS_DIR}/eu.crt&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 1.3.4 Проверить CN и SAN ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
openssl x509 -in &amp;quot;${HY2_TLS_DIR}/eu.crt&amp;quot; -noout -subject -dates -ext subjectAltName&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;#039;&amp;#039;&amp;#039;Ожидаемо:&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;CN = 148.253.213.5&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;IP Address:148.253.213.5&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== 1.3.5 (Опционально) Получить fingerprint SHA-256 для pin на клиентах ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
openssl x509 -in &amp;quot;${HY2_TLS_DIR}/eu.crt&amp;quot; -noout -fingerprint -sha256&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Сохраните вывод — пригодится для &amp;lt;code&amp;gt;pinSHA256&amp;lt;/code&amp;gt; в URI клиентов.&lt;br /&gt;
&lt;br /&gt;
== 1.4 Конфиг сервера и systemd ==&lt;br /&gt;
&lt;br /&gt;
=== 1.4.1 Задать порт и путь к TLS ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export HY2_UDP_PORT=40001&lt;br /&gt;
export HY2_TLS_DIR=&amp;quot;/etc/hysteria/tls-eu&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 1.4.2 Сгенерировать пароль линка РФ→EU (сохраните его в менеджер паролей) ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export HY2_RU_TO_EU_PASSWORD=&amp;quot;$(openssl rand -base64 32 | tr -d &amp;#039;\n&amp;#039;)&amp;quot;&lt;br /&gt;
echo &amp;quot;${HY2_RU_TO_EU_PASSWORD}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;#039;&amp;#039;&amp;#039;Важно:&amp;#039;&amp;#039;&amp;#039; скопируйте значение. Оно понадобится при настройке РФ-сервера.&lt;br /&gt;
&lt;br /&gt;
=== 1.4.3 Записать /etc/hysteria/server-eu.yaml ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
umask 077&lt;br /&gt;
tee /etc/hysteria/server-eu.yaml &amp;gt;/dev/null &amp;lt;&amp;lt;EOF&lt;br /&gt;
listen: :${HY2_UDP_PORT}&lt;br /&gt;
&lt;br /&gt;
tls:&lt;br /&gt;
  cert: ${HY2_TLS_DIR}/eu.crt&lt;br /&gt;
  key:  ${HY2_TLS_DIR}/eu.key&lt;br /&gt;
&lt;br /&gt;
auth:&lt;br /&gt;
  type: password&lt;br /&gt;
  password: &amp;#039;${HY2_RU_TO_EU_PASSWORD}&amp;#039;&lt;br /&gt;
&lt;br /&gt;
masquerade:&lt;br /&gt;
  type: proxy&lt;br /&gt;
  proxy:&lt;br /&gt;
    url: https://news.ycombinator.com/&lt;br /&gt;
    rewriteHost: true&lt;br /&gt;
EOF&lt;br /&gt;
chmod 0640 /etc/hysteria/server-eu.yaml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 1.4.4 Создать systemd-юнит ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tee /etc/systemd/system/hysteria-eu-hy2test.service &amp;gt;/dev/null &amp;lt;&amp;lt;&amp;#039;EOF&amp;#039;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Hysteria2 EU test (UDP)&lt;br /&gt;
After=network-online.target&lt;br /&gt;
Wants=network-online.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
ExecStart=/usr/local/bin/hysteria server -c /etc/hysteria/server-eu.yaml&lt;br /&gt;
Restart=on-failure&lt;br /&gt;
RestartSec=2&lt;br /&gt;
LimitNOFILE=1048576&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 1.4.5 Включить и запустить ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl daemon-reload&lt;br /&gt;
systemctl enable hysteria-eu-hy2test.service&lt;br /&gt;
systemctl start  hysteria-eu-hy2test.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 1.4.6 Проверить статус ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --no-pager -l status hysteria-eu-hy2test.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;#039;&amp;#039;&amp;#039;Ожидаемо:&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;Active: active (running)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== 1.4.7 Убедиться, что UDP-порт слушается ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ss -ulpen | grep &amp;#039;:40001&amp;#039; || echo &amp;quot;НЕ СЛУШАЕТ&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;#039;&amp;#039;&amp;#039;Ожидаемо:&amp;#039;&amp;#039;&amp;#039; процесс &amp;lt;code&amp;gt;hysteria&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;UNCONN&amp;lt;/code&amp;gt;, порт &amp;lt;code&amp;gt;40001&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== 1.4.8 Логи ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
journalctl -u hysteria-eu-hy2test -n 40 --no-pager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;#039;&amp;#039;&amp;#039;Ожидаемо:&amp;#039;&amp;#039;&amp;#039; строка &amp;lt;code&amp;gt;server up and running {&amp;quot;listen&amp;quot;: &amp;quot;:40001&amp;quot;}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== 1.5 Локальный self-test (клиент на том же EU-VPS) ==&lt;br /&gt;
&lt;br /&gt;
=== 1.5.1 Прочитать пароль из конфига в переменную ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
PASSWORD=&amp;quot;$(python3 - &amp;lt;&amp;lt;&amp;#039;PY&amp;#039;&lt;br /&gt;
import re&lt;br /&gt;
from pathlib import Path&lt;br /&gt;
text = Path(&amp;quot;/etc/hysteria/server-eu.yaml&amp;quot;).read_text(encoding=&amp;quot;utf-8&amp;quot;)&lt;br /&gt;
m = re.search(r&amp;quot;(?m)^\s*password:\s*&amp;#039;([^&amp;#039;]*)&amp;#039;\s*$&amp;quot;, text)&lt;br /&gt;
if not m:&lt;br /&gt;
    raise SystemExit(&amp;quot;Не нашёл password в server-eu.yaml&amp;quot;)&lt;br /&gt;
print(m.group(1))&lt;br /&gt;
PY&lt;br /&gt;
)&amp;quot;&lt;br /&gt;
echo &amp;quot;PASSWORD_len=${#PASSWORD}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 1.5.2 Временный клиентский конфиг ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;gt; /tmp/hy2-eu-selftest.yaml &amp;lt;&amp;lt;EOF&lt;br /&gt;
server: 127.0.0.1:40001&lt;br /&gt;
auth: ${PASSWORD}&lt;br /&gt;
tls:&lt;br /&gt;
  insecure: true&lt;br /&gt;
socks5:&lt;br /&gt;
  listen: 127.0.0.1:19800&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 1.5.3 Запустить клиент в фоне ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hysteria client -c /tmp/hy2-eu-selftest.yaml &amp;gt;/tmp/hy2-eu-selftest.log 2&amp;gt;&amp;amp;1 &amp;amp;&lt;br /&gt;
sleep 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 1.5.4 Проверить IP через SOCKS5 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
curl -4fsS --max-time 15 --socks5-hostname 127.0.0.1:19800 https://api.ipify.org; echo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;#039;&amp;#039;&amp;#039;Ожидаемо:&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;148.253.213.5&amp;lt;/code&amp;gt; (ваш EU-IP).&lt;br /&gt;
&lt;br /&gt;
=== 1.5.5 Остановить и убрать ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pkill -f &amp;quot;/tmp/hy2-eu-selftest.yaml&amp;quot; || true&lt;br /&gt;
rm -f /tmp/hy2-eu-selftest.yaml /tmp/hy2-eu-selftest.log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Часть 2. Сервер РФ (Debian 13) — релей sing-box =&lt;br /&gt;
&lt;br /&gt;
== 2.1 Диагностика перед установкой ==&lt;br /&gt;
Выполнять на &amp;#039;&amp;#039;&amp;#039;РФ-VPS&amp;#039;&amp;#039;&amp;#039; под root.&lt;br /&gt;
&lt;br /&gt;
=== 2.1.1 Публичный IP и порты ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
curl -4sS --max-time 10 https://api.ipify.org; echo&lt;br /&gt;
ss -tulpen | head -n 50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2.1.2 Проверить, что UDP-порт 40000 свободен ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ss -ulpen | grep &amp;#039;:40000&amp;#039; &amp;amp;&amp;amp; echo &amp;quot;ЗАНЯТ&amp;quot; || echo &amp;quot;OK: свободен&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2.2 Установка sing-box ==&lt;br /&gt;
&lt;br /&gt;
=== 2.2.1 Пакеты ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get install -y ca-certificates curl tar openssl&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2.2.2 Каталоги ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
install -d -m 0755 /etc/sing-box&lt;br /&gt;
install -d -m 0755 /etc/sing-box/tls-ru&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2.2.3 Задать версию и скачать архив ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export SB_VER=&amp;quot;1.13.8&amp;quot;&lt;br /&gt;
export SB_TAG=&amp;quot;v${SB_VER}&amp;quot;&lt;br /&gt;
export SB_TARBALL=&amp;quot;sing-box-${SB_VER}-linux-amd64-glibc.tar.gz&amp;quot;&lt;br /&gt;
export SB_URL=&amp;quot;https://github.com/SagerNet/sing-box/releases/download/${SB_TAG}/${SB_TARBALL}&amp;quot;&lt;br /&gt;
curl -4fL --connect-timeout 20 --max-time 300 --retry 8 --retry-delay 2 --retry-all-errors \&lt;br /&gt;
  -o &amp;quot;/tmp/${SB_TARBALL}&amp;quot; &amp;quot;${SB_URL}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;#039;&amp;#039;&amp;#039;Важно:&amp;#039;&amp;#039;&amp;#039; каталог внутри архива называется &amp;lt;code&amp;gt;sing-box-X.Y.Z-linux-amd64-&amp;#039;&amp;#039;&amp;#039;glibc&amp;#039;&amp;#039;&amp;#039;&amp;lt;/code&amp;gt;, не просто &amp;lt;code&amp;gt;…-linux-amd64&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== 2.2.4 Распаковать и установить ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tar -C /tmp -xzf &amp;quot;/tmp/${SB_TARBALL}&amp;quot;&lt;br /&gt;
install -m 0755 &amp;quot;/tmp/sing-box-${SB_VER}-linux-amd64-glibc/sing-box&amp;quot; /usr/local/bin/sing-box&lt;br /&gt;
rm -rf &amp;quot;/tmp/sing-box-${SB_VER}-linux-amd64-glibc&amp;quot; &amp;quot;/tmp/${SB_TARBALL}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2.2.5 Версия ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sing-box version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;#039;&amp;#039;&amp;#039;Ожидаемо:&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;sing-box version 1.13.8&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== 2.3 TLS для входа Hy2 (самоподпись на IPv4 РФ) ==&lt;br /&gt;
&lt;br /&gt;
=== 2.3.1 Переменная IP ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export HY2_RU_IP=&amp;quot;81.30.105.134&amp;quot;       # ← ваш публичный IP РФ&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2.3.2 Сгенерировать сертификат ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
openssl req -x509 -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 \&lt;br /&gt;
  -days 3650 -nodes \&lt;br /&gt;
  -keyout /etc/sing-box/tls-ru/ru.key \&lt;br /&gt;
  -out  /etc/sing-box/tls-ru/ru.crt \&lt;br /&gt;
  -subj &amp;quot;/CN=${HY2_RU_IP}&amp;quot; \&lt;br /&gt;
  -addext &amp;quot;subjectAltName=IP:${HY2_RU_IP}&amp;quot;&lt;br /&gt;
chmod 0640 /etc/sing-box/tls-ru/ru.key&lt;br /&gt;
chmod 0644 /etc/sing-box/tls-ru/ru.crt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2.3.3 Проверить ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
openssl x509 -in /etc/sing-box/tls-ru/ru.crt -noout -subject -dates -ext subjectAltName&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2.3.4 (Опционально) SHA-256 fingerprint для клиентских ссылок ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
openssl x509 -in /etc/sing-box/tls-ru/ru.crt -noout -fingerprint -sha256&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2.4 Конфиг sing-box и systemd ==&lt;br /&gt;
&lt;br /&gt;
=== 2.4.1 Задать переменные (выполнять в одной SSH-сессии) ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export HY2_RU_IP=&amp;quot;81.30.105.134&amp;quot;&lt;br /&gt;
export HY2_RU_CLIENT_PORT=40000&lt;br /&gt;
export HY2_EU_IP=&amp;quot;148.253.213.5&amp;quot;&lt;br /&gt;
export HY2_EU_PORT=40001&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2.4.2 Ввести пароль линка РФ→EU (вслепую, не попадёт в history) ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
read -s HY2_EU_PW&lt;br /&gt;
export HY2_EU_PW&lt;br /&gt;
echo &amp;quot;HY2_EU_PW_len=${#HY2_EU_PW}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Введите пароль из шага [[Hysteria 2 каскад#1.4.2 Сгенерировать пароль линка РФ→EU|1.4.2]] вслепую и нажмите Enter.&lt;br /&gt;
&lt;br /&gt;
=== 2.4.3 Сгенерировать пароль «клиент → РФ» (новый, сохранить) ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export HY2_RU_CLIENT_PW=&amp;quot;$(openssl rand -base64 24 | tr -d &amp;#039;\n&amp;#039;)&amp;quot;&lt;br /&gt;
echo &amp;quot;Сохраните пароль КЛИЕНТ→РФ (длина=${#HY2_RU_CLIENT_PW}):&amp;quot;&lt;br /&gt;
echo &amp;quot;${HY2_RU_CLIENT_PW}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Скопируйте пароль в менеджер паролей. &amp;#039;&amp;#039;&amp;#039;Не&amp;#039;&amp;#039;&amp;#039; вставляйте в чаты.&lt;br /&gt;
&lt;br /&gt;
=== 2.4.4 Записать /etc/sing-box/config.json ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python3 - &amp;lt;&amp;lt;&amp;#039;PY&amp;#039;&lt;br /&gt;
import json, os&lt;br /&gt;
from pathlib import Path&lt;br /&gt;
&lt;br /&gt;
cfg = {&lt;br /&gt;
    &amp;quot;log&amp;quot;: {&amp;quot;level&amp;quot;: &amp;quot;info&amp;quot;, &amp;quot;timestamp&amp;quot;: True},&lt;br /&gt;
    &amp;quot;inbounds&amp;quot;: [{&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;hysteria2&amp;quot;,&lt;br /&gt;
        &amp;quot;tag&amp;quot;: &amp;quot;hy2-in&amp;quot;,&lt;br /&gt;
        &amp;quot;listen&amp;quot;: &amp;quot;::&amp;quot;,&lt;br /&gt;
        &amp;quot;listen_port&amp;quot;: int(os.environ[&amp;quot;HY2_RU_CLIENT_PORT&amp;quot;]),&lt;br /&gt;
        &amp;quot;users&amp;quot;: [{&amp;quot;name&amp;quot;: &amp;quot;client1&amp;quot;, &amp;quot;password&amp;quot;: os.environ[&amp;quot;HY2_RU_CLIENT_PW&amp;quot;]}],&lt;br /&gt;
        &amp;quot;tls&amp;quot;: {&lt;br /&gt;
            &amp;quot;enabled&amp;quot;: True,&lt;br /&gt;
            &amp;quot;certificate_path&amp;quot;: &amp;quot;/etc/sing-box/tls-ru/ru.crt&amp;quot;,&lt;br /&gt;
            &amp;quot;key_path&amp;quot;: &amp;quot;/etc/sing-box/tls-ru/ru.key&amp;quot;,&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;masquerade&amp;quot;: {&amp;quot;type&amp;quot;: &amp;quot;proxy&amp;quot;, &amp;quot;url&amp;quot;: &amp;quot;https://news.ycombinator.com/&amp;quot;, &amp;quot;rewrite_host&amp;quot;: True},&lt;br /&gt;
    }],&lt;br /&gt;
    &amp;quot;outbounds&amp;quot;: [&lt;br /&gt;
        {&amp;quot;type&amp;quot;: &amp;quot;direct&amp;quot;, &amp;quot;tag&amp;quot;: &amp;quot;direct&amp;quot;},&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;hysteria2&amp;quot;,&lt;br /&gt;
            &amp;quot;tag&amp;quot;: &amp;quot;hy2-eu&amp;quot;,&lt;br /&gt;
            &amp;quot;server&amp;quot;: os.environ[&amp;quot;HY2_EU_IP&amp;quot;],&lt;br /&gt;
            &amp;quot;server_port&amp;quot;: int(os.environ[&amp;quot;HY2_EU_PORT&amp;quot;]),&lt;br /&gt;
            &amp;quot;password&amp;quot;: os.environ[&amp;quot;HY2_EU_PW&amp;quot;],&lt;br /&gt;
            &amp;quot;tls&amp;quot;: {&amp;quot;enabled&amp;quot;: True, &amp;quot;server_name&amp;quot;: os.environ[&amp;quot;HY2_EU_IP&amp;quot;], &amp;quot;insecure&amp;quot;: True},&lt;br /&gt;
        },&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;route&amp;quot;: {&amp;quot;rules&amp;quot;: [], &amp;quot;final&amp;quot;: &amp;quot;hy2-eu&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
path = Path(&amp;quot;/etc/sing-box/config.json&amp;quot;)&lt;br /&gt;
path.write_text(json.dumps(cfg, indent=2, ensure_ascii=False) + &amp;quot;\n&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;)&lt;br /&gt;
path.chmod(0o600)&lt;br /&gt;
print(&amp;quot;OK:&amp;quot;, path)&lt;br /&gt;
PY&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2.4.5 Проверить синтаксис конфига ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sing-box check -c /etc/sing-box/config.json&lt;br /&gt;
echo &amp;quot;exit_code=$?&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;#039;&amp;#039;&amp;#039;Ожидаемо:&amp;#039;&amp;#039;&amp;#039; пустой вывод и &amp;lt;code&amp;gt;exit_code=0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== 2.4.6 Создать systemd-юнит ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tee /etc/systemd/system/sing-box-hy2relay-test.service &amp;gt;/dev/null &amp;lt;&amp;lt;&amp;#039;EOF&amp;#039;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=sing-box Hy2 relay (RU client -&amp;gt; EU exit) test&lt;br /&gt;
After=network-online.target&lt;br /&gt;
Wants=network-online.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
ExecStart=/usr/local/bin/sing-box run -c /etc/sing-box/config.json&lt;br /&gt;
Restart=on-failure&lt;br /&gt;
RestartSec=2&lt;br /&gt;
LimitNOFILE=1048576&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2.4.7 Включить и запустить ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl daemon-reload&lt;br /&gt;
systemctl enable sing-box-hy2relay-test.service&lt;br /&gt;
systemctl restart sing-box-hy2relay-test.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2.4.8 Статус ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --no-pager -l status sing-box-hy2relay-test.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;#039;&amp;#039;&amp;#039;Ожидаемо:&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;Active: active (running)&amp;lt;/code&amp;gt;, строка &amp;lt;code&amp;gt;udp server started at [::]:40000&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== 2.4.9 UDP-порт ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ss -ulpen | grep &amp;#039;:40000&amp;#039; || echo &amp;quot;НЕ СЛУШАЕТ&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2.5 Тест каскада на РФ-VPS (ожидается IP EU) ==&lt;br /&gt;
&lt;br /&gt;
=== 2.5.1 Установить hysteria-клиент (если нет) ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
command -v hysteria || {&lt;br /&gt;
  export HY2_TAG=&amp;quot;app/v2.8.1&amp;quot;&lt;br /&gt;
  curl -4fL --connect-timeout 20 --max-time 300 --retry 8 --retry-delay 2 --retry-all-errors \&lt;br /&gt;
    -o /tmp/hysteria &amp;quot;https://github.com/apernet/hysteria/releases/download/${HY2_TAG}/hysteria-linux-amd64&amp;quot;&lt;br /&gt;
  install -m 0755 /tmp/hysteria /usr/local/bin/hysteria&lt;br /&gt;
  rm -f /tmp/hysteria&lt;br /&gt;
}&lt;br /&gt;
hysteria version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2.5.2 Прочитать пароль «клиент→РФ» из config.json ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
RUCL_PW=&amp;quot;$(python3 - &amp;lt;&amp;lt;&amp;#039;PY&amp;#039;&lt;br /&gt;
import json&lt;br /&gt;
from pathlib import Path&lt;br /&gt;
cfg = json.loads(Path(&amp;quot;/etc/sing-box/config.json&amp;quot;).read_text(encoding=&amp;quot;utf-8&amp;quot;))&lt;br /&gt;
print(cfg[&amp;quot;inbounds&amp;quot;][0][&amp;quot;users&amp;quot;][0][&amp;quot;password&amp;quot;])&lt;br /&gt;
PY&lt;br /&gt;
)&amp;quot;&lt;br /&gt;
echo &amp;quot;RUCL_PW_len=${#RUCL_PW}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2.5.3 Временный клиентский конфиг ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;gt; /tmp/hy2-ru-selftest.yaml &amp;lt;&amp;lt;EOF&lt;br /&gt;
server: 127.0.0.1:40000&lt;br /&gt;
auth: ${RUCL_PW}&lt;br /&gt;
tls:&lt;br /&gt;
  insecure: true&lt;br /&gt;
socks5:&lt;br /&gt;
  listen: 127.0.0.1:19900&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2.5.4 Запуск и проверка IP ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hysteria client -c /tmp/hy2-ru-selftest.yaml &amp;gt;/tmp/hy2-ru-selftest.log 2&amp;gt;&amp;amp;1 &amp;amp;&lt;br /&gt;
sleep 1&lt;br /&gt;
curl -4fsS --max-time 20 --socks5-hostname 127.0.0.1:19900 https://api.ipify.org; echo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;#039;&amp;#039;&amp;#039;Ожидаемо:&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;148.253.213.5&amp;lt;/code&amp;gt; — публичный IP EU, &amp;#039;&amp;#039;&amp;#039;не&amp;#039;&amp;#039;&amp;#039; РФ. Это означает, что трафик прошёл через EU.&lt;br /&gt;
&lt;br /&gt;
=== 2.5.5 Остановить и убрать ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pkill -f &amp;quot;/tmp/hy2-ru-selftest.yaml&amp;quot; || true&lt;br /&gt;
rm -f /tmp/hy2-ru-selftest.yaml /tmp/hy2-ru-selftest.log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Часть 3. Генерация ссылок для клиентов =&lt;br /&gt;
Клиент подключается &amp;#039;&amp;#039;&amp;#039;только к РФ-серверу&amp;#039;&amp;#039;&amp;#039;. Пароль — «клиент→РФ» (&amp;lt;code&amp;gt;inbounds[0].users[0].password&amp;lt;/code&amp;gt; в &amp;lt;code&amp;gt;config.json&amp;lt;/code&amp;gt; на РФ).&lt;br /&gt;
&lt;br /&gt;
== 3.1 Стандартный URI hysteria2:// ==&lt;br /&gt;
Формат по [https://v2.hysteria.network/docs/developers/URI-Scheme/ официальной спецификации]:&amp;lt;pre&amp;gt;&lt;br /&gt;
hysteria2://ПАРОЛЬ@IP_РФ:ПОРТ/?insecure=1&amp;amp;sni=IP_РФ&lt;br /&gt;
&amp;lt;/pre&amp;gt;Если пароль содержит символы &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; и т.п. — их нужно percent-encode.&lt;br /&gt;
&lt;br /&gt;
=== 3.1.1 Сгенерировать URI на РФ-VPS (Python автоматически кодирует пароль) ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python3 - &amp;lt;&amp;lt;&amp;#039;PY&amp;#039;&lt;br /&gt;
import json, urllib.parse&lt;br /&gt;
from pathlib import Path&lt;br /&gt;
&lt;br /&gt;
cfg = json.loads(Path(&amp;quot;/etc/sing-box/config.json&amp;quot;).read_text(encoding=&amp;quot;utf-8&amp;quot;))&lt;br /&gt;
pw  = cfg[&amp;quot;inbounds&amp;quot;][0][&amp;quot;users&amp;quot;][0][&amp;quot;password&amp;quot;]&lt;br /&gt;
ip  = &amp;quot;81.30.105.134&amp;quot;   # публичный IP РФ — замените на свой&lt;br /&gt;
port = cfg[&amp;quot;inbounds&amp;quot;][0][&amp;quot;listen_port&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
uri = f&amp;quot;hysteria2://{urllib.parse.quote(pw, safe=&amp;#039;&amp;#039;)}@{ip}:{port}/?insecure=1&amp;amp;sni={ip}&amp;quot;&lt;br /&gt;
print(&amp;quot;\n=== URI для импорта в NekoBox / Hiddify / V2Box ===&amp;quot;)&lt;br /&gt;
print(uri)&lt;br /&gt;
print(&amp;quot;===&amp;quot;)&lt;br /&gt;
PY&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;#039;&amp;#039;&amp;#039;Скопируйте URI&amp;#039;&amp;#039;&amp;#039; — его можно:&lt;br /&gt;
&lt;br /&gt;
* вставить в NekoBox → &amp;#039;&amp;#039;&amp;#039;Добавить профиль → Из буфера обмена&amp;#039;&amp;#039;&amp;#039;;&lt;br /&gt;
* вставить в Hiddify → &amp;#039;&amp;#039;&amp;#039;Новый профиль&amp;#039;&amp;#039;&amp;#039;;&lt;br /&gt;
* импортировать в V2Box.&lt;br /&gt;
&lt;br /&gt;
=== 3.1.2 URI с pinSHA256 вместо insecure (более безопасно) ===&lt;br /&gt;
Сначала получить fingerprint (на EU-сервере или РФ, зависит от чьего сертификата):&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
openssl x509 -in /etc/sing-box/tls-ru/ru.crt -noout -fingerprint -sha256 \&lt;br /&gt;
  | sed &amp;#039;s/SHA256 Fingerprint=//;s/://g&amp;#039; | tr &amp;#039;[:upper:]&amp;#039; &amp;#039;[:lower:]&amp;#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Пример URI с pin (замените &amp;lt;code&amp;gt;FINGERPRINT_HEX&amp;lt;/code&amp;gt;):&amp;lt;pre&amp;gt;&lt;br /&gt;
hysteria2://ПАРОЛЬ@81.30.105.134:40000/?pinSHA256=FINGERPRINT_HEX&amp;amp;sni=81.30.105.134&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3.1.3 Сгенерировать QR-код (текстовый, в терминале) ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt-get install -y qrencode&lt;br /&gt;
qrencode -t ANSIUTF8 &amp;#039;ВСТАВЬТЕ_URI_СЮДА&amp;#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;#039;&amp;#039;&amp;#039;Примечание:&amp;#039;&amp;#039;&amp;#039; пароль будет виден в QR и в истории shell — делайте это только на изолированной сессии или перенаправляйте вывод в файл PNG и передавайте по защищённому каналу.&lt;br /&gt;
&lt;br /&gt;
== 3.2 Параметры для ручного добавления в NekoBox ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Поле&lt;br /&gt;
!Значение&lt;br /&gt;
|-&lt;br /&gt;
|Тип&lt;br /&gt;
|Hysteria 2 (именно Hy2, не Hysteria 1)&lt;br /&gt;
|-&lt;br /&gt;
|Сервер&lt;br /&gt;
|&amp;lt;code&amp;gt;81.30.105.134&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Порт&lt;br /&gt;
|&amp;lt;code&amp;gt;40000&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Пароль&lt;br /&gt;
|пароль «клиент→РФ» из &amp;lt;code&amp;gt;/etc/sing-box/config.json&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|TLS → Insecure&lt;br /&gt;
|включить (или задать pin)&lt;br /&gt;
|-&lt;br /&gt;
|SNI&lt;br /&gt;
|&amp;lt;code&amp;gt;81.30.105.134&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Obfs&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;не включать&amp;#039;&amp;#039;&amp;#039; (salamander не настроен)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
; Ожидаемый IP при проверке&lt;br /&gt;
: Внешний IP должен быть &amp;#039;&amp;#039;&amp;#039;европейским&amp;#039;&amp;#039;&amp;#039; (&amp;lt;code&amp;gt;148.253.213.5&amp;lt;/code&amp;gt;), а не российским.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Часть 4. Обслуживание серверов =&lt;br /&gt;
&lt;br /&gt;
== 4.1 Просмотр статуса сервисов ==&lt;br /&gt;
&lt;br /&gt;
=== EU ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --no-pager -l status hysteria-eu-hy2test.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== РФ ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --no-pager -l status sing-box-hy2relay-test.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4.2 Просмотр логов ==&lt;br /&gt;
&lt;br /&gt;
=== EU (последние 60 строк) ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
journalctl -u hysteria-eu-hy2test -n 60 --no-pager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== РФ (последние 60 строк) ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
journalctl -u sing-box-hy2relay-test -n 60 --no-pager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Хвост в реальном времени (EU) ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
journalctl -u hysteria-eu-hy2test -f&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4.3 Узнать текущие пароли ==&lt;br /&gt;
&lt;br /&gt;
=== Пароль линка РФ→EU (читать на EU) ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python3 - &amp;lt;&amp;lt;&amp;#039;PY&amp;#039;&lt;br /&gt;
import re&lt;br /&gt;
from pathlib import Path&lt;br /&gt;
text = Path(&amp;quot;/etc/hysteria/server-eu.yaml&amp;quot;).read_text(encoding=&amp;quot;utf-8&amp;quot;)&lt;br /&gt;
m = re.search(r&amp;quot;(?m)^\s*password:\s*&amp;#039;([^&amp;#039;]*)&amp;#039;\s*$&amp;quot;, text)&lt;br /&gt;
print(&amp;quot;EU_PASSWORD:&amp;quot;, m.group(1) if m else &amp;quot;NOT FOUND&amp;quot;)&lt;br /&gt;
PY&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Пароль «клиент→РФ» (читать на РФ) ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python3 - &amp;lt;&amp;lt;&amp;#039;PY&amp;#039;&lt;br /&gt;
import json&lt;br /&gt;
from pathlib import Path&lt;br /&gt;
cfg = json.loads(Path(&amp;quot;/etc/sing-box/config.json&amp;quot;).read_text(encoding=&amp;quot;utf-8&amp;quot;))&lt;br /&gt;
print(&amp;quot;CLIENT_TO_RU_PASSWORD:&amp;quot;, cfg[&amp;quot;inbounds&amp;quot;][0][&amp;quot;users&amp;quot;][0][&amp;quot;password&amp;quot;])&lt;br /&gt;
PY&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Пароль «РФ→EU» (читать на РФ) ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python3 - &amp;lt;&amp;lt;&amp;#039;PY&amp;#039;&lt;br /&gt;
import json&lt;br /&gt;
from pathlib import Path&lt;br /&gt;
cfg = json.loads(Path(&amp;quot;/etc/sing-box/config.json&amp;quot;).read_text(encoding=&amp;quot;utf-8&amp;quot;))&lt;br /&gt;
for ob in cfg[&amp;quot;outbounds&amp;quot;]:&lt;br /&gt;
    if ob.get(&amp;quot;type&amp;quot;) == &amp;quot;hysteria2&amp;quot;:&lt;br /&gt;
        print(&amp;quot;RU_TO_EU_PASSWORD:&amp;quot;, ob[&amp;quot;password&amp;quot;])&lt;br /&gt;
PY&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4.4 Ротация паролей (после отладки — обязательно) ==&lt;br /&gt;
Если пароль засветился в чате или логах:&lt;br /&gt;
&lt;br /&gt;
=== Шаг 1: новый пароль на EU ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
NEW_EU_PW=&amp;quot;$(openssl rand -base64 32 | tr -d &amp;#039;\n&amp;#039;)&amp;quot;&lt;br /&gt;
echo &amp;quot;Новый пароль EU (сохраните):&amp;quot;&lt;br /&gt;
echo &amp;quot;${NEW_EU_PW}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Заменить в конфиге&lt;br /&gt;
python3 - &amp;lt;&amp;lt;PY&lt;br /&gt;
import re&lt;br /&gt;
from pathlib import Path&lt;br /&gt;
p = Path(&amp;quot;/etc/hysteria/server-eu.yaml&amp;quot;)&lt;br /&gt;
text = p.read_text(encoding=&amp;quot;utf-8&amp;quot;)&lt;br /&gt;
text = re.sub(r&amp;quot;(password:\s*&amp;#039;)[^&amp;#039;]*(&amp;#039;)&amp;quot;, r&amp;quot;\g&amp;lt;1&amp;gt;${NEW_EU_PW}\g&amp;lt;2&amp;gt;&amp;quot;, text)&lt;br /&gt;
p.write_text(text, encoding=&amp;quot;utf-8&amp;quot;)&lt;br /&gt;
print(&amp;quot;Обновлено:&amp;quot;, p)&lt;br /&gt;
PY&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;#039;&amp;#039;&amp;#039;Или&amp;#039;&amp;#039;&amp;#039; отредактируйте файл вручную:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nano /etc/hysteria/server-eu.yaml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Шаг 2: перезапустить EU ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl restart hysteria-eu-hy2test.service&lt;br /&gt;
systemctl is-active hysteria-eu-hy2test.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Шаг 3: обновить пароль «РФ→EU» в конфиге РФ ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# На РФ — отредактируйте поле &amp;quot;password&amp;quot; в блоке outbound hy2-eu&lt;br /&gt;
python3 - &amp;lt;&amp;lt;&amp;#039;PY&amp;#039;&lt;br /&gt;
import json&lt;br /&gt;
from pathlib import Path&lt;br /&gt;
&lt;br /&gt;
new_pw = input(&amp;quot;Введите новый пароль EU: &amp;quot;)&lt;br /&gt;
path = Path(&amp;quot;/etc/sing-box/config.json&amp;quot;)&lt;br /&gt;
cfg = json.loads(path.read_text(encoding=&amp;quot;utf-8&amp;quot;))&lt;br /&gt;
for ob in cfg[&amp;quot;outbounds&amp;quot;]:&lt;br /&gt;
    if ob.get(&amp;quot;tag&amp;quot;) == &amp;quot;hy2-eu&amp;quot;:&lt;br /&gt;
        ob[&amp;quot;password&amp;quot;] = new_pw&lt;br /&gt;
        print(f&amp;quot;Обновлён outbound &amp;#039;{ob[&amp;#039;tag&amp;#039;]}&amp;#039;&amp;quot;)&lt;br /&gt;
path.write_text(json.dumps(cfg, indent=2, ensure_ascii=False) + &amp;quot;\n&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;)&lt;br /&gt;
path.chmod(0o600)&lt;br /&gt;
print(&amp;quot;Сохранено:&amp;quot;, path)&lt;br /&gt;
PY&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Шаг 4: перезапустить РФ ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl restart sing-box-hy2relay-test.service&lt;br /&gt;
systemctl is-active sing-box-hy2relay-test.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Шаг 5: обновить URI клиентов ===&lt;br /&gt;
Заново выполнить [[Hysteria 2 каскад#3.1.1 Сгенерировать URI на РФ-VPS|раздел 3.1.1]] и передать новые ссылки на устройства.&lt;br /&gt;
&lt;br /&gt;
== 4.5 Перезапуск после правки конфигов ==&lt;br /&gt;
&lt;br /&gt;
=== EU ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl restart hysteria-eu-hy2test.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== РФ ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl restart sing-box-hy2relay-test.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4.6 Остановка и отключение сервисов (при необходимости) ==&lt;br /&gt;
&lt;br /&gt;
=== EU ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl disable --now hysteria-eu-hy2test.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== РФ ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl disable --now sing-box-hy2relay-test.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4.7 Проверка занятости портов ==&lt;br /&gt;
&lt;br /&gt;
=== Смотреть все UDP-порты ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ss -ulpen&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Конкретный порт EU ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ss -ulpen | grep &amp;#039;:40001&amp;#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Конкретный порт РФ ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ss -ulpen | grep &amp;#039;:40000&amp;#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4.8 Проверка TLS сертификатов ==&lt;br /&gt;
&lt;br /&gt;
=== EU — когда истекает ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
openssl x509 -in /etc/hysteria/tls-eu/eu.crt -noout -dates&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== РФ — когда истекает ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
openssl x509 -in /etc/sing-box/tls-ru/ru.crt -noout -dates&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Самоподписанные сертификаты выдаются на 10 лет. При необходимости перевыпустить — повторить [[Hysteria 2 каскад#1.3 TLS|раздел 1.3]] (EU) или [[Hysteria 2 каскад#2.3 TLS для входа Hy2|2.3]] (РФ), затем перезапустить сервис.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Часть 5. Типичные проблемы =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Симптом&lt;br /&gt;
!Причина&lt;br /&gt;
!Что сделать&lt;br /&gt;
|-&lt;br /&gt;
|Сервис не стартует&lt;br /&gt;
|Занят порт, ошибка в конфиге, нет прав на ключ&lt;br /&gt;
|&amp;lt;code&amp;gt;journalctl -u ИМЯ_СЕРВИСА -n 80&amp;lt;/code&amp;gt;; &amp;lt;code&amp;gt;ss -ulpen&amp;lt;/code&amp;gt;; &amp;lt;code&amp;gt;sing-box check&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;curl&amp;lt;/code&amp;gt; даёт IP РФ вместо EU&lt;br /&gt;
|Маршрут &amp;lt;code&amp;gt;final&amp;lt;/code&amp;gt; не &amp;lt;code&amp;gt;hy2-eu&amp;lt;/code&amp;gt;; EU недоступен с РФ по UDP&lt;br /&gt;
|Проверить &amp;lt;code&amp;gt;route.final&amp;lt;/code&amp;gt; в &amp;lt;code&amp;gt;config.json&amp;lt;/code&amp;gt;; пинг EU-порта вручную&lt;br /&gt;
|-&lt;br /&gt;
|Клиент не подключается&lt;br /&gt;
|Фаервол хостера режет UDP; неверный пароль; неверный SNI&lt;br /&gt;
|Проверить Security Group/Firewall у хостера; проверить пароль командой [[Hysteria 2 каскад#4.3 Узнать текущие пароли|4.3]]&lt;br /&gt;
|-&lt;br /&gt;
|TLS handshake failed&lt;br /&gt;
|Несовпадение SNI с CN/SAN сертификата; &amp;lt;code&amp;gt;insecure&amp;lt;/code&amp;gt; не задан&lt;br /&gt;
|SNI в клиенте должен совпадать с IP, на который выдан серт; или включить &amp;lt;code&amp;gt;insecure=1&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;curl&amp;lt;/code&amp;gt; к GitHub даёт 504&lt;br /&gt;
|Временный сбой GitHub CDN&lt;br /&gt;
|Повторить с &amp;lt;code&amp;gt;--retry 8&amp;lt;/code&amp;gt;; первая попытка часто обрывается, следующая проходит&lt;br /&gt;
|-&lt;br /&gt;
|NekoBox — ошибка при импорте URI&lt;br /&gt;
|Пароль не закодирован (%, /,  +, = в пароле)&lt;br /&gt;
|Использовать Python-генератор URI из [[Hysteria 2 каскад#3.1.1 Сгенерировать URI|раздела 3.1.1]]&lt;br /&gt;
|}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Часть 6. Справочник файлов и сервисов =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Сервер&lt;br /&gt;
!Файл / сервис&lt;br /&gt;
!Назначение&lt;br /&gt;
|-&lt;br /&gt;
|EU&lt;br /&gt;
|&amp;lt;code&amp;gt;/usr/local/bin/hysteria&amp;lt;/code&amp;gt;&lt;br /&gt;
|Бинарь Hysteria v2.8.1&lt;br /&gt;
|-&lt;br /&gt;
|EU&lt;br /&gt;
|&amp;lt;code&amp;gt;/etc/hysteria/server-eu.yaml&amp;lt;/code&amp;gt;&lt;br /&gt;
|Конфиг сервера (порт, TLS, пароль, masquerade)&lt;br /&gt;
|-&lt;br /&gt;
|EU&lt;br /&gt;
|&amp;lt;code&amp;gt;/etc/hysteria/tls-eu/eu.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
|Самоподписанный TLS-сертификат (CN=IP EU)&lt;br /&gt;
|-&lt;br /&gt;
|EU&lt;br /&gt;
|&amp;lt;code&amp;gt;/etc/hysteria/tls-eu/eu.key&amp;lt;/code&amp;gt;&lt;br /&gt;
|Приватный ключ TLS (права 0640)&lt;br /&gt;
|-&lt;br /&gt;
|EU&lt;br /&gt;
|&amp;lt;code&amp;gt;hysteria-eu-hy2test.service&amp;lt;/code&amp;gt;&lt;br /&gt;
|systemd-сервис Hysteria&lt;br /&gt;
|-&lt;br /&gt;
|РФ&lt;br /&gt;
|&amp;lt;code&amp;gt;/usr/local/bin/sing-box&amp;lt;/code&amp;gt;&lt;br /&gt;
|Бинарь sing-box v1.13.8&lt;br /&gt;
|-&lt;br /&gt;
|РФ&lt;br /&gt;
|&amp;lt;code&amp;gt;/usr/local/bin/hysteria&amp;lt;/code&amp;gt;&lt;br /&gt;
|Бинарь Hysteria (только для локальных тестов)&lt;br /&gt;
|-&lt;br /&gt;
|РФ&lt;br /&gt;
|&amp;lt;code&amp;gt;/etc/sing-box/config.json&amp;lt;/code&amp;gt;&lt;br /&gt;
|Конфиг релея (inbound Hy2 + outbound Hy2 на EU)&lt;br /&gt;
|-&lt;br /&gt;
|РФ&lt;br /&gt;
|&amp;lt;code&amp;gt;/etc/sing-box/tls-ru/ru.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
|Самоподписанный TLS-сертификат (CN=IP РФ)&lt;br /&gt;
|-&lt;br /&gt;
|РФ&lt;br /&gt;
|&amp;lt;code&amp;gt;/etc/sing-box/tls-ru/ru.key&amp;lt;/code&amp;gt;&lt;br /&gt;
|Приватный ключ TLS (права 0640)&lt;br /&gt;
|-&lt;br /&gt;
|РФ&lt;br /&gt;
|&amp;lt;code&amp;gt;sing-box-hy2relay-test.service&amp;lt;/code&amp;gt;&lt;br /&gt;
|systemd-сервис sing-box&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Владимир</name></author>
	</entry>
</feed>