<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wiki.ramba-art.ru/index.php?action=history&amp;feed=atom&amp;title=Happ-gateway</id>
	<title>Happ-gateway - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.ramba-art.ru/index.php?action=history&amp;feed=atom&amp;title=Happ-gateway"/>
	<link rel="alternate" type="text/html" href="https://wiki.ramba-art.ru/index.php?title=Happ-gateway&amp;action=history"/>
	<updated>2026-08-28T11:50:34Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.39.2</generator>
	<entry>
		<id>https://wiki.ramba-art.ru/index.php?title=Happ-gateway&amp;diff=118&amp;oldid=prev</id>
		<title>192.168.1.1: Новая страница: «= HAPP Gateway — централизованный прокси-шлюз RAMBA ART =  '''HAPP Gateway''' — отдельный сетевой шлюз в инфраструктуре RAMBA ART, предназначенный для централизованного доступа внутренних сервисов к внешним ресурсам через VLESS/HAPP.  Шлюз используется, в частности, для работы Tel...»</title>
		<link rel="alternate" type="text/html" href="https://wiki.ramba-art.ru/index.php?title=Happ-gateway&amp;diff=118&amp;oldid=prev"/>
		<updated>2026-08-28T08:27:49Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «= HAPP Gateway — централизованный прокси-шлюз RAMBA ART =  &amp;#039;&amp;#039;&amp;#039;HAPP Gateway&amp;#039;&amp;#039;&amp;#039; — отдельный сетевой шлюз в инфраструктуре RAMBA ART, предназначенный для централизованного доступа внутренних сервисов к внешним ресурсам через VLESS/HAPP.  Шлюз используется, в частности, для работы Tel...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= HAPP Gateway — централизованный прокси-шлюз RAMBA ART =&lt;br /&gt;
&lt;br /&gt;
'''HAPP Gateway''' — отдельный сетевой шлюз в инфраструктуре RAMBA ART, предназначенный для централизованного доступа внутренних сервисов к внешним ресурсам через VLESS/HAPP.&lt;br /&gt;
&lt;br /&gt;
Шлюз используется, в частности, для работы Telegram-ботов и сервисов, которым требуется стабильный SOCKS5/HTTP-прокси.&lt;br /&gt;
&lt;br /&gt;
Основная идея заключается в том, что настройки HAPP и VLESS не требуется устанавливать отдельно на каждый сервер или контейнер. В инфраструктуре работает один выделенный LXC-контейнер, предоставляющий прокси остальным узлам локальной сети.&lt;br /&gt;
&lt;br /&gt;
== Общая архитектура ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                         Интернет&lt;br /&gt;
                            │&lt;br /&gt;
                            │ VLESS&lt;br /&gt;
                            ▼&lt;br /&gt;
                    ┌─────────────────┐&lt;br /&gt;
                    │   HAPP Server   │&lt;br /&gt;
                    │  лучший сервер │&lt;br /&gt;
                    └────────┬────────┘&lt;br /&gt;
                             │&lt;br /&gt;
                             │&lt;br /&gt;
                    ┌────────▼────────┐&lt;br /&gt;
                    │  happ-gateway   │&lt;br /&gt;
                    │  LXC CT 502     │&lt;br /&gt;
                    │ 192.168.1.52    │&lt;br /&gt;
                    │                 │&lt;br /&gt;
                    │ HAPP CLI / Xray │&lt;br /&gt;
                    └────────┬────────┘&lt;br /&gt;
                             │&lt;br /&gt;
               ┌─────────────┴─────────────┐&lt;br /&gt;
               │                           │&lt;br /&gt;
               ▼                           ▼&lt;br /&gt;
       SOCKS5 proxy                  HTTP proxy&lt;br /&gt;
    192.168.1.52:11080           192.168.1.52:11081&lt;br /&gt;
               │                           │&lt;br /&gt;
               └─────────────┬─────────────┘&lt;br /&gt;
                             │&lt;br /&gt;
                  локальная сеть RAMBA ART&lt;br /&gt;
                             │&lt;br /&gt;
              ┌──────────────┼──────────────┐&lt;br /&gt;
              ▼              ▼              ▼&lt;br /&gt;
         Telegram Bot    OpenAI API     другие сервисы&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&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;
| CT 502&lt;br /&gt;
|-&lt;br /&gt;
| Hostname&lt;br /&gt;
| &amp;lt;code&amp;gt;happ-gateway&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| IP&lt;br /&gt;
| &amp;lt;code&amp;gt;192.168.1.52&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ОС&lt;br /&gt;
| Debian&lt;br /&gt;
|-&lt;br /&gt;
| SOCKS5 для LAN&lt;br /&gt;
| &amp;lt;code&amp;gt;192.168.1.52:11080&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| HTTP Proxy для LAN&lt;br /&gt;
| &amp;lt;code&amp;gt;192.168.1.52:11081&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Внутренний SOCKS5&lt;br /&gt;
| &amp;lt;code&amp;gt;127.0.0.1:10808&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Внутренний HTTP Proxy&lt;br /&gt;
| &amp;lt;code&amp;gt;127.0.0.1:10809&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| HAPP subscription&lt;br /&gt;
| &amp;lt;code&amp;gt;ramba&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Часовой пояс&lt;br /&gt;
| &amp;lt;code&amp;gt;Europe/Moscow&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== HAPP CLI ==&lt;br /&gt;
&lt;br /&gt;
Для управления подпиской используется консольный клиент HAPP.&lt;br /&gt;
&lt;br /&gt;
Конфигурация хранится в:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/root/.config/happ-cli&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Просмотр доступных серверов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
happ --home /root/.config/happ-cli list&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обновление подписки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
happ --home /root/.config/happ-cli sub update ramba&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Запуск конкретного сервера в режиме локального proxy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
happ --home /root/.config/happ-cli \&lt;br /&gt;
  connect &amp;quot;Швеция&amp;quot; \&lt;br /&gt;
  --mode proxy \&lt;br /&gt;
  --socks 10808 \&lt;br /&gt;
  --http 10809&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Важно: сервер выбирается '''по текстовому тегу страны, а не по его номеру'''.&lt;br /&gt;
&lt;br /&gt;
Это было сделано после обнаружения особенности HAPP: после обновления подписки порядковые номера серверов могут изменяться.&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
до обновления:&lt;br /&gt;
&lt;br /&gt;
#32 → Нидерланды&lt;br /&gt;
&lt;br /&gt;
после обновления:&lt;br /&gt;
&lt;br /&gt;
#32 → Финляндия&lt;br /&gt;
#33 → Нидерланды&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поэтому конфигурация вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
connect 32&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
небезопасна.&lt;br /&gt;
&lt;br /&gt;
Используется:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
connect &amp;quot;Швеция&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом изменение порядка серверов в подписке не приводит к подключению к другой стране.&lt;br /&gt;
&lt;br /&gt;
== Основной systemd-сервис ==&lt;br /&gt;
&lt;br /&gt;
HAPP запускается автоматически через systemd.&lt;br /&gt;
&lt;br /&gt;
Файл:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/systemd/system/happ-gateway.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Конфигурация:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=HAPP VLESS Proxy Gateway&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;
User=root&lt;br /&gt;
Environment=HOME=/root&lt;br /&gt;
ExecStart=/usr/local/bin/happ --home /root/.config/happ-cli connect &amp;quot;Швеция&amp;quot; --mode proxy --socks 10808 --http 10809&lt;br /&gt;
Restart=always&lt;br /&gt;
RestartSec=5&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&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 status happ-gateway.service&lt;br /&gt;
systemctl restart happ-gateway.service&lt;br /&gt;
systemctl stop happ-gateway.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Просмотр журнала:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
journalctl -u happ-gateway.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Публикация proxy в локальную сеть ==&lt;br /&gt;
&lt;br /&gt;
Сам HAPP создаёт локальные proxy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SOCKS5: 127.0.0.1:10808&lt;br /&gt;
HTTP:   127.0.0.1:10809&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для использования другими машинами инфраструктуры proxy публикуются в LAN.&lt;br /&gt;
&lt;br /&gt;
В рабочей конфигурации используются:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SOCKS5:&lt;br /&gt;
192.168.1.52:11080&lt;br /&gt;
&lt;br /&gt;
HTTP:&lt;br /&gt;
192.168.1.52:11081&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это позволяет другим контейнерам использовать HAPP Gateway без установки HAPP/Xray на каждом из них.&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
curl --proxy socks5h://192.168.1.52:11080 \&lt;br /&gt;
  https://api.ipify.org&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметр &amp;lt;code&amp;gt;socks5h&amp;lt;/code&amp;gt; важен: DNS-разрешение выполняется через proxy, а не локальной машиной.&lt;br /&gt;
&lt;br /&gt;
== Проверка внешнего IP ==&lt;br /&gt;
&lt;br /&gt;
Непосредственно на HAPP Gateway:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
curl -sS --max-time 15 \&lt;br /&gt;
  --proxy socks5h://127.0.0.1:10808 \&lt;br /&gt;
  https://api.ipify.org&lt;br /&gt;
echo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Во время настройки при использовании сервера Швеции был получен внешний IP:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
87.251.85.130&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Внешний IP не является постоянным и может измениться при переключении HAPP-сервера.&lt;br /&gt;
&lt;br /&gt;
== Автоматический выбор лучшего сервера ==&lt;br /&gt;
&lt;br /&gt;
Для повышения стабильности был реализован собственный механизм автоматического тестирования HAPP-серверов.&lt;br /&gt;
&lt;br /&gt;
Скрипт:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/usr/local/sbin/happ-autoselect.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Он периодически проверяет доступные серверы и выбирает наиболее быстрый рабочий сервер.&lt;br /&gt;
&lt;br /&gt;
=== Почему не используется обычный ping ===&lt;br /&gt;
&lt;br /&gt;
ICMP ping не всегда отражает реальное качество proxy-соединения.&lt;br /&gt;
&lt;br /&gt;
Для Telegram-ботов значительно важнее фактическое время выполнения HTTPS-запроса через:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
клиент&lt;br /&gt;
  ↓&lt;br /&gt;
HAPP&lt;br /&gt;
  ↓&lt;br /&gt;
VLESS&lt;br /&gt;
  ↓&lt;br /&gt;
удалённый сервер&lt;br /&gt;
  ↓&lt;br /&gt;
Telegram API&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поэтому каждый сервер тестируется реальным HTTPS-запросом через временный SOCKS5 proxy.&lt;br /&gt;
&lt;br /&gt;
Тестовая цель:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
https://api.telegram.org&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Алгоритм проверки ===&lt;br /&gt;
&lt;br /&gt;
Для каждой страны выполняются три запроса.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HAPP candidate&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
127.0.0.1:12080&lt;br /&gt;
      │&lt;br /&gt;
      │ SOCKS5&lt;br /&gt;
      ▼&lt;br /&gt;
api.telegram.org&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Из трёх результатов рассчитывается '''медиана времени ответа'''.&lt;br /&gt;
&lt;br /&gt;
Использование медианы позволяет уменьшить влияние единичного скачка задержки.&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.19 s&lt;br /&gt;
0.21 s&lt;br /&gt;
0.85 s&lt;br /&gt;
&lt;br /&gt;
median = 0.21 s&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Сервер считается рабочим, если успешно выполнено не менее двух из трёх запросов.&lt;br /&gt;
&lt;br /&gt;
=== Серверы с ошибками ===&lt;br /&gt;
&lt;br /&gt;
Если сервер не обеспечивает стабильное соединение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
test 1: TIMEOUT/ERROR&lt;br /&gt;
test 2: TIMEOUT/ERROR&lt;br /&gt;
test 3: TIMEOUT/ERROR&lt;br /&gt;
&lt;br /&gt;
REJECTED&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
он исключается из текущего выбора.&lt;br /&gt;
&lt;br /&gt;
При тестировании, например, некоторые серверы Польши, Эстонии, Франции и Сингапура не обеспечивали соединение с Telegram API и автоматически отбрасывались.&lt;br /&gt;
&lt;br /&gt;
Это не означает, что сервер навсегда исключён: при следующей проверке он тестируется снова.&lt;br /&gt;
&lt;br /&gt;
== Защита от постоянного переключения серверов ==&lt;br /&gt;
&lt;br /&gt;
Выбирать сервер только по минимальной задержке недостаточно.&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
текущий сервер: 220 ms&lt;br /&gt;
другой сервер:  215 ms&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переключение ради 5 ms не имеет практического смысла и приводит к ненужным перезапускам HAPP.&lt;br /&gt;
&lt;br /&gt;
Поэтому используется порог:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
15 %&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Новый сервер выбирается только если он быстрее текущего как минимум на 15%.&lt;br /&gt;
&lt;br /&gt;
Логика:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
лучший сервер&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
быстрее текущего ≥ 15% ?&lt;br /&gt;
      │&lt;br /&gt;
   ┌──┴──┐&lt;br /&gt;
   │     │&lt;br /&gt;
  НЕТ    ДА&lt;br /&gt;
   │     │&lt;br /&gt;
   ▼     ▼&lt;br /&gt;
ничего  изменить&lt;br /&gt;
не      сервер&lt;br /&gt;
делать     │&lt;br /&gt;
           ▼&lt;br /&gt;
      restart HAPP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Результаты тестирования ==&lt;br /&gt;
&lt;br /&gt;
Во время настройки были получены, например, следующие значения:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Сервер&lt;br /&gt;
! Медиана&lt;br /&gt;
! Результат&lt;br /&gt;
|-&lt;br /&gt;
| Швеция&lt;br /&gt;
| ~0.20–0.22 s&lt;br /&gt;
| '''Лучший'''&lt;br /&gt;
|-&lt;br /&gt;
| Финляндия&lt;br /&gt;
| ~0.24–0.25 s&lt;br /&gt;
| Работает&lt;br /&gt;
|-&lt;br /&gt;
| Нидерланды&lt;br /&gt;
| ~0.25–0.28 s&lt;br /&gt;
| Работает&lt;br /&gt;
|-&lt;br /&gt;
| Литва&lt;br /&gt;
| ~0.27–0.29 s&lt;br /&gt;
| Работает&lt;br /&gt;
|-&lt;br /&gt;
| Казахстан&lt;br /&gt;
| ~0.64–0.71 s&lt;br /&gt;
| Работает&lt;br /&gt;
|-&lt;br /&gt;
| Канада&lt;br /&gt;
| ~0.83–0.84 s&lt;br /&gt;
| Работает&lt;br /&gt;
|-&lt;br /&gt;
| Дубай&lt;br /&gt;
| ~0.95–0.96 s&lt;br /&gt;
| Работает&lt;br /&gt;
|-&lt;br /&gt;
| Бразилия&lt;br /&gt;
| ~1.50 s&lt;br /&gt;
| Работает&lt;br /&gt;
|-&lt;br /&gt;
| Япония&lt;br /&gt;
| ~1.65 s&lt;br /&gt;
| Работает&lt;br /&gt;
|-&lt;br /&gt;
| Германия&lt;br /&gt;
| ~1.5–2.1 s&lt;br /&gt;
| Работает нестабильно&lt;br /&gt;
|-&lt;br /&gt;
| США&lt;br /&gt;
| ~2.4 s&lt;br /&gt;
| Высокая задержка&lt;br /&gt;
|-&lt;br /&gt;
| Польша&lt;br /&gt;
| TIMEOUT&lt;br /&gt;
| Отклонён&lt;br /&gt;
|-&lt;br /&gt;
| Эстония&lt;br /&gt;
| TIMEOUT&lt;br /&gt;
| Отклонён&lt;br /&gt;
|-&lt;br /&gt;
| Франция&lt;br /&gt;
| TIMEOUT&lt;br /&gt;
| Отклонён&lt;br /&gt;
|-&lt;br /&gt;
| Сингапур&lt;br /&gt;
| TIMEOUT&lt;br /&gt;
| Отклонён&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;
swsq2.aquafinas.org:443&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== systemd timer автоматической проверки ==&lt;br /&gt;
&lt;br /&gt;
Для автоматического запуска используется:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/systemd/system/happ-autoselect.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=HAPP automatic best server selector&lt;br /&gt;
After=network-online.target happ-gateway.service&lt;br /&gt;
Wants=network-online.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/usr/local/sbin/happ-autoselect.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таймер:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/systemd/system/happ-autoselect.timer&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Benchmark HAPP servers every hour&lt;br /&gt;
&lt;br /&gt;
[Timer]&lt;br /&gt;
OnBootSec=5min&lt;br /&gt;
OnUnitActiveSec=1h&lt;br /&gt;
RandomizedDelaySec=2min&lt;br /&gt;
Persistent=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=timers.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&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 daemon-reload&lt;br /&gt;
systemctl enable --now happ-autoselect.timer&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&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 status happ-autoselect.timer --no-pager&lt;br /&gt;
systemctl list-timers --all | grep happ&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом benchmark выполняется приблизительно один раз в час.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;RandomizedDelaySec=2min&amp;lt;/code&amp;gt; добавляет небольшой случайный сдвиг времени запуска.&lt;br /&gt;
&lt;br /&gt;
== Важное решение: не обновлять подписку каждый час ==&lt;br /&gt;
&lt;br /&gt;
Изначально &amp;lt;code&amp;gt;happ-autoselect.sh&amp;lt;/code&amp;gt; перед каждым benchmark выполнял:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
happ --home /root/.config/happ-cli sub update ramba&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Во время тестирования обновление подписки один раз завершилось ошибкой.&lt;br /&gt;
&lt;br /&gt;
В результате список серверов временно не был доступен для скрипта:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WARNING: subscription update failed&lt;br /&gt;
Skipping США: not found&lt;br /&gt;
Skipping Литва: not found&lt;br /&gt;
...&lt;br /&gt;
ERROR: no working servers found&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Основной HAPP Gateway при этом продолжил работать на текущем сервере.&lt;br /&gt;
&lt;br /&gt;
После анализа было принято решение '''разделить две независимые операции''':&lt;br /&gt;
&lt;br /&gt;
# обновление подписки;&lt;br /&gt;
# benchmark серверов.&lt;br /&gt;
&lt;br /&gt;
Часовой benchmark больше не выполняет &amp;lt;code&amp;gt;sub update&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Он работает с уже имеющейся локальной подпиской.&lt;br /&gt;
&lt;br /&gt;
Это делает автоматический выбор сервера безопаснее: временная недоступность сервера подписки не влияет на уже работающий proxy.&lt;br /&gt;
&lt;br /&gt;
== Отказоустойчивость ==&lt;br /&gt;
&lt;br /&gt;
Система построена по принципу:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
не удалось провести benchmark&lt;br /&gt;
             │&lt;br /&gt;
             ▼&lt;br /&gt;
     НЕ менять сервер&lt;br /&gt;
             │&lt;br /&gt;
             ▼&lt;br /&gt;
оставить работающий HAPP&lt;br /&gt;
на текущем сервере&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
То есть ошибка системы мониторинга не должна ломать рабочее соединение.&lt;br /&gt;
&lt;br /&gt;
Это особенно важно для сервисов, которые постоянно используют шлюз.&lt;br /&gt;
&lt;br /&gt;
== Просмотр логов автоматического выбора ==&lt;br /&gt;
&lt;br /&gt;
Последние события:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
journalctl -t happ-autoselect -n 100 --no-pager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Наблюдение в реальном времени:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
journalctl -t happ-autoselect -f&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Типичный успешный результат:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Best server: Швеция (0.217001s)&lt;br /&gt;
Current Швеция: 0.217001s&lt;br /&gt;
Improvement: 0.0%&lt;br /&gt;
Already using best server: Швеция&lt;br /&gt;
Keeping current server: Швеция&lt;br /&gt;
=== HAPP benchmark finished ===&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если другой сервер значительно быстрее:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Best server: Швеция (0.202160s)&lt;br /&gt;
Improvement: 18.4%&lt;br /&gt;
Switching ...&lt;br /&gt;
Switch successful&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка часового пояса ==&lt;br /&gt;
&lt;br /&gt;
Первоначально контейнер использовал UTC:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Local time: 07:50 UTC&lt;br /&gt;
Time zone: Etc/UTC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для удобства администрирования установлен московский часовой пояс:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
timedatectl set-timezone Europe/Moscow&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
timedatectl&lt;br /&gt;
date&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После настройки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Local time: 10:50 MSK&lt;br /&gt;
Universal time: 07:50 UTC&lt;br /&gt;
Time zone: Europe/Moscow (MSK, +0300)&lt;br /&gt;
System clock synchronized: yes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После изменения timezone systemd автоматически начал отображать время таймеров и журналов в MSK.&lt;br /&gt;
&lt;br /&gt;
== Использование HAPP Gateway приложениями ==&lt;br /&gt;
&lt;br /&gt;
Для приложений в локальной сети рекомендуется использовать:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SOCKS5:&lt;br /&gt;
&lt;br /&gt;
socks5://192.168.1.52:11080&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
или при использовании curl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
socks5h://192.168.1.52:11080&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
HTTP Proxy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://192.168.1.52:11081&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом приложение не знает ничего о VLESS, Xray, подписках и конкретном внешнем сервере.&lt;br /&gt;
&lt;br /&gt;
Для него HAPP Gateway является обычным proxy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Приложение&lt;br /&gt;
     │&lt;br /&gt;
     │ SOCKS5&lt;br /&gt;
     ▼&lt;br /&gt;
192.168.1.52:11080&lt;br /&gt;
     │&lt;br /&gt;
     ▼&lt;br /&gt;
HAPP Gateway&lt;br /&gt;
     │&lt;br /&gt;
     │ VLESS&lt;br /&gt;
     ▼&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;
== Итоговая схема ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                    RAMBA ART LAN&lt;br /&gt;
                         │&lt;br /&gt;
       ┌─────────────────┼─────────────────┐&lt;br /&gt;
       │                 │                 │&lt;br /&gt;
       ▼                 ▼                 ▼&lt;br /&gt;
 Telegram Bot       Kuzya 2.0        другие сервисы&lt;br /&gt;
       │                 │                 │&lt;br /&gt;
       └─────────────────┼─────────────────┘&lt;br /&gt;
                         │&lt;br /&gt;
                         │ SOCKS5&lt;br /&gt;
                         ▼&lt;br /&gt;
                 192.168.1.52:11080&lt;br /&gt;
                         │&lt;br /&gt;
                ┌────────▼────────┐&lt;br /&gt;
                │  HAPP Gateway   │&lt;br /&gt;
                │     CT 502      │&lt;br /&gt;
                │                 │&lt;br /&gt;
                │ HAPP CLI + Xray │&lt;br /&gt;
                └────────┬────────┘&lt;br /&gt;
                         │&lt;br /&gt;
                         │ VLESS&lt;br /&gt;
                         ▼&lt;br /&gt;
                 выбранный сервер&lt;br /&gt;
                         │&lt;br /&gt;
                         ▼&lt;br /&gt;
                      Internet&lt;br /&gt;
&lt;br /&gt;
Каждый час:&lt;br /&gt;
&lt;br /&gt;
happ-autoselect.timer&lt;br /&gt;
          │&lt;br /&gt;
          ▼&lt;br /&gt;
happ-autoselect.sh&lt;br /&gt;
          │&lt;br /&gt;
          ▼&lt;br /&gt;
проверка серверов&lt;br /&gt;
через Telegram HTTPS&lt;br /&gt;
          │&lt;br /&gt;
          ▼&lt;br /&gt;
расчёт median&lt;br /&gt;
          │&lt;br /&gt;
          ▼&lt;br /&gt;
лучший быстрее ≥15% ?&lt;br /&gt;
       ┌──┴───┐&lt;br /&gt;
       │      │&lt;br /&gt;
      НЕТ     ДА&lt;br /&gt;
       │      │&lt;br /&gt;
       ▼      ▼&lt;br /&gt;
 оставить   изменить&lt;br /&gt;
 текущий    сервер&lt;br /&gt;
             │&lt;br /&gt;
             ▼&lt;br /&gt;
       restart HAPP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Текущее состояние ==&lt;br /&gt;
&lt;br /&gt;
На момент завершения настройки:&lt;br /&gt;
&lt;br /&gt;
* HAPP Gateway работает в отдельном LXC-контейнере;&lt;br /&gt;
* SOCKS5 и HTTP proxy доступны другим узлам LAN;&lt;br /&gt;
* основной HAPP управляется через systemd;&lt;br /&gt;
* сервер задаётся по стабильному текстовому тегу страны;&lt;br /&gt;
* реализован автоматический benchmark серверов;&lt;br /&gt;
* benchmark выполняется примерно раз в час;&lt;br /&gt;
* проверяется реальная доступность Telegram API через proxy;&lt;br /&gt;
* используется медиана трёх измерений;&lt;br /&gt;
* неработающие серверы автоматически отбрасываются;&lt;br /&gt;
* переключение выполняется только при выигрыше не менее 15%;&lt;br /&gt;
* ошибка benchmark не отключает рабочий proxy;&lt;br /&gt;
* обновление HAPP-подписки отделено от механизма автоматического выбора;&lt;br /&gt;
* системное время контейнера отображается в MSK;&lt;br /&gt;
* HAPP Gateway готов для использования Telegram-ботами и другими сервисами RAMBA ART.&lt;br /&gt;
&lt;br /&gt;
[[Категория:RAMBA ART]]&lt;br /&gt;
[[Категория:Инфраструктура]]&lt;br /&gt;
[[Категория:Linux]]&lt;br /&gt;
[[Категория:Proxmox]]&lt;br /&gt;
[[Категория:Сеть]]&lt;/div&gt;</summary>
		<author><name>192.168.1.1</name></author>
	</entry>
</feed>