GoProxy — это высокопроизводительный HTTP-прокси, HTTPS-прокси, SOCKS5-прокси, SS-прокси, WebSocket-прокси, TCP-прокси и UDP-прокси. Поддерживает прямые прокси, обратные прокси, прозрачные прокси, интернет-NAT-прокси, балансировку нагрузки HTTPS-прокси, балансировку нагрузки HTTP-прокси, балансировку нагрузки SOCKS5-прокси, балансировку нагрузки сокет-прокси, балансировку нагрузки SS-прокси, сопоставление портов TCP / UDP, транзитную передачу SSH, зашифрованную передачу TLS, преобразование протоколов, антизагрязняющий DNS-прокси, аутентификацию API, ограничение скорости, ограничение соединения. Обратные прокси помогают вам открыть локальный сервер за NAT или брандмауэром для доступа в Интернет, чтобы вы или ваши посетители могли легко получить к нему доступ.
And ProxyAdmin — это мощная веб-консоль snail007/goproxy .
В этом руководстве описаны функции, которые включены в коммерческую версию. Бесплатная версия не включает расширенные функциональные параметры, такие как аутентификация.
Если при использовании бесплатной версии вы столкнётесь с некоторыми командами и получите сообщение об ошибке вроде «параметр xxx не существует», это будет означать, что этот параметр является функцией коммерческой версии. Пример ошибки: err: unknown long flag '-a'
.
Сравнение функций бесплатной и коммерческой версий, подробные инструкции по приобретению и использованию коммерческой версии см. здесь.
Первый запуск
Данное руководство предполагает использование системы Linux, программа — proxy. Все операции требуют привилегий суперпользователя.
При использовании Windows рекомендуется использовать версию proxy.exe для этой операционной системы.
Следующее руководство познакомит вас со способом использования параметров через командную строку или путём чтения файла конфигурации.
Конкретный формат — указать файл конфигурации с помощью символа @, например: proxy @configfile.txt.
Формат configfile.txt: первая строка — имя подкоманды, вторая строка начинается с одного параметра на строку.
Пример формата: parameter Parameter value
, можно записать параметр без значения параметра, например: --nolog.
Например, содержимое configfile.txt выглядит следующим образом:
Http
-t tcp
-p :33080
--forever
По умолчанию информация, выводимая журналом, не включает количество строк файла. В некоторых случаях, чтобы устранить неполадки в программе, необходимо быстро определить проблему.
Можно использовать параметр --debug для вывода количества строк кода и миллисекунд.
По умолчанию журнал отображается непосредственно в консоли. Если вы хотите сохранить его в файле, можно использовать параметр --log.
Например: --log proxy.log, журнал будет выведен в файл proxy.log для облегчения устранения неполадок.
Процесс прокси-сервера 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.
После выполнения прокси по умолчанию вы не сможете закрыть командную строку, если хотите, чтобы прокси продолжал работать.
Чтобы запустить прокси в фоновом режиме, командную строку можно закрыть, просто добавьте параметр --daemon в конце команды.
Например:
proxy http -t tcp -p "0.0.0.0:38080" --daemon
Параметр --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
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.
Основной 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.
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.
Первичный 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.
Иногда сеть, где расположен прокси, не может напрямую получить доступ к внешней сети. Вам нужно использовать https или socks5 прокси для доступа в Интернет. Тогда в этот раз
Параметр -J может помочь вам подключить прокси к узлу P через https или socks5 прокси при сопоставлении порта прокси tcp, сопоставляя внешний порт с локальным.
Формат параметра -J следующий:
Написание https прокси:
Прокси требует аутентификации, имя пользователя: имя пользователя пароль: пароль
Https://имя пользователя:пароль@хост:порт
Агент не требует аутентификации
Https://хост:порт
Написание socks5 прокси:
Прокси требуется аутентификация, имя пользователя: имя пользователя пароль: пароль
Socks5://имя пользователя:пароль@хост:порт
Агенту не требуется аутентификация
Socks5://хост:порт
Хост: 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
Хотя вышеупомянутый параметр --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.--bind-ip 192.168.?.*:7777
, тогда клиент обращается к порту 7777, и исходящим IP будет любой IP машины, соответствующий IP 192.168.?.*.--bind-ip pppoe??,192.168.?.*:7777
, тогда клиент обращается к порту 7777 и исходящим IP будет случайно выбранный IP среди всех IP машины, соответствующих pppoe?? и 192.168.?.*--bind-refresh
, чтобы указать интервал обновления информации о локальном сетевом интерфейсе, по умолчанию — 5 секунд.Параметр --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
--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
proxy help tcp
-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.
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.
Первичный 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.
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.
Основной 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 туннель.
Когда прокси-серверы UDP upstream (параметр: -T) является udp, он поддерживает указанный исходящий IP. Используя параметр --bind-listen
, вы можете открыть клиент для подключения к серверу IP и использовать сервер IP в качестве исходящего IP для доступа к цели. Если привязка неправильного IP, прокси не будет работать.
proxy udp -p ":33080" -T udp -P "192.168.22.33:2222" -B
.
proxy help udp
.
Проникновение во внутреннюю сеть делится на две версии: «многоканальная версия» и «мультиплексная версия», обычно как веб-сервис, этот сервис не является долгосрочным соединением, рекомендуется использовать «многоканальную версию», если это длительное соединение, предлагается использовать «мультиплексную версию».
В следующем руководстве в качестве примера используется «мультиплексная версия», чтобы проиллюстрировать, как её использовать.
Проникновение во внутреннюю сеть состоит из трёх частей: клиент, сервер и мост; клиент и сервер активно подключаются к мосту для создания моста.
Фон: — Машина компании 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 для локальной разработки
Фон:
Требование: Заполните адрес в конфигурации интерфейса обратного вызова веб-страницы учётной записи разработки WeChat: http://22.22.22.22/calback.php. Затем вы сможете получить доступ к calback.php через порт 80 ноутбука. Если вам нужно привязать доменное имя, вы можете использовать собственное доменное имя. Например: wx-dev.xxx.com разрешается в 22.22.22.22, а затем в вашем собственном ноутбуке nginx настройте доменную зону wx-dev.xxx.com на конкретный каталог.
Шаги:
Выполните на 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
Выполнить на вашем ноутбуке
proxy client -P "22.22.22.22:33080" -C proxy.crt -K proxy.key
4.4 Общее использование UDP
Фон:
Требования: Дома вы можете использовать машину компании А для выполнения служб разрешения доменных имён, установив локальный 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
proxy client -P "22.22.22.22:33080" -C proxy.crt -K proxy.key
4.5 Расширенное использование один
Фон:
Требования: Чтобы быть в безопасности, я не хочу иметь доступ к машине компании А на VPS и могу получить доступ к порту 28080 машины дома. Доступ к порту 80 машины компании А через защищённый туннель.
Шаги:
Выполнить на VPS
proxy bridge -p ":33080" -C proxy.crt -K proxy.key
Выполнить на компьютере компании А
proxy client -P "22.22.22.22:33080" -C proxy.crt -K proxy.key
Выполнить на домашнем компьютере
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 компьютера компании А, обратившись к порту 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
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
Иногда сеть, в которой находится сервер или клиент, не может напрямую получить доступ к внешней сети. Вам необходимо использовать прокси-серверы https или socks5 для доступа в Интернет. В этом случае вам поможет параметр -J для подключения сервера или клиента к мосту через https или socks5. Формат параметра -J следующий:
Прокси-сервер https: Прокси-серверу требуется аутентификация, имя пользователя: имя пользователя пароль: пароль Https://имя пользователя:пароль@хост:порт Агенту аутентификация не требуется Https://хост:порт
Прокси-сервер socks5: Прокси-серверу требуется аутентификация, имя пользователя: имя пользователя пароль: пароль Socks5://имя пользователя:пароль@хост:порт Агенту аутентификация не требуется Socks5://хост:порт
Хост: IP-адрес или доменное имя прокси-сервера Порт: порт прокси-сервера
Обычно клиент 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
.
Если вы запускаете док-станцию сервера отдельно, это панель управления proxy-admin. Вам нужно создать новое сопоставление на панели управления верхнего уровня, чтобы получить идентификатор правила сопоставления.
Затем запустите сервер и добавьте параметр --server-id=идентификатор правила сопоставления
, чтобы подсчитать трафик.
Поддержка проникновения во внутреннюю сеть. Когда условия сети сервера и клиента соблюдены, сервер и клиент напрямую подключаются через p2p. Метод открытия следующий:
При запуске моста, сервера, клиента добавьте параметр --p2p
. Параметр -r сервера можно использовать для включения p2p (ptcp и pudp) для порта.
Если между сервером и клиентом происходит сбой p2p-канала, автоматически переключается передача данных моста.
Мост, проникающий во внутреннюю сеть, может устанавливать белый список ключей клиентов. Параметр — client-keys. Формат может быть следующим: а. Имя файла, содержимое файла. Один ключ клиента может содержать только буквенно-цифровые символы и подчёркивание, которое является значением параметра запуска клиента --k. Только ключ клиента может подключиться к белому списку клиентов. Строка, начинающаяся с #, является комментарием. б. base64:// — содержимое файла, описанное в пункте а, например: base64://ajfpoajsdfa= в. str:// — несколько ключевых слов Принцип работы SSH-туннеля
SSH-туннель создаётся с помощью функции переадресации SSH. После подключения к SSH вы можете получить доступ к целевому адресу через прокси-сервер SSH.
Предположим, что есть VPS:
Имя закрытого ключа SSH пользователя — user.key.
Выполните на порту локального SOCKS5-прокси 28080:
proxy socks -T ssh -P "2.2.2.2:22" -u user -D demo -t tcp -p ":28080"
Выполните на порту локального SOCKS5-прокси 28080:
proxy socks -T ssh -P "2.2.2.2:22" -u user -S user.key -t tcp -p ":28080"
После этого доступ к локальному порту 28080 позволит получить доступ к целевому адресу через VPS.
Для протокола 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, аутентификация отключена.
Протокол 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-адресе, возвращаемом клиенту.
Параметры --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
Прокси-сервер 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 целевой веб-сайт будет доступен через зашифрованную передачу с вышестоящим сервером.
Прокси-сервер 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 целевой веб-сайт будет доступен через сжатие с вышестоящим сервером.
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
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
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
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
Ограничение скорости составляет 100 КБ, что можно указать с помощью параметра -l
, например: 100K 2000K 1M . 0 означает отсутствие ограничения.
proxy socks -t tcp -p 2.2.2.2:33080 -l 100K
Параметр --bind-listen
можно использовать для открытия клиентского соединения с IP портала, и использовать IP портала в качестве исходящего IP для доступа к целевому веб-сайту. Если входящий IP является внутренним IP, исходящий IP не использует внутренний IP.
proxy socks -t tcp -p 2.2.2.2:33080 --bind-listen
Хотя параметр --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
означает, что свободный порт выбирается случайным образом, или вы можете вручную указать конкретный порт.
Предположим, уже есть обычный 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
Предположим, уже есть нормальный 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
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 Когда используется многоуровневая балансировка нагрузки, веса используются редко.
Прокси 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, целевой веб-сайт становится доступным через зашифрованную передачу с вышестоящим сервером.
Прокси 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, целевой сайт становится доступным через сжатие с вышестоящим.
По умолчанию SPS поддерживает 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 означает отсутствие ограничения.
Параметр --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
Хотя параметр --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.
.--bind-ip 192.168.?.*:7777
, тогда клиент обращается к порту 7777
, и исходящим IP станет любой IP машины, соответствующий IP 192.168.?.*
, случайным образом выбранный один.--bind-ip pppoe??,192.168.?.*:7777
, тогда клиент обращается к порту 7777
, а исходящим IP станет случайно выбранный один из всех IP машины, соответствующих pppoe??
или всем IP машины, соответствующим 192.168.?.*
.*
представляет от 0 до любого количества символов, а ?
представляет 1 символ.--bind-refresh
, чтобы указать интервал обновления информации о локальном сетевом интерфейсе, по умолчанию он равен 5
, единица измерения — секунда.По умолчанию параметрами -C, -K является путь к файлу crt сертификата и файлу ключа.
Если это начало base64://, то последующие данные считаются закодированными в base64 и будут использоваться после декодирования.
Порт 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
DNS известен как сервис, предоставляемый через порт UDP 53, но с развитием сети некоторые известные DNS-серверы также поддерживают DNS-запросы в режиме TCP, например, Google 8.8.8.8. Принцип работы DNS-сервера против загрязнения заключается в том, чтобы запустить прокси-сервер DNS локально. Сервер использует TCP для выполнения DNS-запроса через вышестоящий агент. Если он взаимодействует с вышестоящим агентом, то может выполнять безопасное и свободное от загрязнений разрешение DNS. Он также поддерживает независимые сервисы, параллельный анализ и улучшенную функцию файла хостов для поддержки гибкого параллельного анализа и пересылки.
Порядок разрешения 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
Предположим, что есть вышестоящий агент: 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");
}
userconns
: максимальное количество подключений для пользователя, не ограничено 0 или не задано в этом заголовке.
ipcons
: максимальное количество соединений для IP-адреса пользователя, не ограничено 0 или не установлено в этом заголовке.
userrate
: ограничение скорости одного TCP-соединения пользователя, в байтах/секунду, не ограничено 0 или не задано в этом заголовке.
iprate
: ограничение скорости одного соединения TCP для клиентского IP, в байтах/секунду, не ограничено 0 или не указано в этом заголовке.
userqps
: максимальное количество подключений в секунду (QPS) для пользователя, не ограничено 0 или не задано в этом заголовке.
ipqps
: максимальное количество подключений в секунду (QPS) для клиентского IP, не ограничено 0 или не задано в этом заголовке.
upstream
: используемый восходящий поток, не пустой, или этот заголовок не установлен.
outgoing
: исходящий IP-адрес, эта опция работает только тогда, когда восходящий поток пуст. И IP должен принадлежать машине, на которой запущен прокси.
--auth-cache
кэш аутентификации, кэширует результат аутентификации в течение определённого периода времени, повышает производительность, снижает нагрузку на интерфейс аутентификации, --auth-cache единица секунд, по умолчанию 0, установите 0 для закрытия кеша.sps
равен 0.http://127.0.0.1:3100?argk=argv
socks5://127.0.0.1:3100?argk=argv
Объяснение: http://
,socks5://
фиксировано, 127.0.0.1:3100
— адрес восходящего потока.
sps
равно 1.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);
Функция прокси-сервера 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.
Прокси поддерживает управление кластером. Прокси устанавливается на каждом узле машины в качестве агента с панелью управления 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}
Прокси может выполнять обратный прокси для http и https веб-сайтов.
Поддерживаемые функции следующие:
Пример, файл конфигурации:rhttp.toml
.
proxy rhttp -c rhttp.toml
Для подробного использования обратитесь к файлу конфигурации rhttp.toml, который содержит полное описание конфигурации.
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.