1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/snail-proxy

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Введение в GOPROXY

stable license download_count download


GoProxy — это высокопроизводительный HTTP-прокси, HTTPS-прокси, SOCKS5-прокси, SS-прокси, WebSocket-прокси, TCP-прокси и UDP-прокси. Поддерживает прямые прокси, обратные прокси, прозрачные прокси, интернет-NAT-прокси, балансировку нагрузки HTTPS-прокси, балансировку нагрузки HTTP-прокси, балансировку нагрузки SOCKS5-прокси, балансировку нагрузки сокет-прокси, балансировку нагрузки SS-прокси, сопоставление портов TCP / UDP, транзитную передачу SSH, зашифрованную передачу TLS, преобразование протоколов, антизагрязняющий DNS-прокси, аутентификацию API, ограничение скорости, ограничение соединения. Обратные прокси помогают вам открыть локальный сервер за NAT или брандмауэром для доступа в Интернет, чтобы вы или ваши посетители могли легко получить к нему доступ.


中文用户请看 中文说明,中文与英文内容的安装等资源链接是不一样的,谢谢合作!

点击我观看视频教程

ProxyAdmin Demo

And ProxyAdmin — это мощная веб-консоль snail007/goproxy .

Что он может делать?

  • Цепные прокси: программа сама по себе может использоваться как прокси, а если она настроена, то её можно использовать как вторичные прокси или даже N-уровневые прокси.
  • Шифрование связи: если программа не является прокси первого уровня, а прокси верхнего уровня также является программой, то связь между прокси верхнего уровня и прокси верхнего уровня может быть зашифрована, при этом используется интенсивное шифрование TLS, и безопасность не имеет недостатков.
  • Умный HTTP, SOCKS5 прокси автоматически определяет, заблокирован ли посещаемый веб-сайт. Если он заблокирован, он будет использовать прокси вышестоящего уровня (при условии, что прокси вышестоящего уровня настроен) для доступа к веб-сайту; если посещаемый веб-сайт не заблокирован, для ускорения доступа прокси будут напрямую обращаться к веб-сайту без использования прокси вышестоящего уровня.
  • Чёрный и белый список доменных имён, более свободный контроль над способом доступа к сайту.
  • Кроссплатформенность: независимо от того, используете ли вы Windows, Linux, Mac или даже Raspberry Pie, вы можете очень хорошо запускать прокси.
  • Поддержка нескольких протоколов: поддержка HTTP(S), TCP, UDP, Websocket, SOCKS5 proxy.
  • Переадресация портов TCP/UDP.
  • Поддержка проникновения в интранет, протокол поддерживает TCP и UDP.
  • Релейная передача SSH, HTTP (S), SOCKS5 прокси поддерживают релейную передачу SSH, верхнему серверу Linux не требуется какой-либо сервер, локальный прокси может быть счастлив в сети.
  • Протокол KCP (https://github.com/xtaci/kcp-go) поддерживается, HTTP(S), SOCKS5, SPS прокси поддерживают протокол KCP для передачи данных, уменьшают задержку и улучшают впечатления от просмотра.
  • Динамический выбор прокси-серверов вышестоящего уровня через внешний API, HTTP (S), SOCKS5, прокси-серверы SPS могут осуществлять выбор на основе пользователя или IP-адреса. Приобретение коммерческой версии

В этом руководстве описаны функции, которые включены в коммерческую версию. Бесплатная версия не включает расширенные функциональные параметры, такие как аутентификация.

Если при использовании бесплатной версии вы столкнётесь с некоторыми командами и получите сообщение об ошибке вроде «параметр xxx не существует», это будет означать, что этот параметр является функцией коммерческой версии. Пример ошибки: err: unknown long flag '-a'.

Сравнение функций бесплатной и коммерческой версий, подробные инструкции по приобретению и использованию коммерческой версии см. здесь.

Первый запуск

  1. Среда.

Данное руководство предполагает использование системы Linux, программа — proxy. Все операции требуют привилегий суперпользователя.

При использовании Windows рекомендуется использовать версию proxy.exe для этой операционной системы.

  1. Использование файлов конфигурации.

Следующее руководство познакомит вас со способом использования параметров через командную строку или путём чтения файла конфигурации.

Конкретный формат — указать файл конфигурации с помощью символа @, например: proxy @configfile.txt.

Формат configfile.txt: первая строка — имя подкоманды, вторая строка начинается с одного параметра на строку.

Пример формата: parameter Parameter value, можно записать параметр без значения параметра, например: --nolog.

Например, содержимое configfile.txt выглядит следующим образом:

Http  
-t tcp  
-p :33080  
--forever  
  1. Вывод отладочной информации.

По умолчанию информация, выводимая журналом, не включает количество строк файла. В некоторых случаях, чтобы устранить неполадки в программе, необходимо быстро определить проблему.

Можно использовать параметр --debug для вывода количества строк кода и миллисекунд.

  1. Использование лог-файлов.

По умолчанию журнал отображается непосредственно в консоли. Если вы хотите сохранить его в файле, можно использовать параметр --log.

Например: --log proxy.log, журнал будет выведен в файл proxy.log для облегчения устранения неполадок.

  1. Создание файла сертификата, необходимого для зашифрованного соединения.

Процесс прокси-сервера http, tcp, udp взаимодействует с вышестоящим сервером. Для обеспечения безопасности мы используем зашифрованное соединение. Конечно, мы можем выбрать не шифровать соединение. Всё взаимодействие и взаимодействие с вышестоящими серверами в этом руководстве зашифровано, и требуется файл сертификата.

Создайте самозаверяющий сертификат и файл ключа с помощью следующей команды.
proxy keygen -C proxy.
Файлы сертификата proxy.crt и ключевой файл proxy.key будут созданы в текущем каталоге программы.

Используйте следующую команду для создания нового сертификата с использованием самозаверяющего сертификата proxy.crt и ключевого файла proxy.key: goproxy.crt и goproxy.key.
proxy keygen -s -C proxy -c goproxy.
Файлы сертификата goproxy.crt и ключевой файл goproxy.key будут созданы в текущем каталоге программы.

По умолчанию доменное имя внутри сертификата является случайным и может быть указано с помощью параметра -n test.com.

Дополнительная информация: proxy keygen --help.

  1. Запуск в фоновом режиме.

После выполнения прокси по умолчанию вы не сможете закрыть командную строку, если хотите, чтобы прокси продолжал работать.

Чтобы запустить прокси в фоновом режиме, командную строку можно закрыть, просто добавьте параметр --daemon в конце команды.

Например:

proxy http -t tcp -p "0.0.0.0:38080" --daemon

  1. Постоянный запуск.

Параметр --forever используется при запуске демона, например: proxy http --forever.

Прокси разветвит дочерний процесс, а затем будет отслеживать дочерний процесс. Если дочерний процесс завершится аварийно, перезапустите дочерний процесс через 5 секунд.

Этот параметр сочетается с параметром фонового запуска --daemon и параметром журнала. HTTP(S) Reverse Proxy

Упомянутый в тексте KCP — это UDP-протокол, поэтому брандмауэру необходимо разрешить протокол UDP 380p.

1.9 HTTP(S) Reverse Proxy

Прокси не только поддерживает настройку прокси в другом программном обеспечении, но и предоставляет услуги прокси для другого программного обеспечения. Он также поддерживает прямое разрешение запрошенного имени домена веб-сайта на IP-адрес прослушивания прокси, а затем прокси слушает порты 80 и 443, после чего прокси автоматически предоставит вам доступ к нужному веб-сайту HTTP(S).

Как использовать: На машине «последнего уровня прокси-сервера», поскольку прокси должен маскироваться под все веб-сайты, порт по умолчанию для веб-сайтов HTTP — 80, HTTPS — 443, и прокси может слушать порты 80 и 443. Параметры -p с разделением адресов запятыми. proxy http -t tcp -p :80,:443

Эта команда запускает агент прокси на машине и одновременно слушает порты 80 и 443. Его можно использовать как обычный прокси или напрямую разрешать доменное имя, которое необходимо проксировать, на IP этой машины.

Если есть вышестоящий агент, то обратитесь к приведённому выше руководству, чтобы настроить вышестоящее соединение, использование точно такое же. proxy http -t tcp -p :80,:443 -T tls -P "2.2.2.2:33080" -C proxy.crt -K proxy.key

Примечание: результат разрешения DNS сервера, на котором расположен прокси, не должен зависеть от пользовательского разрешения, иначе возникнет бесконечный цикл. Прокси-серверу следует указать параметр --dns 8.8.8.8.

HTTP(S) Transparent Proxy Этот режим требует наличия определённой сетевой основы. Если связанные концепции не понятны, пожалуйста, найдите информацию самостоятельно. Предположим, что прокси сейчас работает на маршрутизаторе, команда запуска выглядит следующим образом: proxy http -t tcp -p :33080 -T tls -P "2.2.2.2:33090" -C proxy.crt -K proxy.key Затем добавьте правило iptables, вот примерные правила:

#Адрес прокси-сервера:
Proxy_server_ip=2.2.2.2

#Порт маршрутизатора для прослушивания прокси:
Proxy_local_port=33080

#Следующие не требуют изменения
#создать новую цепочку с именем PROXY
Iptables -t nat -N PROXY

#Игнорировать адреса вашего прокси-сервера
#Это очень ВАЖНО, будьте осторожны.

Iptables -t nat -A PROXY -d $proxy_server_ip -j RETURN

#Игнорировать IP-адреса локальной сети
Iptables -t nat -A PROXY -d 0.0.0.0/8 -j RETURN
Iptables -t nat -A PROXY -d 10.0.0.0/8 -j RETURN
Iptables -t nat -A PROXY -d 127.0.0.0/8 -j RETURN
Iptables -t nat -A PROXY -d 169.254.0.0/16 -j RETURN
Iptables -t nat -A PROXY -d 172.16.0.0/12 -j RETURN
Iptables -t nat -A PROXY -d 192.168.0.0/16 -j RETURN
Ipttables -t nat -A PROXY -d 224.0.0.0/4 -j RETURN
Iptables -t nat -A PROXY -d 240.0.0.0/4 -j RETURN

#Всё, что относится к портам 80 443 должно быть перенаправлено на локальный порт PROXY
Iptables -t nat -A PROXY -p tcp --dport 80 -j REDIRECT --to-ports $proxy_local_port
Iptables -t nat -A PROXY -p tcp --dport 443 -j REDIRECT --to-ports $proxy_local_port

#Применить правила к клиенту nat
Iptables -t nat -A PREROUTING -p tcp -j PROXY
#Применить правила к localhost
Iptables -t nat -A OUTPUT -p tcp -j PROXY

-Очистить всю цепочку iptables -F Целевые имена, такие как iptables -t nat -F PROXY -Удалить указанную пользовательскую цепочку iptables -X Целевое имя, такое как iptables -t nat -X PROXY -Удалить правила из выбранной цепочки iptables -D Детали правил, такие как iptables -t nat -D PROXY -d 223.223.192.0/255.255.240.0 -j RETURN

Пользовательское разрешение DNS Параметры --dns-address и --dns-ttl используются для указания DNS (--dns-address), используемого прокси для доступа к доменному имени. И время кэширования результатов анализа (--dns-ttl) в секундах, чтобы избежать вмешательства системы DNS в работу прокси. Кроме функции кэширования, это также может сократить время разрешения DNS и улучшить скорость доступа. Например: proxy http -p ":33080" --dns-address "8.8.8.8:53" --dns-ttl 300

Пользовательское шифрование HTTP(S)-прокси может шифровать данные TCP через стандартное шифрование TLS и протокол KCP поверх TCP. Соединение порта 33080 будет соединяться с портом 33080 на 192.168.22.33, а остальные порты аналогичны. Локальный и верхний порты одинаковы. В это время порт в параметре -P использует 0.

Если вы хотите подключить порты 33080, 33081 и т. д. к порту 22 на 192.168.22.33, вы можете добавить параметр --lock-port.

proxy tcp -p ":33080-33085" -T tcp -P "192.168.22.33:22" --lock-port

2.2. Обычный вторичный TCP-прокси

2.2
VPS (IP: 22.22.2.33) выполняется:
proxy tcp -p ":33080" -T tcp -P "127.0.0.1:8080"
Локальное выполнение:
proxy tcp -p ":23080" -T tcp -P "22.22.22.33:33080"
Затем доступ к локальному порту 23080 — это доступ к порту 8020 на 22.22.22.33.

2.3. Обычный трёхзвенный TCP-прокси

2.3
Основной TCP-прокси VPS_01, IP: 22.22.22.22
proxy tcp -p ":38080" -T tcp -P "66.66.66.66:8080"
Вторичный TCP-прокси VPS_02, IP: 33.33.33.33
proxy tcp -p ":28080" -T tcp -P "22.22.22.22:38080"
TCP-прокси третьего уровня (локальный)
proxy tcp -p ":8080" -T tcp -P "33.33.33.33:28080"
Затем доступ к локальному порту 8080 — это доступ через защищённый TCP-туннель к порту 8080 на 66.66.66.66.

2.4. Шифрующий вторичный TCP-прокси

2.4
VPS (IP: 22.22.2.33) выполняется:
proxy tcp -t tls -p ":33080" -T tcp -P "127.0.0.1:8080" -C proxy.crt -K proxy.key
Локальное выполнение:
proxy tcp -p ":23080" -T tls -P "22.22.22.33:33080" -C proxy.crt -K proxy.key
Затем доступ к локальному порту 23080 — это доступ к порту 8080 на 22.22.22.33 через защищённый туннель TCP.

2.5. Шифрующий TCP-агент третьего уровня

2.5
Первичный TCP-прокси VPS_01, IP: 22.22.22.22
proxy tcp -t tls -p ":38080" -T tcp -P "66.66.66.66:8080" -C proxy.crt -K proxy.key
Вторичный TCP-прокси VPS_02, IP: 33.33.33.33
proxy tcp -t tls -p ":28080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key
TCP-прокси третьего уровня (локальный)
proxy tcp -p ":8080" -T tls -P "33.33.33.33:28080" -C proxy.crt -K proxy.key
Затем доступ к локальному порту 8080 — это доступ к порту 8080 на 66.66.66.66 через защищённый туннель TCP.

2.6 Подключение к вышестоящему через прокси

Иногда сеть, где расположен прокси, не может напрямую получить доступ к внешней сети. Вам нужно использовать https или socks5 прокси для доступа в Интернет. Тогда в этот раз
Параметр -J может помочь вам подключить прокси к узлу P через https или socks5 прокси при сопоставлении порта прокси tcp, сопоставляя внешний порт с локальным.
Формат параметра -J следующий:

Написание https прокси:
Прокси требует аутентификации, имя пользователя: имя пользователя пароль: пароль
Https://имя пользователя:пароль@хост:порт
Агент не требует аутентификации
Https://хост:порт

Написание socks5 прокси:
Прокси требуется аутентификация, имя пользователя: имя пользователя пароль: пароль
Socks5://имя пользователя:пароль@хост:порт
Агенту не требуется аутентификация
Socks5://хост:порт

Хост: IP-адрес или доменное имя прокси
Порт: порт прокси

2.7 Укажите исходящий IP

Когда TCP-прокси является вышестоящим типом (параметр: -T) — это tcp, он поддерживает указанный исходящий IP. Используя параметр --bind-listen, вы можете открыть клиент для подключения к IP портала и использовать IP портала в качестве исходящего IP для доступа к целевому веб-сайту. Если привязка к неправильному IP, прокси не будет работать, прокси попытается выполнить привязку к цели без привязки IP, и журнал выдаст подсказку.

proxy tcp -p ":33080" -T tcp -P" 192.168.22.33:22" -B

Гибкий исходящий IP

Хотя вышеупомянутый параметр --bind-listen может указывать исходящий IP, исходный IP и исходящий IP не могут быть искусственно связаны. Если вы хотите, чтобы исходный IP отличался от исходящего IP, вы можете использовать параметр --bind-ip, формат: IP:port, например: 1.1.1.1:8080, [2000:0:0:0:0:0:0:1]:8080.

Для нескольких требований привязки можно повторить идентификацию параметра --bind-ip.

Например, у этой машины есть IP 5.5.5.5, 6.6.6.6 и она отслеживает два порта 8888 и 7777, команда выглядит следующим образом:

Proxy tcp -t tcp -p :8888,:7777 --bind-ip 5.5.5.5:7777 --bind-ip 6.6.6.6:8888 -T tcp -P 2.2.2.2:3322

Тогда порт клиентского доступа 7777, исходящий IP — 5.5.5.5; порт доступа 8888, исходящий IP — 6.6.6.6; если одновременно заданы параметры --bind-ip и --bind-listen, приоритет имеет --bind-ip.

Кроме того, часть IP параметра --bind-ip поддерживает указание имени сетевого интерфейса, подстановочных знаков и более одного. Подробное описание следующее:

  • Указание имени сетевого интерфейса, например: --bind-ip eth0:7777, тогда клиент обращается к порту 7777, а исходящий IP является IP сетевого интерфейса eth0.
  • Имя сетевого интерфейса поддерживает подстановочные знаки, например: --bind-ip eth0.*:7777, тогда клиент обращается к порту 7777, и исходящий IP выбирается случайным образом из IP сетевых интерфейсов, начинающихся с eth0.
  • IP поддерживает подстановочные знаки, такие как: --bind-ip 192.168.?.*:7777, тогда клиент обращается к порту 7777, и исходящим IP будет любой IP машины, соответствующий IP 192.168.?.*.
  • Также могут быть комбинации сетевого интерфейса и IP, разделённые запятыми, например: --bind-ip pppoe??,192.168.?.*:7777, тогда клиент обращается к порту 7777 и исходящим IP будет случайно выбранный IP среди всех IP машины, соответствующих pppoe?? и 192.168.?.*
  • Подстановочный знак * представляет от 0 до любого количества символов, ? представляет 1 символ.
  • Если IP сетевого интерфейса изменится, это вступит в силу в реальном времени.
  • Можно использовать параметр --bind-refresh, чтобы указать интервал обновления информации о локальном сетевом интерфейсе, по умолчанию — 5 секунд.

2.8 Ограничение скорости, ограничение соединений

Параметр --max-conns может ограничивать максимальное количество подключений на порт. Например, ограничить максимальное количество подключений на порт:

proxy tcp -p ":33080" -T tcp -P "192.168.22.33:22" --max-conns 1000

Параметр --rate-limit может ограничить скорость каждого TCP-соединения. Например, ограничить скорость соединения каждого TCP до 100 кбит/с:

proxy tcp -p ":33080" -T tcp -P "192.168.22.33:22" --rate-limit 100k

2.9 Сжатая передача

--c управляет тем, следует ли сжимать передачу между локальным и клиентом, по умолчанию false; --C управляет тем, следует ли сжимать передачу между локальным и вышестоящим, по умолчанию false.

Примеры:

Реализация VPS (IP: 22.22.22.33):

proxy tcp -t tcp --c -p ":33080" -T tcp -P "127.0.0.1:8080"

Локальное выполнение:

proxy tcp -t tcp -p ":23080" -T tcp -P "22.22.22.33:33080" --C

2.10 Просмотр справки

proxy help tcp

3. UDP-прокси

3.1 Обычный UDP-прокси

-p ":8081" listen on 8081
-p ":8081,:8082" listen on 8081 and 8082
-p ":8081,:8082,:9000-9999" listen on 8081 and 8082 and 9000, 9001 to 9999 for a total of 1002 ports

Если количество портов локального прослушивания больше 1, то будет подключён соответствующий верхний порт, соответствующий локальному порту, и порт в -P будет проигнорирован.

Если вам нужно подключение со всех портов, подключение к указанному верхнему порту, вы можете добавить параметр --lock-port.

например:

proxy udp -p ":33080-33085" -T udp -P "192.168.22.33:0"

Тогда соединение порта 33080 подключится к порту 33080 192.168.22.33, а остальные порты аналогичны. Локальный и верхний порты совпадают. В этом случае порт в параметре -P использует 0. want to connect the ports of 33080, 33081 и т. д. к порту 2222 192.168.22.33, вы можете добавить параметр --lock-port.

proxy udp -p ":33080-33085" -T udp -P "192.168.22.33:2222" --lock-port.

3.2. Ordinary secondary UDP proxy

Рисунок 3.2.

VPS (IP: 22.22.2.33) выполняется:
proxy tcp -p ":33080" -T udp -P "8.8.8.8:53".
Локальное выполнение:
proxy udp -p ":5353" -T tcp -P "22.22.22.33:33080".

Затем доступ к локальному порту UDP: 5353 осуществляется через TCP-туннель, через VPS доступ к порту 8.8.8.8 UDP: 53.

3.3. Ordinary three-level UDP proxy

Рисунок 3.3.

Первичный TCP прокси VPS_01, IP: 22.22.22.22:
proxy tcp -p ":38080" -T udp -P "8.8.8.8:53".
Вторичный TCP прокси VPS_02, IP: 33.33.33.33:
proxy tcp -p ":28080" -T tcp -P "22.22.22.22:38080".
Уровень 3 TCP прокси (локальный):
proxy udp -p ":5353" -T tcp -P "33.33.33.33:28080".

Затем доступ к локальному порту 5353 осуществляется через TCP туннель, через VPS для доступа к порту 8.8.8.8.

3.4. Encrypting secondary UDP proxy

Рисунок 3.4.

VPS (IP: 22.22.2.33):
proxy tcp -t tls -p ":33080" -T udp -P "8.8.8.8:53" -C proxy.crt -K proxy.key.
Локально:
proxy udp -p ":5353" -T tls -P "22.22.22.33:33080" -C proxy.crt -K proxy.key.

Затем доступ к локальному порту UDP: 5353 осуществляется через зашифрованный TCP туннель, через VPS доступ к порту 8.8.8.8 UDP: 53.

3.5. Encryption Level 3 UDP Agent

Рисунок 3.5.

Основной TCP прокси VPS_01, IP: 22.22.22.22:
proxy tcp -t tls -p ":38080" -T udp -P "8.8.8.8:53" -C proxy.crt -K proxy.key.
Вторичный TCP прокси VPS_02, IP: 33.33.33.33:
proxy tcp -t tls -p ":28080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key.
Уровень 3 TCP прокси (локальный):
proxy udp -p ":5353" -T tls -P "33.33.33.33:28080" -C proxy.crt -K proxy.key.

Затем доступ к локальному порту 5353 осуществляется для доступа к порту 8.8.8.8 через VPS_01 через зашифрованный TCP туннель.

3.6 Specify Outgoing IP

Когда прокси-серверы UDP upstream (параметр: -T) является udp, он поддерживает указанный исходящий IP. Используя параметр --bind-listen, вы можете открыть клиент для подключения к серверу IP и использовать сервер IP в качестве исходящего IP для доступа к цели. Если привязка неправильного IP, прокси не будет работать.

proxy udp -p ":33080" -T udp -P "192.168.22.33:2222" -B.

3.7 Help

proxy help udp.

4. Expose Intranet

4.1 principle description

Проникновение во внутреннюю сеть делится на две версии: «многоканальная версия» и «мультиплексная версия», обычно как веб-сервис, этот сервис не является долгосрочным соединением, рекомендуется использовать «многоканальную версию», если это длительное соединение, предлагается использовать «мультиплексную версию».

  1. Многоканальная версия, соответствующая подкоманда — tserver, tclient, tbridge.
  2. Мультиплексная версия, соответствующая подкоманде — server, client, bridge.
  3. Параметры многоканальной версии и мультиплексной версии абсолютно одинаковы.
  4. В мультиплексной версии сервера и клиента можно открыть сжатую передачу, параметр — --c.
  5. Сервер и клиент могут либо открывать сжатие, либо не открывать, можно не открывать только один.

В следующем руководстве в качестве примера используется «мультиплексная версия», чтобы проиллюстрировать, как её использовать.

Проникновение во внутреннюю сеть состоит из трёх частей: клиент, сервер и мост; клиент и сервер активно подключаются к мосту для создания моста.

4.2 TCP common usage

Фон: — Машина компании A предоставляет порт веб-службы 80. — Существует VPS, публичный сетевой IP: 22.22.22.22.

Требование: Дома вы можете получить доступ к порту 80 машины компании A, получив доступ к порту 28080 VPS.

Шаги: Выполнить на vps: proxy bridge -p ":33080" -C proxy.crt -K proxy.key. proxy server -r ":28080@:80" -P "127.0.0.1:33080" -C proxy.crt -K proxy.key. 4.3 Интерфейс WeChat для локальной разработки

Фон:

  • Ваш собственный ноутбук предоставляет порт службы nginx 80.
  • Есть VPS, публичный сетевой IP: 22.22.22.22.

Требование: Заполните адрес в конфигурации интерфейса обратного вызова веб-страницы учётной записи разработки WeChat: http://22.22.22.22/calback.php. Затем вы сможете получить доступ к calback.php через порт 80 ноутбука. Если вам нужно привязать доменное имя, вы можете использовать собственное доменное имя. Например: wx-dev.xxx.com разрешается в 22.22.22.22, а затем в вашем собственном ноутбуке nginx настройте доменную зону wx-dev.xxx.com на конкретный каталог.

Шаги:

  1. Выполните на VPS, чтобы убедиться, что порт 80 VPS не занят другими программами. proxy bridge -p ":33080" -C proxy.crt -K proxy.key proxy server -r ":80@:80" -P "22.22.22.22:33080" -C proxy.crt -K proxy.key

  2. Выполнить на вашем ноутбуке proxy client -P "22.22.22.22:33080" -C proxy.crt -K proxy.key

4.4 Общее использование UDP

Фон:

  • Машина компании A предоставляет службу разрешения DNS, UDP: порт 53.
  • Существует VPS, публичный сетевой IP: 22.22.22.22.

Требования: Дома вы можете использовать машину компании А для выполнения служб разрешения доменных имён, установив локальный DNS на 22.22.22.22.

Шаги: Выполнить на VPS proxy bridge -p ":33080" -C proxy.crt -K proxy.key proxy server --udp -r ":53@:53" -P "127.0.0.1:33080" -C proxy.crt -K proxy.key

  1. Выполнить на машине компании А proxy client -P "22.22.22.22:33080" -C proxy.crt -K proxy.key

4.5 Расширенное использование один

Фон:

  • Машина компании А предоставляет порт веб-службы 80.
  • Имеется VPS, публичный сетевой IP: 22.22.22.22.

Требования: Чтобы быть в безопасности, я не хочу иметь доступ к машине компании А на VPS и могу получить доступ к порту 28080 машины дома. Доступ к порту 80 машины компании А через защищённый туннель.

Шаги: Выполнить на VPS proxy bridge -p ":33080" -C proxy.crt -K proxy.key

  1. Выполнить на компьютере компании А proxy client -P "22.22.22.22:33080" -C proxy.crt -K proxy.key

  2. Выполнить на домашнем компьютере proxy server -r ":28080@:80" -P "22.22.22.22:33080" -C proxy.crt -K proxy.key

4.6 Расширенное использование II

Совет: если несколько клиентов подключены к одному мосту одновременно, вам необходимо указать другой ключ, который можно установить с помощью параметра --k, и --k может быть любой уникальной строкой. Просто будьте единственным на одном мосту. Когда сервер подключён к мосту, если одновременно подключается несколько клиентов к одному и тому же мосту, вам нужно использовать параметр --k для выбора клиента. Выставьте несколько портов, повторяя параметр -r. Формат -r: «локальный IP: локальный порт @clientHOST: клиентский порт».

Фон:

  • Компьютер компании А предоставляет веб-службу порт 80, ftp-служба порт 21.
  • Существует VPS, публичный сетевой IP: 22.22.22.22.

Требования: Дома я могу получить доступ к порту 80 компьютера компании А, обратившись к порту 28080 VPS. Дома я могу получить доступ к 21 порту компьютера компании А, обратившись к порту 29090 VPS.

Шаги: Выполнить на vps proxy bridge -p ":33080" -C proxy.crt -K proxy.key proxy server -r ":28080@:80" -r ":29090@:21" --k test -P "127.0.0.1:33080" -C proxy.crt -K proxy.key

  1. Выполнить на компьютере компании А proxy client --k test -P "22.22.22.22:33080" -C proxy.crt -K proxy.key

4.7.server -r параметр

Полный формат -r: PROTOCOL://LOCAL_IP:LOCAL_PORT@[CLIENT_KEY]CLIENT_LOCAL_HOST:CLIENT_LOCAL_PORT.

4.7.1. Протокол PROTOCOL: tcp или udp. Например: -r "udp://:10053@:53" -r "tcp://:10800@:1080" -r ":8080@:80". Если указан параметр --udp, PROTOCOL по умолчанию равен udp, тогда: -r ":8080@:80" по умолчанию равно udp; если параметр --udp не указан, PROTOCOL по умолчанию равен tcp, тогда: -r ":8080@:80" по умолчанию равно tcp.

4.7.2. CLIENT_KEY: по умолчанию — default. ### 4.7.3. LOCAL_IP пуст. По умолчанию: 0.0.0.0, CLIENT_LOCAL_HOST пуст. По умолчанию: 127.0.0.1

4.8. Сервер и клиент соединяются через прокси-сервер

Иногда сеть, в которой находится сервер или клиент, не может напрямую получить доступ к внешней сети. Вам необходимо использовать прокси-серверы https или socks5 для доступа в Интернет. В этом случае вам поможет параметр -J для подключения сервера или клиента к мосту через https или socks5. Формат параметра -J следующий:

Прокси-сервер https: Прокси-серверу требуется аутентификация, имя пользователя: имя пользователя пароль: пароль Https://имя пользователя:пароль@хост:порт Агенту аутентификация не требуется Https://хост:порт

Прокси-сервер socks5: Прокси-серверу требуется аутентификация, имя пользователя: имя пользователя пароль: пароль Socks5://имя пользователя:пароль@хост:порт Агенту аутентификация не требуется Socks5://хост:порт

Хост: IP-адрес или доменное имя прокси-сервера Порт: порт прокси-сервера

4.9. Предоставление HTTP-сервиса

Обычно клиент HTTP-запроса будет использовать IP-адрес и порт сервера для установки поля HOST, но это не то же самое, что ожидаемый фактический HOST бэкэнда, что приводит к передаче tcp. Однако бэкэнд полагается на поле HOST для определения виртуального хоста, и это не сработает. Теперь используйте параметр --http-host, чтобы принудительно установить значение поля HOST в заголовке http равным фактическому значению бэкэнда. Доменные имена и порты можно легко решить. После использования параметра --http-host к заголовку каждого HTTP-запроса будут добавлены два заголовка. Значения X-Forwarded-For и X-Real-IP — это IP-адрес клиента, поэтому бэкэнд HTTP-службы может легко получить реальный IP-адрес клиента.

Формат параметра server-http-host следующий:

--http-host www.test.com:80@2200, если сервер прослушивает несколько портов, просто повторите параметр --http-host, чтобы установить HOST для каждого порта.

Пример:

Например, локальный nginx клиента, 127.0.0.1:80 предоставляет веб-сервис, который привязан к доменному имени local.com.

Тогда параметры запуска сервера могут быть следующими:

proxy server -P :30000 -r :2500@127.0.0.1:80 --http-host local.com@2500

Объяснение:

-r :2500@127.0.0.1:80 и --http-host local.com:80@2500: порт 2500 — это порт, который сервер слушает локально. Когда используется протокол http для запроса порта ip:2500 сервера, поле заголовка HOST http будет установлено на local.com.

4.10 О статистике трафика

Если вы запускаете док-станцию сервера отдельно, это панель управления proxy-admin. Вам нужно создать новое сопоставление на панели управления верхнего уровня, чтобы получить идентификатор правила сопоставления. Затем запустите сервер и добавьте параметр --server-id=идентификатор правила сопоставления, чтобы подсчитать трафик.

4.11 О p2p

Поддержка проникновения во внутреннюю сеть. Когда условия сети сервера и клиента соблюдены, сервер и клиент напрямую подключаются через p2p. Метод открытия следующий: При запуске моста, сервера, клиента добавьте параметр --p2p. Параметр -r сервера можно использовать для включения p2p (ptcp и pudp) для порта. Если между сервером и клиентом происходит сбой p2p-канала, автоматически переключается передача данных моста.

4.12 Белый список ключей клиента

Мост, проникающий во внутреннюю сеть, может устанавливать белый список ключей клиентов. Параметр — client-keys. Формат может быть следующим: а. Имя файла, содержимое файла. Один ключ клиента может содержать только буквенно-цифровые символы и подчёркивание, которое является значением параметра запуска клиента --k. Только ключ клиента может подключиться к белому списку клиентов. Строка, начинающаяся с #, является комментарием. б. base64:// — содержимое файла, описанное в пункте а, например: base64://ajfpoajsdfa= в. str:// — несколько ключевых слов Принцип работы SSH-туннеля

SSH-туннель создаётся с помощью функции переадресации SSH. После подключения к SSH вы можете получить доступ к целевому адресу через прокси-сервер SSH.

Предположим, что есть VPS:

  • IP: 2.2.2.2;
  • порт SSH: 22;
  • имя пользователя SSH: user;
  • пароль пользователя SSH: demo.

Имя закрытого ключа SSH пользователя — user.key.

5.6.1 Как использовать имя пользователя и пароль SSH

Выполните на порту локального SOCKS5-прокси 28080:
proxy socks -T ssh -P "2.2.2.2:22" -u user -D demo -t tcp -p ":28080"

5.6.2 Как использовать имя пользователя и ключ SSH

Выполните на порту локального SOCKS5-прокси 28080:
proxy socks -T ssh -P "2.2.2.2:22" -u user -S user.key -t tcp -p ":28080"

После этого доступ к локальному порту 28080 позволит получить доступ к целевому адресу через VPS.

5.7. Сертификация

Для протокола SOCKS5 можно выполнить аутентификацию по имени пользователя и паролю. Аутентифицированные имя пользователя и пароль можно указать в командной строке.
proxy socks -t tcp -p ":33080" -a "user1:pass1" -a "user2:pass2"
Если пользователей несколько, повторите параметр -a.
Также можно поместить их в файл в формате «имя пользователя:пароль» и затем указать с параметром -F.
proxy socks -t tcp -p ":33080" -F auth-file.txt

Кроме того, агент SOCKS5 также интегрирует внешнюю аутентификацию HTTP API. Можно указать адрес интерфейса HTTP URL с параметром --auth-url.
Затем, когда происходит подключение пользователя, прокси запросит URL в режиме GET со следующими тремя параметрами. Если будет возвращён код состояния HTTP 204, аутентификация прошла успешно. В противном случае аутентификация не удалась.
Например:
proxy socks -t tcp -p ":33080" --auth-url "http://test.com/auth.php"
Когда пользователь подключится, прокси запросит URL («http://test.com/auth.php») в режиме GET.
Он принесёт четыре параметра: user, pass, ip, local_ip:
Http://test.com/auth.php?user={USER}&pass={PASS}&ip={IP}&local_ip={LOCAL_IP}
User: username
Pass: password
Ip: IP пользователя, например: 192.168.1.200
Local_ip: IP сервера, к которому обращается пользователь, например: 3.3.3.3

Если нет параметров -a или -F или --auth-url, аутентификация отключена.

5.8. Передача по протоколу KCP

Протокол KCP требует установки пароля с помощью параметра --kcp-key для шифрования и дешифрования данных.

Уровень 1 HTTP-прокси (VPS, IP: 22.22.22.22)
proxy socks -t kcp -p ":38080" --kcp-key mypassword
Вторичный HTTP-прокси (локальный Linux)
proxy socks -t tcp -p ":8080" -T kcp -P "22.22.22.22:38080" --kcp-key mypassword
После этого доступ к порту 8080 позволяет получить доступ к прокси-порту 38080 на VPS, данные передаются по протоколу kcp.

Примечание: при использовании протокола kcp локально необходимо указать общедоступный сетевой IP-адрес VPS с параметром -g, и полностью используется функция UDP socks5. В это время -g является IP-адресом в UDP-адресе, возвращаемом клиенту.

5.9. Пользовательский DNS

Параметры --dns-address и --dns-ttl используются для указания DNS (--dns-address), используемого прокси для доступа к доменному имени. И время кэширования результатов анализа (--dns-ttl) в секундах, чтобы избежать вмешательства системы DNS в работу прокси, помимо функции кэша также может сократить время разрешения DNS для повышения скорости доступа.
Например:
proxy socks -p ":33080" --dns-address "8.8.8.8:53" --dns-ttl 300

5.10 Пользовательское шифрование

Прокси-сервер socks может шифровать данные TCP через стандартное шифрование TLS и протокол kcp поверх TCP. Кроме того, он поддерживает пользовательское шифрование после tls и kcp, что означает, что пользовательское шифрование и tls|kcp могут использоваться вместе. Внутреннее использование шифрования AES256, вам нужно только определить пароль при его использовании.
Шифрование делится на две части: одна — это шифрование и дешифрование на локальном уровне (-z), а другая — шифрование или дешифрование при передаче с вышестоящим уровнем (-Z).

Пользовательское шифрование требует наличия прокси на обеих сторонах.

Следующие два уровня, три уровня для примера:

Вторичный экземпляр Выполнение на уровне 1 VPS (IP: 2.2.2.2):
proxy socks -t tcp -z demo_password -p :7777
Локальное вторичное выполнение:
proxy socks -T tcp -P 2.2.2.2:777 -Z demo_password -t tcp -p :8080
Таким образом, когда веб-сайт доступен через локального агента 8080, целевой веб-сайт становится доступным через зашифрованную передачу с вышестоящим сервером.

Трёхуровневый экземпляр
Выполнение на уровне 1 VPS (IP: 2.2.2.2):
proxy socks -t tcp -z demo_password -p :7777
Выполнение на вторичном VPS (IP: 3.3.3.3):
proxy socks -T tcp -P 2.2.2.2:7777 -Z demo_password -t tcp -z other_password -p :8888
Локальное трёхуровневое выполнение:
proxy socks -T tcp -P 3.3.3.3:8888 -Z other_password -t tcp -p :8080
Таким образом, при доступе к веб-сайту через локальный агент 8080 целевой веб-сайт будет доступен через зашифрованную передачу с вышестоящим сервером.

5.11 Сжатая передача

Прокси-сервер SOCKS может шифровать данные TCP с помощью пользовательского шифрования и стандартного шифрования TLS, а также протокола KCP поверх TCP. Его также можно использовать перед пользовательским шифрованием.
Сжимайте данные, то есть функцию сжатия и пользовательское шифрование и TLS|KCP можно использовать в комбинации, и сжатие делится на две части.
Часть из них — это локальная (-m) передача со сжатием, а часть — сжата ли передача с вышестоящим (-M).

Для сжатия требуется, чтобы обе стороны были прокси, и сжатие также в некоторой степени защищает (шифрует) данные.

Следующие два уровня, например, три уровня:

Вторичный экземпляр

Выполнение на уровне 1 VPS (ip: 2.2.2.2):
proxy socks -t tcp -m -p :7777
Локальное вторичное исполнение:
proxy socks -T tcp -P 2.2.2.2:777 -M -t tcp -p :8080
Таким образом, когда веб-сайт доступен через локального агента 8080, целевой веб-сайт станет доступным через сжатие с вышестоящим.

Трёхуровневый экземпляр

Выполнение на уровне 1 VPS (ip: 2.2.2.2):
proxy socks -t tcp -m -p :7777
Выполнение на вторичном VPS (ip: 3.3.3.3):
proxy socks -T tcp -P 2.2.2.2:7777 -M -t tcp -m -p :8888
Локальное трёхуровневое исполнение:
proxy socks -T tcp -P 3.3.3.3:8888 -M -t tcp -p :8080
Таким образом, при доступе к веб-сайту через локального агента 8080 целевой веб-сайт будет доступен через сжатие с вышестоящим сервером.

5.12 Балансировка нагрузки

SOCKS-прокси поддерживает балансировку нагрузки верхнего уровня, и можно использовать несколько параметров повтора P.

proxy socks --lb-method=hash -T tcp -P 1.1.1.1:33080 -P 2.1.1.1:33080 -P 3.1.1.1:33080 -p :33080 -t tcp

5.12.1 Настройка интервала повторов и времени ожидания

proxy socks --lb-method=leastconn --lb-retrytime 300 --lb-timeout 300 -T tcp -P 1.1.1.1:33080 -P 2.1.1.1:33080 -P 3.1.1.1:33080 -p :33080 -t tcp

5.12.2 Настройка весов

proxy socks --lb-method=weight -T tcp -P 1.1.1.1:33080?w=1 -P 2.1.1.1:33080?w=2 -P 3.1.1.1:33080?w=1 -p :33080 -t tcp

5.12.3 Использование целевого адреса для выбора вышестоящего

proxy socks --lb-hashtarget --lb-method=hash -T tcp -P 1.1.1.1:33080 -P 2.1.1.1:33080 -P 3.1.1.1:33080 -p :33080 -t tcp

5.13 Ограничение скорости

Ограничение скорости составляет 100 КБ, что можно указать с помощью параметра -l, например: 100K 2000K 1M . 0 означает отсутствие ограничения.

proxy socks -t tcp -p 2.2.2.2:33080 -l 100K

5.14 Указание исходящего IP

Параметр --bind-listen можно использовать для открытия клиентского соединения с IP портала, и использовать IP портала в качестве исходящего IP для доступа к целевому веб-сайту. Если входящий IP является внутренним IP, исходящий IP не использует внутренний IP.

proxy socks -t tcp -p 2.2.2.2:33080 --bind-listen

Гибкий исходящий IP

Хотя параметр --bind-listen может указывать исходящий IP, входящий IP и исходящий IP не могут быть изменены человеком. Если вы хотите, чтобы входящий IP отличался от исходящего IP, вы можете использовать параметр --bind-ip, формат: IP:port, например: 1.1.1.1:8080, [2000:0:0:0:0:0:0:1]:8080. Для нескольких требований привязки вы можете повторить параметр --bind-ip.

Например, у машины есть IP 5.5.5.5. Перевод текста на русский язык:

Поддерживается KCP, поддерживается цепное соединение, то есть можно поддерживать несколько уровней узлов SPS. Соединение строит зашифрованный канал.

Методы шифрования, поддерживаемые функцией ss: aes-128-cfb, aes-128-ctr, aes-128-gcm, aes-192-cfb, aes-192-ctr, aes-192-gcm, aes-256-cfb, aes-256-ctr, aes-256-gcm, bf-cfb, cast5-cfb, chacha20, chacha20-ietf, chacha20-ietf-poly1305, des-cfb, rc4-md5, rc4-md5-6, salsa20, Xchacha20.

Аргумент порта прослушивания -p может быть:

  -p ":8081"  слушать на 8081
  -p ":8081,:8082"  слушать на 8081 и 8082
  -p ":8081,:8082,:9000-9999" слушать на 8081 и 8082 и 9000 и с 9001 по 9999, всего 1002 порта  

Примечание:

При использовании протокола KCP локально необходимо указать публичный сетевой IP VPS с помощью -g, при этом полностью используется UDP-функция socks5. В это время -g — это IP-адрес в UDP-адресе, возвращаемом клиенту.

UDP-функция ss по умолчанию отключена и может быть включена с помощью --ssudp. UDP-функция socks5 по умолчанию отключена и может быть включена с помощью --udp, по умолчанию используется случайный порт для рукопожатия, производительность можно повысить, зафиксировав порт. Установите с помощью параметра --udp-port 0, 0 означает, что свободный порт выбирается случайным образом, или вы можете вручную указать конкретный порт.

6.2 HTTP(S) to HTTP(S)+SOCKS5+SS

Предположим, уже есть обычный http(s) прокси: 127.0.0.1:8080. Теперь мы превращаем его в общий прокси, который поддерживает как http(s), так и socks5 и ss. Преобразованный локальный порт — 18080, шифрование ss: Aes-192-cfb, пароль ss: pass.
Команда выглядит следующим образом:
proxy sps -S http -T tcp -P 127.0.0.1:8080 -t tcp -p :18080 -h aes-192-cfb -j pass

Предположим, уже существует tls http(s) прокси: 127.0.0.1:8080. Сейчас мы превращаем его в обычный прокси, который поддерживает как http(s), так и socks5 и ss. Преобразованный локальный порт — 18080, для tls требуется файл сертификата, ss шифрование: aes-192-cfb, ss пароль: pass.
Команда выглядит следующим образом:
proxy sps -S http -T tls -P 127.0.0.1:8080 -t tcp -p :18080 -C proxy.crt -K proxy.key -h aes-192-cfb -j pass

Предположим, уже существует kcp http(s) прокси (пароль: demo123): 127.0.0.1:8080, теперь мы превращаем его в нормальный прокси, который поддерживает как http(s), так и socks5 и ss. Преобразованный локальный порт — 18080, ss шифрование: aes-192-cfb, ss пароль: pass.
Команда выглядит следующим образом:
proxy sps -S http -T kcp -P 127.0.0.1:8080 -t tcp -p :18080 --kcp-key demo123 -h aes-192-cfb -j pass

6.3 SOCKS5 to HTTP(S)+SOCKS5+SS

Предположим, уже есть нормальный socks5 прокси: 127.0.0.1:8080, сейчас мы превращаем его в общий прокси, который поддерживает как http(s), так и socks5 и ss. Преобразованный локальный порт — 18080, ss шифрование: aes-192 -cfb, ss пароль: pass.
Команда выглядит следующим образом:
proxy sps -S socks -T tcp -P 127.0.0.1:8080 -t tcp -p :18080 -h aes-192-cfb -j pass

Предположим, уже существует tls socks5 прокси: 127.0.0.1:8080, сейчас мы превращаем его в общий прокси, который поддерживает как http(s), так и socks5 и ss. Преобразованный локальный порт — 18080, tls требует файл сертификата, режим шифрования ss: aes-192-cfb, ss пароль: pass.
Команда выглядит следующим образом:
proxy sps -S socks -T tls -P 127.0.0.1:8080 -t tcp -p :18080 -C proxy.crt -K proxy.key -h aes-192-cfb -j pass

Предположим, уже существует kcp socks5 прокси (пароль: demo123): 127.0.0.1:8080, сейчас мы превращаем его в общий прокси, который поддерживает как http(s), так и socks5 и ss. Преобразованный локальный порт — 18080, метод шифрования ss: aes-192-cfb, ss пароль: pass.
Команда выглядит следующим образом:
proxy sps -S socks -T kcp -P 127.0.0.1:8080 -t tcp -p :18080 --kcp-key demo123 -h aes-192-cfb -j pass

6.4 SS to HTTP(S)+SOCKS5+SS

SPS upstream и локально поддерживают протокол ss, восходящий поток может быть SPS или стандартной службой ss.
Локально SPS предоставляет HTTP(S)\SOCKS5\SPS три значения по умолчанию. Когда восходящим потоком является SOCKS5, преобразованные SOCKS5 и SS поддерживают UDP.
Предположим, уже имеется нормальный SS или SPS прокси (ss включён, шифрование: aes-256-cfb, пароль: demo): 127.00.01:8080, теперь мы преобразуем его для поддержки как http(s), так и socks5 и Это текст технической направленности из области разработки и тестирования программного обеспечения.

Вот его перевод на русский язык:

Это SS, a — метод шифрования, b — пароль, и нельзя оставлять пустыми поля имени пользователя и пароля, например: http://2.2.2.2:33080. Если имя пользователя и пароль защищены, специальные символы можно закодировать с помощью urlencode.

2.2.2.2:33080 — это восходящий адрес, формат: IP (или доменное имя): порт, если нижележащий протокол ws/wss, то также можно указать путь, например: 2.2.2.2: 33080/ws;

Также можно задать метод шифрования и пароль для ws\wss путём добавления параметров запроса m и k, например: 2.2.2.2:33080/ws?m=aes-192-cfb&k=password.

#1 Когда используется многоуровневая балансировка нагрузки, веса используются редко.

6.8 Пользовательское шифрование

Прокси sps proxy может шифровать данные TCP через стандартное шифрование TLS и протокол KCP поверх TCP, а также поддерживать после TLS и KCP пользовательское шифрование, то есть пользовательское шифрование и TLS|KCP можно использовать в комбинации, внутренне используя шифрование AES256, нужно только определить его при использовании. Можно использовать пароль, шифрование делится на две части: одна часть — локальное (-z) шифрование и дешифрование, а другая часть — шифрование и дешифрование с восходящей передачей (-Z).

Пользовательское шифрование требует, чтобы обе стороны были прокси.

Следующие два уровня, три уровня для примера:

Предположим, что уже есть HTTP(S) прокси: 6.6.6.6:6666.

Вторичный экземпляр Выполнить на уровне 1 VPS (ip: 2.2.2.2): proxy sps -S http -T tcp -P 6.6.6.6:6666 -t tcp -z demo_password -p :7777 Локальное вторичное выполнение: proxy sps -T tcp -P 2.2.2.2:777 -Z demo_password -t tcp -p :8080 Таким образом, когда веб-сайт доступен через локальный агент 8080, целевой веб-сайт становится доступным через зашифрованную передачу с вышестоящим сервером.

Трёхуровневый экземпляр Выполнить на уровне 1 VPS (ip: 2.2.2.2): proxy sps -S http -T tcp -P 6.6.6.6:6666 -t tcp -z demo_password -p :7777 Выполнить на вторичном VPS (ip: 3.3.3.3): proxy sps -T tcp -P 2.2.2.2:7777 -Z demo_password -t tcp -z other_password -p :8888 Локальное трёхуровневое выполнение: proxy sps -T tcp -P 3.3.3.3:8888 -Z other_password -t tcp -p :8080 Таким образом, когда веб-сайт доступен через локальный агент 8080, целевой веб-сайт становится доступным через зашифрованную передачу с вышестоящим сервером.

6.9 Сжатая передача

Прокси sps прокси может шифровать данные TCP с помощью пользовательского шифрования и стандартного шифрования TLS и протокола KCP поверх TCP. Также его можно использовать перед пользовательским шифрованием. Сжимайте данные, то есть функцию сжатия и пользовательское шифрование и tls|kcp можно использовать вместе, сжатие делится на две части. Часть его — локальная (-m) передача со сжатием, а часть — передача с вышестоящим (-M) сжата.

Сжатие требует, чтобы обе стороны были прокси, и сжатие также защищает (шифрует) данные в некоторой степени.

Следующие два уровня, три уровня для примера:

Вторичный экземпляр Выполнить на уровне 1 VPS (ip: 2.2.2.2): proxy sps -t tcp -m -p :7777 Локальное вторичное выполнение: proxy sps -T tcp -P 2.2.2.2:777 -M -t tcp -p :8080 Таким образом, когда веб-сайт доступен через локального агента 8080, целевой сайт становится доступным через сжатие с вышестоящим.

Трёхуровневый экземпляр Выполнить на уровне 1 VPS (ip: 2.2.2.2): proxy sps -t tcp -m -p :7777 Выполнить на вторичном VPS (ip: 3.3.3.3): proxy sps -T tcp -P 2.2.2.2:7777 -M -t tcp -m -p :8888 Локальное трёхуровневое выполнение: proxy sps -T tcp -P 3.3.3.3:8888 -M -t tcp -p :8080 Таким образом, когда веб-сайт доступен через локального агента 8080, целевой сайт становится доступным через сжатие с вышестоящим.

6.10 Отключение протокола

По умолчанию SPS поддерживает HTTP(S) и socks5 два прокси-протокола. Мы можем отключить протокол с помощью параметра. Например:

  1. Отключить функцию HTTP(S)-прокси, оставив только функцию SOCKS5-прокси, параметр: --disable-http. proxy sps -T tcp -P 3.3.3.3:8888 -M -t tcp -p :8080 ### 6.11 Ограничение скорости

Предположим, что есть вышестоящий SOCKS5:

proxy socks -p 2.2.2.2:33080 -z password -t tcp

Нижний уровень SPS, ограничение скорости 100K

proxy sps -S socks -P 2.2.2.2:33080 -T tcp -Z password -l 100K -t tcp -p :33080

Оно может быть задано параметром -l, например: 100К 2000К 1М. 0 означает отсутствие ограничения.

6.12 Указание исходящего IP

Параметр --bind-listen можно использовать для открытия клиентского соединения с IP портала и использовать IP портала в качестве исходящего IP для доступа к целевому веб-сайту. Если входящий IP является внутренним IP, исходящий IP не использует входящий IP.

proxy sps -S socks -P 2.2.2.2:33080 -T tcp -Z password -l 100K -t tcp --bind-listen -p :33080

Гибкий исходящий IP

Хотя параметр --bind-listen, описанный выше, может указывать исходящий IP, входящий IP и исходящий IP не могут быть изменены человеком. Если вы хотите, чтобы входящий IP отличался от исходящего IP, вы можете использовать параметр --bind-ip в формате IP:порт, например: 1.1.1.1:8080, [2000:0:0:0:0:0:0:1]:8080. Для нескольких требований привязки вы можете повторить параметр --bind-ip.

Например, у машины есть IP 5.5.5.5, 6.6.6.6, и она отслеживает два порта 8888 и 7777, команда выглядит следующим образом:

proxy sps -t tcp -p :8888,:7777 --bind-ip 5.5.5.5:7777 --bind-ip 6.6.6.6:8888

Тогда клиент обращается к порту 7777, исходящим IP будет 5.5.5.5, обращается к порту 8888, исходящим IP будет 6.6.6.6. Если одновременно установлены параметры --bind-ip и --bind-, то --bind-ip имеет более высокий приоритет.

Кроме того, часть IP параметра --bind-ip поддерживает указание имени сетевого интерфейса, подстановочных знаков и более одного. Подробности следующие:

  • Указать имя сетевого интерфейса, например: --bind-ip eth0:7777, тогда клиент обращается к порту 7777, а исходящим IP является IP сетевого интерфейса eth0.
  • Имя сетевого интерфейса поддерживает подстановочные знаки, например: --bind-ip eth0.*:7777, тогда клиент обращается к порту 7777, а исходящим IP становится случайно выбранный IP из сетевых интерфейсов, начинающихся с eth0..
  • IP поддерживает подстановочные знаки, такие как: --bind-ip 192.168.?.*:7777, тогда клиент обращается к порту 7777, и исходящим IP станет любой IP машины, соответствующий IP 192.168.?.*, случайным образом выбранный один.
  • Также это может быть несколько комбинаций имени сетевого интерфейса и IP, разделённых запятыми половинной ширины, таких как: --bind-ip pppoe??,192.168.?.*:7777, тогда клиент обращается к порту 7777, а исходящим IP станет случайно выбранный один из всех IP машины, соответствующих pppoe?? или всем IP машины, соответствующим 192.168.?.*.
  • Подстановочный знак * представляет от 0 до любого количества символов, а ? представляет 1 символ.
  • Если IP сетевого интерфейса изменится, это вступит в силу в реальном времени.
  • Вы можете использовать параметр --bind-refresh, чтобы указать интервал обновления информации о локальном сетевом интерфейсе, по умолчанию он равен 5, единица измерения — секунда.

6.13 Параметры сертификата используют данные base64

По умолчанию параметрами -C, -K является путь к файлу crt сертификата и файлу ключа.
Если это начало base64://, то последующие данные считаются закодированными в base64 и будут использоваться после декодирования.

6.14 Независимая служба

Порт sps может выполнять полнофункциональное проксирование http\socks\ss.
Следующая команда открывает службы http(s)\ss\socks одним щелчком мыши и одновременно включает udp socks5 и udp ss.
proxy sps -p: 33080 --ssudp --udp --udp-port 0 Параметры KCP

Если вы хотите получить более подробную конфигурацию и объяснение параметров kcp, пожалуйста, найдите информацию самостоятельно.

Имя командной строки для каждого параметра, а также значения по умолчанию и простые описания функций следующие:

--kcp-key="secrect" — общий секретный ключ между клиентом и сервером  
--kcp-method="aes" — метод шифрования/дешифрования, может быть: aes, aes-128, aes-192, salsa20, blowfish,  
Twofish, cast5, 3des, tea, xtea, xor, sm4, none  
--kcp-mode="fast" — профили: fast3, fast2, fast, normal, manual  
--kcp-mtu=1350 — устанавливает максимальный размер блока данных для UDP-пакетов  
--kcp-sndwnd=1024 — устанавливает размер окна отправки (количество пакетов)  
--kcp-rcvwnd=1024 — устанавливает размер окна приёма (количество пакетов)  
--kcp-ds=10 — устанавливает кодирование стирания Рида-Соломона — datashard  
--kcp-ps=3 — устанавливает кодирование чётности Рида-Соломона — parityshard  
--kcp-dscp=0 — устанавливает DSCP (6 бит)  
--kcp-nocomp — отключает сжатие  
--kcp-acknodelay — будьте осторожны! Немедленно сбрасывайте подтверждение при получении пакета  
--kcp-nodelay=0 — будьте осторожны!  
--kcp-interval=50 — будьте осторожны!  
--kcp-resend=0 — будьте осторожны!  
--kcp-nc=0 — будьте осторожны! Нет перегрузки  
--kcp-sockbuf=4194304 — будьте осторожны!  
--kcp-keepalive=10 — будьте осторожны!

Совет: Параметры: -- четыре режима fast3, fast2, fast, normal в kcp-mode эквивалентны установке следующих четырёх параметров: Normal: --nodelay=0 --interval=40 --resend=2 --nc=1 Fast: --nodelay=0 --interval=30 --resend=2 --nc=1 Fast2: --nodelay=1 --interval=20 --resend=2 --nc=1 Fast3: --nodelay=1 --interval=10 --resend=2 --nc=1

8. Безопасность DNS

8.1 Введение

DNS известен как сервис, предоставляемый через порт UDP 53, но с развитием сети некоторые известные DNS-серверы также поддерживают DNS-запросы в режиме TCP, например, Google 8.8.8.8. Принцип работы DNS-сервера против загрязнения заключается в том, чтобы запустить прокси-сервер DNS локально. Сервер использует TCP для выполнения DNS-запроса через вышестоящий агент. Если он взаимодействует с вышестоящим агентом, то может выполнять безопасное и свободное от загрязнений разрешение DNS. Он также поддерживает независимые сервисы, параллельный анализ и улучшенную функцию файла хостов для поддержки гибкого параллельного анализа и пересылки.

Порядок разрешения DNS:

  1. Используйте параметр --hosts для анализа.
  2. Если доменное имя, которое нужно разрешить, не найдено в пункте 1, оно анализируется с использованием правила параметра --forward.
  3. Доменное имя, которое необходимо разрешить, не было найдено в пунктах 1 и 2, используется разрешение по умолчанию, заданное параметром --default. Значения параметров по умолчанию имеют три варианта: proxy, direct и system.
    Эти три значения параметров объясняются следующим образом:
    Proxy: доменное имя разрешается через DNS-сервер, указанный параметром -q.
    Direct: подключение к DNS-серверу, указанному параметром -q, для разрешения доменного имени через локальную сеть.
    System: разрешает доменное имя через системный DNS.

Совет:
Формат файла hosts, указанный параметром --hosts, такой же, как у системного файла hosts, и доменное имя поддерживает подстановочные знаки. Вы можете обратиться к файлу hosts.
Файл правил переадресации, указанный параметром --forward, можно сопоставить с файлом resolve.rules. Доменное имя поддерживает подстановочные знаки. Оно поддерживает несколько DNS-серверов для одновременного анализа каждого доменного имени. Будет использоваться результат того, кто разрешит быстрее.
Параметр -q может указывать на несколько удалённых DNS-серверов для параллельного анализа. По умолчанию используется тот, кто разрешает быстрее: 1.1.1.1, 8.8.8.8, 9.9.9.9, несколько значений, разделённых запятыми.
Например, вы также можете указать порты: 1.1.1.1, 8.8.8.8#53, 9.9.9.9

Если вы используете автономный сервис, вам не нужен вышестоящий:
Можно выполнить:
proxy dns --default system -p :5353
Или
proxy dns --default direct -p :5353

8.2 Пример использования

8.2.1 Обычный HTTP(S) вышестоящий агент

Предположим, что есть вышестоящий агент: 2.2.2.2:33080
Ложное выполнение:
proxy dns -S http -T tcp -P 2.2.2.2:33080 -p :53
Тогда локальный порт UDP 53 обеспечивает разрешение DNS. Сервис — это тип прокси, который делится на http и socks.

Указывается, предоставляется ли прокси-сервер sps сервисом sps: 1 — да, 0 — нет.

Цель — это цель, к которой обращается клиент. Если это прокси-сервер http(s), целью является конкретный URL; если это socks5 прокси-сервер, цель пуста.

Пример

Предположим, что --auth-url http://127.0.0.1:333/auth.php указывает на адрес интерфейса php.
Содержимое auth.php следующее:

<?php  
#all users and password  
$alluser=[
    "user1"=>"pass1",
    "user2"=>"pass2",
    "user3"=>"pass3",
    "user4"=>"pass4",
];
$proxy_ip=$_GET['local_addr'];  
$user_ip=$_GET['client_addr'];  
$service=$_GET['service'];  
$is_sps=$_GET['sps']=='1';  
$user=$_GET['user'];  
$pass=$_GET['pass'];  
$target=$_GET['target'];  

//business checking
//....  
$ok=false;
foreach ($alluser as $dbuser => $dbpass) {
    if ($user==$dbuser&&$pass==$dbpass){
        $ok=true;
        break;
    }
}

//set the authentication result  
if($ok){
    header("userconns:1000");  
    header("ipconns:2000");  
    header("userrate:3000");  
    header("iprate:8000");  
    header("userqps:5");
    header("ipqps:2");
    header("upstream:http://127.0.0.1:3500?parent-type=tcp");  
    header("outgoing:1.1.1.1");  
    header("HTTP/1.1 204 No Content");  
}

Объяснение HTTP HEADER

userconns: максимальное количество подключений для пользователя, не ограничено 0 или не задано в этом заголовке.
ipcons: максимальное количество соединений для IP-адреса пользователя, не ограничено 0 или не установлено в этом заголовке.
userrate: ограничение скорости одного TCP-соединения пользователя, в байтах/секунду, не ограничено 0 или не задано в этом заголовке.
iprate: ограничение скорости одного соединения TCP для клиентского IP, в байтах/секунду, не ограничено 0 или не указано в этом заголовке.
userqps: максимальное количество подключений в секунду (QPS) для пользователя, не ограничено 0 или не задано в этом заголовке.
ipqps: максимальное количество подключений в секунду (QPS) для клиентского IP, не ограничено 0 или не задано в этом заголовке.
upstream: используемый восходящий поток, не пустой, или этот заголовок не установлен.
outgoing: исходящий IP-адрес, эта опция работает только тогда, когда восходящий поток пуст. И IP должен принадлежать машине, на которой запущен прокси.

Советы

  1. По умолчанию для предоставления имени пользователя и пароля требуется --auth-url. Если вам не нужно, чтобы клиент предоставлял имя пользователя и пароль, и вы хотите выполнить аутентификацию, вы можете добавить --auth-nouser. Визит по-прежнему будет обращаться к адресу аутентификации --auth-url для аутентификации. Только имя пользователя аутентификации $user и пароль аутентификации $pass, полученные в интерфейсе php, пусты, когда клиент не отправил имя пользователя и пароль.
  2. Приоритет ограничения подключения: лимит файла аутентификации пользователя — «Файл ip.limit limit» — лимит пользователя API — «Лимит IP-адреса API» — глобальный лимит подключения командной строки.
  3. Приоритет ограничения скорости: Лимит скорости файла аутентификации пользователя — «Ограничение скорости файла ip.limit» — Лимит скорости пользователя API — «Ограничение скорости IP-адреса API» — «Глобальный лимит скорости командной строки».
  4. Восходящий приоритет получает: восходящий поток файла аутентификации пользователя — восходящий поток file ip.limit — «Восходящий поток API» — восходящий поток командной строки.
  5. --auth-cache кэш аутентификации, кэширует результат аутентификации в течение определённого периода времени, повышает производительность, снижает нагрузку на интерфейс аутентификации, --auth-cache единица секунд, по умолчанию 0, установите 0 для закрытия кеша.

Подробное описание восходящего потока

  1. Когда параметр sps равен 0.
    Когда сервис является http, восходящий поток поддерживает только http(s) прокси и не поддерживает аутентификацию. Если требуется аутентификация, её можно заменить на sps. Формат:
    http://127.0.0.1:3100?argk=argv
    Когда сервисом является socks, восходящий поток поддерживает только прокси socks5. Формат:
    socks5://127.0.0.1:3100?argk=argv

Объяснение: http://,socks5:// фиксировано, 127.0.0.1:3100 — адрес восходящего потока.

  1. Когда sps равно 1.
    Восходящий поток поддерживает socks5, http(s) прокси, поддерживает аутентификацию, формат: protocol://a:b@2.2.2.2:33080?argk=argv, пожалуйста, обратитесь к главе SPS для получения дополнительной информации. Интерфейс адреса:

Затем прокси будет периодически отправлять все имена пользователей или IP-адреса клиентов, подключённых к прокси, на этот URL. В частности, прокси отправляет HTTP-запрос POST на HTTP-адрес URL, заданный параметром --control-url.

Значение по умолчанию для interval составляет 30 секунд, это значение можно изменить с помощью параметра --control-sleep.

Когда пользователь истекает или трафик пользователя израсходован, API аутентификации может контролировать только то, что пользователь не может создать новое соединение, но соединение с прокси было установлено и соединение не может быть немедленно разорвано. Затем эту проблему можно решить через интерфейс управления. Интерфейс управления вернёт содержимое через интерфейс управления в самое медленное время interval, и конец будет недействительным, когда пользователь установит соединение.

Описание запроса

Прокси отправляет HTTP POST-запрос на URL интерфейса управления. В данных формы есть два поля: пользователь и IP.

Пользователь: имя пользователя, в данный момент подключённого к прокси; несколько имён разделены запятыми, например: user1, user2.

IP: IP-адрес клиента, в данный момент подключённого к прокси; несколько адресов разделены запятыми, например: 1.1.1.1, 2.2.2.2.

Описание данных ответа

Данные, возвращаемые интерфейсом управления, являются недействительными пользователем и IP, формат — данные объекта JSON, есть два поля пользователь и IP.

Например: {"пользователь": "a, b", "ip": ""}.

Пользователь: имена пользователей, в данный момент подключённых к прокси; несколько разделены запятыми и не оставлены пустыми, например: user1, user2.

IP: IP-адрес клиента, в данный момент подключённого к прокси. Несколько адресов разделены запятыми и не оставлены пустыми.

Соединение между возвращённым пользователем и IP будет разорвано прокси.

Пример

Предположим, что --control-url http://127.0.0.1:33088/user/control.php указывает на адрес интерфейса PHP. Содержимое control.php следующее:

<?php  
#revcieve proxy post data
$userArr=explode(",",$_POST['user']);   
$ipArr=$_GET['ip'];  

//invalid users array
$badUsers=[]; 

foreach ($userArr as $user) {  
    //logic business, push invalid user into $badUsers
    $badUsers[]=$user;
}  
$data=["user"=>implode(","$badUsers),"ip"=>""];

echo json_encode($data);

10. Аутентификация

Функция прокси-сервера http(s)/socks5/sps поддерживает доступ пользователя к паре прокси через файл конфигурации и поддерживает прокси-сервер http(s) «Proxy Basic proxy authentication» и аутентификацию socks5.

Начало использования

Функцию прокси-сервера http(s)/socks5/sps можно использовать, передав следующие пять параметров: --auth-file, --max-conns, --ip-limit, --rate-limit, -a.

Подробное объяснение параметров

--auth-file

Файл с именем пользователя и паролем для аутентификации. Этот параметр указывает на файл, одна строка на правило, в формате: «имя пользователя: пароль: количество соединений: скорость: вверх». Количество соединений — это максимальное количество соединений для пользователя. Скорость — максимальная скорость каждого TCP-соединения пользователя. Единица измерения — байт/секунда. Вверх — верхний уровень, используемый пользователем. Аутентифицированный пользователь может быть установлен не только с помощью --auth-file, но и напрямую с помощью параметра -a. Можно задать несколько пользователей с несколькими параметрами -a. Например: proxy http -a a:b:0:0: -a c:d:0:0:

Пример объяснения: Например: пользователь:пароль:100:10240:http://192.168.1.1:3100 пользователь — имя пользователя для аутентификации пароль — пароль пользователя для аутентификации (не может содержать двоеточие:) 100 — максимальное количество подключений для этого пользователя, не ограничено для записи 0 10240 — ограничение скорости одного TCP-подключения этого пользователя, единица измерения: байт / сек, без ограничения записывается 0 http://192.168.1.1:3100 — вверх, используемый этим пользователем, пробел не остаётся пустым

--max-conns

Ограничивает максимальное количество глобальных подключений для службы прокси, число, 0 — неограниченно, по умолчанию — 0.

--ip-limit

Управляет количеством подключений и скоростью подключения клиентского IP. Этот параметр указывает файл, одна строка. Правило для каждой строки, и начало # — это взгляд.

Пример файла ip.limit, формат правила следующий:
127.0.0.1:100:10240:http://192.168.1.1:3100
Интерпретация правила:

  • 127.0.0.1 — IP-адрес, который должен быть ограничен;
  • 100 — максимальное количество подключений для этого IP, не ограничено, можно записать 0;
  • 10240 — ограничение скорости одного TCP-соединения IP, единица измерения: байт/с, без ограничения записывается 0;
  • http://192.168.1.1:3100 — восходящий поток, используемый этим IP, он не остаётся пустым.
--rate-limit

Ограничивает скорость каждого TCP-подключения сервиса, например: 100K 2000K 1M. 0 означает неограниченную, по умолчанию 0.

11. Кластер

Прокси поддерживает управление кластером. Прокси устанавливается на каждом узле машины в качестве агента с панелью управления proxyadmin cluster edition для унифицированного управления прокси-сервисами на массовых машинах.

Если прокси должен работать как агент, предположим, что адрес порта кластера панели управления: 1.1.1.1:55333.

Пример команды следующий:

proxy agent -k xxx -c 1.1.1.1:55333 -i test

Объяснение команды:

agent: параметр функции, означающий режим работы агента.

-k: ключ шифрования и дешифрования для связи с proxyadmin cluster edition. Этот ключ задаётся в файле конфигурации proxyadmin cluster edition.

-c: адрес порта кластера proxyadmin cluster edition, формат: IP:порт.

-i: уникальный идентификатор агента гарантирует, что каждый агент отличается. Указанный здесь «уникальный идентификатор» используется при добавлении узла к панели управления. IP заполняется этим «уникальным идентификатором». Если -i не указано, по умолчанию пусто, и панель управления добавляет поле IP для заполнения: интернет-IP агента.

-u: параметр прокси, по умолчанию пуст. Можно указать агента, и агент будет взаимодействовать с кластером через этого агента. Формат такой же, как у --jumper. Для получения подробной информации обратитесь к части руководства --jumper.

Примечание:

Когда клиентский сервис настроен в панели управления, все узлы используют один и тот же ключ, что приводит к работе только одного клиента. Чтобы решить эту проблему, параметры клиентского сервиса могут использовать заполнители: {AGENT_ID} для ссылки на идентификатор агента в качестве ключа клиента, чтобы гарантировать, что у каждого клиента есть уникальный ключ.

Например, параметры клиентского сервиса:

client -T tcp -P 1.1.1.1:30000 --k {AGENT_ID}

12. http, https веб-сайт обратного прокси

Прокси может выполнять обратный прокси для http и https веб-сайтов.

Поддерживаемые функции следующие:

  • http и https преобразуются друг в друга.
  • несколько восходящих потоков.
  • баланс нагрузки восходящего потока.
  • высокая доступность восходящего потока.
  • сопоставление путей.
  • защита пути.
  • имена псевдонимов привязок.

Пример, файл конфигурации:rhttp.toml.

proxy rhttp -c rhttp.toml

Для подробного использования обратитесь к файлу конфигурации rhttp.toml, который содержит полное описание конфигурации.

Введение

Proxy — это высокопроизводительный сервер, который является HTTP-прокси, HTTPS-прокси и SOCKS5-прокси. Он также является внутренним сетевым прокси-сервером, игровым щитом и игровым прокси. Поддерживает API-прокси аутентификацию, имеет высокий уровень защиты от атак на сервер. Поддерживает прямой и обратный прокси, прозрачный прокси. Осуществл... Развернуть Свернуть
GPL-3.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/snail-proxy.git
git@api.gitlife.ru:oschina-mirror/snail-proxy.git
oschina-mirror
snail-proxy
snail-proxy
master