GoProxy es un proxy http de alto rendimiento, un proxy https, un proxy calcetines5, un proxy ss, un proxy websocket, un proxy tcp, un proxy udp, un escudo de juego, un proxy de juego compatible con proxies directos, un proxy inverso, un proxy transparente, un proxy nat de Internet y un proxy https. equilibrio de carga, equilibrio de carga de proxy http, equilibrio de carga de proxy calcetines5, equilibrio de carga de proxy de socket, equilibrio de carga de proxy ss, mapeo de puertos TCP/UDP, SSH tránsito, transmisión cifrada TLS, conversión de protocolo, proxy DNS anticontaminación, autenticación API, límite de velocidad, conexión limitada para ayudarle a exponer un servidor local detrás de un NAT o firewall a Internet para que usted o sus visitantes puedan acceder a él. directa y fácilmente.
Y ProxyAdmin es una poderosa consola web de snail007/goproxy.
El manual de esta página se aplica a la última versión de goproxy. Es posible que otras versiones no sean aplicables. Utilice el comando según sus propias instrucciones.
Haz clic para unirte a Telegram
Consejo: Todas las operaciones requieren privilegios de root.
La versión gratuita realiza esto:
bash -c " $( curl -s -L https://raw.githubusercontent.com/snail007/goproxy/master/install_auto.sh ) "
La versión comercial realiza esto:
bash -c " $( curl -s -L https://raw.githubusercontent.com/snail007/goproxy/master/install_auto_commercial.sh ) "
La instalación está completa, el directorio de configuración es /etc/proxy. Para un uso más detallado, consulte el directorio del manual anterior para obtener más información sobre las funciones que desea utilizar si la instalación falla o su vps no es Linux de 64 bits. sistema, siga los pasos semiautomáticos a continuación para instalar:
Dirección de descarga: https://github.com/snail007/goproxy/releases/latest
Tomemos la versión 7.9 como ejemplo. Si tiene la última versión, utilice la última versión del enlace. Tenga en cuenta que el número de versión en el enlace de descarga a continuación es el número de versión más reciente.
La versión gratuita realiza esto:
cd /root/proxy/
wget https://github.com/snail007/goproxy/releases/download/v7.9/proxy-linux-amd64.tar.gz
La versión comercial realiza esto:
cd /root/proxy/
wget https://github.com/snail007/goproxy/releases/download/v7.9/proxy-linux-amd64_commercial.tar.gz
La versión gratuita realiza esto:
cd /root/proxy/
wget https://raw.githubusercontent.com/snail007/goproxy/master/install.sh
chmod +x install.sh
./install.sh
La versión comercial realiza esto:
cd /root/proxy/
wget https://raw.githubusercontent.com/snail007/goproxy/master/install_commercial.sh
chmod +x install_commercial.sh
./install_commercial.sh
La actualización del proxy usa el espejo para descargar, si su actualización tiene un error con el espejo, puede configurar una variable de entorno UPDATE_MIRROR=false
Windows: set UPDATE_MIRROR=false
y luego proxy update
Linux: export UPDATE_MIRROR=false
y luego proxy update
proxy update
Forzar actualización.
proxy update -f
Por ejemplo, proxy
colocado en c:gpproxy
.
c:
cd gp
proxy update
Forzar actualización.
c:
cd gp
proxy update -f
Proxy tiene la licencia GPLv3.
Grupo oficial de Telegram: goproxy
El autor de este proyecto descubrió que una gran cantidad de desarrolladores se basaron en el proyecto para el desarrollo secundario o utilizaron una gran cantidad de código central del proyecto sin cumplir con el acuerdo GPLv3, lo que viola gravemente la intención original de utilizar el acuerdo de código abierto GPLv3. En vista de esta situación, el proyecto adopta la fuente. El código retrasa la estrategia de lanzamiento, hasta cierto punto, para frenar estos comportamientos que no respetan el código abierto y no respetan los resultados laborales de otros. Continuará actualizando las iteraciones. y continúe lanzando el programa binario de plataforma completa, brindándole herramientas proxy poderosas y convenientes. Si tiene necesidades comerciales personalizadas, envíe un correo electrónico a [email protected]
haga clic en mí para obtener la instalación de Linux
haz clic en mí para obtener la instalación de MacOS
haz clic en mí para obtener la instalación de Windows
haz clic en mí para obtener la instalación de Windows
Este manual describe las funciones, todas las cuales están incluidas en la versión comercial; la versión gratuita no incluye parámetros funcionales avanzados como autenticación;
Si encuentra algunos comandos cuando usa la versión gratuita para ejecutar algunos comandos, no existe un mensaje similar al siguiente parámetro xxx, lo que indica que este parámetro es una función de la versión comercial.
err: unknown long flag '-a'
Comparación entre las características de la versión gratuita y la versión comercial, operaciones detalladas sobre cómo comprar y utilizar la versión comercial, haga clic aquí para ver
El tutorial manual, el sistema predeterminado es Linux, el programa es proxy, todas las operaciones requieren privilegios de root;
Si es Windows, utilice la versión de Windows de proxy.exe.
El siguiente tutorial presentará el método de uso a través de los parámetros de la línea de comando, o puede obtener los parámetros leyendo el archivo de configuración.
El formato específico es especificar el archivo de configuración mediante el símbolo @, por ejemplo: proxy @configfile.txt
El formato en configfile.txt es que la primera línea es el nombre del subcomando y la segunda línea comienza con un parámetro por línea.
Formato: parameter Parameter value
, parámetro de escritura directa sin valor de parámetro, por ejemplo: --nolog
Por ejemplo, el contenido de configfile.txt es el siguiente:
Http
-t tcp
-p :33080
--forever
De forma predeterminada, la información generada por el registro no incluye el número de líneas de archivo. En algunos casos, para solucionar el problema, el problema se localiza rápidamente.
Puede utilizar el parámetro --debug para generar el número de líneas de código y milisegundos.
De forma predeterminada, el registro se muestra directamente en la consola. Si desea guardarlo en un archivo, puede usar el parámetro --log.
Por ejemplo: --log proxy.log, el registro se enviará a proxy.log para facilitar la resolución de problemas.
Al registrar INFORMACIÓN y ADVERTENCIA de forma predeterminada, puede configurar --warn
para generar solo el registro de advertencias.
El proceso de proxy http, tcp, udp se comunica con el flujo ascendente. Por seguridad, utilizamos comunicación cifrada. Por supuesto, podemos optar por no cifrar la comunicación. Toda la comunicación y la comunicación ascendente en este tutorial están cifradas, y el archivo de certificado. se requiere.
Genere un certificado autofirmado y un archivo de clave con el siguiente comando.
proxy keygen -C proxy
El archivo de certificado proxy.crt y el archivo de clave proxy.key se generarán en el directorio del programa actual.
Utilice el siguiente comando para generar un nuevo certificado utilizando el certificado autofirmado proxy.crt y el archivo de clave proxy.key: goproxy.crt y goproxy.key.
proxy keygen -s -C proxy -c goproxy
El archivo de certificado goproxy.crt y el archivo de clave goproxy.key se generarán en el directorio del programa actual.
De forma predeterminada, el nombre de dominio dentro del certificado es aleatorio y se puede especificar utilizando el parámetro -n test.com
.
Más uso: proxy keygen --help
.
Una vez que el proxy se ejecuta de forma predeterminada, no puede cerrar la línea de comando si desea mantener el proxy en ejecución.
Si desea ejecutar el proxy en segundo plano, puede cerrar la línea de comando, simplemente agregue el parámetro --daemon al final del comando.
Por ejemplo:
proxy http -t tcp -p "0.0.0.0:38080" --daemon
El demonio ejecuta el parámetro --forever, por ejemplo: proxy http --forever
,
El proxy bifurcará el proceso hijo y luego monitoreará el proceso hijo. Si el proceso hijo sale de forma anormal, reinicie el proceso hijo después de 5 segundos.
Este parámetro coincide con el parámetro de ejecución en segundo plano --daemon y el parámetro de registro --log, que pueden garantizar que el proxy siempre se ejecutará en segundo plano sin salir accidentalmente.
Y puede ver el contenido del registro de salida del proxy a través del archivo de registro.
Por ejemplo: proxy http -p ":9090" --forever --log proxy.log --daemon
Cuando el VPS está detrás del dispositivo nat, la IP de la interfaz de red del vps es la IP de la intranet. En este momento, puede usar el parámetro -g para agregar la IP de la red externa del vps para evitar el bucle infinito.
Supongamos que la IP de su red externa de vps es 23.23.23.23. El siguiente comando establece 23.23.23.23 con el parámetro -g.
proxy http -g "23.23.23.23"
El proxy HTTP(S)SOCKS5SPS admite equilibrio de carga de nivel superior y alta disponibilidad, y se pueden utilizar múltiples parámetros de repetición P ascendentes.
La política de equilibrio de carga admite cinco tipos, que se pueden especificar mediante el parámetro --lb-method
:
Roundrobin utilizado por turnos
Leastconn utiliza el número mínimo de conexiones
El menor tiempo utiliza el menor tiempo de conexión
Hash utiliza un flujo ascendente fijo basado en la dirección del cliente
Peso Seleccione un upstream según el peso y número de conexiones de cada upstream
inmediato:
El intervalo de verificación del equilibrio de carga se puede establecer mediante --lb-retrytime
en milisegundos.
El tiempo de espera de la conexión de equilibrio de carga se puede configurar mediante --lb-timeout
en milisegundos.
Si la política de equilibrio de carga es peso, el formato -P es: 2.2.2.2: 3880?w=1, donde 1 es el peso y un número entero mayor que 0.
Si la política de equilibrio de carga es hash, el valor predeterminado es seleccionar el flujo ascendente según la dirección del cliente. Puede seleccionar el flujo ascendente utilizando la dirección de destino del acceso --lb-hashtarget
.
Los servidores proxy TCP no tienen ningún parámetro --lb-hashtarget
.
El valor predeterminado es equilibrio de carga + modo de alta disponibilidad. Si se usa el parámetro --lb-onlyha
, solo se usa el modo de alta disponibilidad, luego se selecciona un nodo de acuerdo con la estrategia de equilibrio de carga y este nodo se usará hasta que no se utilice. vivo, entonces se seleccionará otro nodo para su uso, por lo que se realizará un ciclo.
Si no todos los nodos están activos, se seleccionará un nodo aleatorio para su uso.
El agente Http (s), el agente SPS, la penetración de intranet y el agente tcp admiten la conexión ascendente a través de agentes intermedios de terceros.
Los parámetros son: --jumper, todos los formatos son los siguientes:
http://username:password@host:port
http://host:port
https://username:password@host:port
https://host:port
socks5://username:password@host:port
socks5://host:port
socks5s://username:password@host:port
socks5s://host:port
ss://method:password@host:port
Http,socks5 representa el proxy http y calcetines5 normal.
Https,socks5s representa los agentes http y calcetines5 protegidos por tls.
Eso es proxy http sobre TLS, calcetines sobre TLS.
El proxy calcetines/http(s)/sps admite listas blancas y negras de nombres de dominio.
Utilice el parámetro --stop para especificar un archivo de lista negra de nombres de dominio, luego la conexión se desconectará cuando el usuario conecte estos dominios en el archivo.
Especifique un archivo de lista blanca de nombres de dominio con el parámetro --only, luego la conexión se desconectará cuando el usuario se conecte a un dominio distinto de los dominios en el archivo.
Si se configuran tanto --stop como --only, entonces solo --only funcionará.
El formato del archivo de lista de nombres de dominio en blanco y negro es el siguiente:
**.baidu.com
*.taobao.com
A.com
192.168.1.1
192.168.*.*
?.qq.com
Descripción:
*
y ?
*
representa cualquier número de caracteres, ?
2. **.baidu.com
Coincide sin importar cuántos niveles sean todos los sufijos ..baidu.com`.
3. *.taobao.com
El sufijo coincidente es el nombre de dominio de tercer nivel de .taobao.com
.
5. #
al principio del comentario.
calcetines/http(s)/sps proxy todos admiten lista negra de puertos.
Utilice el parámetro --stop-port
para especificar un archivo de lista negra de puertos, luego, cuando el usuario se conecte a los puertos en el archivo, se podrá realizar la conexión.
El formato del contenido del archivo de la lista negra de puertos es el siguiente:
3306
22
Nota:
#
son comentarios.calcetines/http(s)/sps/tcp/udp/dns/puente de penetración de intranet/tbridge de penetración de intranet, admite lista blanca y negra de IP de cliente.
Utilice el parámetro --ip-deny para especificar un archivo de lista negra de IP del cliente; luego, la conexión se desconectará cuando la IP del usuario esté en este archivo.
Utilice el parámetro --ip-allow para especificar un archivo de lista blanca de IP del cliente; luego, la conexión se desconectará cuando la IP del usuario no esté en el archivo.
Si se configuran tanto --ip-deny como --ip-allow, entonces solo funcionará --ip-allow.
El formato del archivo de lista blanca y negra de IP del cliente es el siguiente:
192.168.1.1
192.168.*.*
192.168.1?.*
Descripción:
*
y ?
, *
representa cualquier número de caracteres, ?
representa un carácter arbitrario. 2. #
al principio del comentario.
Hay muchos lugares en las diversas funciones de proxy del proxy para configurar un archivo. Por ejemplo: --blocked Especifica un archivo de lista de nombres de dominio que va directamente al nivel superior. El valor del parámetro es la ruta del archivo.
Si el parámetro admite el protocolo de carga del archivo, la ruta del archivo puede ser no solo la ruta del archivo, sino también:
a La codificación base64 al principio de "base64://" indica el contenido del archivo anterior, por ejemplo: base64://ajfpoajsdfa=.
b. "str://" al principio del múltiplo separado por comas en inglés, como: str://xxx, yyy.
Los archivos bloqueados, directos, detenidos, solo, hosts, resolve.rules, rewriter.rules, ip.allow, ip.deny del proxy admiten la carga de protocolos.
calcetines5spshttp proxies, el parámetro que controla el número de conexiones de clientes simultáneas es: --max-conns-rate
, que controla el número máximo de conexiones de clientes por segundo, predeterminado: 20, 0 es ilimitado
"tcp/http/socks/sps" admite escucha en múltiples puertos y puertos de rango. En circunstancias normales, es suficiente escuchar en un puerto, pero si necesita escuchar en múltiples puertos, se admite el parámetro -p. es: -p 0.0.0.0:80,0.0.0.0:443,.0.0.0.0:8000-9000,:5000-6000
, más Los enlaces pueden estar separados por comas.
proxy http -t tcp -p "0.0.0.0:38080"
El argumento del puerto de escucha -p
puede ser:
-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 and 9001 to 9999, 1002 total ports
Utilice el puerto local 8090, asumiendo que el proxy HTTP ascendente es 22.22.22.22:8080
proxy http -t tcp -p "0.0.0.0:8090" -T tcp -P "22.22.22.22:8080"
También podemos especificar el archivo de lista blanca y negra del nombre de dominio del sitio web, un nombre de dominio por línea, la regla de coincidencia es la coincidencia más a la derecha, por ejemplo: baidu.com, la coincidencia es .baidu.com , el nombre de dominio de la lista negra. va directamente al agente ascendente, lista blanca El nombre de dominio no va al agente ascendente.
proxy http -p "0.0.0.0:8090" -T tcp -P "22.22.22.22:8080" -b blocked.txt -d direct.txt
Nota: El
proxy.crt
yproxy.key
utilizados por el proxy secundario deben ser coherentes con el proxy principal.
Proxy HTTP de nivel 1 (VPS, IP: 22.22.22.22)
proxy http -t tls -p ":38080" -C proxy.crt -K proxy.key
Proxy HTTP secundario (Linux local)
proxy http -t tcp -p ":8080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key
Luego acceder al puerto local 8080 es acceder al puerto proxy 38080 en el VPS.
Proxy HTTP secundario (ventanas locales)
proxy.exe http -t tcp -p ":8080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key
Luego configure su sistema Windows, el proxy que necesita pasar por el programa proxy de Internet es el modo http, la dirección es: 127.0.0.1, el puerto es: 8080, el programa puede acceder a Internet a través de vps a través del canal cifrado.
Proxy HTTP de nivel 1 VPS_01, IP: 22.22.22.22
proxy http -t tls -p ":38080" -C proxy.crt -K proxy.key
Proxy HTTP secundario VPS_02, IP: 33.33.33.33
proxy http -t tls -p ":28080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key
Proxy HTTP de nivel 3 (local)
proxy http -t tcp -p ":8080" -T tls -P "33.33.33.33:28080" -C proxy.crt -K proxy.key
Luego, acceder al puerto local 8080 es acceder al puerto proxy 38080 en el proxy HTTP principal.
Para el protocolo HTTP proxy, podemos realizar la autenticación básica. El nombre de usuario y la contraseña autenticados se pueden especificar en la línea de comando.
proxy http -t tcp -p ":33080" -a "user1:pass1" -a "user2:pass2"
Para varios usuarios, repita el parámetro -a.
También se puede colocar en un archivo con el formato "nombre de usuario:contraseña" y luego especificarlo con -F.
proxy http -t tcp -p ":33080" -F auth-file.txt
Además, el proxy http(s) también integra autenticación API HTTP externa. Podemos especificar una dirección de interfaz URL http con el parámetro --auth-url.
Luego, cuando haya una conexión de usuario, el proxy solicitará la URL en modo GET y traerá los siguientes cuatro parámetros. Si se devuelve el código de estado HTTP 204, la autenticación es exitosa.
En otros casos, la autenticación falló.
Por ejemplo:
proxy http -t tcp -p ":33080" --auth-url "http://test.com/auth.php"
Cuando el usuario se conecta, el proxy solicitará la URL ("http://test.com/auth.php") en modo GET.
Tome cinco parámetros: usuario, contraseña, ip, local_ip, destino:
Http://test.com/auth.php?user={USER}&pass={PASS}&ip={IP}&local_ip={LOCAL_IP}&target={TARGET}
Usuario: nombre de usuario
Pasar: contraseña
IP: IP del usuario, por ejemplo: 192.168.1.200
Local_ip: IP del servidor al que accede el usuario, por ejemplo: 3.3.3.3
Destino: URL a la que accede el usuario, por ejemplo: http://demo.com:80/1.html o https://www.baidu.com:80
Si no hay ningún parámetro -a o -F o --auth-url, la autenticación básica está desactivada.
De forma predeterminada, el proxy determinará de forma inteligente si el nombre de dominio de un sitio web es inaccesible. Si no es accesible, irá al proxy HTTP de nivel superior. Con --siempre, se puede forzar que todo el tráfico del proxy HTTP vaya al HTTP superior. apoderado.
proxy http --always -t tls -p ":28080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key
Descripción: El principio de la transferencia ssh es utilizar la función de reenvío de ssh, es decir, después de conectarse a ssh, puede acceder a la dirección de destino a través del proxy ssh.
Supongamos que hay: vps
Puerto proxy HTTP(S) local 28080, ejecutando:
proxy http -T ssh -P "2.2.2.2:22" -u user -D demo -t tcp -p ":28080"
Puerto proxy HTTP(S) local 28080, ejecutando:
proxy http -T ssh -P "2.2.2.2:22" -u user -S user.key -t tcp -p ":28080"
El protocolo KCP requiere el parámetro --kcp-key para establecer una contraseña para cifrar y descifrar datos.
Proxy HTTP de nivel 1 (VPS, IP: 22.22.22.22)
proxy http -t kcp -p ":38080" --kcp-key mypassword
Proxy HTTP secundario (Linux local)
proxy http -t tcp -p ":8080" -T kcp -P "22.22.22.22:38080" --kcp-key mypassword
Luego, acceder al puerto local 8080 es acceder al puerto proxy 38080 en el VPS. Los datos se transmiten a través del protocolo kcp. Tenga en cuenta que kcp es el protocolo udp, por lo que el firewall debe liberar el protocolo udp 380p.
El proxy no solo admite la configuración del proxy en otro software, sino que también proporciona servicios de proxy para otro software. También admite el análisis directo del nombre de dominio del sitio web solicitado a la IP de escucha del proxy, y luego el proxy escucha los puertos 80 y 443. el proxy automáticamente le otorgará acceso al sitio web HTTP(S) al que necesita acceder.
Cómo utilizar:
En la máquina "proxy proxy de último nivel", debido a que el proxy debe disfrazarse como todos los sitios web, el puerto HTTP predeterminado del sitio web es 80, HTTPS es 443 y el proxy puede escuchar los puertos 80 y 443. Parámetros -p múltiple direcciones con segmentación por comas.
proxy http -t tcp -p :80,:443
Este comando inicia un agente proxy en la máquina y escucha los puertos 80 y 443 al mismo tiempo. Puede usarse como un proxy normal o resolver directamente el nombre de dominio que debe enviarse como proxy a la IP de esta máquina.
Si hay un agente ascendente, consulte el tutorial anterior para configurarlo, el uso es exactamente el mismo.
proxy http -t tcp -p :80,:443 -T tls -P "2.2.2.2:33080" -C proxy.crt -K proxy.key
Nota:
El resultado de la resolución DNS del servidor donde se encuentra el proxy no puede verse afectado por la resolución personalizada; de lo contrario, se producirá un bucle infinito. El proxy proxy debe especificar el parámetro --dns-address 8.8.8.8
.
Este modo debe tener una determinada base de red. Si no comprende los conceptos relacionados, búsquelo usted mismo.
Suponiendo que el proxy ahora se esté ejecutando en el enrutador, el comando de inicio es el siguiente:
proxy http -t tcp -p :33080 -T tls -P "2.2.2.2:33090" -C proxy.crt -K proxy.key
Luego agregue la regla iptables, aquí están las reglas de referencia:
# Upper proxy server IP address:
Proxy_server_ip=2.2.2.2
#路由器Running port for proxy listening:
Proxy_local_port=33080
# The following does not need to be modified
# create a new chain named PROXY
Iptables -t nat -N PROXY
# Ignore your PROXY server's addresses
# It's very IMPORTANT, just be careful.
Iptables -t nat -A PROXY -d $proxy_server_ip -j RETURN
# Ignore LANs IP address
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
Iptables -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
# Anything to port 80 443 should be redirected to PROXY's local port
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
# Apply the rules to nat client
Iptables -t nat -A PREROUTING -p tcp -j PROXY
# Apply the rules to localhost
Iptables -t nat -A OUTPUT -p tcp -j PROXY
Parámetros --dns-address y --dns-ttl, utilizados para especificar el dns (--dns-address) utilizado por el proxy para acceder al nombre de dominio.
Y el tiempo de caché del resultado del análisis (--dns-ttl) segundos, para evitar la interferencia del DNS del sistema al proxy, además de la función de caché, también puede reducir el tiempo de resolución del DNS para mejorar la velocidad de acceso.
Por ejemplo:
proxy http -p ":33080" --dns-address "8.8.8.8:53" --dns-ttl 300
--dns-address
admite múltiples direcciones DNS, equilibrio de carga, separadas por comas. Por ejemplo: --dns-address "1.1.1.1:53,8.8.8.8:53"
También puede usar el parámetro --dns-interface
para especificar el ancho de banda usado para la resolución dns, por ejemplo: --dns-interface eth0
, la resolución dns usará el ancho de banda eth0, este parámetro debe configurarse en --dns-address
para ser eficaz.
El proxy http(s) del proxy puede cifrar datos tcp mediante el cifrado estándar tls y el protocolo kcp además de tcp, además de admitir la personalización después de tls y kcp.
El cifrado, es decir, el cifrado personalizado y tls | kcp, se pueden usar en combinación. El uso interno del cifrado AES256 solo necesita definir una contraseña cuando lo usa.
El cifrado se divide en dos partes, una es si el cifrado y descifrado local (-z), y la otra es si la transmisión con el flujo ascendente (-Z) está cifrada o descifrada.
El cifrado personalizado requiere que ambos extremos sean proxy. Los siguientes dos niveles y tres niveles se utilizan como ejemplos:
Instancia secundaria
Ejecutar en nivel 1 vps (ip: 2.2.2.2):
proxy http -t tcp -z demo_password -p :7777
Ejecución secundaria local:
proxy http -T tcp -P 2.2.2.2:777 -Z demo_password -t tcp -p :8080
De esta manera, cuando se accede al sitio web a través del agente local 8080, se accede al sitio web de destino mediante transmisión cifrada con el canal ascendente.
Instancias de tres niveles
Ejecutar en nivel 1 vps (ip: 2.2.2.2):
proxy http -t tcp -z demo_password -p :7777
Ejecutar en el vps secundario (ip: 3.3.3.3):
proxy http -T tcp -P 2.2.2.2:7777 -Z demo_password -t tcp -z other_password -p :8888
Ejecución local de tres niveles:
proxy http -T tcp -P 3.3.3.3:8888 -Z other_password -t tcp -p :8080
De esta manera, cuando se accede al sitio web a través del agente local 8080, se accede al sitio web de destino mediante transmisión cifrada con el canal ascendente.
El proxy http (s) puede cifrar datos tcp mediante el cifrado estándar tls y el protocolo kcp además de tcp, y también puede comprimir datos antes del cifrado personalizado.
Es decir, la compresión y el cifrado personalizado y tls | kcp se pueden usar en combinación. La compresión se divide en dos partes, una parte es la transmisión de compresión local (-m).
Parte de él se comprime con la transmisión ascendente (-M).
La compresión requiere que ambas partes sean proxy. La compresión también protege los datos (cifrados) hasta cierto punto. A continuación se utilizan el nivel 2 y el nivel 3 como ejemplos.
Instancia secundaria
Ejecutar en nivel 1 vps (ip: 2.2.2.2):
proxy http -t tcp -m -p :7777
Ejecución secundaria local:
proxy http -T tcp -P 2.2.2.2:777 -M -t tcp -p :8080
De esta manera, cuando se accede al sitio web a través del agente local 8080, se accede al sitio web de destino mediante compresión con el ascendente.
Instancias de tres niveles
Ejecutar en nivel 1 vps (ip: 2.2.2.2):
proxy http -t tcp -m -p :7777
Ejecutar en el vps secundario (ip: 3.3.3.3):
proxy http -T tcp -P 2.2.2.2:7777 -M -t tcp -m -p :8888
Ejecución local de tres niveles:
proxy http -T tcp -P 3.3.3.3:8888 -M -t tcp -p :8080
De esta manera, cuando se accede al sitio web a través del agente local 8080, se accede al sitio web de destino mediante compresión con el upstream.
El proxy HTTP(S) admite el equilibrio de carga de nivel superior y se pueden utilizar múltiples parámetros de repetición P ascendentes.
proxy http --lb-method=hash -T tcp -P 1.1.1.1:33080 -P 2.1.1.1:33080 -P 3.1.1.1:33080
proxy http --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 -t tcp - p :33080
proxy http --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 -t tcp - p :33080
proxy http --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 -t tcp -p :33080
El límite de velocidad es 100K, que se puede especificar mediante el parámetro -l
, por ejemplo: 100K 2000K 1M 0 significa sin límite.
proxy http -t tcp -p 2.2.2.2:33080 -l 100K
El parámetro --bind-listen
se puede usar para abrir la conexión del cliente con la IP del portal y usar la IP del portal como IP saliente para acceder al sitio web de destino. Si se vincula la IP incorrecta, el proxy no funcionará. En este punto, el proxy intentará vincular el objetivo sin vincular la IP y el registro lo solicitará.
proxy http -t tcp -p 2.2.2.2:33080 --bind-listen
Aunque el parámetro --bind-listen
anterior puede especificar la IP saliente, no se puede hacer referencia artificial a la entry IP
y a la outgoing IP
. Si desea que la IP de entrada y la IP de salida sean diferentes, puede usar --bind-ip
parámetro, formato: IP:port
, por ejemplo: 1.1.1.1:8080
, [2000:0:0:0:0 :0:0:1]:8080
. El parámetro --bind-ip
se puede repetir.
Por ejemplo, esta máquina tiene IP 5.5.5.5
, 6.6.6.6
y monitorea dos puertos 8888
y 7777
, el comando es el siguiente:
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
Luego, el cliente accede al puerto 7777
, la IP saliente es 5.5.5.5
, accede al puerto 8888
, la IP saliente es 6.6.6.6
, si tanto --bind-ip
como --bind- are set at the same time listen
, --bind-ip
tiene mayor prioridad. Además, la parte IP
del parámetro --bind-ip
admite la especificación del network interface name
, wildcards
y se puede utilizar más de uno. especificado. La descripción detallada es la siguiente:
--bind-ip eth0:7777
, y luego el cliente accede al puerto 7777
y la IP de salida es la IP de la interfaz de red eth0.--bind-ip eth0.*:7777
, luego el cliente accede al puerto 7777
y la IP de salida se selecciona aleatoriamente de la IP de la interfaz de red que comienza con eth0.
--bind-ip 192.168.?.*:777
, luego el cliente accede al puerto 7777
, la IP saliente son todas las IP de la máquina y coincide con la IP de 192.168.?.*
A uno seleccionado al azar.-bind-ip pppoe??,192.168.?.*:7777
, y luego el cliente accede al puerto 7777
, La IP saliente es el nombre de la interfaz de red de la máquina que coincide con pppoe??
Se selecciona aleatoriamente de la IP que coincide con 192.168.?.*
en la IP de la máquina.*
representa 0 para cualquier carácter, ?
Representa 1 carácter.--bind-refresh
para especificar el intervalo para actualizar la información de la interfaz de red local, el valor predeterminado es 5
, la unidad es la segunda.De forma predeterminada, el parámetro -C, -K es la ruta al certificado crt y al archivo de clave.
Si es el comienzo de base64://, entonces se considera que estos últimos datos están codificados en base64 y se utilizarán después de la decodificación.
La configuración del modo inteligente puede ser uno de padre inteligente|directo.
El valor predeterminado es: padre.
El significado de cada valor es el siguiente:
--intelligent=direct
, los objetivos bloqueados no están conectados directamente.
--intelligent=parent
, el objetivo que no está en el directo irá al nivel superior.
--intelligent=intelligent
, bloqueado y directo no tienen objetivos, determina de forma inteligente si se utiliza el objetivo de acceso ascendente.
proxy help http
Ejecución local:
proxy tcp -p ":33080" -T tcp -P "192.168.22.33:22"
Luego acceder al puerto local 33080 es acceder al puerto 22 de 192.168.22.33.
El parámetro -p
admite:
-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
Si el número de puertos de escucha locales es mayor que 1, se conectará el puerto superior correspondiente al puerto local y se ignorará el puerto en -P
.
Si necesita una conexión desde todos los puertos, conéctese al puerto especificado superior, puede agregar el parámetro --lock-port
.
como:
proxy tcp -p ":33080-33085" -T tcp -P "192.168.22.33:0"
Luego, la conexión del puerto 33080
-P
conectará al puerto 33080
de 192.168.22.33, y los otros puertos 0
similares.
Si desea conectar los puertos de 33080
, 33081
, etc. al puerto 22
de 192.168.22.33, puede agregar el parámetro --lock-port
.
proxy tcp -p ":33080-33085" -T tcp -P "192.168.22.33:22" --lock-port
VPS (IP: 22.22.2.33) se ejecuta:
proxy tcp -p ":33080" -T tcp -P "127.0.0.1:8080"
Ejecución local:
proxy tcp -p ":23080" -T tcp -P "22.22.22.33:33080"
Luego acceda al puerto local 23080 es acceder al puerto 8020 de 22.22.22.33.
TCP proxy primario VPS_01, IP: 22.22.22.22
proxy tcp -p ":38080" -T tcp -P "66.66.66.66:8080"
Proxy TCP secundario VPS_02, IP: 33.33.33.33
proxy tcp -p ":28080" -T tcp -P "22.22.22.22:38080"
Nivel 3 TCP Proxy (local)
proxy tcp -p ":8080" -T tcp -P "33.33.33.33:28080"
Luego, acceda al puerto local 8080 es acceder al puerto 8080 de 66.66.66.66 a través del túnel TCP encriptado.
VPS (IP: 22.22.2.33) se ejecuta:
proxy tcp -t tls -p ":33080" -T tcp -P "127.0.0.1:8080" -C proxy.crt -K proxy.key
Ejecución local:
proxy tcp -p ":23080" -T tls -P "22.22.22.33:33080" -C proxy.crt -K proxy.key
Luego, acceda al puerto local 23080 es acceder al puerto 8080 de 22.22.22.33 a través del túnel TCP encriptado.
TCP proxy primario 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
Proxy TCP secundario 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
Nivel 3 TCP Proxy (local)
proxy tcp -p ":8080" -T tls -P "33.33.33.33:28080" -C proxy.crt -K proxy.key
Luego, acceda al puerto local 8080 es acceder al puerto 8080 de 66.66.66.66 a través del túnel TCP encriptado.
A veces, la red donde se encuentra el proxy no puede acceder directamente a la red externa.
El parámetro -J puede ayudarlo a conectar el proxy al par P Peer -P a través del proxy HTTPS o SOCKS5 al asignar el puerto proxy TCP, asignando el puerto externo al local.
El formato de parámetro -j es el siguiente:
Escritura proxy HTTPS:
El proxy necesita autenticación, nombre de usuario: nombre de usuario contraseña: contraseña
Https: // nombre de usuario: contraseña@host: puerto
El agente no requiere autenticación
Https: // host: puerto
SOCKS5 Escritura proxy:
El proxy necesita autenticación, nombre de usuario: nombre de usuario contraseña: contraseña
SOCKS5: // Nombre de usuario: contraseña@host: puerto
El agente no requiere autenticación
Calcetines5: // host: puerto
Host: la IP o el nombre de dominio del proxy
Puerto: el puerto del poder
Cuando el proxy TCP es un tipo superior (parámetro: -t) es TCP, admite la IP saliente --bind-listen
. Como la IP saliente para acceder al sitio web de destino.
proxy tcp -p ":33080" -T tcp -P" 192.168.22.33:22" -B
Aunque el parámetro anterior --bind-listen
puede especificar la IP saliente, la entry IP
y la --bind-ip
outgoing IP
no se pueden hacer referencia artificialmente. Parámetro, Formato: IP:port
, por ejemplo: 1.1.1.1:8080
, [2000:0:0:0:0:0:0:1]:8080
. puede repetir la identificación de parámetros --bind-ip
.
Por ejemplo, esta máquina tiene IP 5.5.5.5
, 6.6.6.6
y monitorea dos puertos 8888
y 7777
, el comando es el siguiente:
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
Luego, el puerto de acceso al cliente 7777
, la --bind-ip
saliente es 5.5.5.5
, el puerto de acceso 8888
, la IP saliente es 6.6.6.6
, si tanto --bind-ip
como --bind- are set at the same time listen
--bind-ip
tiene mayor prioridad.
Además, la parte IP
del parámetro --bind-ip
admite que especifica el network interface name
, wildcards
y más de uno pueden especificarse.
--bind-ip eth0:7777
, luego el cliente accede al puerto 7777
, y la IP de salida es la IP de la interfaz de red ETH0.--bind-ip eth0.*:7777
, luego el cliente accede al puerto 7777
, y la IP de salida es una de las IP de interfaz de red que comienza con eth0.
.7777
comodines, tales como: --bind-ip 192.168.?.*:7777
192.168.?.*
seleccionado al azar.7777
--bind-ip pppoe??,192.168.?.*:7777
IP ¿El nombre de la interfaz de red de la máquina coincide con 192.168.?.*
pppoe??
*
representa 0 a cualquier número de caracteres, y ?
--bind-refresh
para especificar el intervalo para actualizar la información de la interfaz de red local, el valor predeterminado es 5
, la unidad es segunda.proxy tcp -p ":33080" -T tcp -P "192.168.22.33:22" --max-conns 1000
parámetro --max-conns
puede limitar el número máximo de conexiones por puerto. proxy tcp -p ":33080" -T tcp -P "192.168.22.33:22" --max-conns 1000
proxy tcp -p ":33080" -T tcp -P "192.168.22.33:22" --rate-limit 100k
tasa de conexión TCP El parámetro --rate-limit
puede limitar la velocidad de cada conexión TCP. proxy tcp -p ":33080" -T tcp -P "192.168.22.33:22" --rate-limit 100k
--ip-rate
Límite La tasa total de cada IP proxy tcp -p ":33080" -T tcp -P "192.168.22.33:22" --ip-rate 1M
cliente. proxy tcp -p ":33080" -T tcp -P "192.168.22.33:22" --ip-rate 1M
--port-rate
La tasa total de cada puerto proxy tcp -p ":33080" -T tcp -P "192.168.22.33:22" --port-rate 10M
servicio. proxy tcp -p ":33080" -T tcp -P "192.168.22.33:22" --port-rate 10M
--rate-limit
y ( --ip-rate
o --port-rate
) se puede usar juntos. --c
controla --C
comprimir la transmisión entre el local y el cliente, el falso predeterminado;
Ejemplos:
VPS (IP: 22.22.22.33) Implementación: proxy tcp -t tcp --c -p ":33080" -T tcp -P "127.0.0.1:8080"
Ejecución local: proxy tcp -t tcp -p ":23080" -T tcp -P "22.22.22.33:33080" --C
proxy help tcp
Ejecución local:
proxy udp -p ":5353" -T udp -P "8.8.8.8:53"
Luego, acceda al puerto UDP local: 5353 es acceder a 8.8.8.8 UDP: 53 puerto.
El parámetro -p
admite:
-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
Si el número de puertos de escucha locales es mayor que 1, se conectará el puerto superior correspondiente correspondiente al puerto local, y se ignorará el puerto IN -P
.
Si necesita una conexión de todos los puertos, conéctese al puerto superior especificado, puede agregar el parámetro --lock-port
.
como:
proxy udp -p ":33080-33085" -T udp -P "192.168.22.33:0"
Luego, la conexión del puerto 33080
-P
conectará al puerto 33080
de 192.168.22.33, y los otros puertos 0
similares.
Si desea conectar los puertos de 33080
, 33081
, etc. al puerto 2222
de 192.168.22.33, puede agregar el parámetro --lock-port
.
proxy udp -p ":33080-33085" -T udp -P "192.168.22.33:2222" --lock-port
VPS (IP: 22.22.2.33) se ejecuta:
proxy tcp -p ":33080" -T udp -P "8.8.8.8:53"
Ejecución local:
proxy udp -p ":5353" -T tcp -P "22.22.22.33:33080"
Luego, acceda al puerto UDP local: 5353 a través del túnel TCP, a través del acceso VPS 8.8.8.8 UDP: 53 Puerto.
TCP proxy primario VPS_01, IP: 22.22.22.22
proxy tcp -p ":38080" -T udp -P "8.8.8.8:53"
Proxy TCP secundario VPS_02, IP: 33.33.33.33
proxy tcp -p ":28080" -T tcp -P "22.22.22.22:38080"
Nivel 3 TCP Proxy (local)
proxy udp -p ":5353" -T tcp -P "33.33.33.33:28080"
Luego, el acceso al puerto local 5353 es a través del túnel TCP, a través del VPS para acceder al puerto 8.8.8.8.
VPS (IP: 22.22.2.33) se ejecuta:
proxy tcp -t tls -p ":33080" -T udp -P "8.8.8.8:53" -C proxy.crt -K proxy.key
Ejecución local:
proxy udp -p ":5353" -T tls -P "22.22.22.33:33080" -C proxy.crt -K proxy.key
Luego, acceda al puerto UDP local: 5353 a través del túnel TCP encriptado, a través del VPS Access 8.8.8.8 UDP: 53 Puerto.
TCP proxy primario 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
Proxy TCP secundario 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
Nivel 3 TCP Proxy (local)
proxy udp -p ":5353" -T tls -P "33.33.33.33:28080" -C proxy.crt -K proxy.key
Luego, acceda al puerto local 5353 es acceder al puerto 8.8.8.8 53 a VPS_01 a través del túnel TCP encriptado.
Cuando los proxies UDP Upstream (Parámetro: -T) es UDP --bind-listen
admite la IP especificada. IP para acceder al objetivo.
proxy udp -p ":33080" -T udp -P "192.168.22.33:2222" -B
proxy help udp
La penetración de intranet, dividida en dos versiones, "versión de enlace múltiple" y "versión multiplexada", generalmente como un servicio web, este servicio no es una conexión a largo plazo, se recomienda usar "versión múltiple", si es es mantener mucho tiempo la conexión de tiempo sugiere usar una "versión multiplexada".
El siguiente tutorial utiliza la "versión multiplexada" como ejemplo para ilustrar cómo usarlo.
La penetración de Intranet consta de tres partes: cliente, servidor y puente;
Fondo:
Demanda:
En el hogar, puede acceder al puerto 80 de la máquina de la compañía A accediendo al puerto 28080 del VPS.
Pasos:
Ejecutar en 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
proxy client -P "22.22.22.22:33080" -C proxy.crt -K proxy.key
Completo
Fondo:
Demanda:
Complete la dirección en la configuración de la interfaz de devolución de llamada de la página web de la cuenta de desarrollo de WeChat: http://22.22.22.22/calback.php
Luego puede acceder a Calback.php debajo del puerto 80 del cuaderno.
Por ejemplo: wx-dev.xxx.com se resuelve 22.22.22.22, y luego en su propio cuaderno Nginx
Configure el nombre de dominio wx-dev.xxx.com en el directorio específico.
Pasos:
Ejecutar en VPS para garantizar que el puerto 80 de VPS no esté ocupado por otros programas.
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
Ejecutar en tu computadora portátil
proxy client -P "22.22.22.22:33080" -C proxy.crt -K proxy.key
Completo
Fondo:
Demanda:
En el hogar, puede usar la máquina de la compañía A para realizar servicios de resolución de nombres de dominio estableciendo el DNS local en 22.22.22.22.
Pasos:
Ejecutar en 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
Completo
Fondo:
Demanda:
Para estar seguro, no quiero tener acceso a la máquina de la compañía A en el VPS, y puedo acceder al puerto 28080 de la máquina en casa.
Acceso al puerto 80 de la máquina de la empresa A a través de un túnel encriptado.
Pasos:
Ejecutar en VPS
proxy bridge -p ":33080" -C proxy.crt -K proxy.key
Ejecutar en la máquina de la empresa a
proxy client -P "22.22.22.22:33080" -C proxy.crt -K proxy.key
Ejecutar en la computadora de su hogar
proxy server -r ":28080@:80" -P "22.22.22.22:33080" -C proxy.crt -K proxy.key
Completo
Consejo:
Si varios clientes están conectados al mismo puente al mismo tiempo, debe especificar una clave diferente, que puede ser establecida por el parámetro --k, y --k puede ser cualquier cadena única.
Solo sé el único en el mismo puente.
Cuando el servidor está conectado al puente, si hay varios clientes que se conectan al mismo puente al mismo tiempo, debe usar el parámetro --k para seleccionar el cliente.
Exponer múltiples puertos repitiendo el parámetro -r.
Fondo:
Demanda:
En el hogar, puede acceder al puerto 80 de la máquina de la compañía A accediendo al puerto 28080 del VPS.
En el hogar, puedo acceder al puerto 21 de la máquina de la compañía A accediendo al puerto 29090 del VPS.
Pasos:
Ejecutar en 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
Completo
El formato completo de -r es: PROTOCOL://LOCAL_IP:LOCAL_PORT@[CLIENT_KEY]CLIENT_LOCAL_HOST:CLIENT_LOCAL_PORT
4.7.1.
Por ejemplo: -r "udp://:10053@:53" -r "tcp://:10800@:1080" -r ":8080@:80"
Si se especifica el parámetro --UDP, el protocolo predeterminado se encuentra a UDP, entonces: -r ":8080@:80"
predeterminado es UDP;
Si no se especifica el parámetro --UDP, el protocolo predeterminado es TCP, entonces: -r ":8080@:80"
predeterminado a tcp;
4.7.2.
Por ejemplo: -r "Udp: //: 10053@[test1]: 53" -r "tcp: //: 10800@[test2]: 1080" -r ": 8080@: 80"
Si se especifica el parámetro --k, como la prueba --k, entonces: -r ":8080@:80"
Client_key predeterminada para probar;
Si no se especifica el parámetro --k, entonces: -r ":8080@:80"
Client_key predeterminado a predeterminado;
0.0.0.0
127.0.0.1
A veces, la red donde se encuentra el servidor o el cliente no puede acceder directamente a la red externa.
El parámetro -J puede ayudarlo a conectar el servidor o el cliente al puente a través de HTTPS o SOCKS5.
El formato de parámetro -j es el siguiente:
Escritura proxy HTTPS:
El proxy necesita autenticación, nombre de usuario: nombre de usuario contraseña: contraseña
Https: // nombre de usuario: contraseña@host: puerto
El agente no requiere autenticación
Https: // host: puerto
SOCKS5 Escritura proxy:
El proxy necesita autenticación, nombre de usuario: nombre de usuario contraseña: contraseña
SOCKS5: // Nombre de usuario: contraseña@host: puerto
El agente no requiere autenticación
Calcetines5: // host: puerto
Host: la IP o el nombre de dominio del proxy
Puerto: el puerto del poder
Por lo general, el cliente de solicitud HTTP utilizará la IP y el puerto del servidor para establecer el campo host, pero no es lo mismo que el host real esperado, lo que hace que se pase TCP. Sin embargo, el backend se basa en el campo de host para ubicar el Host virtual --http-host
--http-host
funcionará. parámetro --http-host
, Se X-Forwarded-For
dos encabezados al encabezado de cada X-Real-IP
HTTP.
El formato del parámetro server
-http -host es el siguiente:
--http-host www.test.com:80@2200
, si el servidor escucha múltiples puertos, simplemente repita el parámetro --http-host
para establecer el host para cada puerto.
Ejemplo:
Por ejemplo, el cliente local Nginx, 127.0.0.1:80 proporciona un servicio web, que está vinculado a un nombre de dominio local.com
.
Entonces los parámetros de inicio del servidor pueden ser los siguientes:
proxy server -P :30000 -r :[email protected]:80 --http-host local.com@2500
Explicación:
-r :[email protected]:80
y --http-host local.com:80@2500
El puerto 2500 es el puerto que el servidor escucha localmente.
Cuando se utiliza el protocolo HTTP para solicitar el puerto IP: 2500 del servidor, el campo de host del encabezado de HTTP se establecerá en local.com
.
Si comienza un par de acoplamiento de servidor por separado, es el panel de control proxy-admin de la entrada.
Luego inicie el servidor y agregue el parámetro --server-id = la ID de la regla de mapeo para contar el tráfico.
Soporte de penetración de intranet Cuando se cumplen el servidor y las condiciones de la red del cliente, el servidor y el cliente están directamente conectados a través de P2P.
Al iniciar el puente, el servidor, el cliente, agregue el parámetro --p2p
.
Si el orificio P2P falla entre el servidor y el cliente, los datos de transferencia de puente se cambian automáticamente.
El puente de penetración de intranet puede establecer la lista blanca de la llave del cliente.
A. Nombre del archivo, el contenido del archivo solo puede contener el subrayado alfanumérico, que es el valor del parámetro de inicio del cliente: solo la clave del cliente puede conectarse al cliente de la lista blanca.
b.
C
El valor predeterminado está vacío, lo que permite todas las claves.
Juicio de tipo senat, fácil de verificar si la red admite P2P, puede ejecutar: proxy tools -a nattype
proxy help bridge
proxy help server
proxy help client
inmediato:
SOCKS5 proxy, admite Connect, UDP Protocol, no admite BIND, admite la autenticación de nombre de usuario y contraseña.
*** La --udp-port 0
UDP de SOCKS5 se apaga de forma predeterminada y puede activarse por --udp
. --udp-port 0
, 0
representa un puerto libre se selecciona al azar, o puede especificar manualmente un puerto específico.
proxy socks -t tcp -p "0.0.0.0:38080"
Escuchar el argumento del puerto -p
puede ser:
-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 and 9001 to 9999, 1002 total ports
Use el puerto local 8090, suponiendo que el proxy de calcetines5 ascendentes sea 22.22.22.22:8080
proxy socks -t tcp -p "0.0.0.0:8090" -T tcp -P "22.22.22.22:8080"
También podemos especificar el archivo de lista en blanco y negro del nombre de dominio del sitio web, un nombre de dominio y un nombre de dominio, la regla de coincidencia es la coincidencia más adecuada, por ejemplo: baidu.com, la coincidencia es . Nombre de dominio El nombre de dominio va directamente al agente aguas arriba, el nombre de dominio de la lista no va al agente aguas arriba;
proxy socks -p "0.0.0.0:8090" -T tcp -P "22.22.22.22:8080" -b blocked.txt -d direct.txt
Proxy de calcetines de nivel 1 (VPS, IP: 22.22.22.22)
proxy socks -t tls -p ":38080" -C proxy.crt -K proxy.key
Proxy de calcetines secundarios (Linux local)
proxy socks -t tcp -p ":8080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key
Luego, acceda al puerto local 8080 para acceder al puerto proxy 38080 en el VPS.
Proxy de calcetines secundarios (ventanas locales)
proxy.exe socks -t tcp -p ":8080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key
Luego, configure su sistema Windos, el proxy que debe pasar por el programa de Internet proxy es el modo SOCKS5, la dirección es: 127.0.0.1, el puerto es: 8080, el programa puede acceder a Internet a través de VPS a través del canal encriptado.
Nivel 1 Socks Proxy VPS_01, IP: 22.22.22.22
proxy socks -t tls -p ":38080" -C proxy.crt -K proxy.key
SOCKS SECUNDARIOS Proxy VPS_02, IP: 33.33.33.33
proxy socks -t tls -p ":28080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key
Proxy de calcetines de nivel 3 (local)
proxy socks -t tcp -p ":8080" -T tls -P "33.33.33.33:28080" -C proxy.crt -K proxy.key
Luego, acceder al puerto local 8080 es acceder al puerto proxy 38080 en el proxy de calcetines de primer nivel.
Por defecto, el proxy determinará de manera inteligente si un nombre de dominio del sitio web es inaccesible. .
proxy socks --always -t tls -p ":28080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key
Descripción: El principio de transferencia SSH es usar la función de reenvío de SSH, es decir, después de conectarse a SSH, puede acceder a la dirección de destino a través de SSH Proxy.
Supongamos que hay: VPS
SOCKS5 LOCALES PORTO PROXY 28080, Ejecutar:
proxy socks -T ssh -P "2.2.2.2:22" -u user -D demo -t tcp -p ":28080"
SOCKS5 LOCALES PORTO PROXY 28080, Ejecutar:
proxy socks -T ssh -P "2.2.2.2:22" -u user -S user.key -t tcp -p ":28080"
Luego, acceda al puerto local 28080 para acceder a la dirección de destino a través del VPS.
Para el protocolo de proxy Socks5, podemos realizar la autenticación de nombre de usuario y contraseña.
proxy socks -t tcp -p ":33080" -a "user1:pass1" -a "user2:pass2"
Para múltiples usuarios, repita el parámetro -a.
También se puede colocar en un archivo en el formato de un "nombre de usuario: contraseña" y luego especificado con -f.
proxy socks -t tcp -p ":33080" -F auth-file.txt
Además, el agente Socks5 también integra la autenticación de la API HTTP externa.
Luego, cuando hay una conexión de usuario, el proxy solicitará la URL en modo GET, con los siguientes tres parámetros.
En otros casos, la autenticación falló.
Por ejemplo:
proxy socks -t tcp -p ":33080" --auth-url "http://test.com/auth.php"
Cuando el usuario se conecta, el proxy solicitará la URL ("http://test.com/auth.php") en modo Get.
Traiga cuatro parámetros: usuario, pase, ip, local_ip:
Http://test.com/auth.php?user= /userht /pass= /passhth.
Usuario: nombre de usuario
Pase: Contraseña
IP: IP del usuario, por ejemplo: 192.168.1.200
Local_IP: IP del servidor accedido por el usuario, por ejemplo: 3.3.3.3
Si no hay un parámetro -a o -f o -auth -url, la autenticación se desactiva.
El protocolo KCP requiere el parámetro --KCP-Key para establecer una contraseña para cifrar y descifrar datos.
Nivel 1 HTTP proxy (VPS, IP: 22.22.22.22)
proxy socks -t kcp -p ":38080" --kcp-key mypassword
Proxy secundario HTTP (Linux local)
proxy socks -t tcp -p ":8080" -T kcp -P "22.22.22.22:38080" --kcp-key mypassword
Luego, acceda al puerto local 8080 para acceder al puerto proxy 38080 en el VPS, los datos se transmiten a través del protocolo KCP.
--dns-address y --dns-ttl parámetros, utilizados para especificar el DNS (--dns-address) utilizado por el proxy para acceder al nombre de dominio.
Y el tiempo de resultados de resultados de análisis (--DNS-TTL) segundos, para evitar la interferencia del sistema DNS al proxy, además de la función de caché también puede reducir el tiempo de resolución DNS para mejorar la velocidad de acceso.
Por ejemplo:
proxy socks -p ":33080" --dns-address "8.8.8.8:53" --dns-ttl 300
También puede usar el parámetro --dns-interface
para especificar el ancho de banda utilizado para la resolución DNS, por ejemplo: --dns-interface eth0
, la resolución DNS usará el ancho de banda Eth0, este parámetro debe estar configurado en --dns-address
ser eficaz.
El proxy del proxy puede cifrar los datos de TCP a través del cifrado estándar TLS y el protocolo de KCP además de TCP. Cifrado AES256, solo necesita definir una contraseña cuando la usa.
El cifrado se divide en dos partes, una es si el cifrado y el descifrado local (-z), y el otro es si la transmisión con el martillo aguas arriba (-Z) está encriptada o descifrada.
El cifrado personalizado requiere que ambas partes sean proxy.
Los siguientes dos niveles, tres niveles, por ejemplo:
Instancia secundaria
Ejecutar en el nivel 1 VPS (IP: 2.2.2.2):
proxy socks -t tcp -z demo_password -p :7777
Ejecución secundaria local:
proxy socks -T tcp -P 2.2.2.2:777 -Z demo_password -t tcp -p :8080
De esta manera, cuando se accede al sitio web a través del Agente Local 8080, se accede al sitio web de destino a través de la transmisión cifrada con la corriente ascendente.
Instancias de tres niveles
Ejecutar en el nivel 1 VPS (IP: 2.2.2.2):
proxy socks -t tcp -z demo_password -p :7777
Ejecutar en el VPS secundario (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
Ejecución local de tres niveles:
proxy socks -T tcp -P 3.3.3.3:8888 -Z other_password -t tcp -p :8080
De esta manera, cuando se accede al sitio web a través del Agente Local 8080, se accede al sitio web de destino a través de la transmisión cifrada con la corriente ascendente.
El proxy del proxy puede cifrar datos TCP a través del cifrado personalizado y el cifrado estándar TLS y el protocolo KCP además de TCP.
Comprima los datos, es decir, la función de compresión y el cifrado personalizado y TLS | KCP se pueden usar en combinación, y la compresión se divide en dos partes.
Parte de la misma es la transmisión de compresión local (-m), y parte es si la transmisión con el flujo aguas arriba (-m) está comprimido.
La compresión requiere que ambos lados sean proxy, y la compresión también protege (encripts) los datos hasta cierto punto.
Los siguientes dos niveles, tres niveles, por ejemplo:
Instancia secundaria
Ejecutar en el nivel 1 VPS (IP: 2.2.2.2):
proxy socks -t tcp -m -p :7777
Ejecución secundaria local:
proxy socks -T tcp -P 2.2.2.2:777 -M -t tcp -p :8080
De esta manera, cuando se accede al sitio web a través del Agente local 8080, se accede al sitio web de destino a través de la compresión con el aguas arriba.
Instancias de tres niveles
Ejecutar en el nivel 1 VPS (IP: 2.2.2.2):
proxy socks -t tcp -m -p :7777
Ejecutar en el VPS secundario (IP: 3.3.3.3):
proxy socks -T tcp -P 2.2.2.2:7777 -M -t tcp -m -p :8888
Ejecución local de tres niveles:
proxy socks -T tcp -P 3.3.3.3:8888 -M -t tcp -p :8080
De esta manera, cuando se accede al sitio web a través del Agente local 8080, se accede al sitio web de destino a través de la compresión con el aguas arriba.
El proxy de calcetines admite el equilibrio de carga de nivel superior, y se pueden usar múltiples parámetros de repetición-P aguas arriba.
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
El límite de velocidad es de 100k, que puede especificarse por el parámetro -l
, por ejemplo: 100k 2000k 1m.
proxy socks -t tcp -p 2.2.2.2:33080 -l 100K
El parámetro --bind-listen
se puede usar para abrir la conexión del cliente con el IP del portal y usar la IP del portal como la IP saliente para acceder al sitio web de destino. La IP de entrada.
proxy socks -t tcp -p 2.2.2.2:33080 --bind-listen
Aunque el parámetro anterior --bind-listen
puede especificar la IP saliente, la entry IP
y la --bind-ip
outgoing IP
no pueden ser interferidas por humanos. Parámetro, formato: IP:port
, por ejemplo: 1.1.1.1:8080
, [2000:0:0:0:0:0:0:1]:8080
. Repita el parámetro --bind-ip
.
Por ejemplo, la máquina tiene IP 5.5.5.5
, 6.6.6.6
y monitorea dos puertos 8888
y 7777
, el comando es el siguiente:
proxy socks -t tcp -p :8888,:7777 --bind-ip 5.5.5.5:7777 --bind-ip 6.6.6.6:8888
Luego, el puerto de acceso al cliente 7777
, la --bind-ip
saliente es 5.5.5.5
, el puerto de acceso 8888
, la IP saliente es 6.6.6.6
, si tanto --bind-ip
como --bind- are set at the same time listen
--bind-ip
tiene mayor prioridad.
Además, la parte IP
del parámetro --bind-ip
admite que especifica el network interface name
, wildcards
y más de uno.
--bind-ip eth0:7777
, luego el cliente accede al puerto 7777
, y la IP de salida es la IP de la interfaz de red ETH0.--bind-ip eth0.*:7777
, luego el cliente accede al puerto 7777
, y la IP de salida es una de las IP de interfaz de red que comienza con eth0.
.7777
comodines, tales como: --bind-ip 192.168.?.*:7777
192.168.?.*
seleccionado al azar.7777
--bind-ip pppoe??,192.168.?.*:7777
IP ¿El nombre de la interfaz de red de la máquina coincide con 192.168.?.*
pppoe??
*
representa 0 a cualquier número de caracteres, y ?
--bind-refresh
para especificar el intervalo para actualizar la información de la interfaz de red local, el valor predeterminado es 5
, la unidad es segunda.SOCKS5 admite la autenticación en cascada, y -A puede configurar la información de autenticación ascendente.
río arriba:
proxy socks -t tcp -p 2.2.2.2:33080 -a user:pass
local:
proxy socks -T tcp -P 2.2.2.2:33080 -A user:pass -t tcp -p :33080
Por defecto, el parámetro -c, -k es la ruta al certificado CRT y el archivo de clave.
Si es el comienzo de Base64: //, entonces los últimos datos se consideran codificados Base64 y se utilizarán después de decodificar.
Configuración de modo inteligente, puede ser uno de inteligente | Directo | Padre.
El valor predeterminado es: Parent.
El significado de cada valor es el siguiente:
--intelligent=direct
, los objetivos en el bloqueado no están directamente conectados.
--intelligent=parent
, el objetivo que no está en el directo va al nivel superior.
--intelligent=intelligent
, bloqueado y directo no tiene objetivos, determine de manera inteligente si usar el objetivo de acceso aguas arriba.
De manera predeterminada, el número de puerto de la función UDP de SOCKS5, el proxy se instala en la solicitud rfc1982 draft
, que se especifica aleatoriamente durante el proceso de apretón de manos del protocolo y no es necesario especificar por adelantado.
Sin embargo, en algunos casos, debe corregir el --udp-port port number
de la función UDP.
proxy socks -t tcp -p "0.0.0.0:38080" --udp-port 38080
Por defecto, la funcionalidad UDP del proxy --udp-compat
en el proxy opera de acuerdo con la especificación Socks5 RFC 1928. El parámetro --udp-compat
se puede agregar para activar el modo de compatibilidad para la funcionalidad UDP SOCKS5.
Además, el parámetro -udp-gc
se puede utilizar para establecer el tiempo de inactividad máximo para UDP.
proxy help socks
La conversión del protocolo proxy utiliza el subcomando SPS. Poner los proxy o proxy o el proxy SS 5 o el proxy SS 5 que admite un puerto que es compatible con los proxy HTTP (S) y SOCKS5 y SS, y el proxy HTTP (S) admite el proxy hacia adelante y el proxy inverso y el reverso (SNI), Proxy de calcetines 5, la función UDP todavía se admite cuando el nivel superior es SOCKS5 o SS; La conexión de cadena es compatible, es decir, se pueden admitir múltiples niveles de nodo SPS.
Los métodos de cifrado compatibles con la función ss
son: 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
Escuchar el argumento del puerto -p
puede ser:
-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 and 9001 to 9999, 1002 total ports
La función UDP de SS se apaga --udp
--ssudp
0
rendimiento se puede mejorar al arreglar un --udp-port 0
.
Supongamos que ya hay un proxy HTTP normal: 127.0.0.1:8080. 192-CFB, SS Contraseña: Pase.
El comando es el siguiente:
proxy sps -S http -T tcp -P 127.0.0.1:8080 -t tcp -p :18080 -h aes-192-cfb -j pass
Supongamos que ya hay un proxy TLS HTTP: 127.0.0.1:8080. Archivo., Cifrado SS: AES-192-CFB, SS contraseña: pase.
El comando es el siguiente:
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
Supongamos que ya hay un proxy KCP HTTP (ahora lo convirtimos en un proxy normal que admite HTTP (S) y SOCKS5 y SS. , Cifrado SS: AES-192-CFB, SS Contraseña: Pase.
El comando es el siguiente:
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
Supongamos que ya hay un proxy de calcetines5 normal: 127.0.0.1:8080, ahora lo convertimos en un proxy común que admite HTTP (S) y SOCKS5 y SS. , contraseña SS: pase.
El comando es el siguiente:
proxy sps -S socks -T tcp -P 127.0.0.1:8080 -t tcp -p :18080 -h aes-192-cfb -j pass
Supongamos que ya hay un proxy TLS5: 127.0.0.1:8080, ahora lo convertimos en un proxy común que admite tanto HTTP (S) y SOCKS5 y SS. : AES-192-CFB, SS Contraseña: Pase.
El comando es el siguiente:
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
Suppose there is already a kcp socks5 proxy (password: demo123): 127.0.0.1:8080, now we turn it into a common proxy that supports both http(s) and socks5 and ss. The converted local port is 18080, ss Encryption method: aes-192-cfb, ss password: pass.
The command is as follows:
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 and local support ss protocol, the upstream can be SPS or standard ss service.
SPS locally provides HTTP(S)SOCKS5SPS three defaults. When the upstream is SOCKS5, the converted SOCKS5 and SS support UDP.
Suppose there is already a normal SS or SPS proxy (ss is enabled, encryption: aes-256-cfb, password: demo): 127.0.0.1:8080, now we turn it to support both http(s) and socks5 and The ordinary proxy of ss, the converted local port is 18080, the converted ss encryption mode: aes-192-cfb, ss password: pass.
The command is as follows:
proxy sps -S ss -H aes-256-cfb -J pass -T tcp -P 127.0.0.1:8080 -t tcp -p :18080 -h aes-192-cfb -j pass
.
The above mentioned multiple sps nodes can be connected to build encrypted channels in a hierarchical connection, assuming the following vps and the home PC.
Vps01:2.2.2.2
Vps02:3.3.3.3
Now we want to use pc and vps01 and vps02 to build an encrypted channel. This example uses tls encryption or kcp. Accessing local 18080 port on the PC is to access the local 8080 port of vps01.
First on vps01 (2.2.2.2) we run a locally accessible http(s) proxy and execute:
proxy http -t tcp -p 127.0.0.1:8080
Then run a sps node on vps01 (2.2.2.2) and execute:
proxy sps -S http -T tcp -P 127.0.0.1:8080 -t tls -p :8081 -C proxy.crt -K proxy.key
Then run a sps node on vps02 (3.3.3.3) and execute:
proxy sps -S http -T tls -P 2.2.2.2:8081 -t tls -p :8082 -C proxy.crt -K proxy.key
Then run a sps node on the pc and execute:
proxy sps -S http -T tls -P 3.3.3.3:8082 -t tcp -p :18080 -C proxy.crt -K proxy.key
realizar.
Sps supports http(s)socks5 proxy authentication, which can be cascaded and has four important pieces of information:
1: The user sends the authentication information user-auth
.
2: Set the local authentication information local-auth
.
3: Set the connection authentication information 'parent-auth used by the upstream. 4: The authentication information
auth-info-to-parent` that is finally sent to the upstream.
Their situation is as follows:
User-auth | local-auth | parent-auth | auth-info-to-paren |
---|---|---|---|
Yes / No | Sí | Sí | From parent-auth |
Yes / No | No | Sí | From parent-auth |
Yes / No | Sí | No | No |
No | No | No | No |
Sí | No | No | From user-auth |
For the sps proxy we can perform username and password authentication. The authenticated username and password can be specified on the command line.
proxy sps -S http -T tcp -P 127.0.0.1:8080 -t tcp -p ":33080" -a "user1:pass1:0:0:" -a "user2:pass2:0:0: "
For multiple users, repeat the -a parameter.
Can also be placed in a file, the format is one line a username: password: number of connections: rate: upstream
, and then specified with -F.
proxy sps -S http -T tcp -P 127.0.0.1:8080 -t tcp -p ":33080" -F auth-file.txt
If the upstream has authentication, the lower level can set the authentication information with the -A parameter, for example:
upstream: proxy sps -S http -T tcp -P 127.0.0.1:8080 -t tcp -p ":33080" -a "user1:pass1:0:0:" -a "user2:pass2:0: 0:"
Subordinate: proxy sps -S http -T tcp -P 127.0.0.1:8080 -A "user1:pass1" -t tcp -p ":33080"
For more details on certification, please refer to 9.API Certification
and 10.Local Certification
If there are multiple upstreams, they can be specified by multiple -Ps.
como:
proxy sps -P http://127.0.0.1:3100 -P socks5://127.0.0.1:3200
The complete format of -P
is as follows:
protocol://a:[email protected]:33080#1
Each section is explained below:
protocol://
is the protocol type, possible types and contains the following:
Http is equivalent to -S http -T tcp
Https is equivalent to -S http -T tls --parent-tls-single , which is http(s) proxy over TLS
Https2 is equivalent to -S http -T tls
Socks5 is equivalent to -S socks -T tcp
Socks5s is equivalent to -S socks -T tls --parent-tls-single , which is socks over TLS
Socks5s2 is equivalent to -S socks -T tls
Ss is equivalent to -S ss -T tcp
Httpws is equivalent to -S http -T ws
Httpwss is equivalent to -S http -T wss
Socks5ws is equivalent to -S socks -T ws
Socks5wss is equivalent to -S socks -T wss
a:b
is the username and password of the proxy authentication. If it is ss, a
is the encryption method, b
is the password, and no username password can be left blank, for example: http://2.2.2.2:33080
If the username and password are protected, special symbols can be encoded using urlencode.
2.2.2.2:33080
is the upstream address, the format is: IP (or domain name): port
, if the underlying is ws/wss protocol can also bring the path, such as: 2.2.2.2: 33080/ws
;
You can also set the encryption method
and password
of wswss
by appending the query parameters m
and k
, for example: 2.2.2.2:33080/ws?m=aes-192-cfb&k=password
#1
When multiple upper-level load balancing is a weighting strategy, the weights are rarely used.
The proxy sps proxy can encrypt tcp data through tls standard encryption and kcp protocol on top of tcp, in addition to support after tls and kcp
Custom encryption, that is, custom encryption and tls|kcp can be used in combination, internally using AES256 encryption, only need to define it when using
A password can be used, the encryption is divided into two parts, one part is whether the local (-z) encryption and decryption, and the part is the encryption and decryption with the upstream (-Z) transmission.
Custom encryption requires both sides to be proxy.
The following two levels, three levels for example:
Suppose there is already an http(s) proxy: 6.6.6.6:6666
Secondary instance
Execute on level 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
Local secondary execution:
proxy sps -T tcp -P 2.2.2.2:777 -Z demo_password -t tcp -p :8080
In this way, when the website is accessed through the local agent 8080, the target website is accessed through encrypted transmission with the upstream.
Three-level instance
Execute on level 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
Execute on the secondary 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
Local three-level execution:
proxy sps -T tcp -P 3.3.3.3:8888 -Z other_password -t tcp -p :8080
In this way, when the website is accessed through the local agent 8080, the target website is accessed through encrypted transmission with the upstream.
The proxy sps proxy can encrypt tcp data through custom encryption and tls standard encryption and kcp protocol on top of tcp. It can also be used before custom encryption.
Compress the data, that is, the compression function and the custom encryption and tls|kcp can be used in combination, and the compression is divided into two parts.
Part of it is local (-m) compression transmission, and part is whether the transmission with the upstream (-M) is compressed.
Compression requires both sides to be proxy, and compression also protects (encrypts) data to some extent.
The following two levels, three levels for example:
Secondary instance
Execute on level 1 vps (ip: 2.2.2.2):
proxy sps -t tcp -m -p :7777
Local secondary execution:
proxy sps -T tcp -P 2.2.2.2:777 -M -t tcp -p :8080
In this way, when the website is accessed through the local agent 8080, the target website is accessed through compression with the upstream.
Three-level instance
Execute on level 1 vps (ip: 2.2.2.2):
proxy sps -t tcp -m -p :7777
Execute on the secondary vps (ip: 3.3.3.3):
proxy sps -T tcp -P 2.2.2.2:7777 -M -t tcp -m -p :8888
Local three-level execution:
proxy sps -T tcp -P 3.3.3.3:8888 -M -t tcp -p :8080
In this way, when the website is accessed through the local agent 8080, the target website is accessed through compression with the upstream.
By default, SPS supports http(s) and socks5 two proxy protocols. We can disable a protocol by parameter.
Por ejemplo:
Disable the HTTP(S) proxy function to retain only the SOCKS5 proxy function, parameter: --disable-http
.
proxy sps -T tcp -P 3.3.3.3:8888 -M -t tcp -p :8080 --disable-http
Disable the SOCKS5 proxy function to retain only the HTTP(S) proxy function, parameter: --disable-socks
.
proxy sps -T tcp -P 3.3.3.3:8888 -M -t tcp -p :8080 --disable-socks
Suppose there is a SOCKS5 upstream:
proxy socks -p 2.2.2.2:33080 -z password -t tcp
SPS lower level, speed limit 100K
proxy sps -S socks -P 2.2.2.2:33080 -T tcp -Z password -l 100K -t tcp -p :33080
It can be specified by the -l
parameter, for example: 100K 2000K 1M . 0 means no limit.
The --bind-listen
parameter can be used to open the client connection with the portal IP, and use the portal IP as the outgoing IP to access the target website. If the ingress IP is an intranet IP, the egress IP does not use the ingress IP.
proxy sps -S socks -P 2.2.2.2:33080 -T tcp -Z password -l 100K -t tcp --bind-listen -p :33080
Although the above --bind-listen
parameter can specify the outgoing IP, the entry IP
and outgoing IP
cannot be interfered by humans. If you want the ingress IP to be different from the egress IP, you can use the --bind-ip
parameter, format: IP:port
, for example: 1.1.1.1:8080
, [2000:0:0:0:0:0:0:1]:8080
. For multiple binding requirements, you can repeat the --bind-ip
parameter.
For example, the machine has IP 5.5.5.5
, 6.6.6.6
, and monitors two ports 8888
and 7777
, the command is as follows:
proxy sps -t tcp -p :8888,:7777 --bind-ip 5.5.5.5:7777 --bind-ip 6.6.6.6:8888
Then the client access port 7777
, the outgoing IP is 5.5.5.5
, access port 8888
, the outgoing IP is 6.6.6.6
, if both --bind-ip
and --bind- are set at the same time listen
, --bind-ip
has higher priority.
In addition, the IP
part of the --bind-ip
parameter supports specifying the network interface name
, wildcards
, and more than one. The details are as follows:
--bind-ip eth0:7777
, then the client accesses the 7777
port, and the egress IP is the IP of the eth0 network interface.--bind-ip eth0.*:7777
, then the client accesses the 7777
port, and the egress IP is a randomly selected one of the network interface IPs starting with eth0.
.--bind-ip 192.168.?.*:7777
, then the client accesses the 7777
port, and the outgoing IP is all the IPs of the machine, matching the IP of 192.168.?.*
A randomly selected one.--bind-ip pppoe??,192.168.?.*:7777
, then the client accesses the port 7777
, The outgoing IP is the machine's network interface name matching pppoe??
It is a randomly selected one among all IPs of the machine that matches 192.168.?.*
.*
represents 0 to any number of characters, and ?
represents 1 character.--bind-refresh
parameter to specify the interval to refresh the local network interface information, the default is 5
, the unit is second.By default, the -C, -K parameter is the path to the crt certificate and the key file.
If it is the beginning of base64://, then the latter data is considered to be base64 encoded and will be used after decoding.
A sps port can complete the full-featured proxy httpsocksss
function.
The following command is to open the http(s)sssocks service with one click, and enable the udp of socks5 and the udp of ss at the same time.
proxy sps -p: 33080 --ssudp --udp --udp-port 0
The https(s)socks5ss proxy function provided by the sps function, the client connects to the specified "target" through the sps proxy. This "target" is generally a website or an arbitrary tcp address.
The website "target" is generally foo.com: 80, foo.com: 443, sps supports the use of the --rewrite parameter to specify a "target" redirection rule file, redirect the target, the client is non-perceived,
For example, if you redirect to "target": demo.com:80 to 192.168.0.12:80, then the client visits the website demo.com, in fact, the website service provided by 192.168.0.12.
Example of a "target" redirection rule file:
# example
Www.a.com:80 10.0.0.2:8080
**.b.com:80 10.0.0.2:80
192.168.0.11:80 10.0.0.2:8080
When sps is an independent service, an additional local socks5 service will be opened to occupy a random port. Now the parameter --self-port
can be manually specified when needed. The default is 0 to use random.
By default, the port number of the UDP function of ss's socks5 is specified by the rfc1982 draft
. It is randomly specified during the protocol handshake process and does not need to be specified in advance.
However, in some cases, you need to fix the UDP function port. You can fix the port number of the UDP function by the parameter --udp-port port_number
, for example:
proxy sps -t tcp -p "0.0.0.0:38080" --udp-port 38081
It should be noted that the ss function of sps also has UDP function, and the UDP port of ss is the same as the tcp port, so avoid the conflict between the UDP port of socks5 and the UDP port of ss.
To specify a port that is different from the tcp port.
The sps mode supports the iptables transparent forwarding support of the Linux system, which is commonly referred to as the iptables transparent proxy. If a iptables transparent proxy is performed on the gateway device, the device that is connected through the gateway can realize a non-aware proxy.
Example start command:
proxy sps --redir -p :8888 -P httpws: //1.1.1.1:33080
Here it is assumed that there is an http superior proxy 1.1.1.1:33080, which uses ws to transmit data.
Then add iptables rules, here are the reference rules:
# upstream proxy server IP address:
proxy_server_ip = 1.1.1.1
# Router running proxy listening port:
proxy_local_port = 33080
# There is no need to modify the following
# create a new chain named PROXY
iptables -t nat -N PROXY
# Ignore your PROXY server's addresses
# It's very IMPORTANT, just be careful。
iptables -t nat -A PROXY -d $proxy_server_ip -j RETURN
# Ignore LANs IP address
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
iptables -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
# Anything to port 80 443 should be redirected to PROXY's local port
iptables -t nat -A PROXY -p tcp -j REDIRECT --to-ports $proxy_local_port
# Apply the rules to nat client
iptables -t nat -A PREROUTING -p tcp -j PROXY
# Apply the rules to localhost
iptables -t nat -A OUTPUT -p tcp -j PROXY
By default, the UDP functionality of the SOCKS5 proxy in the proxy operates in accordance with the SOCKS5 RFC 1928 specification. However, there are certain SOCKS5 clients that do not adhere to the specified rules. To ensure compatibility with such clients, the --udp-compat
parameter can be added to activate the compatibility mode for SOCKS5 UDP functionality.
Additionally, the -udp-gc
parameter can be utilized to set the maximum idle time for UDP. When this time threshold is exceeded, UDP connections will be released.
The --dns-address
and --dns-ttl
parameters are used to specify the dns used by the proxy to access the domain name ( --dns-address
) As well as the number of seconds for caching the parsing results (--dns-ttl) to avoid the interference of the system dns on the proxy. The additional caching function can also reduce the dns parsing time and improve the access speed. Translation: Agent sps -p ":33080" --dns-address "8.8.8.8:53" --dns-ttl 300
You can also use the parameter --dns-interface
to specify the bandwidth used for dns resolution, for example: --dns-interface eth0
, dns resolution will use the eth0 bandwidth, this parameter must be set to --dns-address
to ser eficaz.
proxy help sps
Many functions of the proxy support the kcp protocol. Any function that uses the kcp protocol supports the configuration parameters described here.
Therefore, the KCP configuration parameters are introduced here.
There are a total of 17 KCP configuration parameters, you can not set them, they have default values, if for the best effect,
You need to configure the parameters according to your own network conditions. Because the kcp configuration is complex, it requires a certain network basics.
If you want to get more detailed configuration and explanation of kcp parameters, please search for yourself. The command line name for each parameter, along with the default values and simple function descriptions are as follows:
--kcp-key="secrect" pre-shared secret between client and server
--kcp-method="aes" encrypt/decrypt method, can be: aes, aes-128, aes-192, salsa20, blowfish,
Twofish, cast5, 3des, tea, xtea, xor, sm4, none
--kcp-mode="fast" profiles: fast3, fast2, fast, normal, manual
--kcp-mtu=1350 set maximum transmission unit for UDP packets
--kcp-sndwnd=1024 set send window size(num of packets)
--kcp-rcvwnd=1024 set receive window size(num of packets)
--kcp-ds=10 set reed-solomon erasure coding - datashard
--kcp-ps=3 set reed-solomon erasure coding - parityshard
--kcp-dscp=0 set DSCP(6bit)
--kcp-nocomp disable compression
--kcp-acknodelay be carefull! flush ack immediately when a packet is received
--kcp-nodelay=0 be carefull!
--kcp-interval=50 be carefull!
--kcp-resend=0 be carefull!
--kcp-nc=0 be carefull! no congestion
--kcp-sockbuf=4194304 be carefull!
--kcp-keepalive=10 be carefull!
Consejo:
Parameters: -- four fast3, fast2, fast, normal modes in kcp-mode,
Equivalent to setting the following four parameters:
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 is known as the service provided by UDP port 53, but with the development of the network, some well-known DNS servers also support TCP mode dns query, such as Google's 8.8.8.8, the DNS anti-pollution server principle of the proxy is to start a proxy DNS proxy locally. Server, which uses TCP to perform dns query through the upstream agent. If it communicates with the upstream agent, it can perform secure and pollution-free DNS resolution. It also supports independent services, concurrent parsing, and enhanced enhanced hosts file function to support flexible concurrent parsing and forwarding.
Dns resolution order:
Consejo:
The host file format specified by the --hosts parameter is the same as the system hosts file, and the domain name supports wildcards. You can refer to the hosts file.
The parsing forwarding rule file specified by the --forward parameter can be referenced to the resolve.rules file. The domain name supports wildcards. It supports multiple dns servers for each domain name to be parsed concurrently. Whoever resolves the fastest resolution will use the resolution result.
The -q parameter can specify multiple remote dns servers to perform concurrent parsing. Whoever resolves the fastest parsing success, the default is: 1.1.1.1, 8.8.8.8, 9.9.9.9, multiple comma-separated,
For example, you can also bring ports: 1.1.1.1, 8.8.8.8#53, 9.9.9.9
If you are a standalone service, you don't need a upstream:
Can perform:
proxy dns --default system -p :5353
O
proxy dns --default direct -p :5353
Suppose there is a upstream agent: 2.2.2.2:33080
Local execution:
proxy dns -S http -T tcp -P 2.2.2.2:33080 -p :53
Then the local UDP port 53 provides DNS resolution.
Suppose there is a upstream agent: 2.2.2.2:33080
Local execution:
proxy dns -S socks -T tcp -P 2.2.2.2:33080 -p :53
Then the local UDP port 53 provides DNS resolution.
Suppose there is a upstream agent: 2.2.2.2:33080
The commands executed by the upstream agent are:
proxy http -t tls -C proxy.crt -K proxy.key -p :33080
Local execution:
proxy dns -S http -T tls -P 2.2.2.2:33080 -C proxy.crt -K proxy.key -p :53
Then the local UDP port 53 provides a secure anti-pollution DNS resolution function.
Suppose there is a upstream agent: 2.2.2.2:33080
The commands executed by the upstream agent are:
proxy socks -t tls -C proxy.crt -K proxy.key -p :33080
Local execution:
proxy dns -S socks -T tls -P 2.2.2.2:33080 -C proxy.crt -K proxy.key -p :53
Then the local UDP port 53 provides a secure anti-pollution DNS resolution function.
Suppose there is a upstream agent: 2.2.2.2:33080
The commands executed by the upstream agent are:
proxy http -t kcp -p :33080
Local execution:
proxy dns -S http -T kcp -P 2.2.2.2:33080 -p :53
Then the local UDP port 53 provides a secure anti-pollution DNS resolution function.
Suppose there is a upstream agent: 2.2.2.2:33080
The commands executed by the upstream agent are:
proxy socks -t kcp -p :33080
Local execution:
proxy dns -S socks -T kcp -P 2.2.2.2:33080 -p :53
Then the local UDP port 53 provides a secure anti-pollution DNS resolution function.
Suppose there is a upstream agent: 2.2.2.2:33080
The commands executed by the upstream agent are:
proxy http -t tcp -p :33080 -z password
Local execution:
proxy dns -S http -T tcp -Z password -P 2.2.2.2:33080 -p :53
Then the local UDP port 53 provides a secure anti-pollution DNS resolution function.
Suppose there is a upstream agent: 2.2.2.2:33080
The commands executed by the upstream agent are:
proxy socks -t kcp -p :33080 -z password
Local execution:
proxy dns -S socks -T tcp -Z password -P 2.2.2.2:33080 -p :53
Then the local UDP port 53 provides a secure anti-pollution DNS resolution function.
The proxy's http(s)/socks5/sps proxy function supports user-to-agent access via the API.
user
or client ip
or server port
. The proxy's http(s)/socks5/sps proxy API function is controlled by three parameters: --auth-url
and --auth-nouser
and --auth-cache
.
The parameter --auth-url
is the HTTP API interface address. When the client connects, the proxy will request the url in GET mode, with the following parameters. If the HTTP status code 204 is returned, the authentication is successful. In other cases, the authentication fails.
An example of a complete request API:
http://test.com/auth.php?user=a&pass=b&client_addr=127.0.0.1:49892&local_addr=127.0.0.1:8100&target=http%3A%2F%2Fwww.baidu.com&service=http&sps=0
user and pass
When the proxy turns on authentication, here is the username and password provided by the client.
client_addr
The address used by the client to access the proxy, format IP: port.
local_addr
The proxy address accessed by the client, format IP: port.
service
Proxy type, divided into: http, socks.
Whether the sps
proxy is provided by sps, 1: yes, 0: no.
target
The target to be accessed by the client. If it is an http(s) proxy, the target is the specific url accessed; if it is a socks5 proxy, the target is empty.
Suppose --auth-url http://127.0.0.1:333/auth.php points to a php interface address.
The contents of auth.php are as follows:
<?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 ( " userTotalRate:1024000 " );
//header("ipTotalRate:10240");
//header("portTotalRate:10240");
//header("RotationTime:60");
header ( " HTTP/1.1 204 No Content " );
}
userconns
: The maximum number of connections for the user, not limited to 0 or not set this header.
ipconns
: The maximum number of connections for the user IP, not limited to 0 or not set this header.
userrate
: User's single TCP connection rate limit, in bytes/second, is not limited to 0 or does not set this header.
iprate
: The single TCP connection rate limit of the client IP, in bytes/second, not limited to 0 or not set this header.
userqps
: The maximum number of connections per second (QPS) for the user, not limited to 0 or not set this header.
ipqps
: The maximum number of connections per second (QPS) for the client IP, not limited to 0 or not set this header.
upstream
: The upstream used, not empty, or not set this header.
outgoing
: The outgoing IP used. This setting is only effective when the upstream is empty. The IP set here must be owned by the machine where the proxy is located, otherwise, the proxy will not function properly. Starting from version v13.2
, outgoing
supports multiple subnet formats separated by commas. The proxy will randomly select an IP from the subnet as the outgoing IP. This randomness will also be keep when authentication cache is enabled. The following formats are supported for subnets:
192.168.1.1
, Description: Single IP, IPv43001:cb2::
, Description: Single IP, IPv6192.168.1.1/24
, Description: CIDR format subnet, IPv43001:cb2::/126
, Description: CIDR format subnet, IPv6192.168.1.1-192.168.1.200
, Description: IP range, IPv42311:ca2::-2311:ca2::10
, Description: IP range, IPv6 Example: 192.16.1.1,192.161.1.2,192.168.1.2-192.168.1.255
userTotalRate
: Limit the user
total bandwidth speed (bytes per second), unit is byte, not limited to 0 or not set this header.
ipTotalRate
:Limit the client ip
total bandwidth speed (bytes per second), unit is byte, not limited to 0 or not set this header.
portTotalRate
:Limit the server port
total bandwidth speed (bytes per second), unit is byte, not limited to 0 or not set this header.
RotationTime
: (requires version >= v13.2)
Controls the time interval, in seconds, for randomly selecting the outgoing IP. Leave it blank or unset this header if not needed.When the outgoing returned by the API is a subnet, and if you don't want the proxy to randomly select a new IP for each client connection, you can use this parameter to control the time interval for random IP selection. If within the interval period, the previously selected IP will be used. If the API does not return the RotationTime
header or if RotationTime
is set to 0, the proxy will randomly select an IP from the outgoing subnet as the outgoing IP for each client connection.
userrate
、 iprate
and userTotalRate
、 ipTotalRate
、 portTotalRate
can be set at same time, for example: set userrate
with 1024000 to limit the user's total bandwidth speed to 1M/s of user's all tcp connections. And set userrate
with 102400 to limit the user one tcp connection speed to 100K/s.userTotalRate
、 ipTotalRate
、 portTotalRate
set at same time, the valid order is : userTotalRate
-> ipTotalRate
-> portTotalRate
userTotalRate
、 portTotalRate
set at same time, and set --auth-nouser
,all clients that not send username will be as an "empty username" user,they are using a same limiter. --auth-url
is required to provide the user name and password. If you do not need the client to provide the username and password, and authenticate, you can add --auth-nouser
. The visit will still access the authentication address --auth-url
for authentication. Only the $user authentication username and the $pass authentication password received in the php interface are empty when client didn't send username and password.--auth-cache
authentication cache, cache the authentication result for a certain period of time, improve performance, reduce the pressure on the authentication interface, --auth-cache unit seconds, default 0, set 0 to close the cache.--auth-cache
only caches the results of successful authentication and does not cache the results of failed authentication. If you need to cache the failed authentication results for a certain period of time, It can be set through the parameter -auth-fail-cache
to improve performance and reduce the pressure on the authentication interface. The unit of --auth-fail-cache is seconds. The default is 0. Setting 0 turns off the cache. sps
is 0.http://127.0.0.1:3100?argk=argv
socks5://127.0.0.1:3100?argk=argv
Explanation: http://
, socks5://
is fixed, 127.0.0.1:3100
is the address of the upstream
When sps
is 1.
Upstream supports socks5, http(s) proxy, support authentication, format: protocol://a:[email protected]:33080?argk=argv
, please refer to SPS chapter for details, multiple upstreams , the description of the -P
parámetro.
Parameters, ?
followed by argk=argv
are parameters: parameter name = parameter value, multiple parameters are connected with &
.
All the supported parameters are as follows, and the meaning of the command line with the same name is the same.
4.Upstream supports multiple instances, regardless of whether SPS is 1 or 0, and they are separated by semicolons ;. When connecting to an upstream, by default, one upstream is randomly chosen. However, it supports setting the weight parameter for each upstream. If the weight is set for any upstream, all upstreams must have the weight parameter set. The weight must be greater than 0; otherwise, the weight is considered invalid, and random selection is applied. This selection logic is also working after the authentication cache is activado.
Examples of multiple upstreams:
http://127.0.0.1:3100?argk=argv;http://127.0.0.2:3100?argk=argv
http://127.0.0.1:3100?argk=argv&weight=10;http://127.0.0.2:3100?argk=argv&weight=20
Weight selection logic:
When a weight is set for an upstream, it divides the total weight among the upstreams based on their order. For example, if there are two upstreams with weights 10 and 20 respectively, the total weight is 30. The first upstream's weight range is 1-10, and the second upstream's weight range is 11-30. This logic extends to more upstreams. Each time, a random number within the total weight range is chosen, and the corresponding upstream is selected based on this number's range.
The proxy's http (s) / socks5 / sps / tcp / udp proxy function supports traffic reporting. You can set an http interface address through the parameter --traffic-url
. The proxy will report the traffic used for this connection to this address.Specifically, the proxy sends an HTTP to GET request to the HTTP URL address set by --traffic-url
. There are two reporting modes, which can be specified by the --traffic-mode
parameter. It can be reported in the normal mode or in the fast mode.
Report in normal
normal mode
When the connection is released, the proxy will report the traffic used for this connection to this --traffic-url
address.
Report in fast
mode
For each connection that has been established, the proxy will timely
report the traffic generated by this connection to this --traffic-url
address.
Timing
defaults to 5 seconds, and you can modify Timing
to the appropriate number of seconds via the parameter --traffic-interval
.
Report in fast
global mode
By default, if the API can't handle high concurrency report access, you can use the fast global mode, Use the parameter --fast-global
to open, this parameter is only valid when --traffic-mode=fast
. In fast global mode, for a --traffic-url
, no matter how many concurrent connections there are, only have one reporter, and the reporting interval is 5 seconds. In this mode, the reporting request method is POST
, Content-Type
is application/json
, the post body data is JSON Array
, example: [{},{}]
, the keys of object in the array are same with the following Reqeust parameter description
.
The traffic reporting function combined with the above API authentication function can control the user's traffic usage in real time. The traffic is reported to the interface. The interface writes the traffic data to the database, and then the authentication API queries the database to determine the traffic usage and determine whether the user can be successfully authenticated.
The following is a complete URL request example:
http://127.0.0.1:33088/user/traffic?bytes=337&client_addr=127.0.0.1%3A51035&id=http&server_addr =127.0.0.1%3A33088&target_addr=myip.ipip.net%3A80&username=a
Request parameter description:
id
: service id flag.
server_addr
: proxies's address requested by the client, format: IP: port.
client_addr
: client address, format: IP: port.
target_addr
: target address, format: "IP: port", when tcp / udp proxy, this is empty.
username
: proxy authentication user name, this is empty when tcp / udp proxy.
bytes
: the number of traffic bytes used by the user.
out_local_addr
: outgoing tcp connection's local address,format: IP: port.
out_remote_addr
: outgoing tcp connection's remote address,format: IP: port.
upstream
: upstream used by outgoing tcp connection, if none upstream be used, it's empty.
The --traffic-url
URL must response the HTTP status code 204
. Only when the traffic is reported will the report be considered successful, and if it response other status codes, it will be considered that the reported traffic failed, and the log will be output.
The proxy's http (s) / socks5 / sps proxy function supports a control interface, which can be specified by the parameter --control-url http interface address, Then the proxy will interval send all the usernames or client IPs currently connected to the proxy to this URL. Specifically, the proxy sends an HTTP to POST request to the HTTP URL address set by --control-url.
interval
defaults to 30 seconds, this value can be modified via the --control-sleep parameter.
When the user expires, or the user's traffic has been used up, the authentication API can only control the user cannot create a new connection, but the connection with the proxy has been established and the connection cannot be immediately disconnected. Then this problem can be solved through the control interface. The control interface will return the content through the control interface in the slowest interval
time, and the end is invalid when the user establishes the connection.
An HTTP POST request will be sent to the control. The interface form
has three fields: interface, ip, conns, and the conns
field requires a user whose proxy version is greater than proxy 12.2
.
user
The username currently connected to the agent, multiple separated by commas, for example: user1, user2
ip
The client IP is connected to the proxy, and multiple clients using English are split addresses, for example: 1.1.1.1, 2.2.2.2
conns
The tcp connection information currently connecting to the proxy port to transmit data. The conns value is a json string, the format is a sequence of connections, the element is an object, the object contains the details of the connection, conns format: [{"id":"ab7bf1f10501d6f7","client":"127.0.0.1:62112","server":"127.0.0.1:9092","user":""}]
Object field description: id: connection id, client: client's unique IP address and port, server: client's IP and no port access, user's connection authentication (null if any)
The data returned by the control interface is invalid user and IP or connection. The format is a json object data. There are three fields user, ip, and conns. The conns
field requires the proxy version greater than or equal to 12.2
. Format: {"user":"a,b","ip":"",conns:["ab7bf1f10501d6f7","cb7bf1f10501d6f7"]}
user
: The username currently connected to the proxy, multiple separated by commas, not left blank, for example: user1, user2
ip
: The ip address of the client currently connected to the proxy, multiple separated by commas, not left blank, for example: 1.1.1.1, 2.2.2.2
conns
: is an array, the element is a connection id, this id is the id field of the connection object in conns in the above Request Description
.
Introducir:
user
or IP
authentication cache will be cleared. Suppose --control-url http://127.0.0.1:33088/user/control.php
points to a PHP interface address. The content of control.php is as follows:
<?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 " => "" , " conns " =>[]];
echo json_encode ( $ data );
The proxy http(s)/socks5/sps proxy function supports the user to access the proxy pair through the configuration file, and supports the http(s) proxy ``Proxy Basic proxy authentication` and the socks5 proxy authentication.
The proxy's http(s)/socks5/sps proxy function can pass
--auth-file
, --max-conns
, --ip-limit
, --rate-limit
, -a
These five parameters control.
--auth-file
The authenticated user name and password file. This parameter specifies a file, one line per rule, in the format: "username: password: number of connections: rate: upstream".
Connection number
is the maximum number of connections for the user. The 'rate' is the maximum speed of each tcp connection of the user. The unit is: byte/second. The upper level is the upper level used by the user.
Not only can the authenticated user be set by --auth-file
, but also the -a
parameter can be set directly. Multiple users can repeat multiple -a
parameters.
For example: proxy http -aa:b:0:0: -ac:d:0:0:
Explicación de ejemplo:
For example: user:pass:100:10240:http://192.168.1.1:3100
user
is the authentication username
pass
is the authentication user password (cannot contain a colon:)
100
is the maximum number of connections for this user, not limited to write 0
10240
is the rate limit of this user's single tcp connection, the unit is: byte / sec, no limit write 0
http://192.168.1.1:3100
is the upstream used by this user, no space is left blank
--max-conns
Limit the maximum number of global connections for the proxy service, a number, 0 is unrestricted, default is 0.
--ip-limit
Controls the number of connections and connection rate of the client IP. This parameter specifies a file, one rule per line, and the beginning of # is gaze.
The sample file ip.limit, the rule format is as follows:
127.0.0.1:100:10240:http://192.168.1.1:3100
Rule interpretation:
127.0.0.1
is the IP to be restricted
100
is the maximum number of connections for this IP, not limited to write 0
10240
is the rate limit of IP single tcp connection, the unit is: byte / s, no limit write 0
http://192.168.1.1:3100
is the upstream used by this IP, and it is not left blank.
--rate-limit
Limit the speed of each tcp connection of the service, for example: 100K 2000K 1M . 0 means unlimited, default 0.
The proxy supports the cluster management. The proxy is installed on each machine node as an agent, with the control panel [ proxyadmin cluster edition
] (https://github.com/snail007/proxy-admin-cluster) Unified management of proxy services on massive machines.
If the proxy is to be run as an agent, assume that the cluster port address of the control panel is: 1.1.1.1: 55333
.
The command example is as follows:
proxy agent -k xxx -c 1.1.1.1:55333 -i test
Explicación del comando:
agent: is a function parameter, which means running agent mode.
-k : The encryption and decryption key for communication with proxyadmin cluster edition
. This key is set in the configuration file of proxyadmin cluster edition
.
-c : The cluster port address of proxyadmin cluster edition
, format: IP:port.
-i : The unique identifier of the agent ensures that each agent is different. The "unique identifier" specified here is used when adding a node to the control panel. The IP is filled with this "unique identifier". If -i is not specified, the default is empty, and the control panel adds the IP field to fill in: the agent's internet IP.
-u: proxy parameter, empty by default. You can specify an agent, and the agent will communicate with the cluster through this agent.
The format is the same as that of --jumper
. For details, please refer to the --jumper
part of the manual.
aviso:
When the client service is configured in the control panel, all nodes use the same key, which leads to only one client working. To solve this problem, Client service parameters can use placeholders: {AGENT_ID}
to refer to the agent's id as the client's key, so as to ensure that each client has a unique key.
For example, client service parameters:
client -T tcp -P 1.1.1.1:30000 --k {AGENT_ID}
The proxy can reverse proxy http and https websites.
The supported features are as follows:
Example, configure file: rhttp.toml
。
proxy rhttp -c rhttp.toml
For detail usage, please refer to the configuration file rhttp.toml, which has a complete configuration description.