<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>@yachmenev</title><author><name>@yachmenev</name></author><id>https://teletype.in/atom/yachmenev</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/yachmenev?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@yachmenev?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=yachmenev"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/yachmenev?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-04-05T17:07:37.486Z</updated><entry><id>yachmenev:shadowsocks-cloak</id><link rel="alternate" type="text/html" href="https://teletype.in/@yachmenev/shadowsocks-cloak?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=yachmenev"></link><title>Shadowsocks + Cloak</title><published>2024-06-14T18:10:36.623Z</published><updated>2025-03-05T14:50:31.719Z</updated><summary type="html">Shadowsocks был одним из первых протоколов для обхода блокировок в Китае, но со временем DPI системы научились его распознавать и блокировать. Не исключается такой вариант событий и в нашей стране, так что для сокрытия трафика Shadowsocks предлагается множество вариантов обфускаторов в виде плагинов. Одним из таких плагинов является Cloak. Для шифрования между серверной и клиентской частью Cloak используется асимметричное шифрование на базе открытого и закрытого ключа, закрытая часть всегда остается на сервере, открытая передается клиенту. С помощью ключевой пары клиент и сервер согласуют сеансовый симметричный ключ для дальнейшей передачи данных между клиентом и сервером. Аналогичная схема PFS применяется в HTTPS сеансах...</summary><content type="html">
  &lt;h2 id=&quot;7oJW&quot;&gt;1. Введение&lt;/h2&gt;
  &lt;p id=&quot;ZOOk&quot;&gt;Shadowsocks был одним из первых протоколов для обхода блокировок в Китае, но со временем DPI системы научились его распознавать и блокировать. Не исключается такой вариант событий и в нашей стране, так что для сокрытия трафика Shadowsocks предлагается множество вариантов обфускаторов в виде плагинов. Одним из таких плагинов является Cloak. Для шифрования между серверной и клиентской частью Cloak используется асимметричное шифрование на базе открытого и закрытого ключа, закрытая часть всегда остается на сервере, открытая передается клиенту. С помощью ключевой пары клиент и сервер согласуют сеансовый симметричный ключ для дальнейшей передачи данных между клиентом и сервером. Аналогичная схема PFS применяется в HTTPS сеансах с использованием x.509 сертификатов или SSH. Варианты шифрования поддерживаемые Cloak:&lt;/p&gt;
  &lt;ul id=&quot;0EDM&quot;&gt;
    &lt;li id=&quot;9X8G&quot;&gt;plain&lt;/li&gt;
    &lt;li id=&quot;0qA0&quot;&gt;aes-128-gcm&lt;/li&gt;
    &lt;li id=&quot;wAgt&quot;&gt;aes-256-gcm (alias aes-gcm)&lt;/li&gt;
    &lt;li id=&quot;L5Wn&quot;&gt;chacha20-poly1305&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;RoAu&quot;&gt;Так как Shadowsocks на своем уровне уже использует различные типы шифрования, в конфигурации Cloak можно использовать plain. Если вдруг перестанет работать, включить шифрование на уровне Cloak не составляет большого труда, оно настраивается на стороне клиента, дополнительная настройка на сервере не требуется. Так например трафик OpenVPN разработчики Cloak рекомендуют дополнительно шифровать, так как DPI системы научились распознавать его по отпечаткам.&lt;/p&gt;
  &lt;p id=&quot;woSw&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;5bIz&quot;&gt;2. Настройка Shadowsocks&lt;/h2&gt;
  &lt;p id=&quot;PNZY&quot;&gt;Установку Shadowsocks я описывал ранее в статье &lt;a href=&quot;https://teletype.in/@yachmenev/shadowsocks-rust&quot; target=&quot;_blank&quot;&gt;https://teletype.in/@yachmenev/shadowsocks-rust&lt;/a&gt;, приведу только конфиг Shadowsocks&lt;/p&gt;
  &lt;p id=&quot;e71b&quot;&gt;&lt;strong&gt;Сервер:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;kTEE&quot; data-lang=&quot;bash&quot;&gt;cat &amp;gt;/etc/shadowsocks/server.json &amp;lt;&amp;lt;HEREDOC
{
  &amp;quot;udp_timeout&amp;quot;: 300,
  &amp;quot;udp_max_associations&amp;quot;: 512,
  &amp;quot;mode&amp;quot;: &amp;quot;tcp_and_udp&amp;quot;,
  &amp;quot;fast_open&amp;quot;: true,
  &amp;quot;timeout&amp;quot;: 300,
  &amp;quot;servers&amp;quot;: [
    {
      &amp;quot;server&amp;quot;: &amp;quot;0.0.0.0&amp;quot;,
      &amp;quot;server_port&amp;quot;: 11443,
      &amp;quot;method&amp;quot;: &amp;quot;aes-256-gcm&amp;quot;,
      &amp;quot;password&amp;quot;: &amp;quot;zZyWP+OBQWG5YmL0flJyNTZdeUORlZw1urCbIlhZHmA=&amp;quot;
    },
    {
      &amp;quot;server&amp;quot;: &amp;quot;0.0.0.0&amp;quot;,
      &amp;quot;server_port&amp;quot;: 12443,
      &amp;quot;method&amp;quot;: &amp;quot;2022-blake3-aes-256-gcm&amp;quot;,
      &amp;quot;password&amp;quot;: &amp;quot;zZyWP+OBQWG5YmL0flJyNTZdeUORlZw1urCbIlhZHmA=&amp;quot;,
      &amp;quot;users&amp;quot;: [
        {
          &amp;quot;name&amp;quot;: &amp;quot;user1&amp;quot;,
          &amp;quot;password&amp;quot;: &amp;quot;XtXtAUk3wUWjvJ336HD69uTSTgRzVwBpon1ACj03py8=&amp;quot;
        },
        {
          &amp;quot;name&amp;quot;: &amp;quot;user2&amp;quot;,
          &amp;quot;password&amp;quot;: &amp;quot;2tP/krYV6RNBqM0xwXKwYi0af1Rs6lk23wpBHWYYoNo=&amp;quot;
        }
      ]
    }
  ]
}
HEREDOC&lt;/pre&gt;
  &lt;p id=&quot;nc6K&quot;&gt;&lt;strong&gt;Клиент:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;qxSS&quot; data-lang=&quot;bash&quot;&gt;cat &amp;gt;/etc/shadowsocks/client.json &amp;lt;&amp;lt;HEREDOC
{
  &amp;quot;udp_timeout&amp;quot;: 300,
  &amp;quot;udp_max_associations&amp;quot;: 512,
  &amp;quot;mode&amp;quot;: &amp;quot;tcp_and_udp&amp;quot;,
  &amp;quot;fast_open&amp;quot;: true,
  &amp;quot;timeout&amp;quot;: 300,
  &amp;quot;servers&amp;quot;: [
    {
      &amp;quot;server&amp;quot;: &amp;quot;shadowsocks.example.com&amp;quot;,
      &amp;quot;server_port&amp;quot;: 11443,
      &amp;quot;method&amp;quot;: &amp;quot;aes-256-gcm&amp;quot;,
      &amp;quot;password&amp;quot;: &amp;quot;zZyWP+OBQWG5YmL0flJyNTZdeUORlZw1urCbIlhZHmA=&amp;quot;
    },
    {
      &amp;quot;disabled&amp;quot;: true,
      &amp;quot;server&amp;quot;: &amp;quot;shadowsocks.example.com&amp;quot;,
      &amp;quot;server_port&amp;quot;: 12443,
      &amp;quot;method&amp;quot;: &amp;quot;2022-blake3-aes-256-gcm&amp;quot;,
      &amp;quot;password&amp;quot;: &amp;quot;zZyWP+OBQWG5YmL0flJyNTZdeUORlZw1urCbIlhZHmA=:XtXtAUk3wUWjvJ336HD69uTSTgRzVwBpon1ACj03py8=&amp;quot;,
    }
  ]
  &amp;quot;locals&amp;quot;: [
    {
      &amp;quot;protocol&amp;quot;: &amp;quot;socks&amp;quot;,
	  &amp;quot;local_address&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,
      &amp;quot;local_port&amp;quot;: 1080
    },
    {
      &amp;quot;protocol&amp;quot;: &amp;quot;http&amp;quot;,
	  &amp;quot;local_address&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,
      &amp;quot;local_port&amp;quot;: 3128
    },
  ]
}
HEREDOC&lt;/pre&gt;
  &lt;p id=&quot;ytt3&quot;&gt;Проверяем конфиги с помощью jq&lt;/p&gt;
  &lt;p id=&quot;wHB2&quot;&gt;Запускаем сервер:&lt;/p&gt;
  &lt;pre id=&quot;jxNI&quot; data-lang=&quot;bash&quot;&gt;ssservice server -c /etc/shadowsocks/server.json&lt;/pre&gt;
  &lt;p id=&quot;7PUc&quot;&gt;Запускаем клиент:&lt;/p&gt;
  &lt;pre id=&quot;tf8C&quot; data-lang=&quot;bash&quot;&gt;ssservice local -c /etc/shadowsocks/client.json&lt;/pre&gt;
  &lt;p id=&quot;IRYJ&quot;&gt;Проверяем работу сервера и клиента shadowsocks&lt;/p&gt;
  &lt;pre id=&quot;jkmZ&quot; data-lang=&quot;bash&quot;&gt;curl https://checkip.groupit.team
curl --proxy socks5://127.0.0.1:1080 https://checkip.groupit.team&lt;/pre&gt;
  &lt;p id=&quot;4sLw&quot;&gt;После того как убедились что у нас все работает, можно активировать и запустить службы:&lt;/p&gt;
  &lt;pre id=&quot;5GTh&quot; data-lang=&quot;bash&quot;&gt;systemctl enable --now shadowsocks-server&lt;/pre&gt;
  &lt;pre id=&quot;NGra&quot; data-lang=&quot;bash&quot;&gt;systemctl enable --now shadowsocks-client&lt;/pre&gt;
  &lt;p id=&quot;WF5c&quot;&gt; &lt;/p&gt;
  &lt;h2 id=&quot;Ja75&quot;&gt;3. Настройка Cloak&lt;/h2&gt;
  &lt;p id=&quot;VVzq&quot;&gt;Установка Cloak как самостоятельных сервисов описана в статье &lt;a href=&quot;https://teletype.in/@yachmenev/cloak&quot; target=&quot;_blank&quot;&gt;https://teletype.in/@yachmenev/cloak&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;auO3&quot;&gt;Сервер:&lt;/p&gt;
  &lt;pre id=&quot;9jfZ&quot; data-lang=&quot;bash&quot;&gt;cat &amp;gt;/etc/cloak/server.json &amp;lt;&amp;lt;HEREDOC
{
  &amp;quot;ProxyBook&amp;quot;: {
    &amp;quot;ss11443&amp;quot;: [
      &amp;quot;tcp&amp;quot;,
      &amp;quot;127.0.0.1:11443&amp;quot;
    ],
    &amp;quot;ss12443&amp;quot;: [
      &amp;quot;tcp&amp;quot;,
      &amp;quot;127.0.0.1:12443&amp;quot;
    ]
  },
  &amp;quot;BindAddr&amp;quot;: [
    &amp;quot;:443&amp;quot;
  ],
  &amp;quot;BypassUID&amp;quot;: [
    &amp;quot;yR5UJjyZ+JSWW239AUbscQ==&amp;quot;
  ],
  &amp;quot;RedirAddr&amp;quot;: &amp;quot;mail.google.com&amp;quot;,
  &amp;quot;PrivateKey&amp;quot;: &amp;quot;oNbxJyE1JpQbmyc8QXZsbw2KUMpGrypsiG6eH7gQV3o=&amp;quot;
}
HEREDOC
&lt;/pre&gt;
  &lt;p id=&quot;kE4Y&quot;&gt;Клиент:&lt;/p&gt;
  &lt;pre id=&quot;66N0&quot; data-lang=&quot;bash&quot;&gt;cat &amp;gt;/etc/cloak/cloak-client-ss-aes-256-gcm &amp;lt;&amp;lt;HEREDOC
{
  &amp;quot;Transport&amp;quot;: &amp;quot;direct&amp;quot;,
  &amp;quot;ProxyMethod&amp;quot;: &amp;quot;ss11443&amp;quot;,
  &amp;quot;EncryptionMethod&amp;quot;: &amp;quot;plain&amp;quot;,
  &amp;quot;UID&amp;quot;: &amp;quot;yR5UJjyZ+JSWW239AUbscQ==&amp;quot;,
  &amp;quot;PublicKey&amp;quot;: &amp;quot;5SQ90GPAUWcYZbJM1NnLzhk2f8gtRlXLcCPaUUYcjU8=&amp;quot;,
  &amp;quot;ServerName&amp;quot;: &amp;quot;mail.google.com&amp;quot;,
  &amp;quot;NumConn&amp;quot;: 4,
  &amp;quot;BrowserSig&amp;quot;: &amp;quot;chrome&amp;quot;,
  &amp;quot;StreamTimeout&amp;quot;: 300
}
HEREDOC
&lt;/pre&gt;
  &lt;pre id=&quot;DOTP&quot; data-lang=&quot;bash&quot;&gt;cat &amp;gt;/etc/default/cloak-client-ss-aes-256-gcm &amp;lt;&amp;lt;HEREDOC
LISTENIP=127.0.0.1
LISTENPORT=11443
REMOTESERVER=&amp;quot;shadowsocks.example.com&amp;quot;
REMOTEPORT=443
HEREDOC&lt;/pre&gt;
  &lt;pre id=&quot;mLaD&quot; data-lang=&quot;bash&quot;&gt;cat &amp;gt;/etc/cloak/cloak-client-ss-2022-blake3-aes-256-gcm.json &amp;lt;&amp;lt;HEREDOC
{
  &amp;quot;Transport&amp;quot;: &amp;quot;direct&amp;quot;,
  &amp;quot;ProxyMethod&amp;quot;: &amp;quot;ss12443&amp;quot;,
  &amp;quot;EncryptionMethod&amp;quot;: &amp;quot;plain&amp;quot;,
  &amp;quot;UID&amp;quot;: &amp;quot;yR5UJjyZ+JSWW239AUbscQ==&amp;quot;,
  &amp;quot;PublicKey&amp;quot;: &amp;quot;5SQ90GPAUWcYZbJM1NnLzhk2f8gtRlXLcCPaUUYcjU8=&amp;quot;,
  &amp;quot;ServerName&amp;quot;: &amp;quot;mail.google.com&amp;quot;,
  &amp;quot;NumConn&amp;quot;: 4,
  &amp;quot;BrowserSig&amp;quot;: &amp;quot;chrome&amp;quot;,
  &amp;quot;StreamTimeout&amp;quot;: 300
}
HEREDOC&lt;/pre&gt;
  &lt;pre id=&quot;SmgY&quot; data-lang=&quot;bash&quot;&gt;cat &amp;gt;/etc/default/cloak-client-ss-2022-blake3-aes-256-gcm &amp;lt;&amp;lt;HEREDOC
LISTENIP=127.0.0.1
LISTENPORT=12443
REMOTESERVER=&amp;quot;shadowsocks.example.com&amp;quot;
REMOTEPORT=443
HEREDOC&lt;/pre&gt;
  &lt;pre id=&quot;Oyvp&quot; data-lang=&quot;bash&quot;&gt;systemctl enable --now cloak-client@ss-aes-256-gcm
systemctl enable --now cloak-client@ss-2022-blake3-aes-256-gcm&lt;/pre&gt;
  &lt;p id=&quot;QFoG&quot;&gt;Есть ограничение на количество символов в конфиге Cloak клиента: параметр &amp;quot;ProxyMethod&amp;quot; не должен превышать 12 символов. Не знаю по какой причине такие ограничения, баг это или фича, но это недокументированный момент и я не меньше часа потратил разбираясь почему не работает туннель.&lt;/p&gt;
  &lt;p id=&quot;5usA&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;sCkf&quot;&gt;4. Перенастройка клиента Shadowsocks на использование Cloak&lt;/h2&gt;
  &lt;p id=&quot;700r&quot;&gt;Вариантов настройки связки &lt;strong&gt;Shadowsocks+Cloak&lt;/strong&gt; рассмотрим два. Первым будет вариант самостоятельной службы cloak-client. Данный вариант позволяет подключить несколько клиентов shadowsocks с локального компьютера или из сети. Второй вариант - использование Сloak в качестве плагина Shadowsocks, такой вариант применения описан в SIP003 (Shadowsocks Improvement Proposal) &lt;a href=&quot;https://shadowsocks.org/doc/sip003.html&quot; target=&quot;_blank&quot;&gt;https://shadowsocks.org/doc/sip003.html&lt;/a&gt;&lt;/p&gt;
  &lt;h3 id=&quot;qqy3&quot;&gt;4.1 Cloak как самостоятельная служба&lt;/h3&gt;
  &lt;p id=&quot;wApR&quot;&gt;Конфигурация службы cloak-client приведена в пункте 3, в текущем разделе настроим Shadowsocks на подключение к ней.&lt;/p&gt;
  &lt;p id=&quot;GPZF&quot;&gt;Перенастраиваем клиент Shadowsocks на порты прослушиваемые нашим Cloak клиентом 11443 и 12443 на адресе 127.0.0.1&lt;br /&gt;Итоговый конфиг клиента Shadowsocks будет выглядеть следующим образом:&lt;/p&gt;
  &lt;pre id=&quot;Kbjg&quot; data-lang=&quot;bash&quot;&gt;cat &amp;gt;/etc/shadowsocks/client.json &amp;lt;&amp;lt;HEREDOC
{
  &amp;quot;udp_timeout&amp;quot;: 300,
  &amp;quot;udp_max_associations&amp;quot;: 512,
  &amp;quot;mode&amp;quot;: &amp;quot;tcp_and_udp&amp;quot;,
  &amp;quot;fast_open&amp;quot;: true,
  &amp;quot;timeout&amp;quot;: 300,
  &amp;quot;servers&amp;quot;: [
    {
      &amp;quot;server&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,
      &amp;quot;server_port&amp;quot;: 11443,
      &amp;quot;method&amp;quot;: &amp;quot;aes-256-gcm&amp;quot;,
      &amp;quot;password&amp;quot;: &amp;quot;zZyWP+OBQWG5YmL0flJyNTZdeUORlZw1urCbIlhZHmA=&amp;quot;
    },
    {
      &amp;quot;disabled&amp;quot;: true,
      &amp;quot;server&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,
      &amp;quot;server_port&amp;quot;: 12443,
      &amp;quot;method&amp;quot;: &amp;quot;2022-blake3-aes-256-gcm&amp;quot;,
      &amp;quot;password&amp;quot;: &amp;quot;zZyWP+OBQWG5YmL0flJyNTZdeUORlZw1urCbIlhZHmA=:XtXtAUk3wUWjvJ336HD69uTSTgRzVwBpon1ACj03py8=&amp;quot;,
    }
  ]
  &amp;quot;locals&amp;quot;: [
    {
      &amp;quot;protocol&amp;quot;: &amp;quot;socks&amp;quot;,
	  &amp;quot;local_address&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,
      &amp;quot;local_port&amp;quot;: 1080
    },
    {
      &amp;quot;protocol&amp;quot;: &amp;quot;http&amp;quot;,
	  &amp;quot;local_address&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,
      &amp;quot;local_port&amp;quot;: 3128
    },
  ]
}
HEREDOC&lt;/pre&gt;
  &lt;p id=&quot;2mXA&quot;&gt;То есть во всем конфиге меняется только адрес сервера для подключения shadowsocks-client&lt;/p&gt;
  &lt;p id=&quot;PVgx&quot;&gt;Перезапускаем службу клиента Shadowsocks:&lt;/p&gt;
  &lt;pre id=&quot;HoOu&quot; data-lang=&quot;bash&quot;&gt;systemctl restart shadowsocks-client&lt;/pre&gt;
  &lt;p id=&quot;EPZ5&quot;&gt;Проверяем что проксирование работает:&lt;/p&gt;
  &lt;pre id=&quot;YjCC&quot; data-lang=&quot;bash&quot;&gt;curl https://checkip.groupit.team
curl --proxy socks5://127.0.0.1:1080 https://checkip.groupit.team&lt;/pre&gt;
  &lt;h3 id=&quot;pTIK&quot;&gt;4.2 Cloak как плагин Shadowsocks&lt;/h3&gt;
  &lt;p id=&quot;yEup&quot;&gt;В данной конфигурации клиента Shadowsocks адрес сервера остается прежний, но порт подключения меняется на 443 (на сервере данный порт прослушивается службой cloak-server). Так же добавляется два новых параметра &amp;quot;plugin&amp;quot; и &amp;quot;plugin_opts&amp;quot; отвечающие за то какое приложение необходимо использовать в качестве плагина и какие опции ему передавать на вход. Данный способ все так же требует конфигурирования cloak-client, но не требует настройки службы, плагин подключается динамически по мере необходимости. Недостатком же является запуск только одним экземпляром клиента Shadowsocks на локальном компьютере без возможности предоставления сервиса для компьютеров локальной сети.&lt;/p&gt;
  &lt;pre id=&quot;plKK&quot; data-lang=&quot;bash&quot;&gt;cat &amp;gt;/etc/shadowsocks/client.json &amp;lt;&amp;lt;HEREDOC
{
  &amp;quot;udp_timeout&amp;quot;: 300,
  &amp;quot;udp_max_associations&amp;quot;: 512,
  &amp;quot;mode&amp;quot;: &amp;quot;tcp_and_udp&amp;quot;,
  &amp;quot;fast_open&amp;quot;: true,
  &amp;quot;timeout&amp;quot;: 300,
  &amp;quot;servers&amp;quot;: [
    {
      &amp;quot;server&amp;quot;: &amp;quot;shadowsocks.example.com&amp;quot;,
      &amp;quot;server_port&amp;quot;: 443,
      &amp;quot;method&amp;quot;: &amp;quot;aes-256-gcm&amp;quot;,
      &amp;quot;password&amp;quot;: &amp;quot;zZyWP+OBQWG5YmL0flJyNTZdeUORlZw1urCbIlhZHmA=&amp;quot;,
      &amp;quot;plugin&amp;quot;: &amp;quot;cloak-client&amp;quot;,
      &amp;quot;plugin_opts&amp;quot;: &amp;quot;/etc/cloak/cloak-client-ss-aes-256-gcm.json&amp;quot;

    },
    {
      &amp;quot;disabled&amp;quot;: true,
      &amp;quot;server&amp;quot;: &amp;quot;shadowsocks.example.com&amp;quot;,
      &amp;quot;server_port&amp;quot;: 443,
      &amp;quot;method&amp;quot;: &amp;quot;2022-blake3-aes-256-gcm&amp;quot;,
      &amp;quot;password&amp;quot;: &amp;quot;zZyWP+OBQWG5YmL0flJyNTZdeUORlZw1urCbIlhZHmA=:XtXtAUk3wUWjvJ336HD69uTSTgRzVwBpon1ACj03py8=&amp;quot;,
      &amp;quot;plugin&amp;quot;: &amp;quot;cloak-client&amp;quot;,
      &amp;quot;plugin_opts&amp;quot;: &amp;quot;/etc/cloak/cloak-client-ss-2022-blake3-aes-256-gcm.json&amp;quot;

    }
  ]
  &amp;quot;locals&amp;quot;: [
    {
      &amp;quot;protocol&amp;quot;: &amp;quot;socks&amp;quot;,
	  &amp;quot;local_address&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,
      &amp;quot;local_port&amp;quot;: 1080
    },
    {
      &amp;quot;protocol&amp;quot;: &amp;quot;http&amp;quot;,
	  &amp;quot;local_address&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,
      &amp;quot;local_port&amp;quot;: 3128
    },
  ]
}
HEREDOC&lt;/pre&gt;
  &lt;p id=&quot;hs1C&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;atbZ&quot;&gt;Серверная часть cloak-server подключается к Shadowsocks через loopback интерфейс с адресом 127.0.0.1 так что можем без проблем скрыть наличие Shadowsocks на нашем сервере.&lt;/p&gt;
  &lt;pre id=&quot;1srz&quot; data-lang=&quot;bash&quot;&gt;sed -i &amp;#x27;s/0.0.0.0/127.0.0.1/g&amp;#x27; /etc/shadowsocks/server.json
systemctl restart shadowsocks-server&lt;/pre&gt;
  &lt;p id=&quot;J4v1&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;jZJ6&quot;&gt;USDT/TRC20: TW4ZRcrb4qBRb9uSNiu9wJCWveCp4rLoGL&lt;/p&gt;
  &lt;p id=&quot;ccV5&quot;&gt;:)&lt;/p&gt;

</content></entry><entry><id>yachmenev:simple-squid-config</id><link rel="alternate" type="text/html" href="https://teletype.in/@yachmenev/simple-squid-config?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=yachmenev"></link><title>Простая настройка Squid с авторизацией</title><published>2024-06-13T08:33:49.483Z</published><updated>2024-06-13T19:42:13.536Z</updated><category term="squid" label="squid"></category><summary type="html">Создадим файл с пользователем и его паролем для будущего прокси:</summary><content type="html">
  &lt;h2 id=&quot;XMnC&quot;&gt;1. Установка Squid&lt;/h2&gt;
  &lt;h3 id=&quot;GQ70&quot;&gt;1.1 Используемая документация&lt;/h3&gt;
  &lt;ul id=&quot;xV8C&quot;&gt;
    &lt;li id=&quot;NWLh&quot;&gt;&lt;a href=&quot;https://www.squid-cache.org/Doc/config/&quot; target=&quot;_blank&quot;&gt;https://www.squid-cache.org/Doc/config/&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;2Kxd&quot;&gt;1.2 Установка Squid&lt;/h3&gt;
  &lt;pre id=&quot;9mGv&quot; data-lang=&quot;bash&quot;&gt;apt install squid&lt;/pre&gt;
  &lt;h3 id=&quot;nDmt&quot;&gt;1.3 Настройка Squid&lt;/h3&gt;
  &lt;p id=&quot;xfDJ&quot;&gt;Создадим файл с пользователем и его паролем для будущего прокси:&lt;/p&gt;
  &lt;pre id=&quot;gee6&quot; data-lang=&quot;bash&quot;&gt;echo &amp;quot;user:$(openssl passwd -salt GqxMofo+ -apr1 password)&amp;quot; &amp;gt;&amp;gt;/etc/squid/passwd&lt;/pre&gt;
  &lt;p id=&quot;4pWU&quot;&gt;Формат файла крайне прост&lt;/p&gt;
  &lt;pre id=&quot;mQyb&quot; data-lang=&quot;bash&quot;&gt;user:password&lt;/pre&gt;
  &lt;p id=&quot;FlTh&quot;&gt;Соль добавляемая к паролю параметром &lt;strong&gt;-salt&lt;/strong&gt; должна быть не более 8 символов. Параметр не обязательный. Сгенерить можно командой:&lt;/p&gt;
  &lt;pre id=&quot;Ko2R&quot; data-lang=&quot;bash&quot;&gt;openssl rand -base64 6&lt;/pre&gt;
  &lt;p id=&quot;LANC&quot;&gt;Алгоритм хеширования пароля может быть &lt;strong&gt;-apr1&lt;/strong&gt;, &lt;strong&gt;-5&lt;/strong&gt; (SHA256), &lt;strong&gt;-6&lt;/strong&gt; (SHA512). &lt;/p&gt;
  &lt;p id=&quot;gNFA&quot;&gt;Если не указывать пароль, запрос на ввод пароля будет интерактивный, это более безопасно так как не сохраняется в истории команд консоли.&lt;/p&gt;
  &lt;p id=&quot;AhR8&quot;&gt;Если в файле несколько раз встречается пользователь с одинаковым именем, актуальна всегда самая последняя запись. Если вы по ошибке задублировали пользователя, просто удалите последнюю строку и пользователь сможет как раньше заходить со своим прежним паролем.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;4pWU&quot;&gt;Настройка параметров Basic авторизации:&lt;/p&gt;
  &lt;pre id=&quot;4pWU&quot; data-lang=&quot;bash&quot;&gt;cat &amp;gt;/etc/squid/conf.d/auth.conf &amp;lt;&amp;lt;HEREDOC
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwd
auth_param basic realm Proxy Auth Required
acl auth proxy_auth REQUIRED
http_access allow auth
HEREDOC&lt;/pre&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;sBpn&quot;&gt;Настройка логирования в более удобной форме чем по умолчанию предлагает Squid. Но это вкусовщина на усмотрение админа, каждый настраивает под себя &lt;a href=&quot;https://www.squid-cache.org/Doc/config/logformat/&quot; target=&quot;_blank&quot;&gt;https://www.squid-cache.org/Doc/config/logformat/&lt;/a&gt;&lt;/p&gt;
  &lt;pre id=&quot;sBpn&quot; data-lang=&quot;bash&quot;&gt;cat &amp;gt;/etc/squid/conf.d/log.conf &amp;lt;&amp;lt;HEREDOC
logformat squid_tl %{%d/%b/%Y %H:%M:%S %z}tl %6tr %&amp;gt;a %Ss/%03&amp;gt;Hs %&amp;lt;st %rm %ru %un %Sh/%&amp;lt;a %mt
access_log daemon:/var/log/squid/access.log squid_tl
HEREDOC&lt;/pre&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;vPqw&quot;&gt;Мелкий тюнинг&lt;/p&gt;
  &lt;pre id=&quot;vPqw&quot; data-lang=&quot;bash&quot;&gt;cat &amp;gt;/etc/squid/conf.d/squid.conf &amp;lt;&amp;lt;HEREDOC
cache_mgr admin@example.com
httpd_suppress_version_string on
visible_hostname squid.example.com
HEREDOC&lt;/pre&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;cv0D&quot;&gt;Если не планируем светить наш прокси на весь интернет и скрыть его за плагинами cloak/v2ray-plugin/xray-plugin или чем-то подобным&lt;/p&gt;
  &lt;pre id=&quot;cv0D&quot; data-lang=&quot;bash&quot;&gt;sed -i &amp;#x27;s/http_port 3128/http_port 127.0.0.1:3128/&amp;#x27; /etc/squid/squid.conf&lt;/pre&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;T1Ex&quot;&gt;Проверяем что нет ошибок в конфиге и говорим перечитать конфиг. Это быстрей чем перезапуск службы через systemctl restart squid&lt;/p&gt;
  &lt;pre id=&quot;T1Ex&quot; data-lang=&quot;bash&quot;&gt;squid -k check &amp;amp;&amp;amp; squid -k reconfigure&lt;/pre&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;nVxr&quot;&gt;Проверяем работу нашего прокси&lt;/p&gt;
  &lt;pre id=&quot;nVxr&quot; data-lang=&quot;bash&quot;&gt;curl --proxy http://squid.example.com:3128 --proxy-user user:password https://checkip.groupit.team&lt;/pre&gt;

</content></entry><entry><id>yachmenev:cloak</id><link rel="alternate" type="text/html" href="https://teletype.in/@yachmenev/cloak?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=yachmenev"></link><title>Установка и настройка Cloak Standalone Server для обфускации трафика</title><published>2024-06-11T14:46:12.560Z</published><updated>2025-03-05T14:51:35.386Z</updated><category term="cloak" label="cloak"></category><summary type="html">Использованная документация:</summary><content type="html">
  &lt;h2 id=&quot;dXx8&quot;&gt;1. Установка Cloak Standalone Server&lt;/h2&gt;
  &lt;h3 id=&quot;xa64&quot;&gt;1.1 Используемая документация&lt;/h3&gt;
  &lt;ul id=&quot;0mdF&quot;&gt;
    &lt;li id=&quot;aMOm&quot;&gt;&lt;a href=&quot;https://github.com/cbeuw/Cloak&quot; target=&quot;_blank&quot;&gt;https://github.com/cbeuw/Cloak&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;gTQ6&quot;&gt;&lt;a href=&quot;https://github.com/cbeuw/Cloak/wiki&quot; target=&quot;_blank&quot;&gt;https://github.com/cbeuw/Cloak/wiki&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;nnO9&quot;&gt;&lt;a href=&quot;https://jqlang.github.io/jq/manual/&quot; target=&quot;_blank&quot;&gt;https://jqlang.github.io/jq/manual/&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;Wc8a&quot;&gt;1.2 Дополнительное ПО&lt;/h3&gt;
  &lt;p id=&quot;YQdS&quot;&gt;Для проверки корректности файлов JSON нам понадобится утилита jq. Установить ее можно из репозиториев или напрямую из git:&lt;/p&gt;
  &lt;pre id=&quot;Lwi9&quot; data-lang=&quot;bash&quot;&gt;_URL=&amp;quot;https://github.com/jqlang/jq/releases/download/jq-1.7.1/jq-linux-amd64&amp;quot;
_APP=&amp;quot;/usr/bin/jq&amp;quot;

wget -q -O ${_APP} ${_URL}
chmod a+x ${_APP}
chown 0:0 ${_APP}

unset _URL _APP&lt;/pre&gt;
  &lt;p id=&quot;ETp2&quot;&gt;Проверку можно выполнить командой:&lt;/p&gt;
  &lt;pre id=&quot;Fdn7&quot; data-lang=&quot;bash&quot;&gt;jq &amp;#x27;.&amp;#x27; &amp;lt;path_to_file&amp;gt;&lt;/pre&gt;
  &lt;h3 id=&quot;MsKv&quot;&gt;1.3 Установка cloak-server&lt;/h3&gt;
  &lt;p id=&quot;eBWa&quot;&gt;Настроим переменные для процесса установки:&lt;/p&gt;
  &lt;pre id=&quot;pRL8&quot; data-lang=&quot;bash&quot;&gt;_URL=&amp;quot;https://github.com/cbeuw/Cloak/releases/download/v2.9.0/ck-server-linux-amd64-v2.9.0&amp;quot;
_APP=&amp;quot;/usr/bin/cloak-server&amp;quot;
_CFG=&amp;quot;/etc/cloak/server.json&amp;quot;
_CFGSHADOWSOCKS=&amp;quot;/etc/cloak/cloak-client-shadowsocks-direct.json&amp;quot;
_CFGSQUID=&amp;quot;/etc/cloak/cloak-client-squid-direct.json&amp;quot;
_SVC=&amp;quot;/etc/systemd/system/cloak-server.service&amp;quot;&lt;/pre&gt;
  &lt;p id=&quot;B7rh&quot;&gt;Загружаем и устанавливаем cloak-server из git:&lt;/p&gt;
  &lt;pre id=&quot;hRL8&quot; data-lang=&quot;bash&quot;&gt;wget -q -O ${_APP} ${_URL}
chmod a+x ${_APP}
chown 0:0 ${_APP}&lt;/pre&gt;
  &lt;p id=&quot;83kQ&quot;&gt;Для конфига нам понадобятся ключевая пара (открытый и закрытый ключ) и как минимум один UID пользователя. Сгенерировать ключевую пару можно командой&lt;/p&gt;
  &lt;pre id=&quot;9uqF&quot; data-lang=&quot;bash&quot;&gt;cloak-server -k&lt;/pre&gt;
  &lt;p id=&quot;9uqF&quot;&gt;или&lt;/p&gt;
  &lt;pre id=&quot;9uqF&quot; data-lang=&quot;bash&quot;&gt;cloak-server -key&lt;/pre&gt;
  &lt;p id=&quot;P4YG&quot;&gt;&lt;strong&gt;-k         &lt;/strong&gt;Генерация пары публичного и приватного ключа и вывод в консоль в формате &amp;lt;public key&amp;gt;,&amp;lt;private key&amp;gt;&lt;br /&gt;&lt;strong&gt;-key    &lt;/strong&gt;Генерация ключевой пары в виде двух строк с публичным и приватным ключом&lt;/p&gt;
  &lt;p id=&quot;L1nN&quot;&gt;Публичная часть ключа нам понадобится для конфигурации клиента, приватная часть остается на сервере и ни кому не передается.&lt;/p&gt;
  &lt;pre id=&quot;ASLz&quot; data-lang=&quot;bash&quot;&gt;_KEYS=$(${_APP} -k)
_PUBKEY=$(echo ${_KEYS} | cut -d, -f1)
_PRIVKEY=$(echo ${_KEYS} | cut -d, -f2)

_UID=$(${_APP} -u)&lt;/pre&gt;
  &lt;p id=&quot;aWvX&quot;&gt;Сохраним ключевую пару:&lt;/p&gt;
  &lt;pre id=&quot;vGYM&quot; data-lang=&quot;bash&quot;&gt;cat &amp;gt;~root/cloak-keys.txt &amp;lt;&amp;lt;HEREDOC
Your PUBLIC key is:                   ${_PUBKEY}
Your PRIVATE key is (keep it secret): ${_PRIVKEY}
HEREDOC&lt;/pre&gt;
  &lt;p id=&quot;G7FN&quot;&gt;Создадим конфиг для нашего сервиса:&lt;/p&gt;
  &lt;pre id=&quot;u4oY&quot; data-lang=&quot;bash&quot;&gt;mkdir -p $(dirname ${_CFG})

cat &amp;gt;${_CFG} &amp;lt;&amp;lt;HEREDOC
{
  &amp;quot;ProxyBook&amp;quot;: {
    &amp;quot;shadowsocks&amp;quot;: [
      &amp;quot;tcp&amp;quot;,
      &amp;quot;127.0.0.1:8388&amp;quot;
    ],
    &amp;quot;squid&amp;quot;: [
      &amp;quot;tcp&amp;quot;,
      &amp;quot;127.0.0.1:3128&amp;quot;
    ]
  },
  &amp;quot;BindAddr&amp;quot;: [
    &amp;quot;:443&amp;quot;
  ],
  &amp;quot;BypassUID&amp;quot;: [
    &amp;quot;${_UID}&amp;quot;
  ],
  &amp;quot;RedirAddr&amp;quot;: &amp;quot;mail.google.com&amp;quot;,
  &amp;quot;PrivateKey&amp;quot;: &amp;quot;${_PRIVKEY}&amp;quot;
}
HEREDOC&lt;/pre&gt;
  &lt;p id=&quot;EfS1&quot;&gt;Так в конфиге сервера, в секции &lt;strong&gt;ProxyBook &lt;/strong&gt;у нас два варианта подключения для клиентов:&lt;/p&gt;
  &lt;ul id=&quot;ZX7y&quot;&gt;
    &lt;li id=&quot;a61n&quot;&gt;&lt;strong&gt;shadowsocks&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;6Oae&quot;&gt;&lt;strong&gt;squid&lt;/strong&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;P0Cm&quot;&gt;Предполагается что сервисы, на которые будет выполняться перенаправление из туннеля, размещены локально и прослушивают порты 8388 и 3128 соответственно.&lt;/p&gt;
  &lt;p id=&quot;hccA&quot;&gt;Конфигурации для клиентов будут выглядеть следующим образом:&lt;/p&gt;
  &lt;pre id=&quot;5ePq&quot; data-lang=&quot;bash&quot;&gt;cat &amp;gt;${_CFGSHADOWSOCKS} &amp;lt;&amp;lt;HEREDOC
{
  &amp;quot;Transport&amp;quot;: &amp;quot;direct&amp;quot;,
  &amp;quot;ProxyMethod&amp;quot;: &amp;quot;shadowsocks&amp;quot;,
  &amp;quot;EncryptionMethod&amp;quot;: &amp;quot;plain&amp;quot;,
  &amp;quot;UID&amp;quot;: &amp;quot;${_UID}&amp;quot;,
  &amp;quot;PublicKey&amp;quot;: &amp;quot;${_PUBKEY}&amp;quot;,
  &amp;quot;ServerName&amp;quot;: &amp;quot;mail.google.com&amp;quot;,
  &amp;quot;NumConn&amp;quot;: 4,
  &amp;quot;BrowserSig&amp;quot;: &amp;quot;chrome&amp;quot;,
  &amp;quot;StreamTimeout&amp;quot;: 300
}
HEREDOC&lt;/pre&gt;
  &lt;pre id=&quot;RHy7&quot; data-lang=&quot;bash&quot;&gt;cat &amp;gt;${_CFGSQUID} &amp;lt;&amp;lt;HEREDOC
{
  &amp;quot;Transport&amp;quot;: &amp;quot;direct&amp;quot;,
  &amp;quot;ProxyMethod&amp;quot;: &amp;quot;squid&amp;quot;,
  &amp;quot;EncryptionMethod&amp;quot;: &amp;quot;aes-256-gcm&amp;quot;,
  &amp;quot;UID&amp;quot;: &amp;quot;${_UID}&amp;quot;,
  &amp;quot;PublicKey&amp;quot;: &amp;quot;${_PUBKEY}&amp;quot;,
  &amp;quot;ServerName&amp;quot;: &amp;quot;mail.google.com&amp;quot;,
  &amp;quot;NumConn&amp;quot;: 4,
  &amp;quot;BrowserSig&amp;quot;: &amp;quot;chrome&amp;quot;,
  &amp;quot;StreamTimeout&amp;quot;: 300
}
HEREDOC&lt;/pre&gt;
  &lt;p id=&quot;FYnw&quot;&gt;Проверим все конфигурации на наличие ошибок:&lt;/p&gt;
  &lt;pre id=&quot;fUAH&quot; data-lang=&quot;bash&quot;&gt;jq &amp;#x27;.&amp;#x27; ${_CFG}
jq &amp;#x27;.&amp;#x27; ${_CFGSHADOWSOCKS}
jq &amp;#x27;.&amp;#x27; ${_CFGSQUID}&lt;/pre&gt;
  &lt;p id=&quot;dGxR&quot;&gt;Установим и запустим службу:&lt;/p&gt;
  &lt;pre id=&quot;ZFOa&quot; data-lang=&quot;bash&quot;&gt;cat &amp;gt;${_SVC} &amp;lt;&amp;lt;HEREDOC
[Unit]
Description=Cloak Server
Documentation=https://github.com/cbeuw/Cloak/wiki
After=network-online.target

[Service]
Type=simple
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_BIND_SERVICE
ExecStart=${_APP} -c ${_CFG}
Restart=always

[Install]
WantedBy=multi-user.target
HEREDOC

systemctl daemon-reload

systemctl enable --now $(basename ${_SVC})

systemctl status $(basename ${_SVC})&lt;/pre&gt;
  &lt;p id=&quot;RXYA&quot;&gt;Удалим переменные, которые создавали для процесса установки:&lt;/p&gt;
  &lt;pre id=&quot;4VoJ&quot;&gt;unset _URL _APP _CFG _CFGSHADOWSOCKS _CFGSQUID_SVC _KEYS _PUBKEY _PRIVKEY _UID&lt;/pre&gt;
  &lt;p id=&quot;lLrW&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;USCa&quot;&gt;2. Установка Cloak Standalone Client&lt;/h2&gt;
  &lt;h3 id=&quot;nHZU&quot;&gt;2.1 Установка cloak-client&lt;/h3&gt;
  &lt;p id=&quot;pLPB&quot;&gt;Настроим переменные для процесса установки cloak-client:&lt;/p&gt;
  &lt;pre id=&quot;d8XZ&quot; data-lang=&quot;bash&quot;&gt;_URL=&amp;quot;https://github.com/cbeuw/Cloak/releases/download/v2.9.0/ck-client-linux-amd64-v2.9.0&amp;quot;
_APP=&amp;quot;/usr/bin/cloak-client&amp;quot;
_CFGSHADOWSOCKS=&amp;quot;/etc/cloak/cloak-client-shadowsocks-direct.json&amp;quot;
_CFGSQUID=&amp;quot;/etc/cloak/cloak-client-squid-direct.json&amp;quot;
_SVC=&amp;quot;/etc/systemd/system/cloak-client@.service&amp;quot;&lt;/pre&gt;
  &lt;p id=&quot;GBbc&quot;&gt;Загружаем и устанавливаем cloak-client из git:&lt;/p&gt;
  &lt;pre id=&quot;Eefr&quot; data-lang=&quot;bash&quot;&gt;wget -q -O ${_APP} ${_URL}
chmod a+x ${_APP}
chown 0:0 ${_APP}&lt;/pre&gt;
  &lt;p id=&quot;UJxs&quot;&gt;Конфигурация у нас есть на сервере, просто скопируем файл на клиентский комп. &lt;/p&gt;
  &lt;pre id=&quot;0not&quot; data-lang=&quot;bash&quot;&gt;mkdir -p /etc/cloak/&lt;/pre&gt;
  &lt;pre id=&quot;oRmg&quot; data-lang=&quot;bash&quot;&gt;cat &amp;gt;${_CFGSHADOWSOCKS} &amp;lt;&amp;lt;HEREDOC
{
  &amp;quot;Transport&amp;quot;: &amp;quot;direct&amp;quot;,
  &amp;quot;ProxyMethod&amp;quot;: &amp;quot;shadowsocks&amp;quot;,
  &amp;quot;EncryptionMethod&amp;quot;: &amp;quot;plain&amp;quot;,
  &amp;quot;UID&amp;quot;: &amp;quot;zA2FSjulYdZO/tf5xZSbjQ==&amp;quot;,
  &amp;quot;PublicKey&amp;quot;: &amp;quot;wHpXaRMi87TYMZUsavLclgRf/lENV2jt4mJ2SJkCk1w=&amp;quot;,
  &amp;quot;ServerName&amp;quot;: &amp;quot;mail.google.com&amp;quot;,
  &amp;quot;NumConn&amp;quot;: 4,
  &amp;quot;BrowserSig&amp;quot;: &amp;quot;chrome&amp;quot;,
  &amp;quot;StreamTimeout&amp;quot;: 300
}
HEREDOC&lt;/pre&gt;
  &lt;pre id=&quot;P0o2&quot; data-lang=&quot;bash&quot;&gt;cat &amp;gt;${_CFGSQUID} &amp;lt;&amp;lt;HEREDOC
{
  &amp;quot;Transport&amp;quot;: &amp;quot;direct&amp;quot;,
  &amp;quot;ProxyMethod&amp;quot;: &amp;quot;squid&amp;quot;,
  &amp;quot;EncryptionMethod&amp;quot;: &amp;quot;aes-256-gcm&amp;quot;,
  &amp;quot;UID&amp;quot;: &amp;quot;zA2FSjulYdZO/tf5xZSbjQ==&amp;quot;,
  &amp;quot;PublicKey&amp;quot;: &amp;quot;wHpXaRMi87TYMZUsavLclgRf/lENV2jt4mJ2SJkCk1w=&amp;quot;,
  &amp;quot;ServerName&amp;quot;: &amp;quot;mail.google.com&amp;quot;,
  &amp;quot;NumConn&amp;quot;: 4,
  &amp;quot;BrowserSig&amp;quot;: &amp;quot;chrome&amp;quot;,
  &amp;quot;StreamTimeout&amp;quot;: 300
}
HEREDOC&lt;/pre&gt;
  &lt;p id=&quot;XnmM&quot;&gt;Так как у нас два конфига, то и клиентских сервиса у нас будет два. Запускаться несколько служб будут через шаблон службы.&lt;/p&gt;
  &lt;p id=&quot;yo4i&quot;&gt;Шаблоны службы в &lt;strong&gt;systemd&lt;/strong&gt; имеют вид &lt;strong&gt;servicename@.service&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;wj0y&quot;&gt;Так же, помимо конфига для нашей службы, понадобится файл с переменными окружения службы. Так как службы у нас будет две, первая туннелирует shadowsocks, вторая squid, то и файлов конфигураций с переменными окружения тоже будет два.&lt;/p&gt;
  &lt;pre id=&quot;BmiE&quot; data-lang=&quot;bash&quot;&gt;cat &amp;gt;/etc/default/cloak-client-shadowsocks-direct &amp;lt;&amp;lt;HEREDOC
LISTENIP=127.0.0.1
LISTENPORT=8388
REMOTESERVER=&amp;quot;shadowsocks.example.com&amp;quot;
REMOTEPORT=443
HEREDOC&lt;/pre&gt;
  &lt;pre id=&quot;d181&quot; data-lang=&quot;bash&quot;&gt;cat &amp;gt;/etc/default/cloak-client-squid-direct &amp;lt;&amp;lt;HEREDOC
LISTENIP=127.0.0.1
LISTENPORT=3128
REMOTESERVER=&amp;quot;shadowsocks.example.com&amp;quot;
REMOTEPORT=443
HEREDOC&lt;/pre&gt;
  &lt;p id=&quot;ssXi&quot;&gt;Создадим конфиг службы и перезапустим systemd:&lt;/p&gt;
  &lt;pre id=&quot;Yack&quot; data-lang=&quot;bash&quot;&gt;cat &amp;gt;${_SVC} &amp;lt;&amp;lt;HEREDOC
[Unit]
Description=Cloak Client %i
Documentation=https://github.com/cbeuw/Cloak
After=network-online.target

[Service]
Type=simple
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_BIND_SERVICE
EnvironmentFile=/etc/default/%p-%i
ExecStart=${_APP} -c /etc/cloak/%p-%i.json -i \${LISTENIP} -l \${LISTENPORT} -s \${REMOTESERVER} -p \${REMOTEPORT}
Restart=always

[Install]
WantedBy=multi-user.target
HEREDOC

systemctl daemon-reload&lt;/pre&gt;
  &lt;p id=&quot;HOUD&quot;&gt;Включим автозапуск служб при старте системы и запустим их:&lt;/p&gt;
  &lt;pre id=&quot;eBtK&quot; data-lang=&quot;bash&quot;&gt;systemctl enable --now cloak-client@shadowsocks-direct
systemctl enable --now cloak-client@squid-direct&lt;/pre&gt;
  &lt;p id=&quot;tba3&quot;&gt;Проверяем что все работает:&lt;/p&gt;
  &lt;pre id=&quot;oOCE&quot; data-lang=&quot;bash&quot;&gt;systemctl status cloak-client@shadowsocks-direct
systemctl status cloak-client@squid-direct&lt;/pre&gt;
  &lt;p id=&quot;kffT&quot;&gt;Удаляем наши переменные:&lt;/p&gt;
  &lt;pre id=&quot;ggyv&quot; data-lang=&quot;bash&quot;&gt;unset _URL _APP _CFGSHADOWSOCKS _CFGSQUID _SVC&lt;/pre&gt;
  &lt;p id=&quot;c0hS&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;aGps&quot;&gt;Так как служба клиента запускается из шаблона, имеет смысл пояснить зависимости между параметрами в конфигурации службы и именами файлов с переменными окружения и конфигураций cloak-client.&lt;/p&gt;
  &lt;p id=&quot;IlZE&quot;&gt;Значимые параметры конфигурации службы:&lt;/p&gt;
  &lt;pre id=&quot;GxOU&quot; data-lang=&quot;bash&quot;&gt;EnvironmentFile=/etc/default/%p-%i&lt;/pre&gt;
  &lt;p id=&quot;sjc1&quot;&gt;&lt;strong&gt;/etc/default&lt;/strong&gt; - каталог в котором служба будет выполнять поиск файла с переменными окружения для запуска службы&lt;strong&gt;&lt;br /&gt;%p&lt;/strong&gt; - имя файла шаблона службы без &lt;strong&gt;@.service&lt;/strong&gt;, в нашем примере это &lt;strong&gt;cloak-client&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;%i&lt;/strong&gt; - параметр передаваемый после &lt;strong&gt;@&lt;/strong&gt; в имени шаблона службы&lt;/p&gt;
  &lt;pre id=&quot;npAZ&quot; data-lang=&quot;bash&quot;&gt;ExecStart=${_APP} -c /etc/cloak/%p-%i.json -i \${LISTENIP} -l \${LISTENPORT} -s \${REMOTESERVER} -p \${REMOTEPORT}&lt;/pre&gt;
  &lt;p id=&quot;HlPf&quot;&gt;&lt;strong&gt;-c /etc/cloak/%p-%i.json&lt;/strong&gt; - путь до файла конфигурации клиента. Имя файла конфигурации формируется по аналогии с именем файла содержащим переменные окружения службы.&lt;/p&gt;
  &lt;p id=&quot;CydA&quot;&gt;Если на удаленном сервере, где установлен cloak-server, уже настроена служба Squid, после запуска cloak-client можно пробовать подключиться к адресу 127.0.0.1 и порту 3128 для проверки работы HTTP прокси.&lt;/p&gt;
  &lt;p id=&quot;ICCD&quot;&gt;Для работы Shadowsocks в параметрах клиента shadowsocks необходимо указать адрес подключения 127.0.0.1 и порт 8388. После переконфигурирования клиента shadowsocks можно указать в браузере параметры SOCKS5 прокси сервера и проверить соединение.&lt;/p&gt;
  &lt;p id=&quot;CUK8&quot;&gt;Cloak не предоставляет инструменты проксирования, для этого используются shadowsocks или squid. Cloak предоставляет туннель весь трафик которого внешне выглядит как HTTPS, внутри же можно туннелировать любой TCP трафик.&lt;/p&gt;
  &lt;h3 id=&quot;gvUe&quot;&gt;2.2 Настройка работы cloak-client через реверс прокси или CDN&lt;/h3&gt;
  &lt;p id=&quot;6FSo&quot;&gt;Помимо работы напрямую Клиент-Сервер, cloak умеет работать через облачных провайдеров, например Cloud Flare, или reverse proxy. Подробно разбирать настройку CF не будем, рассмотрим настройку reverse proxy на базе nginx.&lt;/p&gt;
  &lt;p id=&quot;ApRv&quot;&gt;Настройка серверной части не изменится. В конфигурации клиента изменится параметр &lt;strong&gt;&amp;quot;Transport&amp;quot;: &amp;quot;direct&amp;quot;&lt;/strong&gt; на &lt;strong&gt;&amp;quot;Transport&amp;quot;: &amp;quot;CDN&amp;quot;&lt;/strong&gt; и добавится новый параметр &lt;strong&gt;&amp;quot;CDNWsUrlPath&amp;quot;: &amp;quot;/cloak-ws-shadowsocks&amp;quot;&lt;/strong&gt;. Итоговые конфигурации клиентов работающих через CDN будут выглядеть следующим образом:&lt;/p&gt;
  &lt;pre id=&quot;MQ3w&quot; data-lang=&quot;bash&quot;&gt;{
  &amp;quot;Transport&amp;quot;: &amp;quot;CDN&amp;quot;,
  &amp;quot;CDNWsUrlPath&amp;quot;: &amp;quot;/cloak-ws-shadowsocks&amp;quot;,
  &amp;quot;ProxyMethod&amp;quot;: &amp;quot;shadowsocks&amp;quot;,
  &amp;quot;EncryptionMethod&amp;quot;: &amp;quot;plain&amp;quot;,
  &amp;quot;UID&amp;quot;: &amp;quot;zA2FSjulYdZO/tf5xZSbjQ==&amp;quot;,
  &amp;quot;PublicKey&amp;quot;: &amp;quot;wHpXaRMi87TYMZUsavLclgRf/lENV2jt4mJ2SJkCk1w=&amp;quot;,
  &amp;quot;ServerName&amp;quot;: &amp;quot;mail.google.com&amp;quot;,
  &amp;quot;NumConn&amp;quot;: 4,
  &amp;quot;BrowserSig&amp;quot;: &amp;quot;chrome&amp;quot;,
  &amp;quot;StreamTimeout&amp;quot;: 300
}&lt;/pre&gt;
  &lt;pre id=&quot;LS8R&quot; data-lang=&quot;bash&quot;&gt;{
  &amp;quot;Transport&amp;quot;: &amp;quot;CDN&amp;quot;,
  &amp;quot;CDNWsUrlPath&amp;quot;: &amp;quot;/cloak-ws-squid&amp;quot;,
  &amp;quot;ProxyMethod&amp;quot;: &amp;quot;squid&amp;quot;,
  &amp;quot;EncryptionMethod&amp;quot;: &amp;quot;aes-256-gcm&amp;quot;,
  &amp;quot;UID&amp;quot;: &amp;quot;zA2FSjulYdZO/tf5xZSbjQ==&amp;quot;,
  &amp;quot;PublicKey&amp;quot;: &amp;quot;wHpXaRMi87TYMZUsavLclgRf/lENV2jt4mJ2SJkCk1w=&amp;quot;,
  &amp;quot;ServerName&amp;quot;: &amp;quot;mail.google.com&amp;quot;,
  &amp;quot;NumConn&amp;quot;: 4,
  &amp;quot;BrowserSig&amp;quot;: &amp;quot;chrome&amp;quot;,
  &amp;quot;StreamTimeout&amp;quot;: 300
}&lt;/pre&gt;
  &lt;p id=&quot;YuHT&quot;&gt;Теперь к настройке проксирования websockets в nginx. Подробная документация по проксированию websockets: &lt;a href=&quot;https://nginx.org/ru/docs/http/websocket.html&quot; target=&quot;_blank&quot;&gt;https://nginx.org/ru/docs/http/websocket.html&lt;/a&gt;&lt;/p&gt;
  &lt;pre id=&quot;JTxm&quot; data-lang=&quot;bash&quot;&gt;cat &amp;gt;/etc/nginx/conf.d/01_upstream.conf &amp;lt;&amp;lt;HEREDOC
upstream cloak-server {
    server 127.0.0.1:44300;
}
HEREDOC&lt;/pre&gt;
  &lt;pre id=&quot;YG2h&quot; data-lang=&quot;bash&quot;&gt;cat &amp;gt;/etc/nginx/conf.d/02_map.conf &amp;lt;&amp;lt;HEREDOC
map \$http_upgrade \$connection_upgrade {
    default upgrade;
    &amp;#x27;&amp;#x27;      close;
}
HEREDOC&lt;/pre&gt;
  &lt;pre id=&quot;7zCq&quot; data-lang=&quot;bash&quot;&gt;server {

    listen 443 ssl;
    
    ...
    
    location /cloak-ws-shadowsocks {

        proxy_pass http://cloak-server;

        proxy_http_version 1.1;
        proxy_set_header Upgrade    \$http_upgrade;
        proxy_set_header Connection \$connection_upgrade;
    }

    location /cloak-ws-squid {

        proxy_pass http://cloak-server;

        proxy_http_version 1.1;
        proxy_set_header Upgrade    \$http_upgrade;
        proxy_set_header Connection \$connection_upgrade;
    }
    
    ...

}&lt;/pre&gt;
  &lt;p id=&quot;jwGH&quot;&gt;Если cloak-server размещается на том же сервере где запушен nginx, придется изменить порт cloak-server на другой, например 44300. В файле &lt;strong&gt;01_upstream.conf&lt;/strong&gt; это видно. В то же время с реверса нам ни что не мешает маршрутизировать трафик на любой другой сервер сети где размещена служба cloak-server, тогда менять порт для cloak-server нет необходимости. Важно в параметре &lt;strong&gt;proxy_pass &lt;/strong&gt;указывать протокол &lt;strong&gt;http &lt;/strong&gt;потому как &lt;strong&gt;https &lt;/strong&gt;схема не поддерживается в cloak-server на сервере назначения.&lt;/p&gt;
  &lt;p id=&quot;ciQS&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;NuPt&quot;&gt;USDT/TRC20: TW4ZRcrb4qBRb9uSNiu9wJCWveCp4rLoGL&lt;/p&gt;

</content></entry><entry><id>yachmenev:vlmcsd</id><link rel="alternate" type="text/html" href="https://teletype.in/@yachmenev/vlmcsd?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=yachmenev"></link><title>Установка сервера для активации Windows и Office</title><published>2024-06-10T09:11:20.151Z</published><updated>2024-06-11T19:35:16.555Z</updated><category term="kms" label="kms"></category><summary type="html">Скрипт скачивает архив, распаковывает его и устанавливает файлы приложения, справки, конфига и системной службы. Для настройки клиента KMS на Windows используется скрипт slmgr.vbs</summary><content type="html">
  &lt;pre id=&quot;hkT9&quot; data-lang=&quot;bash&quot;&gt;URL=&amp;quot;https://github.com/Wind4/vlmcsd/releases/download/svn1113/binaries.tar.gz&amp;quot;

cd ~
mkdir vlmcsd &amp;amp;&amp;amp; cd vlmcsd
wget -q ${URL}
tar xzf $(basename ${URL})
install --mode=0755 binaries/Linux/intel/static/vlmcs-x64-musl-static /usr/bin/vlmcs
install --mode=0755 binaries/Linux/intel/static/vlmcsd-x64-musl-static /usr/bin/vlmcsd
install --mode=0755 binaries/Linux/intel/static/vlmcsdmulti-x64-musl-static /usr/bin/vlmcsdmulti

cd .. &amp;amp;&amp;amp; rm -rf vlmcsd

mkdir -p /etc/vlmcsd/
wget -q -O /etc/vlmcsd/vlmcsd.ini https://raw.githubusercontent.com/Wind4/vlmcsd/master/etc/vlmcsd.ini
wget -q -O /etc/vlmcsd/vlmcsd.kmd https://github.com/Wind4/vlmcsd/raw/master/etc/vlmcsd.kmd

wget -q -O - https://raw.githubusercontent.com/Wind4/vlmcsd/master/man/vlmcs.1 | gzip &amp;gt;/usr/share/man/man1/vlmcs.1.gz
wget -q -O - https://raw.githubusercontent.com/Wind4/vlmcsd/master/man/vlmcsd.7 | gzip &amp;gt;/usr/share/man/man7/vlmcsd.7.gz
wget -q -O - https://raw.githubusercontent.com/Wind4/vlmcsd/master/man/vlmcsd.8 | gzip &amp;gt;/usr/share/man/man8/vlmcsd.8.gz
wget -q -O - https://raw.githubusercontent.com/Wind4/vlmcsd/master/man/vlmcsd.ini.5 | gzip &amp;gt;/usr/share/man/man5/vlmcsd.ini.5.gz
wget -q -O - https://raw.githubusercontent.com/Wind4/vlmcsd/master/man/vlmcsdmulti.1 | gzip &amp;gt;/usr/share/man/man1/vlmcsdmulti.1.gz

wget -q -O /etc/systemd/system/vlmcsd.service https://raw.githubusercontent.com/Wind4/vlmcsd-debian/master/vlmcsd.service

systemctl daemon-reload
systemctl enable --now vlmcsd.service
systemctl status vlmcsd.service

unset URL&lt;/pre&gt;
  &lt;p id=&quot;xpZS&quot;&gt;Скрипт скачивает архив, распаковывает его и устанавливает файлы приложения, справки, конфига и системной службы. Для настройки клиента KMS на Windows используется скрипт &lt;strong&gt;slmgr.vbs&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;mT2I&quot;&gt;Скрипт &lt;strong&gt;slmgr.vbs&lt;/strong&gt; идет в стандартной поставке Windows и отдельной установки не требует.&lt;/p&gt;
  &lt;p id=&quot;TmO2&quot;&gt;Посмотреть настройки:&lt;/p&gt;
  &lt;pre id=&quot;jYOe&quot;&gt;slmgr /dli&lt;/pre&gt;
  &lt;pre id=&quot;WAWc&quot;&gt;slmgr /dlv&lt;/pre&gt;
  &lt;p id=&quot;k6fJ&quot;&gt;Задать сервер KMS:&lt;/p&gt;
  &lt;pre id=&quot;oXrc&quot;&gt;slmgr /skms IP&lt;/pre&gt;
  &lt;pre id=&quot;QDR3&quot;&gt;slmgr /skms FQDN&lt;/pre&gt;
  &lt;p id=&quot;yqzO&quot;&gt;Очистить настроенные параметры:&lt;/p&gt;
  &lt;pre id=&quot;tnag&quot;&gt;slmgr /ckms&lt;/pre&gt;
  &lt;p id=&quot;qjCK&quot;&gt;Установить ключ:&lt;/p&gt;
  &lt;pre id=&quot;OHBA&quot;&gt;slmgr /ipk NPPR9-FWDCX-D2C8J-H872K-2YT43&lt;/pre&gt;
  &lt;p id=&quot;XKza&quot;&gt;Если у вас есть собственный домен (для примера будем использовать имя домена example.com) можно создать SRV запись для публикации KMS сервера:&lt;/p&gt;
  &lt;pre id=&quot;6FeF&quot;&gt;Имя: _vlmcs._tcp.
Тип: SRV
Значение: kms.example.com
Приоритет: 0
Вес: 0
Порт: 1688

Имя: kms
Тип: A
Значение: IP адрес вашего сервера&lt;/pre&gt;
  &lt;p id=&quot;cRVt&quot;&gt;Записей типа А с именем kms может быть несколько если у вас несколько kms серверов. Если сервер один, в SRV записи можно указать IP сервера и не регистрировать А запись. По умолчанию KMS использует протокол TCP, порт 1688.&lt;/p&gt;
  &lt;p id=&quot;F641&quot;&gt;Если настраиваем DNS домен с публикацией служб KMS, настройка клиента тоже будет немного отличаться.&lt;/p&gt;
  &lt;p id=&quot;BTF3&quot;&gt;Если компьютер не в домене, домен поиска можно задать в настройках сетевого интерфейса - Кнопка Дополнительно, вкладка DNS.&lt;/p&gt;
  &lt;p id=&quot;SaCO&quot;&gt;Если компьютер получает параметры сети от DHCP сервера, в параметрах DHCP сервера можно указать опцию  &lt;strong&gt;15 - DNS имя домена&lt;/strong&gt;. В нашем случае имя домена будет example.com, так как публикация службы KMS выполнена в корне домена второго уровня.&lt;/p&gt;
  &lt;p id=&quot;R6Kj&quot;&gt;Еще один вариант задания KMS сервера через ранее использованный &lt;strong&gt;slmgr.vbs&lt;/strong&gt;:&lt;/p&gt;
  &lt;pre id=&quot;bw0y&quot;&gt;slmgr /skms-domain example.com&lt;/pre&gt;
  &lt;p id=&quot;SNtq&quot;&gt;Очистить настройку домена поиска KMS:&lt;/p&gt;
  &lt;pre id=&quot;6Ard&quot;&gt;slmgr /ckms-domain&lt;/pre&gt;
  &lt;p id=&quot;s54s&quot;&gt;Теперь, когда все настроено, можно пробовать активировать систему:&lt;/p&gt;
  &lt;pre id=&quot;jDBq&quot;&gt;slmgr /ato&lt;/pre&gt;
  &lt;p id=&quot;Bslg&quot;&gt;Через службы KMS можно так же активировать MS Office. Начиная с версии Office 2019 отдельная настройка для этого не требуется, офисный пакет читает настройки активации Windows. До версии Office 2016 включительно, необходимо настраивать параметры KMS сервера собственным скриптом расположенным по пути:&lt;/p&gt;
  &lt;pre id=&quot;D2ZS&quot;&gt;&amp;quot;C:\Program Files\Microsoft Office\Office16\OSPP.VBS&amp;quot;&lt;/pre&gt;
  &lt;p id=&quot;eyA2&quot;&gt;Путь до файла OSPP.VBS может отличаться в зависимости от разрядности 32/64 и версии Office.&lt;/p&gt;
  &lt;p id=&quot;f4Ya&quot;&gt;Более подробно описание работы с KMS и ключи активации можно найти на сайте Miscrosoft - &lt;a href=&quot;https://learn.microsoft.com/ru-ru/windows-server/get-started/kms-client-activation-keys&quot; target=&quot;_blank&quot;&gt;https://learn.microsoft.com/ru-ru/windows-server/get-started/kms-client-activation-keys&lt;/a&gt;&lt;/p&gt;

</content></entry><entry><id>yachmenev:shadowsocks-rust</id><link rel="alternate" type="text/html" href="https://teletype.in/@yachmenev/shadowsocks-rust?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=yachmenev"></link><title>Установка и настройка Shadowsocks-rust</title><published>2024-06-09T22:49:39.773Z</published><updated>2025-03-05T14:52:40.840Z</updated><category term="shadowsocks" label="shadowsocks"></category><summary type="html">Установка и настройка Shadowsocks-rust</summary><content type="html">
  &lt;h2 id=&quot;uDsT&quot;&gt;1. Установка сервера Shadowsocks-rust&lt;/h2&gt;
  &lt;h3 id=&quot;wdA7&quot;&gt;1.1 Используемая документация&lt;/h3&gt;
  &lt;ul id=&quot;MIaE&quot;&gt;
    &lt;li id=&quot;95Vu&quot;&gt;&lt;a href=&quot;https://shadowsocks.org/doc/configs.html&quot; target=&quot;_blank&quot;&gt;https://shadowsocks.org/doc/configs.html&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;LNnb&quot;&gt;&lt;a href=&quot;https://shadowsocks.org/doc/advanced.html&quot; target=&quot;_blank&quot;&gt;https://shadowsocks.org/doc/advanced.html&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;WRD8&quot;&gt;&lt;a href=&quot;https://shadowsocks.org/doc/sip002.html&quot; target=&quot;_blank&quot;&gt;https://shadowsocks.org/doc/sip002.html&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;qlRP&quot;&gt;&lt;a href=&quot;https://shadowsocks.org/doc/sip003.html&quot; target=&quot;_blank&quot;&gt;https://shadowsocks.org/doc/sip003.html&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;nSJw&quot;&gt;&lt;a href=&quot;https://shadowsocks.org/doc/sip008.html&quot; target=&quot;_blank&quot;&gt;https://shadowsocks.org/doc/sip008.html&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;d0Tq&quot;&gt;&lt;a href=&quot;https://shadowsocks.org/doc/sip022.html&quot; target=&quot;_blank&quot;&gt;https://shadowsocks.org/doc/sip022.html&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;oGgP&quot;&gt;&lt;a href=&quot;https://shadowsocks.org/doc/sip023.html&quot; target=&quot;_blank&quot;&gt;https://shadowsocks.org/doc/sip023.html&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;dSwa&quot;&gt;&lt;a href=&quot;https://github.com/shadowsocks/shadowsocks-rust?tab=readme-ov-file#configuration&quot; target=&quot;_blank&quot;&gt;https://github.com/shadowsocks/shadowsocks-rust?tab=readme-ov-file#configuration&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;dmaz&quot;&gt;&lt;a href=&quot;https://jqlang.github.io/jq/manual/&quot; target=&quot;_blank&quot;&gt;https://jqlang.github.io/jq/manual/&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;C6PY&quot;&gt;1.2 Дополнительное ПО&lt;/h3&gt;
  &lt;p id=&quot;b7W7&quot;&gt;Для проверки корректности файлов JSON нам понадобится утилита jq. Установить ее можно из репозиториев или напрямую из git:&lt;/p&gt;
  &lt;pre id=&quot;R35y&quot; data-lang=&quot;bash&quot;&gt;_URL=&amp;quot;https://github.com/jqlang/jq/releases/download/jq-1.7.1/jq-linux-amd64&amp;quot;
_APP=&amp;quot;/usr/bin/jq&amp;quot;

wget -q -O ${_APP} ${_URL}
chmod a+x ${_APP}
chown 0:0 ${_APP}

unset _URL _APP&lt;/pre&gt;
  &lt;p id=&quot;cszM&quot;&gt;Проверку можно выполнить командой:&lt;/p&gt;
  &lt;pre id=&quot;M07x&quot;&gt;jq &amp;#x27;.&amp;#x27; &amp;lt;path_to_file&amp;gt;&lt;/pre&gt;
  &lt;h3 id=&quot;JEb6&quot;&gt;1.3 Предварительная настройка системы&lt;/h3&gt;
  &lt;p id=&quot;ZmgZ&quot;&gt;На странице &lt;a href=&quot;https://shadowsocks.org/doc/advanced.html&quot; target=&quot;_blank&quot;&gt;Advanced configurations&lt;/a&gt; рекомендуют изменить ограничения на количество открытых файловых дескрипторов, но в файле &lt;strong&gt;/etc/security/limits.conf&lt;/strong&gt; прямо сказано что для служб это не работает и применяется только для пользователей вошедших в систему через PAM. Чтобы изменить количество открытых файловых дескрипторов для службы, необходимо в файле конфигурации службы добавить строку:&lt;/p&gt;
  &lt;pre id=&quot;KyOt&quot; data-lang=&quot;bash&quot;&gt;LimitNOFILE=51200&lt;/pre&gt;
  &lt;p id=&quot;0z8T&quot;&gt;Установим рекомендуемые системные переменные:&lt;/p&gt;
  &lt;pre id=&quot;qIag&quot; data-lang=&quot;bash&quot;&gt;cat &amp;gt;/etc/sysctl.d/00-shadowsocks.conf &amp;lt;&amp;lt;HEREDOC
fs.file-max = 51200

net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.core.netdev_max_backlog = 250000
net.core.somaxconn = 4096

net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.ip_local_port_range = 10000 65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_fastopen = 3
net.ipv4.tcp_mem = 25600 51200 102400
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
net.ipv4.tcp_mtu_probing = 1
net.ipv4.tcp_congestion_control = hybla
HEREDOC

sysctl -p /etc/sysctl.d/00-shadowsocks.conf&lt;/pre&gt;
  &lt;h3 id=&quot;6tns&quot;&gt;1.4 Установка сервера Shadowsocks-rust&lt;/h3&gt;
  &lt;p id=&quot;4kwf&quot;&gt;Настроим переменные для процесса установки:&lt;/p&gt;
  &lt;pre id=&quot;cuhV&quot; data-lang=&quot;bash&quot;&gt;URL=&amp;quot;https://github.com/shadowsocks/shadowsocks-rust/releases/download/v1.19.2/shadowsocks-v1.19.2.x86_64-unknown-linux-musl.tar.xz&amp;quot;
CONF=&amp;quot;/etc/shadowsocks-rust/server.json&amp;quot;
SERVICE=&amp;quot;/etc/systemd/system/shadowsocks-rust.service&amp;quot;&lt;/pre&gt;
  &lt;p id=&quot;BaNF&quot;&gt;Загружаем и устанавливаем Shadowsocks-rust из git:&lt;/p&gt;
  &lt;pre id=&quot;kahr&quot; data-lang=&quot;bash&quot;&gt;wget -q -O - ${URL} | tar --xz --extract
install --mode=0755 --owner=root --group=root --preserve-timestamps -D --target-directory=/usr/bin ssmanager ssserver sslocal ssservice ssurl
rm ssmanager ssserver sslocal ssservice ssurl&lt;/pre&gt;
  &lt;p id=&quot;vRcw&quot;&gt;&lt;strong&gt;ssserver &lt;/strong&gt;- серверная часть Shadowsocks-rust&lt;br /&gt;&lt;strong&gt;sslocal &lt;/strong&gt;- клиентская часть Shadowsocks-rust&lt;br /&gt;&lt;strong&gt;ssservice &lt;/strong&gt;- серверная/клиентская часть Shadowsocks-rust&lt;br /&gt;&lt;strong&gt;ssurl &lt;/strong&gt;- утилита для генерации qr-code и/или ссылки на подключение к нашему серверу&lt;/p&gt;
  &lt;p id=&quot;Vmuf&quot;&gt;Для нашего конфига будем использовать &lt;strong&gt;ssservice&lt;/strong&gt;, хотя ни кто не запрещает заменить его на &lt;strong&gt;ssserver&lt;/strong&gt;. Все приложения независимы друг от друга.&lt;/p&gt;
  &lt;p id=&quot;0y9G&quot;&gt;В данном примере будут использоваться алгоритмы шифрования использующие длину ключа 32 байта:&lt;/p&gt;
  &lt;ul id=&quot;22Vp&quot;&gt;
    &lt;li id=&quot;umRM&quot;&gt;aes-256-gcm&lt;/li&gt;
    &lt;li id=&quot;HLU6&quot;&gt;2022-blake3-aes-256-gcm&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;dF2x&quot;&gt;Алгоритм шифрования &lt;strong&gt;aes-256-gcm&lt;/strong&gt; поддерживается всеми клиентами в отличие от более нового &lt;strong&gt;2022-blake3-aes-256-gcm&lt;/strong&gt;. В &lt;a href=&quot;https://github.com/shadowsocks/shadowsocks-rust?tab=readme-ov-file#supported-ciphers&quot; target=&quot;_blank&quot;&gt;списке&lt;/a&gt; поддерживаемых алгоритмов актуальными числятся &lt;strong&gt;AEAD Ciphers&lt;/strong&gt; и &lt;strong&gt;AEAD 2022 Ciphers&lt;/strong&gt;, все остальные помечены как Deprecated.&lt;/p&gt;
  &lt;p id=&quot;yb2g&quot;&gt;&lt;strong&gt;AEAD Ciphers&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;M3ix&quot;&gt;
    &lt;li id=&quot;YdJd&quot;&gt;aes-128-gcm&lt;/li&gt;
    &lt;li id=&quot;OXlY&quot;&gt;aes-256-gcm&lt;/li&gt;
    &lt;li id=&quot;Asd1&quot;&gt;chacha20-ietf-poly1305&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;6GLi&quot;&gt;&lt;strong&gt;AEAD 2022 Ciphers&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;NwT9&quot;&gt;
    &lt;li id=&quot;bkvG&quot;&gt;2022-blake3-aes-128-gcm&lt;/li&gt;
    &lt;li id=&quot;D6I3&quot;&gt;2022-blake3-aes-256-gcm&lt;/li&gt;
    &lt;li id=&quot;qIvM&quot;&gt;2022-blake3-chacha20-poly1305&lt;/li&gt;
    &lt;li id=&quot;UBuO&quot;&gt;2022-blake3-chacha8-poly1305&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;u5uf&quot;&gt;Сгенерировать ключ можно через &lt;strong&gt;ssservice&lt;/strong&gt; или &lt;strong&gt;openssl&lt;/strong&gt;:&lt;/p&gt;
  &lt;pre id=&quot;aM3y&quot; data-lang=&quot;bash&quot;&gt;ssservice genkey --encrypt-method aes-256-gcm&lt;/pre&gt;
  &lt;pre id=&quot;aM3y&quot; data-lang=&quot;bash&quot;&gt;openssl rand -base64 32&lt;/pre&gt;
  &lt;p id=&quot;GVog&quot;&gt;Можем сгенерировать один пароль для всех алгоритмов или под каждый алгоритм свой ключ. Для упрощения данного примера сделаем один ключ для всех алгоритмов поддерживаемых нашим сервером:&lt;/p&gt;
  &lt;pre id=&quot;TEJ4&quot; data-lang=&quot;bash&quot;&gt;PASS=$(ssservice genkey --encrypt-method aes-256-gcm)&lt;/pre&gt;
  &lt;p id=&quot;xSWe&quot;&gt;Создадим каталог для нашего будущего конфига:&lt;/p&gt;
  &lt;pre id=&quot;XnTg&quot; data-lang=&quot;bash&quot;&gt;mkdir -p $(dirname ${CONF})&lt;/pre&gt;
  &lt;p id=&quot;53Hl&quot;&gt;И сам конфиг:&lt;/p&gt;
  &lt;pre id=&quot;JHBT&quot; data-lang=&quot;bash&quot;&gt;cat &amp;gt;${CONF} &amp;lt;&amp;lt;HEREDOC
{
  &amp;quot;udp_timeout&amp;quot;: 300,
  &amp;quot;udp_max_associations&amp;quot;: 512,
  &amp;quot;mode&amp;quot;: &amp;quot;tcp_and_udp&amp;quot;,
  &amp;quot;fast_open&amp;quot;: true,
  &amp;quot;timeout&amp;quot;: 300,
  &amp;quot;servers&amp;quot;: [
    {
      &amp;quot;server&amp;quot;: &amp;quot;0.0.0.0&amp;quot;,
      &amp;quot;server_port&amp;quot;: 11443,
      &amp;quot;method&amp;quot;: &amp;quot;aes-256-gcm&amp;quot;,
      &amp;quot;password&amp;quot;: &amp;quot;${PASS}&amp;quot;
    },
    {
      &amp;quot;server&amp;quot;: &amp;quot;0.0.0.0&amp;quot;,
      &amp;quot;server_port&amp;quot;: 12443,
      &amp;quot;method&amp;quot;: &amp;quot;2022-blake3-aes-256-gcm&amp;quot;,
      &amp;quot;password&amp;quot;: &amp;quot;${PASS}&amp;quot;
    },
    {
      &amp;quot;disabled&amp;quot;: true,
      &amp;quot;server&amp;quot;: &amp;quot;0.0.0.0&amp;quot;,
      &amp;quot;server_port&amp;quot;: 13443,
      &amp;quot;method&amp;quot;: &amp;quot;2022-blake3-aes-256-gcm&amp;quot;,
      &amp;quot;password&amp;quot;: &amp;quot;${PASS}&amp;quot;,
      &amp;quot;users&amp;quot;: [
        {
          &amp;quot;name&amp;quot;: &amp;quot;user1&amp;quot;,
          &amp;quot;password&amp;quot;: &amp;quot;$(ssservice genkey --encrypt-method aes-256-gcm)&amp;quot;
        },
        {
          &amp;quot;name&amp;quot;: &amp;quot;user2&amp;quot;,
          &amp;quot;password&amp;quot;: &amp;quot;$(ssservice genkey --encrypt-method aes-256-gcm)&amp;quot;
        }
      ]
    }
  ]
}
HEREDOC&lt;/pre&gt;
  &lt;p id=&quot;TyXY&quot;&gt;Если мы хотим разграничить доступ по пользователям, с применением шифрования &lt;strong&gt;aes-256-gcm&lt;/strong&gt; для этого придется использовать отдельный порт для каждого пользователя. В версии &lt;strong&gt;2022-blake3-aes-256-gcm&lt;/strong&gt; это поправили, стало возможным создавать дополнительные пользовательские пароли. Так же за счет этого стала возможна работа через relay (поддерживается в некоторых реализациях shadowsocks серверов). Формат пароля для пользователя указывается в виде пароля сервера и пароля пользователя разделенных двоеточием. Поддержка пользователей реализована не для всех алгоритмов &lt;strong&gt;AEAD 2022 Ciphers&lt;/strong&gt;, только для &lt;strong&gt;2022-blake3-aes-256-gcm&lt;/strong&gt;. Если необходимо временно отключить какой-то из конфигов сервера, можно добавить строку &lt;strong&gt;&amp;quot;disabled&amp;quot;: true,&lt;/strong&gt; в начало соответствующей секции и перезапустить сервис &lt;strong&gt;shadowsocks-rust&lt;/strong&gt;:&lt;/p&gt;
  &lt;pre id=&quot;cQXQ&quot; data-lang=&quot;bash&quot;&gt;systemctl restart shadowsocks-rust.service&lt;/pre&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;4dow&quot;&gt;Пример конфигурации сервера и клиентов с разделением по пользователям:&lt;/p&gt;
  &lt;p id=&quot;ZNA3&quot;&gt;&lt;strong&gt;server.json&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;4mHc&quot; data-lang=&quot;bash&quot;&gt;{
      &amp;quot;server&amp;quot;: &amp;quot;0.0.0.0&amp;quot;,
      &amp;quot;server_port&amp;quot;: 13443,
      &amp;quot;method&amp;quot;: &amp;quot;2022-blake3-aes-256-gcm&amp;quot;,
      &amp;quot;password&amp;quot;: &amp;quot;zZyWP+OBQWG5YmL0flJyNTZdeUORlZw1urCbIlhZHmA=&amp;quot;,
      &amp;quot;users&amp;quot;: [
        {
          &amp;quot;name&amp;quot;: &amp;quot;user1&amp;quot;,
          &amp;quot;password&amp;quot;: &amp;quot;XtXtAUk3wUWjvJ336HD69uTSTgRzVwBpon1ACj03py8=&amp;quot;
        },
        {
          &amp;quot;name&amp;quot;: &amp;quot;user2&amp;quot;,
          &amp;quot;password&amp;quot;: &amp;quot;2tP/krYV6RNBqM0xwXKwYi0af1Rs6lk23wpBHWYYoNo=&amp;quot;
        }
      ]
}&lt;/pre&gt;
  &lt;p id=&quot;8rOJ&quot;&gt;&lt;strong&gt;user1.json&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;Bnau&quot; data-lang=&quot;bash&quot;&gt;{
      &amp;quot;server&amp;quot;: &amp;quot;shadowsocks.example.com&amp;quot;,
      &amp;quot;server_port&amp;quot;: 13443,
      &amp;quot;method&amp;quot;: &amp;quot;2022-blake3-aes-256-gcm&amp;quot;,
      &amp;quot;password&amp;quot;: &amp;quot;zZyWP+OBQWG5YmL0flJyNTZdeUORlZw1urCbIlhZHmA=:XtXtAUk3wUWjvJ336HD69uTSTgRzVwBpon1ACj03py8=&amp;quot;
	  &amp;quot;local_address&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,
      &amp;quot;local_port&amp;quot;: 1080
}&lt;/pre&gt;
  &lt;p id=&quot;Ewtd&quot;&gt;&lt;strong&gt;user2.json&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;rBeb&quot; data-lang=&quot;bash&quot;&gt;{
      &amp;quot;server&amp;quot;: &amp;quot;shadowsocks.example.com&amp;quot;,
      &amp;quot;server_port&amp;quot;: 13443,
      &amp;quot;method&amp;quot;: &amp;quot;2022-blake3-aes-256-gcm&amp;quot;,
      &amp;quot;password&amp;quot;: &amp;quot;zZyWP+OBQWG5YmL0flJyNTZdeUORlZw1urCbIlhZHmA=:2tP/krYV6RNBqM0xwXKwYi0af1Rs6lk23wpBHWYYoNo=&amp;quot;
	  &amp;quot;local_address&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,
      &amp;quot;local_port&amp;quot;: 1080
}&lt;/pre&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;d3OR&quot;&gt;Создадим для запуска службы отдельного пользователя:&lt;/p&gt;
  &lt;pre id=&quot;bSIu&quot; data-lang=&quot;bash&quot;&gt;useradd --system --home-dir /nonexistent --no-create-home --shell /usr/sbin/nologin shadowsocks&lt;/pre&gt;
  &lt;p id=&quot;v48L&quot;&gt;В целом этого можно и не делать, тогда в конфиге службы можно не указывать параметры User и Group, но в целях безопасности лучше запускать службу от непривилегированного пользователя.&lt;/p&gt;
  &lt;p id=&quot;fg6b&quot;&gt;Теперь создадим Unit файл для нашей службы:&lt;/p&gt;
  &lt;pre id=&quot;pta3&quot; data-lang=&quot;bash&quot;&gt;cat &amp;gt;${SERVICE} &amp;lt;&amp;lt;HEREDOC
[Unit]
Description=Shadowsocks-rust Server
Documentation=https://github.com/shadowsocks/shadowsocks-rust
Documentation=https://shadowsocks.org/doc/configs.html
After=network-online.target

[Service]
Type=simple
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_BIND_SERVICE
User=shadowsocks
Group=shadowsocks
LimitNOFILE=51200
ExecStart=/usr/bin/ssservice server -c ${CONF}

[Install]
WantedBy=multi-user.target
HEREDOC&lt;/pre&gt;
  &lt;p id=&quot;WXGS&quot;&gt;Выполним reload для systemctl, чтобы наш файл службы появился в списке сервисов:&lt;/p&gt;
  &lt;pre id=&quot;bAq7&quot; data-lang=&quot;bash&quot;&gt;systemctl daemon-reload&lt;/pre&gt;
  &lt;p id=&quot;lg3D&quot;&gt;Включим автозапуск службы и запустим её:&lt;/p&gt;
  &lt;pre id=&quot;rFDT&quot; data-lang=&quot;bash&quot;&gt;systemctl enable --now $(basename ${SERVICE})&lt;/pre&gt;
  &lt;p id=&quot;Tk8f&quot;&gt;Проверим что в процессе запуска нет ошибок и служба запустилась:&lt;/p&gt;
  &lt;pre id=&quot;5o5E&quot; data-lang=&quot;bash&quot;&gt;systemctl status $(basename ${SERVICE})&lt;/pre&gt;
  &lt;p id=&quot;ZbLv&quot;&gt;Удаляем наши переменные или закрываем консоль:&lt;/p&gt;
  &lt;pre id=&quot;MSRk&quot; data-lang=&quot;bash&quot;&gt;unset URL
unset CONF
unset SERVICE
unset PASS&lt;/pre&gt;
  &lt;h2 id=&quot;NU1R&quot;&gt;2. Обновление сервера Shadowsocks-rust&lt;/h2&gt;
  &lt;pre id=&quot;9yYF&quot; data-lang=&quot;bash&quot;&gt;URL=&amp;quot;https://github.com/shadowsocks/shadowsocks-rust/releases/download/v1.19.2/shadowsocks-v1.19.2.x86_64-unknown-linux-musl.tar.xz&amp;quot;

systemctl stop shadowsocks-rust

wget -q -O - ${URL} | tar --xz --extract
install --mode=0755 --owner=root --group=root --preserve-timestamps -D --target-directory=/usr/bin ssmanager ssserver sslocal ssservice ssurl
rm ssmanager ssserver sslocal ssservice ssurl

systemctl start shadowsocks-rust
systemctl status shadowsocks-rust

unset URL&lt;/pre&gt;
  &lt;h2 id=&quot;Hhzq&quot;&gt;3. Удаление сервера Shadowsocks-rust&lt;/h2&gt;
  &lt;pre id=&quot;wr1L&quot; data-lang=&quot;bash&quot;&gt;CONF=&amp;quot;/etc/shadowsocks-rust/server.json&amp;quot;
SERVICE=&amp;quot;/etc/systemd/system/shadowsocks-rust.service&amp;quot;

systemctl disable --now shadowsocks-rust
rm ${SERVICE}
rm -rf $(dirname ${CONF})
rm /usr/bin/{ssmanager,ssserver,sslocal,ssservice,ssurl}

userdel shadowsocks

unset CONF
unset SERVICE&lt;/pre&gt;
  &lt;h2 id=&quot;HaMs&quot;&gt;4. Установка клиента Shadowsocks-rust Linux&lt;/h2&gt;
  &lt;p id=&quot;H1uR&quot;&gt;Установка клиентской части Shadowsocks-rust выполняется точно таким же образом как и серверной, разница будет только в конфигурации:&lt;/p&gt;
  &lt;pre id=&quot;lL6J&quot; data-lang=&quot;bash&quot;&gt;URL=&amp;quot;https://github.com/shadowsocks/shadowsocks-rust/releases/download/v1.19.2/shadowsocks-v1.19.2.x86_64-unknown-linux-musl.tar.xz&amp;quot;
CONF=&amp;quot;/etc/shadowsocks-rust/client.json&amp;quot;
SERVICE=&amp;quot;/etc/systemd/system/shadowsocks-rust.service&amp;quot;

wget -q -O - ${URL} | tar --xz --extract
install --mode=0755 --owner=root --group=root --preserve-timestamps -D --target-directory=/usr/bin ssmanager ssserver sslocal ssservice ssurl
rm ssmanager ssserver sslocal ssservice ssurl

mkdir -p $(dirname ${CONF})

cat &amp;gt;${CONF} &amp;lt;&amp;lt;HEREDOC
{
  &amp;quot;udp_timeout&amp;quot;: 300,
  &amp;quot;udp_max_associations&amp;quot;: 512,
  &amp;quot;mode&amp;quot;: &amp;quot;tcp_and_udp&amp;quot;,
  &amp;quot;fast_open&amp;quot;: true,
  &amp;quot;timeout&amp;quot;: 300,
  &amp;quot;servers&amp;quot;: [
    {
      &amp;quot;server&amp;quot;: &amp;quot;shadowsocks.example.com&amp;quot;,
      &amp;quot;server_port&amp;quot;: 11443,
      &amp;quot;method&amp;quot;: &amp;quot;aes-256-gcm&amp;quot;,
      &amp;quot;password&amp;quot;: &amp;quot;zZyWP+OBQWG5YmL0flJyNTZdeUORlZw1urCbIlhZHmA=&amp;quot;
    },
    {
      &amp;quot;server&amp;quot;: &amp;quot;shadowsocks.example.com&amp;quot;,
      &amp;quot;server_port&amp;quot;: 12443,
      &amp;quot;method&amp;quot;: &amp;quot;2022-blake3-aes-256-gcm&amp;quot;,
      &amp;quot;password&amp;quot;: &amp;quot;zZyWP+OBQWG5YmL0flJyNTZdeUORlZw1urCbIlhZHmA=&amp;quot;
    },
    {
      &amp;quot;disabled&amp;quot;: true,
      &amp;quot;server&amp;quot;: &amp;quot;shadowsocks.example.com&amp;quot;,
      &amp;quot;server_port&amp;quot;: 13443,
      &amp;quot;method&amp;quot;: &amp;quot;2022-blake3-aes-256-gcm&amp;quot;,
      &amp;quot;password&amp;quot;: &amp;quot;zZyWP+OBQWG5YmL0flJyNTZdeUORlZw1urCbIlhZHmA=:XtXtAUk3wUWjvJ336HD69uTSTgRzVwBpon1ACj03py8=&amp;quot;,
    }
  ]
  &amp;quot;locals&amp;quot;: [
    {
      &amp;quot;protocol&amp;quot;: &amp;quot;socks&amp;quot;,
	  &amp;quot;local_address&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,
      &amp;quot;local_port&amp;quot;: 1080
    },
    {
      &amp;quot;protocol&amp;quot;: &amp;quot;http&amp;quot;,
	  &amp;quot;local_address&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,
      &amp;quot;local_port&amp;quot;: 3128
    },
  ]
}
HEREDOC

useradd --system --home-dir /nonexistent --no-create-home --shell /usr/sbin/nologin shadowsocks

cat &amp;gt;${SERVICE} &amp;lt;&amp;lt;HEREDOC
[Unit]
Description=Shadowsocks-rust Client
Documentation=https://github.com/shadowsocks/shadowsocks-rust
Documentation=https://shadowsocks.org/doc/configs.html
After=network-online.target

[Service]
Type=simple
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_BIND_SERVICE
User=shadowsocks
Group=shadowsocks
LimitNOFILE=51200
ExecStart=/usr/bin/ssservice local -c ${CONF}

[Install]
WantedBy=multi-user.target
HEREDOC

systemctl daemon-reload

systemctl enable --now $(basename ${SERVICE})

systemctl status $(basename ${SERVICE})

unset URL
unset CONF
unset SERVICE&lt;/pre&gt;
  &lt;p id=&quot;bdrk&quot;&gt;Не забываем что параметры &amp;quot;server_port&amp;quot;, &amp;quot;method&amp;quot;, &amp;quot;password&amp;quot; в параметрах клиента должны совпадать с аналогичными параметрами в конфиге сервера.&lt;/p&gt;
  &lt;p id=&quot;40wb&quot;&gt;Параметр &amp;quot;local_address&amp;quot;: &amp;quot;127.0.0.1&amp;quot; в конфиге клиента задает адрес на котором служба прослушивает подключения. Если мы поднимаем сервер внутри локальной сети и хотим чтобы через него могли подключаться другие пользователи локальной сети по протоколам HTTP и SOCKS5, прослушиваемый адрес нужно заменить на 0.0.0.0&lt;/p&gt;
  &lt;p id=&quot;k21B&quot;&gt;Пример конфигурации сервера соответствующего вышеприведённому конфигу клиента:&lt;/p&gt;
  &lt;pre id=&quot;MMHq&quot; data-lang=&quot;bash&quot;&gt;CONF=&amp;quot;/etc/shadowsocks-rust/server.json&amp;quot;
SERVICE=&amp;quot;/etc/systemd/system/shadowsocks-rust.service&amp;quot;

mkdir -p $(dirname ${CONF})

cat &amp;gt;${CONF} &amp;lt;&amp;lt;HEREDOC
{
  &amp;quot;udp_timeout&amp;quot;: 300,
  &amp;quot;udp_max_associations&amp;quot;: 512,
  &amp;quot;mode&amp;quot;: &amp;quot;tcp_and_udp&amp;quot;,
  &amp;quot;fast_open&amp;quot;: true,
  &amp;quot;timeout&amp;quot;: 300,
  &amp;quot;servers&amp;quot;: [
    {
      &amp;quot;server&amp;quot;: &amp;quot;0.0.0.0&amp;quot;,
      &amp;quot;server_port&amp;quot;: 11443,
      &amp;quot;method&amp;quot;: &amp;quot;aes-256-gcm&amp;quot;,
      &amp;quot;password&amp;quot;: &amp;quot;zZyWP+OBQWG5YmL0flJyNTZdeUORlZw1urCbIlhZHmA=&amp;quot;
    },
    {
      &amp;quot;server&amp;quot;: &amp;quot;0.0.0.0&amp;quot;,
      &amp;quot;server_port&amp;quot;: 12443,
      &amp;quot;method&amp;quot;: &amp;quot;2022-blake3-aes-256-gcm&amp;quot;,
      &amp;quot;password&amp;quot;: &amp;quot;zZyWP+OBQWG5YmL0flJyNTZdeUORlZw1urCbIlhZHmA=&amp;quot;
    },
    {
      &amp;quot;disabled&amp;quot;: true,
      &amp;quot;server&amp;quot;: &amp;quot;0.0.0.0&amp;quot;,
      &amp;quot;server_port&amp;quot;: 13443,
      &amp;quot;method&amp;quot;: &amp;quot;2022-blake3-aes-256-gcm&amp;quot;,
      &amp;quot;password&amp;quot;: &amp;quot;zZyWP+OBQWG5YmL0flJyNTZdeUORlZw1urCbIlhZHmA=&amp;quot;,
      &amp;quot;users&amp;quot;: [
        {
          &amp;quot;name&amp;quot;: &amp;quot;user1&amp;quot;,
          &amp;quot;password&amp;quot;: &amp;quot;XtXtAUk3wUWjvJ336HD69uTSTgRzVwBpon1ACj03py8=&amp;quot;
        },
        {
          &amp;quot;name&amp;quot;: &amp;quot;user2&amp;quot;,
          &amp;quot;password&amp;quot;: &amp;quot;2tP/krYV6RNBqM0xwXKwYi0af1Rs6lk23wpBHWYYoNo=&amp;quot;
        }
      ]
    }
  ]
}
HEREDOC

cat &amp;gt;${SERVICE} &amp;lt;&amp;lt;HEREDOC
[Unit]
Description=Shadowsocks-rust Server
Documentation=https://github.com/shadowsocks/shadowsocks-rust
Documentation=https://shadowsocks.org/doc/configs.html
After=network-online.target

[Service]
Type=simple
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_BIND_SERVICE
User=shadowsocks
Group=shadowsocks
LimitNOFILE=51200
ExecStart=/usr/bin/ssservice server -c ${CONF}

[Install]
WantedBy=multi-user.target
HEREDOC

systemctl daemon-reload

systemctl enable --now $(basename ${SERVICE})

systemctl status $(basename ${SERVICE})

unset URL
unset CONF
unset SERVICE&lt;/pre&gt;
  &lt;p id=&quot;qqh0&quot;&gt;В браузере, где у нас установлена клиентская служба, прописываем адрес прокси 127.0.0.1 и порт HTTP прокси сервера 3128 или SOCKS5 прокси 1080. Если клиент подключается по сети вместо 127.0.0.1 указываем адрес сервера в локальной сети где установлена клиентская часть Shadowsocks-rust.&lt;/p&gt;
  &lt;h2 id=&quot;Swjq&quot;&gt;&lt;strong&gt;5. Установка клиента Shadowsocks-rust Windows&lt;/strong&gt;&lt;/h2&gt;
  &lt;p id=&quot;PAul&quot;&gt;Скачиваем архив &lt;a href=&quot;https://github.com/shadowsocks/shadowsocks-rust/releases/download/v1.19.2/shadowsocks-v1.19.2.x86_64-pc-windows-msvc.zip&quot; target=&quot;_blank&quot;&gt;https://github.com/shadowsocks/shadowsocks-rust/releases/download/v1.19.2/shadowsocks-v1.19.2.x86_64-pc-windows-msvc.zip&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;lQ5e&quot;&gt;Распаковываем и копируем файл &lt;strong&gt;sswinservice.exe&lt;/strong&gt; в &lt;strong&gt;%WINDIR%\System32\&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;aNG9&quot;&gt;Открываем Блокнот или любой другой текстовый редактор под админом, вставляем из буфера конфиг:&lt;/p&gt;
  &lt;pre id=&quot;8Bzl&quot; data-lang=&quot;bash&quot;&gt;{
  &amp;quot;udp_timeout&amp;quot;: 300,
  &amp;quot;udp_max_associations&amp;quot;: 512,
  &amp;quot;mode&amp;quot;: &amp;quot;tcp_and_udp&amp;quot;,
  &amp;quot;fast_open&amp;quot;: true,
  &amp;quot;timeout&amp;quot;: 300,
  &amp;quot;servers&amp;quot;: [
    {
      &amp;quot;server&amp;quot;: &amp;quot;shadowsocks.example.com&amp;quot;,
      &amp;quot;server_port&amp;quot;: 11443,
      &amp;quot;method&amp;quot;: &amp;quot;aes-256-gcm&amp;quot;,
      &amp;quot;password&amp;quot;: &amp;quot;zZyWP+OBQWG5YmL0flJyNTZdeUORlZw1urCbIlhZHmA=&amp;quot;
    },
    {
      &amp;quot;server&amp;quot;: &amp;quot;shadowsocks.example.com&amp;quot;,
      &amp;quot;server_port&amp;quot;: 12443,
      &amp;quot;method&amp;quot;: &amp;quot;2022-blake3-aes-256-gcm&amp;quot;,
      &amp;quot;password&amp;quot;: &amp;quot;zZyWP+OBQWG5YmL0flJyNTZdeUORlZw1urCbIlhZHmA=&amp;quot;
    },
    {
      &amp;quot;disabled&amp;quot;: true,
      &amp;quot;server&amp;quot;: &amp;quot;shadowsocks.example.com&amp;quot;,
      &amp;quot;server_port&amp;quot;: 13443,
      &amp;quot;method&amp;quot;: &amp;quot;2022-blake3-aes-256-gcm&amp;quot;,
      &amp;quot;password&amp;quot;: &amp;quot;zZyWP+OBQWG5YmL0flJyNTZdeUORlZw1urCbIlhZHmA=:XtXtAUk3wUWjvJ336HD69uTSTgRzVwBpon1ACj03py8=&amp;quot;,
    }
  ]
  &amp;quot;locals&amp;quot;: [
    {
      &amp;quot;protocol&amp;quot;: &amp;quot;socks&amp;quot;,
	  &amp;quot;local_address&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,
      &amp;quot;local_port&amp;quot;: 1080
    },
    {
      &amp;quot;protocol&amp;quot;: &amp;quot;http&amp;quot;,
	  &amp;quot;local_address&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,
      &amp;quot;local_port&amp;quot;: 3128
    },
  ]
}&lt;/pre&gt;
  &lt;p id=&quot;CNSR&quot;&gt;Сохраняем файл &lt;strong&gt;%WINDIR%\System32\ssclient.json&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;IXUK&quot;&gt;Устанавливаем и запускаем службу:&lt;/p&gt;
  &lt;pre id=&quot;2QKC&quot; data-lang=&quot;powershell&quot;&gt;New-Service -Name &amp;#x27;ShadowsocksClient&amp;#x27; -DisplayName &amp;#x27;Shadowsocks Client&amp;#x27; -Description &amp;#x27;Shadowsocks-rust Client Service&amp;#x27; -BinaryPathName &amp;#x27;%WINDIR%\System32\sswinservice.exe local -c &amp;quot;ssclient.json&amp;quot;&amp;#x27;
Start-Service &amp;quot;ShadowsocksClient&amp;quot;&lt;/pre&gt;
  &lt;p id=&quot;Okwc&quot;&gt;Проверяем что служба запустилась:&lt;/p&gt;
  &lt;pre id=&quot;yDzs&quot; data-lang=&quot;powershell&quot;&gt;Get-Service &amp;quot;ShadowsocksClient&amp;quot; | fl *&lt;/pre&gt;
  &lt;p id=&quot;qNoq&quot;&gt;Управление службой:&lt;/p&gt;
  &lt;pre id=&quot;hZyQ&quot; data-lang=&quot;powershell&quot;&gt;Start-Service &amp;quot;ShadowsocksClient&amp;quot;
Restart-Service &amp;quot;ShadowsocksClient&amp;quot;
Stop-Service &amp;quot;ShadowsocksClient&amp;quot;&lt;/pre&gt;
  &lt;p id=&quot;yKYC&quot;&gt;Удаление службы:&lt;/p&gt;
  &lt;pre id=&quot;Cd1F&quot; data-lang=&quot;powershell&quot;&gt;Remove-Service &amp;quot;ShadowsocksClient&amp;quot;&lt;/pre&gt;
  &lt;p id=&quot;FDdS&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;opvk&quot;&gt;USDT/TRC20: TW4ZRcrb4qBRb9uSNiu9wJCWveCp4rLoGL&lt;/p&gt;

</content></entry></feed>