Advertisement
pricefield

shadowsocks cloudflare load balancing linux client (haproxy)

Mar 28th, 2019
251
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 8.17 KB | None | 0 0
  1. ss — shadowsocks, cf — cloudflare
  2.  
  3. Зачем оно надо:
  4. Для пущей обфускации трафика при наличии только одного сервера — пакеты будут идти до нескольких адресов cf при каждом соединении.
  5.  
  6. Дано:
  7. Предполагается, что сервер связки ss+cf уже настроен и исправно работает.
  8. Также предполагается, что у тебя есть несколько свободных доменов первого уровня — anuspsa.ru, не anus.psa.ru — такое ограничение Free версии cf.
  9. Домены можно взять либо бесплатно у freenom, либо купить где-то задешево. В первом случае понадобится напердолить перенаправление не-ss трафика на веб-сервер с каким-нибудь фейколендингом по гайду https://pastebin.com/CpKBhNC3, чтобы домен не отобрали за неиспользование. Во втором случае можно полуркать гугл на предмет акций. В 2019 году таковая действует на reg.ru: https://www.reg.ru/company/promotions/5123
  10.  
  11. Решение:
  12. 1. Нужно повторить действия по привязке из этого гайда для каждого из своих доменов: http://telegra.ph/shadowsocks-over-cloudflare-05-17
  13. tl;dr:
  14.     1.1 В cf для каждого домена добавить A запись на внешний IP сервера с ss
  15.     1.2 В панели управления доменами (где они регистрировались) для каждого домена указать NS записи cf, которые он дает при привязке (вида marty.ns.cloudflare.com)
  16.     1.3 В cf для каждого домена по пути "Firewall —> Settings" для "Security" указать "Essentially Off".
  17.         1.3.1 Если будут проблемы при использовании — по тому же пути отключить "Browser Integrity Check", и в "Crypto -> SSL" выбрать "Off". В оригинальном гайде выше этот совет был, пусть будет и тут.
  18.     1.4 Дополнение касательно портов, с которыми работает cf:
  19.         HTTP: 80 8080 8880 2052 2082 2086 2095
  20.         HTTPS: 443 2053 2083 2087 2096 8443
  21.         В случае, если на VPS закрыты 80 и 443 порты (такое всегда бывает на днищесерверах), нужно искать в панели управления VPS опцию "Domain Forwarding", и добавлять туда домены для tcp трафика на 80 и 443 портах. Аналогичное при желании проводится с другими портами, приведенными выше.
  22. 2. После привязки нужно запилить на компьютере конфиги с новыми используемыми доменами в качестве адресов сервера. Предполагается, что ты уже знаешь, как это делается. Локальные порты должны быть разными, их нужно запомнить, они понадобятся чуть позже.
  23. 3. Клиент на виндовс поддерживает балансировку нагрузки из коробки (в гуе вкладка "Servers -> Load Balance"), о нем не пишем.
  24. Для линукса воспользуемся haproxy. Установка зависит от пакетного менеджера твоего дистрибутива. Предполагается, что ты знаешь, как им пользоваться:
  25.     pacman -S haproxy
  26. Поправим конфиг:
  27.     vim /etc/haproxy/haproxy.cfg
  28. Удалим старое содержимое:
  29.     gg
  30.     Shift+v
  31.     Shift+g
  32.     d
  33.     i
  34. Копипастим туда следующее (в vim через Shift+Insert):
  35.  
  36. global
  37. defaults
  38.     log global
  39.     mode tcp
  40.     option dontlognull
  41.         timeout connect 300000ms
  42.         timeout client 300000ms
  43.         timeout server 30000ms
  44. frontend localproxy
  45.         bind *:4444
  46.         default_backend ss_proxies
  47. backend ss_proxies
  48.         balance roundrobin
  49.         server proxy1 127.0.0.1:1001
  50.         server proxy2 127.0.0.1:1002
  51.         server proxy3 127.0.0.1:1003
  52.  
  53. Подробное описание функций в конфиге есть здесь: http://cbonte.github.io/haproxy-dconv/
  54. Внимание стоит обратить на строчки:
  55.     bind *:4444 — здесь задается свободный локальный порт сокс-прокси на пеке, к которому будем подключаться в браузере или где-то еще. Увидеть занятые порты и чем они заняты можно через netstat -ltp
  56.     server proxy(1-3) localhost:100(1-3) — здесь нужно указать локальные порты, использованные в конфигах ss+cf из пункта 2.
  57. Сохраняем конфиг haproxy и выходим из vim:
  58.     Esc
  59.     :wq
  60.     Enter
  61. 4. Добавляем haproxy в загрузку в системе и перезапускаем на случай, если уже было запущено:
  62.     systemctl enable haproxy
  63.     systemctl restart haproxy
  64. 5. Запускаем ss с конфигами, в которых прописаны новые домены — ты уже знаешь, как это делается.
  65. Если нет — несколько раз nohup ss-local -c /etc/shadowsocks/config.json со своими путями до конфигов. Nohup перед командой нужен для отвязки ss от процесса терминала, в котором ты запускаешь ss.
  66. 6. В настройках прокси для приложений старый порт с ss+cf нужно сменить на тот, который указывали в конфиге haproxy в разделе frontend (4444). Прокси socks5.
  67.  
  68. Поскольку к бесплатной версии cf можно подключить бесконечно большое количество доменов, и в backend для haproxy с алгоритмом roundrobin можно добавить до 4095 подключений, то количество используемых инстанций ss+cf ограничивается ресурсами пекарни, желанием возиться с большим количеством доменов, и желанием заниматься хуйней в целом.
  69.  
  70. Стоит заметить, что подключением к порту, на котором висит haproxy могут пользоваться другие устройства в общей локальной сети. Т.е. если компьютер с телефонами и ноутбуками подключены к одному роутеру, то в теории можно пользоваться ss проксей и с них, указывая в настройках прокси порт haproxy (4444) и адрес компьютера с haproxy в локальной сети (ifconfig | grep inet на компьютере).
  71.  
  72. Схожего эффекта с распределением запросов через разные серверы cf можно добиться при помощи .pac скрипта в браузере с указанными локальными адресами ss+cf:
  73. https://help.getfoxyproxy.org/index.php/knowledge-base/rotate-ips/
  74. На legacy версии 4.6.5 FoxyProxy такое работает, но выводит неотключаемое уведомление с ошибкой, поэтому ваш покорный слуга забил свой обфусцированный болт на этот вариант.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement