<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>@noisycake</title><generator>teletype.in</generator><description><![CDATA[@noisycake]]></description><image><url>https://img3.teletype.in/files/a9/b7/a9b7ce43-7c8b-4ae4-8dcd-872a68910f60.png</url><title>@noisycake</title><link>https://teletype.in/@noisycake</link></image><link>https://teletype.in/@noisycake?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=noisycake</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/noisycake?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/noisycake?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Thu, 14 May 2026 16:26:52 GMT</pubDate><lastBuildDate>Thu, 14 May 2026 16:26:52 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@noisycake/3x-iu_warp</guid><link>https://teletype.in/@noisycake/3x-iu_warp?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=noisycake</link><comments>https://teletype.in/@noisycake/3x-iu_warp?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=noisycake#comments</comments><dc:creator>noisycake</dc:creator><title>WARP в 3X-UI</title><pubDate>Tue, 04 Mar 2025 14:50:47 GMT</pubDate><media:content medium="image" url="https://img2.teletype.in/files/57/74/577497e4-0f67-446c-b7ac-09a326f5d532.png"></media:content><description><![CDATA[<img src="https://img1.teletype.in/files/43/ee/43eec58c-0cba-43c1-9dfe-b85d4a906a74.png"></img>Настройка WARP для работы с 3x-ui]]></description><content:encoded><![CDATA[
  <figure id="CISz" class="m_column">
    <img src="https://img1.teletype.in/files/43/ee/43eec58c-0cba-43c1-9dfe-b85d4a906a74.png" width="1803" />
  </figure>
  <p id="PCR3">Всем привет! Сегодня обсудим, как активировать WARP в 3x-ui и для чего это может понадобиться. Начнём с небольшой теории...</p>
  <hr />
  <h4 id="Контакты-и-не-только">Контакты и не только</h4>
  <p id="6mm7">Автор: <a href="https://t.me/noisycake" target="_blank">https://t.me/noisycake</a></p>
  <p id="ceg0"><strong>Ткг</strong>: <a href="https://t.me/hfk_blog" target="_blank">https://t.me/hfk_blog</a></p>
  <p id="hBRQ"><strong>Гайд по установке 3x-ui:</strong> <a href="https://noisycake.ru/articles/vpn_server/" target="_blank">https://noisycake.ru/articles/vpn_server/</a></p>
  <hr />
  <h2 id="sqqI">Понятия</h2>
  <p id="wUqz">WARP — бесплатный VPN-сервис от Cloudflare на основе протокола WireGuard. Он работает вкупе с 1.1.1.1 от той же компании.</p>
  <section style="background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="wI3o" data-align="right">1.1.1.1 — сеть из множества DNS-серверов по всей планете. Они сопоставляют доменные имена сайтов с IP-адресами, на которых эти сайты расположены, чтобы человек мог вводить удобочитаемые буквы вместо октет. Существуют и другие сети DNS, например, от Google (8.8.8.8) или Quad9 (9.9.9.9)</p>
  </section>
  <hr />
  <h2 id="xQ1X">Для чего он нужен?</h2>
  <p id="daJK">Давайте детальнее взглянем, для чего WARP нужен именно нам:</p>
  <ol id="zydF">
    <li id="sxCJ">Самое главное: чтобы спокойно посещать .ру ресурсы. В настоящее время системы цензуры умеют анализировать характер трафика, поэтому двойные пересечения границы за доли секунды покажутся подозрительными, из-за чего IP-адрес прокси может быть помещён в blacklist провайдера. В РФ (насколько я знаю) подобных прецедентов ещё не было, но в один прекрасный день РКН могут &quot;апгрейднуться&quot;, и тогда будет совсем не весело;</li>
    <li id="Izpv">Если какой-то зарубежный сайт не пускает с IP вашего сервера (привет, Reddit), можно попробовать зайти на него через WARP;</li>
    <li id="Niks">Снижается риск получить капчу Cloudflare.</li>
  </ol>
  <p id="Bfdw">У вас мог возникнуть резонный вопрос — почему бы не убрать лишнее звено в виде 3x-ui и не использовать WARP напрямую? Ответ довольно прост: в РФ этот сервис заблокирован. </p>
  <hr />
  <h2 id="mGKA">Установка WARP</h2>
  <p id="SFSd">Вообще в панели уже встроен WARP, и его можно активировать в пару кликов, но на некоторых серверах он тупо не заводится. Тем не менее, хотя бы для ознакомления рассмотрим и этот способ.</p>
  <h3 id="yGSW">Вариант 1</h3>
  <p id="NGrw">Открываем 3x-ui в браузере и сразу идём в настройки Xray -&gt; Базовый шаблон.</p>
  <figure id="E3v4" class="m_retina">
    <img src="https://img1.teletype.in/files/81/1c/811cefbd-a1c1-4a00-910c-abc0502f7444.png" width="841.5" />
  </figure>
  <p id="crpi">Нажимаем на зелёную кнопку WARP -&gt; Создать -&gt; Добавить исходящий.</p>
  <figure id="UCap" class="m_column">
    <img src="https://img1.teletype.in/files/01/dc/01dc7253-e908-49d2-9041-e007c1405da1.png" width="531" />
  </figure>
  <p id="16zD">WARP включён, осталось настроить правила маршрутизации. Для этого переходим в соответствующий пункт. </p>
  <p id="GTeK">Как видим, каждая строка отвечает за определённое правило, например, в третьей указана блокировка (исходящий — blocked) протокола BitTorrent, чтобы не нагружать сеть торрентами.  </p>
  <figure id="sfIm" class="m_custom">
    <img src="https://img3.teletype.in/files/e8/46/e8468231-1978-45ce-bbae-44b7e33ab0cd.png" width="925.9999999999999" />
  </figure>
  <p id="aT9U">Нам же нужно добавить два правила, чтобы все соединения с РФ сайтами проходили через WARP. Для этого нажимаем &quot;Добавить правило&quot;.</p>
  <p id="kcLr">1. Пишем следующее в строке &quot;IP&quot;: <code>geoip:ru</code>, в качестве Outbound Tag указываем &quot;warp&quot;. Жмём на зелёную кнопку.</p>
  <figure id="9KLs" class="m_original">
    <img src="https://img4.teletype.in/files/3b/4c/3b4c3d39-12df-4012-9faf-9555a4109130.png" width="532" />
  </figure>
  <p id="Lz10">2. В качестве второго правила будем указывать домены. В поле &quot;Domains&quot; пишем: <code>geosite:category-ru,domain:livejournal.com,domain:icq.com</code>, Outbound Tag — тот же &quot;warp&quot;.</p>
  <figure id="ORPl" class="m_column">
    <img src="https://img2.teletype.in/files/58/61/5861e8ba-f6ec-4501-849f-95c9eb3b8363.png" width="534" />
  </figure>
  <section style="background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="hnlG"><strong>geoip, geosite</strong> и т.п. — обновляемые списки IP-адресов и доменов. По тегам можно понять, какие данные эти списки содержат, например geoip:ru состоит из пула российских айпишников.</p>
  </section>
  <p id="m4Ld">Не забываем сохранить настройки и перезапустить Xray. Теперь можно обновить подписку...</p>
  <p id="XKNU">И вроде как готово и должно работать, но я проверил на трёх серверах, и везде какие-то проблемы. Либо на .ру сайты вообще не заходит, будто я поставил блокировку, либо заходит напрямую без WARP. Поэтому рассмотрим более стабильный способ.</p>
  <section style="background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="ECyW">Для работы WARP в подключении также нужно включить Sniffing (настройка в нижней части раздела) — отметьте все галочки, но не активируйте &quot;Metadata Only&quot; и &quot;Route Only&quot;</p>
  </section>
  <h3 id="p4Iz">Вариант 2</h3>
  <p id="Bzvt">Для начала уберём нынешнюю конфигурацию WARP (если выполняли предыдущий пункт). В тех же настройках Xray выбираем Исходящие -&gt; WARP -&gt; Удалить.</p>
  <figure id="8ptm" class="m_column">
    <img src="https://img3.teletype.in/files/ae/13/ae13282b-a69a-4dbc-be5b-ad7f49d3c507.png" width="533" />
  </figure>
  <p id="Lp6I">Поскольку предыдущий способ не сработал, запустим WARP отдельно с помощью скрипта и изменим конфиг Xray так, чтобы соединения с .ру сайтами проксировались через этот самостоятельный процесс. В общем, настроим <a href="https://developers.cloudflare.com/warp-client/warp-modes/#warp-via-local-proxy" target="_blank">WARP как локальный SOCKS5-прокси</a>.</p>
  <p id="YyPB">Переходим в терминал. Выберем себе свободный порт в пределах [1000, 65535]. </p>
  <section style="background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="Hhp9">Напомню, что проверить занятые порты можно командой <code>netstat -tulpn | grep LISTEN</code></p>
  </section>
  <p id="9eQF">Вставляем в консоль:</p>
  <p id="Jl58"><code>cd &amp;&amp; bash &lt;(curl -fsSL https://gitlab.com/fscarmen/warp/-/raw/main/menu.sh) w</code></p>
  <p id="ODCp">Далее идёт типичный процесс установки. Выбираем язык, запускаем скрипт</p>
  <figure id="jTS0" class="m_column">
    <img src="https://img4.teletype.in/files/30/69/30695b90-d8a1-4591-8384-e37419447b29.png" width="732" />
  </figure>
  <p id="lZYP">Пишем порт. По умолчанию 40000. Далее спрашивают, есть ли у нас платная подписка WARP+. Если у вас есть ключ лицензии, можете выбрать второй пункт, в ином случае выбирайте первый.</p>
  <figure id="6vdN" class="m_column">
    <img src="https://img3.teletype.in/files/29/73/297378f6-697d-4d66-b997-5cf4b08a5757.png" width="646" />
  </figure>
  <p id="t049">По окончании процесса видим нечто вроде &quot;Congratulations! Wireproxy is working.&quot;</p>
  <p id="sVo9">Возвращаемся в 3x-ui и идём в Настройки Xray -&gt; Расширенный шаблон. Перед нами появится шаблон конфигурации Xray, представленный в формате json. Требуется изменить outbounds, поэтому переходим в &quot;Исходящие&quot;.</p>
  <figure id="Z4ys" class="m_column">
    <img src="https://img1.teletype.in/files/81/8e/818ed528-dc94-44ac-8458-295c54f64afa.png" width="559" />
  </figure>
  <p id="zAhS">После последней ФИГУРНОЙ скобки ставим запятую -&gt; Enter. Вставляем следующий блок конфига (если выбирали другой порт, впишите его вместо 40000):</p>
  <p id="CiHQ"><code>{<br />  &quot;tag&quot;: &quot;warp&quot;,<br />  &quot;protocol&quot;: &quot;socks&quot;,<br />  &quot;settings&quot;: {<br />    &quot;servers&quot;: [<br />      {<br />        &quot;address&quot;: &quot;127.0.0.1&quot;,<br />        &quot;port&quot;: 40000<br />      }<br />    ]<br />  }<br />}</code></p>
  <figure id="iqFn" class="m_column">
    <img src="https://img4.teletype.in/files/ff/23/ff23e462-4d72-4e0e-b35d-a21fc90b2c6c.png" width="512" />
  </figure>
  <p id="dmzw">Сохраняем настройки и перезапускаем ядро. </p>
  <p id="TUYM">Так как правила маршрутизации мы не удаляли, они снова отобразились в панели. Осталось проверить работоспособность WARP. </p>
  <figure id="uuKe" class="m_custom">
    <img src="https://img1.teletype.in/files/cd/40/cd4074ef-d2cb-418d-a9ed-b2ddaa4f1efa.png" width="1076" />
  </figure>
  <p id="tA1T">Как видим, в качестве провайдера указан Cloudflare, всё работает!</p>
  <p id="jKhK">А если нет, попробуйте обновить подключение / перезапустить панель.</p>
  <hr />
  <h2 id="mzW3">Схемы взаимодействий сервисов</h2>
  <p id="NlUs">Для лучшего понимания того, как это всё работает, предлагаю взглянуть на упрощённые схемы.</p>
  <p id="3cL5">1. Установлен WARP с фильтрами типа geoip:ru, маршрутизация в клиенте не настроена:</p>
  <ul id="cqUj">
    <li id="rm4b">Если ресурс хостится в России или имеет доменные зоны .ru, соединение пройдёт через WARP, иначе — напрямую через сервер.</li>
  </ul>
  <figure id="FfKQ" class="m_custom" data-caption-align="center">
    <img src="https://img2.teletype.in/files/9c/68/9c684fb0-aa6e-477d-bb43-6293734dfab2.png" width="810.8902677988242" />
    <figcaption>3x-ui + WARP</figcaption>
  </figure>
  <p id="sPoc">2. Установлен WARP с фильтрами типа geoip:ru, в клиенте настроены фильтры на запрещённые сайты:</p>
  <ul id="mgjO">
    <li id="sC84">Сначала клиент проверяет, заблокирован ли ресурс в России. Если нет — соединение идёт напрямую без участия прокси-сервера, иначе — через VPS;</li>
    <li id="Un3E">Далее, если запрос дошёл до сервера, аналогично предыдущему варианту, проверяется зона хостинга ресурса и его доменная зона.</li>
  </ul>
  <figure id="F68P" class="m_custom" data-caption-align="center">
    <img src="https://img3.teletype.in/files/e8/15/e815acee-f7ba-4343-b84e-a01b5b1c19d7.png" width="808" />
    <figcaption>3x-ui + WARP + Client routing</figcaption>
  </figure>
  <p id="8QxZ">3. Установлен WARP с фильтрами типа geoip:ru, в клиенте настроены фильтры типа geoip:ru:</p>
  <ul id="Qryi">
    <li id="CdBx">Сначала клиент проверяет, хостится ли ресурс в России. Если да — соединение идёт напрямую без участия прокси-сервера, иначе — через VPS;</li>
    <li id="gIXd">Далее, если запрос дошёл до сервера, аналогично первому варианту, проверяется зона хостинга ресурса и его доменная зона.</li>
  </ul>
  <section style="background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="wGRv">Казалось бы, зачем нужны два одинаковых фильтра на разных уровнях? Действительно, в контексте одного соединения это не имеет смысла. Но если нашим прокси будет пользоваться несколько людей, мы не сможем контролировать настройки их клиентов (в том числе фильтры), поэтому, если есть нужда в маршрутизации, стоит делать её непосредственно на самом сервере.</p>
  </section>
  <figure id="3K6z" class="m_custom" data-caption-align="center">
    <img src="https://img4.teletype.in/files/3a/11/3a1107a7-7824-4dfb-9af7-7b09169237f6.png" width="811" />
    <figcaption>3x-ui + WARP + Client routing</figcaption>
  </figure>
  <hr />
  <h2 id="LYhC">The end</h2>
  <p id="5L6C">Очередной мини-гайд подошёл к концу. Надеюсь, было интересно и полезно :)</p>
  <p id="85p9">Всем до скорого, и спасибо, что читаете! 😀</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@noisycake/3x-ui_subscripton_aggregation</guid><link>https://teletype.in/@noisycake/3x-ui_subscripton_aggregation?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=noisycake</link><comments>https://teletype.in/@noisycake/3x-ui_subscripton_aggregation?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=noisycake#comments</comments><dc:creator>noisycake</dc:creator><title>Агрегация подписок 3X-UI</title><pubDate>Fri, 21 Feb 2025 15:25:32 GMT</pubDate><category>3x-ui</category><description><![CDATA[Гайд о том, как объединить несколько подписок 3x-ui в одну]]></description><content:encoded><![CDATA[
  <p id="6Ob7"><strong>Привет, Teletype!</strong></p>
  <p id="b7Vh">В первой моей публикации обсудим, как объединить ссылки на подписки 3x-ui с нескольких серверов</p>
  <p id="aU7t">Допустим, у нас есть два VPS с панелями на борту: один в Германии, другой в Нидерландах. Как же сделать так, чтобы оба добавлялись в клиентское приложение одной ссылкой?</p>
  <hr />
  <h4 id="Контакты-и-не-только">Контакты и не только</h4>
  <p id="6mm7">Автор: <a href="https://t.me/noisycake" target="_blank">https://t.me/noisycake</a></p>
  <p id="ceg0">Ткг: <a href="https://t.me/hfk_blog" target="_blank">https://t.me/hfk_blog</a></p>
  <p id="hBRQ">Блог: <a href="https://noisycake.ru/" target="_blank">https://noisycake.ru</a></p>
  <hr />
  <h2 id="Зачем-это-вообще-нужно?">Зачем это вообще нужно?</h2>
  <p id="o1Rm">Объединение нескольких панелей может быть крайне полезным для продавцов VPN-подписок и пользователей, ведь вместо того, чтобы вставлять кучу ссылок для каждой локации/сервера, клиенту нужно будет скопировать лишь одну.</p>
  <hr />
  <h2 id="Неполноценный-способ">Неполноценный способ</h2>
  <p id="AiiM">В качестве разминки просто объединим две ссылки на конфигурации, то есть основная функция подписки (обновление конфигурации) работать не будет!</p>
  <p id="BvaJ">1) Открываем 3x-ui на первом сервере и копируем обычную ссылку клиента;</p>
  <figure id="LCLl" class="m_column">
    <img src="https://img1.teletype.in/files/4f/06/4f068a45-1d20-49eb-ba10-7b2d031062b3.png" width="753" />
  </figure>
  <p id="Z7qp">2) Вставляем её в пустой текстовый файл (.txt);</p>
  <p id="33PY">3) Повторяем то же самое со вторым сервером, и получившийся результат вставляем на следующую строку в том же файле;</p>
  <figure id="ZBxF" class="m_column" data-caption-align="center">
    <img src="https://img3.teletype.in/files/a5/05/a505893c-f1b6-4e5a-8747-756f569bc6dd.png" width="1140" />
    <figcaption>subs.txt</figcaption>
  </figure>
  <p id="iHxW">4) .txt теперь можно выложить в открытый доступ и скормить ссылку приложению-клиенту.</p>
  <p id="eMjx">К примеру, закинем файл на GitHub.</p>
  <p id="3hB2">Создаём новый репозиторий -&gt; нажимаем &quot;upload an existing file&quot; -&gt; прикрепляем наш файл -&gt; жмём &quot;Commit changes&quot;.</p>
  <figure id="I12v" class="m_column">
    <img src="https://img3.teletype.in/files/e3/34/e3345b5c-9fe5-407c-9c8a-11613db48cf3.png" width="1248" />
  </figure>
  <p id="pIQ9">Тыкаем на файл. Чтобы получить правильную ссылку, нужно нажать на кнопку &quot;Raw&quot; в правой части экрана.</p>
  <figure id="Ko6X" class="m_column">
    <img src="https://img3.teletype.in/files/ac/4a/ac4a7426-15b5-4bef-b876-82494b4d4f57.png" width="1790" />
  </figure>
  <p id="ieSV">На открывшейся вкладке копируем ссылку из поисковой строки. Выглядеть она будет примерно так:</p>
  <p id="tGK0"><a href="https://raw.githubusercontent.com/NoisyCake/justfortest/refs/heads/main/sub.txt" target="_blank">https://raw.githubusercontent.com/Whoami/justfortest/refs/heads/main/sub.txt</a></p>
  <p id="GB5r">Как раз её мы и будем вставлять в приложения-клиенты по типу Hiddify и Nekobox. Проверим в первом. Копипастим ссылку, переходим в раздел &quot;Прокси&quot; левой менюшки. Отлично, видим оба наших подключения. Если нажать на &quot;auto&quot;, будет выбираться сервер с наименьшим пингом.</p>
  <figure id="fXK6" class="m_column">
    <img src="https://img1.teletype.in/files/8b/0c/8b0c92af-7ce3-460f-be13-5c7bd6a7405d.png" width="848" />
  </figure>
  <p id="nlY9">Вуаля! И вроде никаких заморочек, но есть две проблемы:</p>
  <ol id="64Xs">
    <li id="7vGD">Ссылку может получить кто угодно. Решается ограничением доступа или использованием других способов публикации ссылки;</li>
    <li id="ZxbB">Если вы измените конфигурацию подключения, клиент (NekoBox, Hiddify и т.п.) не сможет достать новые данные, ведь мы дали ссылки на статичные конфигурационные файлы, которые не обновляются автоматически. Получается, вносить изменения придётся вручную.</li>
  </ol>
  <figure id="dsVD" class="m_column" data-caption-align="center">
    <img src="https://img2.teletype.in/files/15/ca/15ca62e7-402d-4fa4-a4e0-9d9e70053d56.png" width="680" />
    <figcaption>Схема работы простого решения</figcaption>
  </figure>
  <p id="q4PV">Посмотрим, как можно решить эти вопросы.</p>
  <hr />
  <h2 id="Оптимальное-решение">Оптимальное решение</h2>
  <p id="VZP7">Главное условие: включить функцию &quot;подписки&quot; в 3x-ui на каждом из серверов (рассказывал об этом в <a href="https://noisycake.ru/articles/vpn_server/#%D0%BF%D0%BE%D0%B4%D0%BF%D0%B8%D1%81%D0%BA%D0%B8" target="_blank">своём блоге</a>), а также сделать <strong>одинаковый</strong> ник в поле &quot;Subscription&quot; для клиентов, которых вы будете объединять.</p>
  <figure id="n41Z" class="m_original" data-caption-align="center">
    <img src="https://img3.teletype.in/files/ec/87/ec873e4e-c9f4-4215-8059-9364768fa98e.png" width="549" />
    <figcaption>Subscription клиента первого сервера</figcaption>
  </figure>
  <figure id="huBH" class="m_original" data-caption-align="center">
    <img src="https://img2.teletype.in/files/19/a3/19a35cb5-7197-4bce-a667-9e26cfdf5720.png" width="552" />
    <figcaption>Subscription клиента второго сервера</figcaption>
  </figure>
  <hr />
  <p id="Z9eZ">Чтобы исключить проблемы прошлого варианта, можно поднять обратный прокси на одном из имеющихся VPS, который будет автоматически брать конфиги с панелей и объединять их. Воспользуемся готовым решением от пользователя GitHub <a href="https://github.com/apa4h" target="_blank">https://github.com/apa4h</a></p>
  <p id="Rywg">UPD: Написал своё приложение, работающее на Python + Nginx: <a href="https://github.com/NoisyCake/3x-ui_subscriptions_aggregator" target="_blank">https://github.com/NoisyCake/3x-ui_subscriptions_aggregator</a>. Процесс установки описан по ссылке, но в этой статье оставил разбор стороннего решения</p>
  <blockquote id="9irq">Вы можете спросить меня, что ещё за обратный прокси такой? В общем-то, это ПО (в нашем случае nginx), которое получает от пользователей запросы, перенаправляет их другим приложениям и возвращает ответы</blockquote>
  <p id="MoXr">Заходим на какой-нибудь из серверов. Установим необходимые утилиты и скачаем репозиторий:</p>
  <pre id="Jsk2">sudo apt install docker-compose
git clone https://github.com/apa4h/nginx-3x-ui-subscription-proxy.git
cd nginx-3x-ui-subscription-proxy/
cp .env.template .env</pre>
  <p id="dcm9">Теперь нужно настроить переменные окружения. Переходим в только что созданный файл: <code>nano .env</code></p>
  <p id="6jKy">Перед нами будут следующие строки:</p>
  <figure id="Zqh1" class="m_original" data-caption-align="center">
    <img src="https://img4.teletype.in/files/74/69/74699919-c606-464a-a66e-d00f0a9b53b8.png" width="479" />
    <figcaption>.env</figcaption>
  </figure>
  <p id="mp6c">Для начала определимся, нужен нам https или нет. Если у вас нет сертификатов на сервере, и вы не хотите с ними заморачиваться, оставьте TLS_MODE=off. Но в таком случае могут возникнуть проблемы с подключением, поскольку многие клиентские приложения проверяют ссылку на наличие https. Если же у вас есть сертификат или вы хотите его сделать (рассказывал в <a href="https://noisycake.ru/articles/vpn_server/#%d1%81%d0%bf%d0%be%d1%81%d0%be%d0%b1-2" target="_blank">этом гайде</a>), смените на &quot;on&quot;.</p>
  <p id="D6dv">В первой строке нужно указать папку, где хранятся ключи сертификата.</p>
  <p id="PsfY">SITE_HOST: если устанавливали сертификат, нужно писать адрес, на который этот сертификат распространяется. В противном случае вбиваем IP сервера.</p>
  <p id="rkTL">В SITE_PORT пишем любой свободный порт на сервере.</p>
  <p id="WuSu">SERVERS: перечисляем через пробел пути к подписке каждого сервера. Ссылки должны выглядеть так:</p>
  <p id="isO8"><a href="https://xn--%3Cip__%3E-fsim0ba8btsp:<%D0%BF%D0%BE%D1%80%D1%82_%D0%BF%D0%BE%D0%B4%D0%BF%D0%B8%D1%81%D0%BA%D0%B8>/%3C%D0%BA%D0%BE%D1%80%D0%BD%D0%B5%D0%B2%D0%BE%D0%B9" target="_blank">https://&lt;ip_или_домен&gt;:&lt;порт_подписки&gt;/&lt;корневой</a>_url_подписки&gt;/</p>
  <p id="XhLA">Можете просто скопировать ссылку на подписку в подключении и убрать имя клиента в конце.</p>
  <p id="BKEB">В SUB можете указать, как будет выглядеть статическая часть ссылки на общую подписку. Я оставлю без изменений.</p>
  <p id="EkU0">В итоге получаем что-то такое:</p>
  <figure id="dDCH" class="m_column">
    <img src="https://img4.teletype.in/files/33/5f/335f9038-09f8-42d0-a324-0e0bcbf9bc09.png" width="860" />
  </figure>
  <p id="EeqW">Сохраняем файл и выходим.</p>
  <p id="EsLE">Пишем: <code>docker-compose up -d</code></p>
  <p id="aw5E">Веб-сервер работает 😊. Чтобы получить подписку, нужно обратиться по адресу:</p>
  <p id="RUrg"><a href="https://%3Csite_host%3E/%3CSUB%3E%3C%D0%BD%D0%B8%D0%BA%D0%BD%D0%B5%D0%B9%D0%BC" target="_blank">https://&lt;SITE_HOST&gt;/&lt;SUB&gt;&lt;никнейм</a>_подписки&gt; (<a href="http://.../" target="_blank">http://...</a> если TLS_MODE=off), где &quot;никнейм_подписки&quot; — &quot;Subscription&quot;, который вы указывали в настройках клиента подключений. Напомню, что в каждом подключении они должен быть одинаковыми.</p>
  <figure id="BOAS" class="m_column" data-caption-align="center">
    <img src="https://img1.teletype.in/files/46/1e/461ea624-a3e3-4502-80b4-5c9103cb3b19.png" width="1048" />
    <figcaption>Схема работы оптимального решения</figcaption>
  </figure>
  <p id="EIcg">Если вы всё сделали правильно, то при попытке вставить ссылку в клиент, подтянутся конфиги. Также проверьте, работает ли обновление. Для этого измените подключение в панели (к примеру, порт) -&gt; сохраните изменения -&gt; обновите подписку в клиенте -&gt; попробуйте подключиться. Таймаутов быть не должно.</p>
  <hr />
  <p id="ARlE"><strong>Примечание:</strong> При создании сервиса по продаже VPN-подписок нужно понимать, что для каждого пользователя придётся генерировать сложно-подбираемый &quot;Subscription&quot;, иначе велика вероятность абуза.</p>
  <hr />
  <h2 id="The-end">The end</h2>
  <p id="dWIj">Наш мини-гайд подошёл к концу. Надеюсь, было полезно 🙂</p>
  <p id="OSZp">Всем до скорого, и спасибо, что читаете!</p>

]]></content:encoded></item></channel></rss>