GoProxy는 고성능 http 프록시, https 프록시, sock5 프록시, ss 프록시, websocket 프록시, tcp 프록시, udp 프록시, 게임 쉴드, 게임 프록시입니다. 순방향 프록시, 역방향 프록시, 투명 프록시, 인터넷 NAT 프록시, https 프록시를 지원합니다. 로드 밸런싱, http 프록시 로드 밸런싱, sock5 프록시 로드 밸런싱, 소켓 프록시 로드 밸런싱, ss 프록시 로드 밸런싱, TCP/UDP 포트 매핑, SSH 전송, TLS 암호화 전송, 프로토콜 변환, 오염 방지 DNS 프록시, API 인증, 속도 제한, 연결 제한을 통해 NAT 또는 방화벽 뒤의 로컬 서버를 인터넷에 노출시켜 귀하 또는 귀하의 방문자가 액세스할 수 있습니다. 직접적이고 쉽게.
ProxyAdmin은 snail007/goproxy의 강력한 웹 콘솔입니다.
이 페이지의 매뉴얼은 최신 버전의 goproxy에 적용됩니다. 다른 버전은 해당 명령을 따르지 않을 수 있습니다.
텔레그램에 참여하려면 클릭하세요.
팁: 모든 작업에는 루트 권한이 필요합니다.
무료 버전은 다음을 수행합니다.
bash -c " $( curl -s -L https://raw.githubusercontent.com/snail007/goproxy/master/install_auto.sh ) "
상용 버전은 다음을 수행합니다.
bash -c " $( curl -s -L https://raw.githubusercontent.com/snail007/goproxy/master/install_auto_commercial.sh ) "
설치가 완료되었습니다. 구성 디렉터리는 /etc/proxy입니다. 자세한 사용법은 위의 매뉴얼 디렉터리를 참조하여 설치에 실패하거나 vps가 linux64-bit가 아닌 경우 사용하려는 기능을 자세히 알아보세요. 시스템을 설치하려면 아래 반자동 단계를 따르세요.
다운로드 주소: https://github.com/snail007/goproxy/releases/latest
v7.9를 예로 들어보겠습니다. 최신 버전이 있는 경우, 아래 다운로드 링크의 버전 번호가 최신 버전 번호임을 참고하세요.
무료 버전은 다음을 수행합니다.
cd /root/proxy/
wget https://github.com/snail007/goproxy/releases/download/v7.9/proxy-linux-amd64.tar.gz
상용 버전은 다음을 수행합니다.
cd /root/proxy/
wget https://github.com/snail007/goproxy/releases/download/v7.9/proxy-linux-amd64_commercial.tar.gz
무료 버전은 다음을 수행합니다.
cd /root/proxy/
wget https://raw.githubusercontent.com/snail007/goproxy/master/install.sh
chmod +x install.sh
./install.sh
상용 버전은 다음을 수행합니다.
cd /root/proxy/
wget https://raw.githubusercontent.com/snail007/goproxy/master/install_commercial.sh
chmod +x install_commercial.sh
./install_commercial.sh
프록시 업데이트는 미러를 사용하여 다운로드합니다. 업데이트에 미러 관련 오류가 있는 경우 환경 변수 UPDATE_MIRROR=false
설정할 수 있습니다.
Windows: set UPDATE_MIRROR=false
후 proxy update
Linux: export UPDATE_MIRROR=false
proxy update
proxy update
강제 업데이트.
proxy update -f
예를 들어 proxy
c:gpproxy
에 있습니다.
c:
cd gp
proxy update
강제 업데이트.
c:
cd gp
proxy update -f
프록시는 GPLv3 라이선스에 따라 라이선스가 부여됩니다.
공식 텔레그램 그룹: goproxy
이 프로젝트의 작성자는 다수의 개발자가 2차 개발을 위해 프로젝트를 기반으로 하거나 GPLv3 계약을 준수하지 않고 프로젝트의 다수의 핵심 코드를 사용하는 것이 GPLv3 오픈 소스 계약을 사용하려는 원래 의도를 심각하게 위반한다는 사실을 발견했습니다. 이 프로젝트에서는 오픈 소스를 존중하지 않고 타인의 노동 결과를 존중하지 않는 이러한 행위를 억제하기 위해 소스를 채택합니다. 계속해서 반복 업데이트 예정 강력하고 편리한 프록시 도구를 제공하는 전체 플랫폼 바이너리 프로그램을 계속 출시할 예정입니다. 비즈니스 요구에 맞게 맞춤 설정한 경우 [email protected]
으로 이메일을 보내주세요.
나를 클릭하여 Linux 설치를 받으세요
나를 클릭해 MacOS 설치를 받으세요
나를 클릭하면 Windows 설치가 시작됩니다
나를 클릭하면 Windows 설치가 시작됩니다
본 매뉴얼은 상용 버전에 포함된 모든 기능을 설명합니다. 무료 버전에는 인증과 같은 고급 기능 매개변수가 포함되어 있지 않습니다.
무료 버전을 사용하여 일부 명령을 실행할 때 일부 명령이 발생하는 경우 다음 xxx 매개변수와 유사한 프롬프트가 존재하지 않습니다. 이는 이 매개변수가 상용 버전의 기능임을 나타냅니다.
err: unknown long flag '-a'
무료 버전과 상용 버전의 기능 비교, 상용 버전 구매 및 사용 방법에 대한 자세한 작업을 보려면 여기를 클릭하세요.
수동 튜토리얼에서는 기본 시스템이 Linux이고, 프로그램이 프록시입니다. 모든 작업에는 루트 권한이 필요합니다.
Windows 사용자라면 Windows 버전의 Proxy.exe를 사용하세요.
다음 튜토리얼에서는 명령줄 매개변수를 통한 사용 방법을 소개하거나 구성 파일을 읽어 매개변수를 얻을 수 있습니다.
특정 형식은 @ 기호로 구성 파일을 지정하는 것입니다(예: 프록시 @configfile.txt).
configfile.txt의 형식은 첫 번째 줄이 하위 명령의 이름이고 두 번째 줄은 한 줄에 하나의 매개변수로 시작하는 것입니다.
형식: parameter Parameter value
, 매개변수 값이 없는 매개변수 직접 쓰기(예: --nolog)
예를 들어 configfile.txt의 내용은 다음과 같습니다.
Http
-t tcp
-p :33080
--forever
기본적으로 로그에 출력되는 정보에는 파일 줄 수가 포함되지 않는 경우가 있는데, 프로그램 문제를 해결하기 위해 문제를 신속하게 찾아냅니다.
--debug 매개변수를 사용하여 코드 줄 수와 밀리초를 출력할 수 있습니다.
기본적으로 로그는 콘솔에 직접 표시됩니다. 파일에 저장하려면 --log 매개변수를 사용할 수 있습니다.
예: --log Proxy.log, 문제 해결을 용이하게 하기 위해 로그가 Proxy.log로 출력됩니다.
기본적으로 INFO 및 WARN을 로깅하려면 경고 로깅만 출력하도록 --warn
설정할 수 있습니다.
http, tcp, udp 프록시 프로세스는 업스트림과 통신합니다. 보안을 위해 암호화된 통신을 사용합니다. 물론 이 튜토리얼의 모든 통신과 업스트림 통신은 암호화되어 있습니다. 필요합니다.
다음 명령을 사용하여 자체 서명된 인증서와 키 파일을 생성합니다.
proxy keygen -C proxy
인증서 파일인 Proxy.crt와 키 파일인 Proxy.key가 현재 프로그램 디렉터리 아래에 생성됩니다.
자체 서명된 인증서인 Proxy.crt와 키 파일인 Proxy.key(goproxy.crt 및 goproxy.key)를 사용하여 새 인증서를 생성하려면 다음 명령을 사용하십시오.
proxy keygen -s -C proxy -c goproxy
인증서 파일 goproxy.crt와 키 파일 goproxy.key가 현재 프로그램 디렉터리 아래에 생성됩니다.
기본적으로 인증서 내부의 도메인 이름은 무작위이며 -n test.com
매개변수를 사용하여 지정할 수 있습니다.
추가 사용법: proxy keygen --help
.
기본적으로 프록시가 실행된 후 프록시를 계속 실행하려면 명령줄을 닫을 수 없습니다.
백그라운드에서 프록시를 실행하려면 명령줄을 닫고 명령 끝에 --daemon 매개변수를 추가하면 됩니다.
예를 들어:
proxy http -t tcp -p "0.0.0.0:38080" --daemon
데몬은 --forever 매개변수를 실행합니다(예: proxy http --forever
.
프록시는 하위 프로세스를 포크한 다음 하위 프로세스를 모니터링합니다. 하위 프로세스가 비정상적으로 종료되면 5초 후에 하위 프로세스를 다시 시작합니다.
이 매개변수는 백그라운드 실행 매개변수 --daemon 및 로그 매개변수 --log와 일치하며, 이는 프록시가 실수로 종료되지 않고 항상 백그라운드에서 실행되도록 보장할 수 있습니다.
그리고 로그 파일을 통해 프록시의 출력 로그 내용을 볼 수 있습니다.
예: proxy http -p ":9090" --forever --log proxy.log --daemon
VPS가 NAT 장치 뒤에 있는 경우 vps 네트워크 인터페이스 IP는 인트라넷 IP입니다. 이때 -g 매개변수를 사용하여 vps 외부 네트워크 IP를 추가하면 무한 루프를 방지할 수 있습니다.
vps 외부 네트워크 IP가 23.23.23.23이라고 가정합니다. 다음 명령은 -g 매개변수를 사용하여 23.23.23.23을 설정합니다.
proxy http -g "23.23.23.23"
HTTP(S)SOCKS5SPS 프록시는 상위 수준 로드 밸런싱과 고가용성을 지원하며 여러 업스트림 반복 P 매개변수를 사용할 수 있습니다.
로드 밸런싱 정책은 --lb-method
매개변수로 지정할 수 있는 5가지 유형을 지원합니다.
차례로 사용되는 라운드 로빈
Leastconn은 최소 연결 수를 사용합니다.
최소 시간은 최소 연결 시간을 사용합니다.
해시는 클라이언트 주소를 기반으로 고정된 업스트림을 사용합니다.
가중치 각 업스트림의 가중치와 연결 수에 따라 업스트림을 선택합니다.
즉각적인:
로드 밸런싱 확인 간격은 --lb-retrytime
(밀리초)으로 설정할 수 있습니다.
로드 밸런싱 연결 시간 초과는 --lb-timeout
(밀리초)으로 설정할 수 있습니다.
로드 밸런싱 정책이 가중치인 경우 -P 형식은 2.2.2.2: 3880?w=1입니다. 여기서 1은 가중치이고 0보다 큰 정수입니다.
로드 밸런싱 정책이 해시인 경우 기본값은 클라이언트 주소를 기준으로 업스트림을 선택하는 것입니다. 액세스 --lb-hashtarget
의 대상 주소를 사용하여 업스트림을 선택할 수 있습니다.
TCP 프록시에는 --lb-hashtarget
매개변수가 없습니다.
기본값은 로드 밸런싱 + 고가용성 모드입니다. --lb-onlyha
매개변수를 사용하면 고가용성 모드만 사용되며 로드 밸런싱 전략에 따라 노드가 선택되고 이 노드는 선택되지 않을 때까지 사용됩니다. 살아 있으면 다른 노드가 사용을 위해 선택되어 순환됩니다.
모든 노드가 살아 있지 않으면 무작위 노드가 선택되어 사용됩니다.
Http(s) 에이전트, SPS 에이전트, 인트라넷 침투, tcp 에이전트는 중간 타사 에이전트를 통한 업스트림 연결을 지원하며,
매개변수는 다음과 같습니다. --jumper, 모든 형식은 다음과 같습니다.
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는 일반 http 및 sock5 프록시를 나타냅니다.
Https,socks5s는 tls로 보호되는 http 및 sock5 에이전트를 나타냅니다.
이는 TLS를 통한 http 프록시이고 TLS를 통한 양말입니다.
양말/http(s)/sps 프록시는 도메인 이름 블랙리스트 및 화이트리스트를 지원합니다.
--stop 매개변수를 사용하여 도메인 이름 블랙리스트 파일을 지정하면 사용자가 파일에서 해당 도메인을 연결할 때 연결이 끊어집니다.
--only 매개변수로 도메인 이름 화이트리스트 파일을 지정하면 사용자가 파일에 있는 도메인이 아닌 다른 도메인에 연결할 때 연결이 끊어집니다.
--stop과 --only가 모두 설정된 경우 --only만 작동합니다.
흑백 도메인 이름 목록 파일의 형식은 다음과 같습니다.
**.baidu.com
*.taobao.com
A.com
192.168.1.1
192.168.*.*
?.qq.com
설명:
*
및 ?
를 지원합니다. *
임의 개수의 문자를 나타내고, ?
임의의 문자를 나타냅니다. 2. **.baidu.com
모든 접미사가 ..baidu.com`인 레벨 수에 관계없이 일치합니다.
3. *.taobao.com
일치하는 접미사는 .taobao.com
의 3차 도메인 이름입니다.
5. #
주석 시작 부분에.
양말/http(s)/sps 프록시는 모두 포트 블랙리스트를 지원합니다.
--stop-port
매개변수를 사용하여 포트 블랙리스트 파일을 지정하면 사용자가 파일에 있는 포트에 연결할 때 연결이 이루어질 수 있습니다.
포트 블랙리스트 파일 내용 형식은 다음과 같습니다.
3306
22
메모:
#
으로 시작하는 것은 주석입니다.양말/http(s)/sps/tcp/udp/dns/ 인트라넷 침투 브리지/인트라넷 침투 tbridge, 클라이언트 IP 블랙 및 화이트 목록 지원.
--ip-deny 매개변수를 사용하여 클라이언트 IP 블랙리스트 목록 파일을 지정하면 사용자의 IP가 이 파일에 있으면 연결이 끊어집니다.
--ip-allow 매개변수를 사용하여 클라이언트 IP 화이트리스트 파일을 지정하면 사용자의 IP가 파일에 없으면 연결이 끊어집니다.
--ip-deny와 --ip-allow가 모두 설정된 경우 --ip-allow만 작동합니다.
클라이언트 IP 블랙리스트 및 화이트리스트 파일의 형식은 다음과 같습니다.
192.168.1.1
192.168.*.*
192.168.1?.*
설명:
*
및 ?
를 지원하며, *
임의 개수의 문자를 나타내고, ?
임의의 문자를 나타냅니다. 2. 주석 시작 부분에 #
.
프록시의 다양한 프록시 기능에는 파일을 설정하는 위치가 많이 있습니다. 예: --blocked 상위 수준으로 직접 이동하는 도메인 이름 목록 파일을 지정합니다. 매개변수 값은 파일의 경로입니다.
매개변수가 프로토콜 로딩 파일을 지원하는 경우 파일 경로는 파일 경로일 뿐만 아니라 다음도 될 수 있습니다.
a. "base64://" 시작 부분의 base64 인코딩은 위 파일의 내용을 나타냅니다(예: base64://ajfpoajsdfa=).
b. 영어 쉼표 시작 부분의 "str://"는 여러 개로 구분됩니다(예: str://xxx, yyy).
프록시의 차단, 직접, 중지, 전용, 호스트, 해결.rules, rewriter.rules, ip.allow, ip.deny 파일은 프로토콜 로딩을 지원합니다.
양말5spshttp 프록시, 동시 클라이언트 연결 수를 제어하는 매개변수는 --max-conns-rate
이며 초당 최대 클라이언트 연결 수를 제어합니다. 기본값: 20, 0은 무제한입니다.
"tcp / http / sock / sps"는 다중 포트 및 범위 포트 수신을 지원합니다. 일반적인 상황에서는 하나의 포트에서 수신하면 충분하지만 여러 포트에서 수신해야 하는 경우 -p 매개변수가 지원됩니다. -p 0.0.0.0:80,0.0.0.0:443,.0.0.0.0:8000-9000,:5000-6000
, more 바인딩은 다음과 같습니다. 쉼표로 구분하세요.
proxy http -t tcp -p "0.0.0.0:38080"
수신 포트 인수 -p
는 다음과 같습니다.
-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
업스트림 HTTP 프록시가 22.22.22.22:8080
이라고 가정하고 로컬 포트 8090을 사용합니다.
proxy http -t tcp -p "0.0.0.0:8090" -T tcp -P "22.22.22.22:8080"
웹사이트 도메인 이름의 블랙 및 화이트 목록 파일을 한 줄에 하나씩 지정할 수 있습니다. 일치 규칙은 가장 오른쪽 일치입니다. 예: baidu.com, 일치는 .baidu.com, 블랙리스트 도메인 이름입니다 . 업스트림 에이전트로 직접 이동, 화이트리스트 도메인 이름은 업스트림 에이전트로 이동하지 않습니다.
proxy http -p "0.0.0.0:8090" -T tcp -P "22.22.22.22:8080" -b blocked.txt -d direct.txt
참고: 보조 프록시에서 사용하는
proxy.crt
및proxy.key
기본 프록시와 일치해야 합니다.
레벨 1 HTTP 프록시(VPS, IP: 22.22.22.22)
proxy http -t tls -p ":38080" -C proxy.crt -K proxy.key
보조 HTTP 프록시(로컬 Linux)
proxy http -t tcp -p ":8080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key
그런 다음 로컬 포트 8080에 액세스하면 VPS의 프록시 포트 38080에 액세스할 수 있습니다.
보조 HTTP 프록시(로컬 창)
proxy.exe http -t tcp -p ":8080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key
그런 다음 Windows 시스템을 설정하세요. 프록시 인터넷 프로그램을 통과해야 하는 프록시는 http 모드이고, 주소는 127.0.0.1, 포트는 8080이며, 프로그램은 암호화된 채널을 통해 vps를 통해 인터넷에 액세스할 수 있습니다.
레벨 1 HTTP 프록시 VPS_01, IP: 22.22.22.22
proxy http -t tls -p ":38080" -C proxy.crt -K proxy.key
보조 HTTP 프록시 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
레벨 3 HTTP 프록시(로컬)
proxy http -t tcp -p ":8080" -T tls -P "33.33.33.33:28080" -C proxy.crt -K proxy.key
그런 다음 로컬 포트 8080에 액세스하는 것은 기본 HTTP 프록시의 프록시 포트 38080에 액세스하는 것입니다.
프록시 HTTP 프로토콜의 경우 기본 인증을 수행할 수 있으며 인증된 사용자 이름과 비밀번호는 명령줄에서 지정할 수 있습니다.
proxy http -t tcp -p ":33080" -a "user1:pass1" -a "user2:pass2"
여러 사용자의 경우 -a 매개변수를 반복하십시오.
또한 "사용자 이름:비밀번호" 형식으로 파일에 배치한 다음 -F로 지정할 수도 있습니다.
proxy http -t tcp -p ":33080" -F auth-file.txt
또한 http(s) 프록시는 외부 HTTP API 인증도 통합하며 --auth-url 매개변수를 사용하여 http url 인터페이스 주소를 지정할 수 있습니다.
그런 다음 사용자 연결이 있으면 프록시는 GET 모드에서 URL을 요청하고 다음 4개의 매개변수를 가져옵니다. HTTP 상태 코드 204가 반환되면 인증이 성공한 것입니다.
다른 경우에는 인증이 실패했습니다.
예를 들어:
proxy http -t tcp -p ":33080" --auth-url "http://test.com/auth.php"
사용자가 연결하면 프록시는 GET 모드에서 URL("http://test.com/auth.php")을 요청합니다.
user, pass, ip, local_ip, target의 5개 매개변수를 사용합니다.
Http://test.com/auth.php?user={USER}&pass={PASS}&ip={IP}&local_ip={LOCAL_IP}&target={TARGET}
사용자: 사용자 이름
패스: 비밀번호
IP: 사용자의 IP(예: 192.168.1.200)
Local_ip: 사용자가 접속한 서버의 IP, 예: 3.3.3.3
대상: 사용자가 액세스한 URL(예: http://demo.com:80/1.html 또는 https://www.baidu.com:80)
-a, -F 또는 --auth-url 매개변수가 없으면 기본 인증이 꺼집니다.
기본적으로 프록시는 웹 사이트 도메인 이름에 액세스할 수 없는지 여부를 지능적으로 결정합니다. 액세스할 수 없는 경우 --always를 사용하면 모든 HTTP 프록시 트래픽이 상위 HTTP로 이동하도록 강제할 수 있습니다. 대리.
proxy http --always -t tls -p ":28080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key
설명: SSH 전송의 원칙은 SSH의 전달 기능을 사용하는 것입니다. 즉, SSH에 연결한 후 SSH 프록시를 통해 대상 주소에 액세스할 수 있습니다.
다음이 있다고 가정합니다: vps
로컬 HTTP(S) 프록시 포트 28080, 실행:
proxy http -T ssh -P "2.2.2.2:22" -u user -D demo -t tcp -p ":28080"
로컬 HTTP(S) 프록시 포트 28080, 실행:
proxy http -T ssh -P "2.2.2.2:22" -u user -S user.key -t tcp -p ":28080"
KCP 프로토콜에는 데이터 암호화 및 해독을 위한 비밀번호를 설정하기 위해 --kcp-key 매개변수가 필요합니다.
레벨 1 HTTP 프록시(VPS, IP: 22.22.22.22)
proxy http -t kcp -p ":38080" --kcp-key mypassword
보조 HTTP 프록시(로컬 Linux)
proxy http -t tcp -p ":8080" -T kcp -P "22.22.22.22:38080" --kcp-key mypassword
그런 다음 로컬 포트 8080에 액세스하는 것은 VPS의 프록시 포트 38080에 액세스하는 것입니다. 데이터는 kcp 프로토콜을 통해 전송됩니다. kcp는 udp 프로토콜이므로 방화벽은 380p udp 프로토콜을 해제해야 합니다.
프록시는 다른 소프트웨어의 프록시 설정을 지원할 뿐만 아니라 다른 소프트웨어에 대한 프록시 서비스도 제공합니다. 또한 요청된 웹사이트 도메인 이름을 프록시 수신 IP로 직접 구문 분석한 다음 프록시가 80 및 443 포트를 수신하는 것을 지원합니다. 프록시는 액세스해야 하는 HTTP(S) 웹 사이트에 대한 액세스를 자동으로 프록시합니다.
사용 방법:
"마지막 수준 프록시 프록시" 시스템에서는 프록시가 모든 웹사이트로 위장되므로 웹사이트의 기본 HTTP 포트는 80이고 HTTPS는 443이며 프록시는 포트 80 및 443을 수신할 수 있습니다. 쉼표로 구분된 주소입니다.
proxy http -t tcp -p :80,:443
이 명령은 머신에서 프록시 에이전트를 시작하고 동시에 포트 80과 443을 수신합니다. 이는 일반 프록시로 사용되거나 이 머신의 IP로 프록시되어야 하는 도메인 이름을 직접 확인할 수 있습니다.
업스트림 에이전트가 있는 경우 위 튜토리얼을 참조하여 업스트림을 설정하면 사용법은 완전히 동일합니다.
proxy http -t tcp -p :80,:443 -T tls -P "2.2.2.2:33080" -C proxy.crt -K proxy.key
메모:
프록시가 위치한 서버의 DNS 확인 결과는 사용자 지정 확인의 영향을 받을 수 없습니다. 그렇지 않으면 프록시 프록시는 --dns-address 8.8.8.8
매개변수를 지정해야 합니다.
이 모드는 특정 네트워크 기반이 필요합니다. 관련 개념이 이해되지 않으면 직접 검색해 보세요.
이제 프록시가 라우터에서 실행되고 있다고 가정하면 시작 명령은 다음과 같습니다.
proxy http -t tcp -p :33080 -T tls -P "2.2.2.2:33090" -C proxy.crt -K proxy.key
그런 다음 iptables 규칙을 추가합니다. 참조 규칙은 다음과 같습니다.
# 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
--dns-address 및 --dns-ttl 매개변수는 프록시가 도메인 이름에 액세스하는 데 사용하는 DNS(--dns-address)를 지정하는 데 사용됩니다.
분석 결과 캐시 시간(--dns-ttl) 초는 프록시에 대한 시스템 DNS 간섭을 방지하고 캐시 기능 외에도 DNS 확인 시간을 줄여 액세스 속도를 향상시킬 수 있습니다.
예를 들어:
proxy http -p ":33080" --dns-address "8.8.8.8:53" --dns-ttl 300
--dns-address
쉼표로 구분된 여러 DNS 주소, 로드 밸런싱을 지원합니다. 예: --dns-address "1.1.1.1:53,8.8.8.8:53"
--dns-interface
매개변수를 사용하여 DNS 확인에 사용되는 대역폭을 지정할 수도 있습니다. 예: --dns-interface eth0
, dns 확인은 eth0 대역폭을 사용합니다. 이 매개변수는 --dns-address
로 설정되어야 합니다. 효과적이다.
프록시의 http(s) 프록시는 tls 및 kcp 이후의 사용자 정의를 지원할 뿐만 아니라 tcp 위에 tls 표준 암호화 및 kcp 프로토콜을 통해 tcp 데이터를 암호화할 수 있습니다.
암호화, 즉 사용자 정의 암호화와 tls|kcp를 조합하여 사용할 수 있습니다. AES256 암호화의 내부 사용은 사용할 때 비밀번호만 정의하면 됩니다.
암호화는 두 부분으로 나뉘는데, 하나는 로컬(-z) 암호화 및 복호화 여부이고, 다른 하나는 업스트림(-Z)과의 전송이 암호화되거나 복호화되는지 여부입니다.
사용자 정의 암호화에는 양쪽 끝이 프록시가 되어야 합니다. 다음 두 가지 수준과 세 가지 수준이 예로 사용됩니다.
보조 인스턴스
레벨 1 vps에서 실행(ip: 2.2.2.2):
proxy http -t tcp -z demo_password -p :7777
로컬 보조 실행:
proxy http -T tcp -P 2.2.2.2:777 -Z demo_password -t tcp -p :8080
이와 같이 로컬 에이전트(8080)를 통해 해당 웹사이트에 접속하게 되면, 업스트림과의 암호화된 전송을 통해 타겟 웹사이트에 접속하게 된다.
3레벨 인스턴스
레벨 1 vps에서 실행(ip: 2.2.2.2):
proxy http -t tcp -z demo_password -p :7777
보조 vps(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
로컬 3단계 실행:
proxy http -T tcp -P 3.3.3.3:8888 -Z other_password -t tcp -p :8080
이와 같이 로컬 에이전트(8080)를 통해 해당 웹사이트에 접속하게 되면, 업스트림과의 암호화된 전송을 통해 타겟 웹사이트에 접속하게 된다.
프록시 http(s) 프록시는 tls 표준 암호화 및 tcp 위에 kcp 프로토콜을 통해 tcp 데이터를 암호화할 수 있으며 사용자 정의 암호화 전에 데이터를 압축할 수도 있습니다.
즉, 압축과 사용자 정의 암호화 및 tls|kcp를 조합하여 사용할 수 있습니다. 압축은 두 부분으로 나뉘며, 한 부분은 로컬(-m) 압축 전송입니다.
그 중 일부는 업스트림(-M) 전송으로 압축됩니다.
압축을 위해서는 양쪽이 프록시가 되어야 합니다. 또한 압축은 (암호화된) 데이터를 어느 정도 보호합니다. 다음에서는 수준 2와 수준 3을 예로 사용합니다.
보조 인스턴스
레벨 1 vps에서 실행(ip: 2.2.2.2):
proxy http -t tcp -m -p :7777
로컬 보조 실행:
proxy http -T tcp -P 2.2.2.2:777 -M -t tcp -p :8080
이와 같이 로컬 에이전트(8080)를 통해 해당 웹사이트에 접속하게 되면, 업스트림과의 압축을 통해 타겟 웹사이트에 접속하게 된다.
3레벨 인스턴스
레벨 1 vps에서 실행(ip: 2.2.2.2):
proxy http -t tcp -m -p :7777
보조 vps(ip: 3.3.3.3)에서 실행:
proxy http -T tcp -P 2.2.2.2:7777 -M -t tcp -m -p :8888
로컬 3단계 실행:
proxy http -T tcp -P 3.3.3.3:8888 -M -t tcp -p :8080
이와 같이 로컬 에이전트(8080)를 통해 해당 웹사이트에 접속하게 되면, 업스트림과의 압축을 통해 타겟 웹사이트에 접속하게 된다.
HTTP(S) 프록시는 상위 수준 로드 밸런싱을 지원하며 여러 업스트림 반복 P 매개변수를 사용할 수 있습니다.
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
속도 제한은 100K이며 -l
매개변수로 지정할 수 있습니다. 예를 들어 100K 2000K 1M 은 제한이 없음을 의미합니다.
proxy http -t tcp -p 2.2.2.2:33080 -l 100K
--bind-listen
매개변수를 사용하면 포털 IP로 클라이언트 연결을 열고 포털 IP를 발신 IP로 사용하여 대상 웹사이트에 접속할 수 있습니다. 이 경우 프록시가 작동하지 않습니다. 그러면 프록시는 IP를 바인딩하지 않고 대상을 바인딩하려고 시도하고 로그에 메시지가 표시됩니다.
proxy http -t tcp -p 2.2.2.2:33080 --bind-listen
위의 --bind-listen
매개 변수는 나가는 IP를 지정할 수 있지만 entry IP
와 outgoing IP
인위적으로 참조할 수는 없습니다. 수신 IP와 송신 IP를 다르게 하려면 --bind-ip
사용할 수 있습니다. 매개변수, 형식: IP:port
, 예: 1.1.1.1:8080
, [2000:0:0:0:0 :0:0:1]:8080
다중 바인딩 요구사항의 경우 --bind-ip
매개변수는 반복될 수 있습니다.
예를 들어, 이 머신에는 IP 5.5.5.5
, 6.6.6.6
있고 두 개의 포트 8888
및 7777
을 모니터링하는 경우 명령은 다음과 같습니다.
Proxy tcp -t tcp -p :8888,:7777 --bind-ip 5.5.5.5:7777 --bind-ip 6.6.6.6:8888 -T tcp -P 2.2.2.2:3322
그런 다음 클라이언트 액세스 포트 7777
, 나가는 IP는 5.5.5.5
, 액세스 포트 8888
, 나가는 IP는 6.6.6.6
입니다. --bind-ip
와 --bind- are set at the same time listen
, --bind-ip
우선순위가 더 높습니다. 또한 --bind-ip
매개변수의 IP
부분은 network interface name
, wildcards
지정을 지원하며 둘 이상이 가능합니다. 상세한 설명은 다음과 같습니다.
--bind-ip eth0:7777
과 같이 네트워크 인터페이스 이름을 지정하면 클라이언트가 7777
포트에 액세스하고 송신 IP는 eth0 네트워크 인터페이스의 IP가 됩니다.--bind-ip eth0.*:7777
그러면 클라이언트가 포트 7777
에 액세스하고 송신 IP는 eth0.
--bind-ip 192.168.?.*:777
과 같은 와일드카드를 지원합니다. 그런 다음 클라이언트는 7777
포트에 액세스하고 나가는 IP는 시스템의 모든 IP이며 192.168.?.*
의 IP와 일치합니다. 무작위로 선택된 것.-bind-ip pppoe??,192.168.?.*:7777
과 같이 절반 너비를 사용하는 여러 선택적 구분이 있을 수도 있으며 그런 다음 클라이언트가 7777
포트에 액세스합니다. 나가는 IP는 pppoe??
와 일치하는 시스템의 네트워크 인터페이스 이름입니다. 시스템 IP의 192.168.?.*
와 일치하는 IP에서 무작위로 선택됩니다.*
는 임의의 문자에 대해 0을 나타내고, ?
1개의 문자를 나타냅니다.--bind-refresh
매개변수를 사용하여 로컬 네트워크 인터페이스 정보를 새로 고치는 간격을 지정할 수 있습니다. 기본값은 5
이고 단위는 초입니다.기본적으로 -C, -K 매개변수는 crt 인증서 및 키 파일의 경로입니다.
base64://의 시작 부분인 경우 후자의 데이터는 base64로 인코딩된 것으로 간주되어 디코딩 후에 사용됩니다.
지능형 모드 설정은 지능형|직접|상위 중 하나일 수 있습니다.
기본값은 부모입니다.
각 값의 의미는 다음과 같습니다.
--intelligent=direct
, 차단된 대상은 직접 연결되지 않습니다.
--intelligent=parent
, 직접 존재하지 않는 대상은 상위 레벨로 이동합니다.
--intelligent=intelligent
,blocked 및 direct에는 대상이 없으며 업스트림 액세스 대상을 사용할지 여부를 지능적으로 결정합니다.
proxy help http
로컬 실행:
proxy tcp -p ":33080" -T tcp -P "192.168.22.33:22"
그런 다음 로컬 포트 33080에 액세스하면 192.168.22.33의 포트 22에 액세스합니다.
-p
매개변수는 다음을 지원합니다.
-p ":8081" listen on 8081
-p ":8081,:8082" listen on 8081 and 8082
-p ":8081,:8082,:9000-9999" listen on 8081 and 8082 and 9000, 9001 to 9999 for a total of 1002 ports
로컬 청취 포트의 수가 1보다 크면 로컬 포트에 해당하는 상위 포트가 연결되고 -P
에 있는 포트는 무시됩니다.
모든 포트에서 연결이 필요한 경우 지정된 상위 포트에 연결하고 --lock-port
매개변수를 추가할 수 있습니다.
와 같은:
proxy tcp -p ":33080-33085" -T tcp -P "192.168.22.33:0"
33080
포트의 연결은 192.168.22.33의 33080
포트에 -P
0
다른 포트는 동일합니다.
33080
, 33081
등의 포트를 192.168.22.33의 22
포트에 연결하려면 매개 변수 인 --lock-port
추가 할 수 있습니다.
proxy tcp -p ":33080-33085" -T tcp -P "192.168.22.33:22" --lock-port
VPS (IP : 22.22.2.33)가 실행됩니다.
proxy tcp -p ":33080" -T tcp -P "127.0.0.1:8080"
지역 실행 :
proxy tcp -p ":23080" -T tcp -P "22.22.22.33:33080"
그런 다음 로컬 포트 23080에 액세스하는 것은 22.22.22.33의 포트 8020에 액세스하는 것입니다.
1 차 TCP 프록시 VPS_01, IP : 22.22.22.22
proxy tcp -p ":38080" -T tcp -P "66.66.66.66:8080"
보조 TCP 프록시 VPS_02, IP : 33.33.33.33
proxy tcp -p ":28080" -T tcp -P "22.22.22.22:38080"
레벨 3 TCP 프록시 (로컬)
proxy tcp -p ":8080" -T tcp -P "33.33.33.33:28080"
그런 다음 로컬 포트 8080에 액세스하는 것은 암호화 된 TCP 터널을 통해 66.66.66.66의 포트 8080에 액세스하는 것입니다.
VPS (IP : 22.22.2.33)가 실행됩니다.
proxy tcp -t tls -p ":33080" -T tcp -P "127.0.0.1:8080" -C proxy.crt -K proxy.key
지역 실행 :
proxy tcp -p ":23080" -T tls -P "22.22.22.33:33080" -C proxy.crt -K proxy.key
그런 다음 로컬 포트 23080 액세스는 암호화 된 TCP 터널을 통해 22.22.22.33의 포트 8080에 액세스하는 것입니다.
1 차 TCP 프록시 VPS_01, IP : 22.22.22.22
proxy tcp -t tls -p ":38080" -T tcp -P "66.66.66.66:8080" -C proxy.crt -K proxy.key
보조 TCP 프록시 VPS_02, IP : 33.33.33.33
proxy tcp -t tls -p ":28080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key
레벨 3 TCP 프록시 (로컬)
proxy tcp -p ":8080" -T tls -P "33.33.33.33:28080" -C proxy.crt -K proxy.key
그런 다음 로컬 포트 8080에 액세스하는 것은 암호화 된 TCP 터널을 통해 66.66.66.66의 포트 8080에 액세스하는 것입니다.
때때로 프록시가있는 네트워크는 외부 네트워크에 직접 액세스 할 수 없습니다
-j 매개 변수는 프록시 TCP 포트를 매핑 할 때 HTTPS 또는 SOCKS5 프록시를 통해 프록시를 피어 -P에 연결하여 외부 포트를 로컬에 매핑하는 데 도움이 될 수 있습니다.
-j 매개 변수 형식은 다음과 같습니다.
HTTPS 프록시 쓰기 :
프록시에는 인증이 필요합니다. 사용자 이름 : 사용자 이름 비밀번호 : 비밀번호
https : // username : password@host : port
에이전트는 인증이 필요하지 않습니다
https : // 호스트 : 포트
Socks5 프록시 쓰기 :
프록시에는 인증이 필요합니다. 사용자 이름 : 사용자 이름 비밀번호 : 비밀번호
SOODS5 : // username : password@host : port
에이전트는 인증이 필요하지 않습니다
양말 5 : // 호스트 : 포트
호스트 : 프록시의 IP 또는 도메인 이름
포트 : 프록시 포트
TCP 프록시가 우수한 유형 (파라미터 : -t)이 TCP이면 --bind-listen
매개 변수를 사용하여 지정된 나가는 IP를 지원합니다. 대상 웹 사이트에 액세스하기위한 나가는 IP가 잘못되면 프록시가 작동하지 않으면 프록시는 IP를 바인딩하지 않고 대상을 바인딩하려고합니다.
proxy tcp -p ":33080" -T tcp -P" 192.168.22.33:22" -B
위의 --bind-listen
매개 변수는 나가는 IP를 지정할 수 있지만, entry IP
와 outgoing IP
IP는 Egress IP와 다르기를 원한다면 --bind-ip
사용할 수 있습니다. 매개 변수, 형식 : IP:port
: 예 : 1.1.1.1:8080
, [2000:0:0:0:0:0:0:1]:8080
--bind-ip
매개 변수 식별을 반복 할 수 있습니다.
예를 들어,이 기계는 IP 5.5.5.5
, 6.6.6.6
가지고 있으며 두 포트 8888
및 7777
모니터링하면 다음과 같습니다.
Proxy tcp -t tcp -p :8888,:7777 --bind-ip 5.5.5.5:7777 --bind-ip 6.6.6.6:8888 -T tcp -P 2.2.2.2:3322
그런 다음 클라이언트 액세스 포트 7777
, 나가는 --bind-ip
--bind-ip
5.5.5.5
, --bind- are set at the same time listen
포트 8888
, 나가는 IP는 6.6.6.6
입니다. --bind-ip
의 우선 순위가 높습니다.
또한 --bind-ip
매개 변수의 IP
부분은 network interface name
, wildcards
지정하는 지원을 지원합니다.
--bind-ip eth0:7777
, 클라이언트는 7777
포트에 액세스하고 egress IP는 ETH0 네트워크 인터페이스의 IP입니다.--bind-ip eth0.*:7777
, 클라이언트는 7777
포트에 액세스하고 EGRESS IP는 무작위로 선택된 네트워크 인터페이스 IP 중 하나입니다 eth0.
7777
는 다음과 같은 와일드 카드를 지원합니다. --bind-ip 192.168.?.*:7777
192.168.?.*
무작위로 선택된 것.7777
--bind-ip pppoe??,192.168.?.*:7777
IP는 pppoe??
192.168.?.*
일치하는 기계의 네트워크 인터페이스 이름입니다.*
여러 문자를 나타내고 1자를 ?
냅니다.--bind-refresh
매개 변수를 사용하여 로컬 네트워크 인터페이스 정보를 새로 고치는 간격을 지정할 수 있습니다. 기본값은 5
, 장치는 두 번째입니다.--max-conns
포트 당 최대 연결 수를 제한 할 수 있습니다. 포트 당 최대 연결 수를 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" --max-conns 1000
--rate-limit
proxy tcp -p ":33080" -T tcp -P "192.168.22.33:22" --rate-limit 100k
TCP 연결 속도를 제한 할 수 있습니다. proxy tcp -p ":33080" -T tcp -P "192.168.22.33:22" --rate-limit 100k
--ip-rate
제한 각 클라이언트 IP proxy tcp -p ":33080" -T tcp -P "192.168.22.33:22" --ip-rate 1M
총 속도는 각 클라이언트의 총 IP 속도를 1m/s로 제한합니다. proxy tcp -p ":33080" -T tcp -P "192.168.22.33:22" --ip-rate 1M
proxy tcp -p ":33080" -T tcp -P "192.168.22.33:22" --port-rate 10M
--port-rate
포트의 총 속도는 각 포트의 총 속도를 10m/s로 제한합니다. proxy tcp -p ":33080" -T tcp -P "192.168.22.33:22" --port-rate 10M
--rate-limit
및 ( --ip-rate
또는 --port-rate
)는 총 속도를 제한하고 단일 TCP의 속도를 제한 할 수 있습니다. --c
로컬 및 클라이언트 간의 전송 여부를 제어합니다. 기본값 --C
로컬 및 업스트림 사이의 전송을 압축할지 여부를 제어합니다.
예:
VPS (IP : 22.22.22.33) 구현 : proxy tcp -t tcp --c -p ":33080" -T tcp -P "127.0.0.1:8080"
로컬 실행 : proxy tcp -t tcp -p ":23080" -T tcp -P "22.22.22.33:33080" --C
proxy help tcp
지역 실행 :
proxy udp -p ":5353" -T udp -P "8.8.8.8:53"
그런 다음 로컬 UDP에 액세스하십시오 : 5353 포트는 8.8.8.8 UDP : 53 포트에 액세스하는 것입니다.
-p
매개 변수는 다음을 지원합니다.
-p ":8081" listen on 8081
-p ":8081,:8082" listen on 8081 and 8082
-p ":8081,:8082,:9000-9999" listen on 8081 and 8082 and 9000, 9001 to 9999 for a total of 1002 ports
로컬 청취 포트의 수가 1보다 큰 경우 로컬 포트에 해당하는 상단 포트가 연결되고 -P
의 포트는 무시됩니다.
모든 포트에서 연결 해야하는 경우 지정된 상단 포트에 연결하면 매개 변수 --lock-port
를 추가 할 수 있습니다.
와 같은:
proxy udp -p ":33080-33085" -T udp -P "192.168.22.33:0"
그러면 33080
포트의 연결은 0
의 33080
포트에 연결 -P
다른 포트는이 시점에서 동일합니다.
33080
, 33081
등의 포트를 192.168.22.33의 2222
포트에 연결하려면 매개 변수 인 --lock-port
추가 할 수 있습니다.
proxy udp -p ":33080-33085" -T udp -P "192.168.22.33:2222" --lock-port
VPS (IP : 22.22.2.33)가 실행됩니다.
proxy tcp -p ":33080" -T udp -P "8.8.8.8:53"
지역 실행 :
proxy udp -p ":5353" -T tcp -P "22.22.22.33:33080"
그런 다음 로컬 UDP : 5353 포트에 액세스하십시오. 포트는 VPS Access 8.8.8.8 UDP : 53 포트를 통해 TCP 터널을 통과합니다.
1 차 TCP 프록시 VPS_01, IP : 22.22.22.22
proxy tcp -p ":38080" -T udp -P "8.8.8.8:53"
보조 TCP 프록시 VPS_02, IP : 33.33.33.33
proxy tcp -p ":28080" -T tcp -P "22.22.22.22:38080"
레벨 3 TCP 프록시 (로컬)
proxy udp -p ":5353" -T tcp -P "33.33.33.33:28080"
그런 다음 로컬 5353 포트에 대한 액세스는 TCP 터널을 통해 VPS를 통해 포트 8.8.8.8에 액세스합니다.
VPS (IP : 22.22.2.33)가 실행됩니다.
proxy tcp -t tls -p ":33080" -T udp -P "8.8.8.8:53" -C proxy.crt -K proxy.key
지역 실행 :
proxy udp -p ":5353" -T tls -P "22.22.22.33:33080" -C proxy.crt -K proxy.key
그런 다음 로컬 UDP : 5353 포트에 액세스하십시오. 포트는 VPS 액세스 8.8.8.8 UDP : 53 포트를 통해 암호화 된 TCP 터널을 통해 이루어집니다.
1 차 TCP 프록시 VPS_01, IP : 22.22.22.22
proxy tcp -t tls -p ":38080" -T udp -P "8.8.8.8:53" -C proxy.crt -K proxy.key
보조 TCP 프록시 VPS_02, IP : 33.33.33.33
proxy tcp -t tls -p ":28080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key
레벨 3 TCP 프록시 (로컬)
proxy udp -p ":5353" -T tls -P "33.33.33.33:28080" -C proxy.crt -K proxy.key
그런 다음 로컬 5353 포트에 액세스하십시오. 암호화 된 TCP 터널을 통해 8.8.8.8 포트 53에서 VPS_01을 통해 액세스하십시오.
UDP 업스트림 프록시 (Parameter : -t)가 UDP 인 경우 --bind-listen
변수를 사용하여 지정된 나가는 IP를 지원할 수 있습니다. 대상에 액세스하려면 IP가 잘못된 IP가 바인딩되면 프록시가 작동하지 않습니다.
proxy udp -p ":33080" -T udp -P "192.168.22.33:2222" -B
proxy help udp
인트라넷 침투는 "멀티 링크 버전"과 "멀티플렉스 버전"의 두 가지 버전으로 나뉘어져 있으며, 일반적으로 웹 서비스와 마찬가지로이 서비스는 장기 연결이 아니므로 "멀티 링크 버전"을 사용하는 것이 좋습니다. 시간 연결은 "멀티플렉스 버전"을 사용하는 것을 제안하는 것입니다.
다음 튜토리얼은 "멀티플렉스 버전"을 사용하여 사용 방법을 설명합니다.
인트라넷 침투는 세 부분으로 구성됩니다 : 클라이언트, 서버 및 브리지 및 서버는 브리징을 위해 적극적으로 연결합니다.
배경:
수요:
집에서는 VPS의 포트 28080에 액세스하여 회사 기계 A의 포트 80에 액세스 할 수 있습니다.
단계:
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
완벽한
배경:
수요:
WeChat 개발 계정의 웹 페이지 콜백 인터페이스 구성에서 주소를 작성하십시오 : http://22.22.22.22/calback.php
그런 다음 도메인 이름을 바인딩 해야하는 경우 80 포트에서 Calback.php에 액세스 할 수 있습니다.
예를 들면 : wx-dev.xxx.com은 22.22.22.22로 해결 된 다음 자신의 노트북 Nginx로 해결됩니다.
도메인 이름 wx-dev.xxx.com을 특정 디렉토리로 구성하십시오.
단계:
VPS의 포트 80이 다른 프로그램에 의해 점유되지 않도록 VPS에서 실행하십시오.
proxy bridge -p ":33080" -C proxy.crt -K proxy.key
proxy server -r ":80@:80" -P "22.22.22.22:33080" -C proxy.crt -K proxy.key
노트북에서 실행하십시오
proxy client -P "22.22.22.22:33080" -C proxy.crt -K proxy.key
완벽한
배경:
수요:
집에서는 회사 기계 A를 사용하여 로컬 DNS를 22.22.22.22로 설정하여 도메인 이름 해상 서비스를 수행 할 수 있습니다.
단계:
VPS에서 실행하십시오
proxy bridge -p ":33080" -C proxy.crt -K proxy.key
proxy server --udp -r ":53@:53" -P "127.0.0.1:33080" -C proxy.crt -K proxy.key
proxy client -P "22.22.22.22:33080" -C proxy.crt -K proxy.key
완벽한
배경:
수요:
안전하기 위해 VPS의 회사 기계 A에 액세스하고 싶지 않으며 집에서 기계의 포트 28080에 액세스 할 수 있습니다.
암호화 된 터널을 통해 회사 기계 A의 포트 80에 대한 액세스.
단계:
VPS에서 실행하십시오
proxy bridge -p ":33080" -C proxy.crt -K proxy.key
회사 기계에서 실행하십시오
proxy client -P "22.22.22.22:33080" -C proxy.crt -K proxy.key
가정용 컴퓨터에서 실행하십시오
proxy server -r ":28080@:80" -P "22.22.22.22:33080" -C proxy.crt -K proxy.key
완벽한
팁:
여러 클라이언트가 동시에 동일한 브리지에 연결된 경우 -K 매개 변수로 설정할 수있는 다른 키를 지정해야하며 -k는 고유 한 문자열이 될 수 있습니다.
같은 다리에서 유일한 사람이 되십시오.
서버가 브리지에 연결된 경우 동시에 동일한 브리지에 연결하는 여러 클라이언트가있는 경우 -K 매개 변수를 사용하여 클라이언트를 선택해야합니다.
-r 매개 변수를 반복하여 여러 포트를 노출시킵니다.
배경:
수요:
집에서는 VPS의 포트 28080에 액세스하여 회사 기계 A의 포트 80에 액세스 할 수 있습니다.
집에서는 VPS의 포트 29090에 액세스하여 21 포트의 회사 기계 A에 액세스 할 수 있습니다.
단계:
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
완벽한
-r의 전체 형식은 PROTOCOL://LOCAL_IP:LOCAL_PORT@[CLIENT_KEY]CLIENT_LOCAL_HOST:CLIENT_LOCAL_PORT
입니다
4.7.1. 프로토콜 : TCP 또는 UDP.
예 : -r "udp://:10053@:53" -r "tcp://:10800@:1080" -r ":8080@:80"
--udp 매개 변수가 지정되면, 프로토콜 기본값은 UDP로 기본적으로 다음과 같이합니다. -r ":8080@:80"
기본값은 UDP로;
-udp 매개 변수가 지정되지 않은 경우 프로토콜 기본값은 TCP에 대한 기본값을 다음과 같습니다. -r ":8080@:80"
기본값은 TCP에 기본값을;
4.7.2. client_key : 기본값은 기본값입니다.
예 : -r "udp : // : 10053@[test1] : 53"-r "tcp : // : 10800@[test2] : 1080"-r ": 8080@: 80"
-k 매개 변수가 -k 테스트와 같이 지정된 경우 : -r ":8080@:80"
client_key 기본값 테스트;
-K 매개 변수가 지정되지 않은 경우 : -r ":8080@:80"
client_key 기본값으로 기본값;
4.7.3. local_ip은 비어 있습니다. 0.0.0.0
, client_local_host는 127.0.0.1
과 같습니다.
때로는 서버 또는 클라이언트가있는 네트워크가 외부 네트워크에 직접 액세스 할 수 없습니다
-j 매개 변수를 사용하면 서버 또는 클라이언트를 HTTPS 또는 SOCKS5를 통해 브리지에 연결하는 데 도움이 될 수 있습니다.
-j 매개 변수 형식은 다음과 같습니다.
HTTPS 프록시 쓰기 :
프록시에는 인증이 필요합니다. 사용자 이름 : 사용자 이름 비밀번호 : 비밀번호
https : // username : password@host : port
에이전트는 인증이 필요하지 않습니다
https : // 호스트 : 포트
Socks5 프록시 쓰기 :
프록시에는 인증이 필요합니다. 사용자 이름 : 사용자 이름 비밀번호 : 비밀번호
SOODS5 : // username : password@host : port
에이전트는 인증이 필요하지 않습니다
양말 5 : // 호스트 : 포트
호스트 : 프록시의 IP 또는 도메인 이름
포트 : 프록시 포트
일반적으로 HTTP 요청 클라이언트는 서버의 IP 및 포트를 사용하여 호스트 필드를 설정하지만 예상되는 백엔드 실제 호스트와 동일하지 않으므로 TCP가 전달되지만 백엔드는 호스트 필드에 의존하여 가상 호스트는 이제 --http-host
매개 변수를 사용하여 HTTP 헤더 --http-host
호스트 필드 값을 백엔드의 실제 값으로 강제합니다. --http-host
매개 변수, 각 HTTP 요청의 헤더에 두 개의 헤더가 추가됩니다. X-Forwarded-For
및 X-Real-IP
값은 클라이언트 IP이므로 백엔드 HTTP 서비스는 클라이언트의 실제 IP 주소를 쉽게 얻을 수 있습니다.
server
-http -host 매개 변수의 형식은 다음과 같습니다.
--http-host www.test.com:80@2200
, 서버가 여러 포트에 리스팅되면 --http-host
매개 변수를 반복하여 각 포트의 호스트를 설정하십시오.
예:
예를 들어, 클라이언트 로컬 NGINX, 127.0.0.1:80은 local.com
으로 도메인 이름에 바인딩되는 웹 서비스를 제공합니다.
그런 다음 서버 시작 매개 변수는 다음과 같습니다.
proxy server -P :30000 -r :[email protected]:80 --http-host local.com@2500
설명:
-r :[email protected]:80
및 --http-host local.com:80@2500
2500 포트는 서버가 로컬로 듣는 포트입니다.
HTTP 프로토콜을 사용하여 IP : 2500 서버 포트를 요청하면 HTTP의 헤더 호스트 필드가 local.com
으로 설정됩니다.
서버 도킹 피어를 별도로 시작하면 프록시-아드먼트 제어판이됩니다.
그런 다음 서버를 시작하고 매개 변수 (server-id = 매핑 규칙의 ID를 추가하여 트래픽을 계산하십시오.
인트라넷 침투 지원 서버 및 클라이언트 네트워크 조건이 충족되면 서버와 클라이언트는 P2P를 통해 직접 연결됩니다.
브리지, 서버, 클라이언트를 시작할 때 --p2p
매개 변수를 추가하여 포트의 P2P (PTCP 및 PUDP)를 활성화 할 수 있습니다.
서버와 클라이언트 사이에 P2P 구멍이 실패하면 브리지 전송 데이터가 자동으로 전환됩니다.
인트라넷 침투 브리지는 클라이언트 키 화이트리스트를 설정할 수 있습니다.
a. 파일 이름, 파일 콘텐츠 클라이언트 키에는 클라이언트 시작 매개 변수의 값 인 클라이언트 키는 #로 시작하는 줄에 연결할 수 있습니다.
b. "base64 : //"의 시작 부분에서 인코딩은 위의 A에 설명 된 파일의 내용입니다. 예 : base64 : // ajfpoajsdfa =
c. "str : //"처음에 쉼표로 분리 된 여러 키워드 : str : // 회사, 학교
기본값이 비어있어 모든 키가 허용됩니다.
Senat 유형 판단, 네트워크가 P2P를 지원하는지 여부를 쉽게 확인할 수 있습니다. 실행할 수 있습니다 : proxy tools -a nattype
proxy help bridge
proxy help server
proxy help client
즉각적인:
SOCKS5 프록시, Connect, UDP 프로토콜, BIND를 지원하지 않으며 사용자 이름 및 비밀번호 인증을 지원합니다.
*** Socks5의 UDP 기능은 기본적으로 꺼져 있으며 --udp
는 핸드 셰이크를위한 임의의 포트입니다 --udp-port 0
, 0
은 자유 포트가 무작위로 선택되거나 특정 포트를 수동으로 지정할 수 있습니다.
proxy socks -t tcp -p "0.0.0.0:38080"
포트 인수 듣기 -p
는 다음과 같습니다.
-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
업스트림 Socks5 프록시가 22.22.22.22:8080
이라고 가정하면 로컬 포트 8090 사용
proxy socks -t tcp -p "0.0.0.0:8090" -T tcp -P "22.22.22.22:8080"
또한 웹 사이트 도메인 이름의 흑백 목록 파일, 하나의 도메인 이름 및 하나의 도메인 이름을 지정할 수 있습니다. 예를 들어 일치하는 규칙은 Baidu.com, The Match Is, Blacklist 입니다 도메인 이름 도메인 이름은 업스트림 에이전트로 직접 이동합니다. 화이트 목록의 도메인 이름은 도메인 이름이 블랙리스트에 있고 화이트리스트에있는 경우 블랙리스트가 작동합니다.
proxy socks -p "0.0.0.0:8090" -T tcp -P "22.22.22.22:8080" -b blocked.txt -d direct.txt
레벨 1 양말 프록시 (VPS, IP : 22.22.22.22)
proxy socks -t tls -p ":38080" -C proxy.crt -K proxy.key
보조 양말 프록시 (로컬 리눅스)
proxy socks -t tcp -p ":8080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key
그런 다음 로컬 포트 8080 액세스는 VPS의 프록시 포트 38080에 액세스하는 것입니다.
보조 양말 프록시 (로컬 창)
proxy.exe socks -t tcp -p ":8080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key
그런 다음 프록시 인터넷 프로그램을 거쳐야하는 프록시 인 Windos 시스템을 설정합니다. 주소는 다음과 같습니다. 127.0.0.1, 포트는 8080, 프로그램은 암호화 된 채널을 통해 VPS를 통해 인터넷에 액세스 할 수 있습니다.
레벨 1 양말 프록시 VPS_01, IP : 22.22.22.22
proxy socks -t tls -p ":38080" -C proxy.crt -K proxy.key
보조 양말 프록시 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
레벨 3 양말 프록시 (로컬)
proxy socks -t tcp -p ":8080" -T tls -P "33.33.33.33:28080" -C proxy.crt -K proxy.key
그런 다음 로컬 포트 8080에 액세스하는 것은 첫 번째 레벨 양말 프록시의 프록시 포트 38080에 액세스하는 것입니다.
기본적으로 프록시는 웹 사이트 도메인 이름이 액세스 할 수 없는지 지능적으로 결정합니다. .
proxy socks --always -t tls -p ":28080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key
설명 : SSH 전송의 원칙은 SSH의 전달 함수를 사용하는 것입니다. 즉 SSH에 연결 한 후 SSH 프록시를 통해 대상 주소에 액세스 할 수 있습니다.
VPS가 있다고 가정합니다
로컬 양말 프록시 포트 28080, 실행 :
proxy socks -T ssh -P "2.2.2.2:22" -u user -D demo -t tcp -p ":28080"
로컬 양말 프록시 포트 28080, 실행 :
proxy socks -T ssh -P "2.2.2.2:22" -u user -S user.key -t tcp -p ":28080"
그런 다음 로컬 포트 28080 액세스는 VPS를 통해 대상 주소에 액세스하는 것입니다.
Socks5 프록시 프로토콜의 경우 사용자 이름 및 비밀번호 인증을 수행 할 수 있습니다.
proxy socks -t tcp -p ":33080" -a "user1:pass1" -a "user2:pass2"
여러 사용자의 경우 -a 매개 변수를 반복하십시오.
또한 "사용자 이름 : 비밀번호"형식의 파일에 배치 한 다음 -f로 지정할 수도 있습니다.
proxy socks -t tcp -p ":33080" -F auth-file.txt
또한 SOODS5 에이전트는 외부 HTTP API 인증을 통합합니다.
그런 다음 사용자 연결이 있으면 프록시는 HTTP 상태 코드 204가 반환되면 GET 모드에서 URL을 요청합니다.
다른 경우 인증이 실패했습니다.
예를 들어:
proxy socks -t tcp -p ":33080" --auth-url "http://test.com/auth.php"
사용자가 연결하면 프록시는 get 모드에서 URL ( "http://test.com/auth.php")을 요청합니다.
사용자, Pass, IP, Local_ip : 4 가지 매개 변수를 가져옵니다.
http://test.com/auth.php?user= (user }&pass= {pass }&ip= {ip }&local_ip= {local_ip}
사용자 : 사용자 이름
패스 : 비밀번호
IP : 사용자의 IP (예 : 192.168.1.200)
local_ip : 사용자가 액세스 한 서버의 IP (예 : 3.3.3.3)
-a 또는 -f 또는 -auth -url 매개 변수가 없으면 인증이 꺼집니다.
KCP 프로토콜에는 -KCP-Key 매개 변수가 데이터를 암호화 및 해독하기위한 비밀번호를 설정해야합니다.
레벨 1 HTTP 프록시 (VPS, IP : 22.22.22.22)
proxy socks -t kcp -p ":38080" --kcp-key mypassword
보조 HTTP 프록시 (로컬 리눅스)
proxy socks -t tcp -p ":8080" -T kcp -P "22.22.22.22:38080" --kcp-key mypassword
그런 다음 로컬 포트 8080에 액세스하는 것은 VPS의 프록시 포트 38080에 액세스하는 것입니다. 데이터는 KCP 프로토콜을 통해 전송됩니다.
-dns-address 및--dns-ttl 매개 변수는 프록시에서 도메인 이름에 액세스하기 위해 사용하는 DNS (--dns-address)를 지정하는 데 사용됩니다.
그리고 캐시 함수 외에도 시스템 DNS 간섭을 피하기 위해 분석 결과 캐시 시간 (--dns-ttl) 초의 분석 결과는 액세스 속도를 향상시키기 위해 DNS 해상도 시간을 줄일 수 있습니다.
예를 들어:
proxy socks -p ":33080" --dns-address "8.8.8.8:53" --dns-ttl 300
매개 변수 --dns-interface
사용하여 dns 해상도에 대한 대역폭 사용을 지정할 수 있습니다. --dns-interface eth0
, dns 해상도는 ETH0 대역폭을 사용합니다.이 매개 변수는 --dns-address
로 설정되어야합니다. 효과적인.
프록시의 양말 프록시는 TLS 표준 암호화와 KCP 프로토콜을 통해 TCP 데이터를 암호화 할 수 있습니다 AES256 암호화를 사용하면 암호를 사용할 때만 정의하면됩니다.
암호화는 두 부분으로 나뉩니다. 하나는 로컬 (-z) 암호화 및 암호 해독 여부이며, 다른 하나는 상류와의 전송이 암호화되거나 해독 될 때입니다.
맞춤 암호화는 양쪽을 프록시해야합니다.
예를 들어 다음 두 레벨, 세 레벨 :
보조 인스턴스
레벨 1 VPS에서 실행 (IP : 2.2.2.2) :
proxy socks -t tcp -z demo_password -p :7777
로컬 보조 실행 :
proxy socks -T tcp -P 2.2.2.2:777 -Z demo_password -t tcp -p :8080
이러한 방식으로 웹 사이트에 로컬 에이전트 8080을 통해 액세스 할 때 대상 웹 사이트는 업스트림과의 전송을 통해 액세스됩니다.
3 단계 인스턴스
레벨 1 VPS에서 실행 (IP : 2.2.2.2) :
proxy socks -t tcp -z demo_password -p :7777
보조 VPS에서 실행 (IP : 3.3.3.3) :
proxy socks -T tcp -P 2.2.2.2:7777 -Z demo_password -t tcp -z other_password -p :8888
로컬 3 단계 실행 :
proxy socks -T tcp -P 3.3.3.3:8888 -Z other_password -t tcp -p :8080
이러한 방식으로 웹 사이트에 로컬 에이전트 8080을 통해 액세스 할 때 대상 웹 사이트는 업스트림과의 전송을 통해 액세스됩니다.
프록시의 양말 프록시는 TCP를 통해 TCP 데이터 암호화 및 KCP 프로토콜을 암호화 할 수 있습니다.
데이터를 압축합니다. 즉, 압축 함수와 사용자 정의 암호화 및 TLS |
그것의 일부는 로컬 (-m) 압축 전송이며, 일부는 상류 (-m)와의 전송이 압축 인 경우입니다.
압축은 양쪽 모두 프록시가되어야하며 압축은 또한 데이터를 어느 정도 보호 (암호화)를 보호합니다.
예를 들어 다음 두 레벨, 세 레벨 :
보조 인스턴스
레벨 1 VPS에서 실행 (IP : 2.2.2.2) :
proxy socks -t tcp -m -p :7777
로컬 보조 실행 :
proxy socks -T tcp -P 2.2.2.2:777 -M -t tcp -p :8080
이러한 방식으로 웹 사이트에 액세스 할 때 대상 웹 사이트는 업스트림과의 압축을 통해 액세스됩니다.
3 단계 인스턴스
레벨 1 VPS에서 실행 (IP : 2.2.2.2) :
proxy socks -t tcp -m -p :7777
보조 VPS에서 실행 (IP : 3.3.3.3) :
proxy socks -T tcp -P 2.2.2.2:7777 -M -t tcp -m -p :8888
로컬 3 단계 실행 :
proxy socks -T tcp -P 3.3.3.3:8888 -M -t tcp -p :8080
이러한 방식으로 웹 사이트에 액세스 할 때 대상 웹 사이트는 업스트림과의 압축을 통해 액세스됩니다.
양말 프록시는 상위 레벨로드 밸런싱을 지원하며 여러 상류 반복 P 매개 변수를 사용할 수 있습니다.
proxy socks --lb-method=hash -T tcp -P 1.1.1.1:33080 -P 2.1.1.1:33080 -P 3.1.1.1:33080 -p :33080 -t tcp
proxy socks --lb-method=leastconn --lb-retrytime 300 --lb-timeout 300 -T tcp -P 1.1.1.1:33080 -P 2.1.1.1:33080 -P 3.1.1.1:33080 -p :33080 -t tcp
proxy socks --lb-method=weight -T tcp -P 1.1.1.1:33080?w=1 -P 2.1.1.1:33080?w=2 -P 3.1.1.1:33080?w=1 -p :33080 -t tcp
proxy socks --lb-hashtarget --lb-method=hash -T tcp -P 1.1.1.1:33080 -P 2.1.1.1:33080 -P 3.1.1.1:33080 -p :33080 -t tcp
Speard 한계는 100K이며 -l
매개 변수로 지정할 수 있습니다.
proxy socks -t tcp -p 2.2.2.2:33080 -l 100K
--bind-listen
매개 변수는 포털 IP와 클라이언트 연결을 열 수 있으며 Portal IP를 대상 웹 사이트로 사용하면 Egress IP가 Ingress IP를 사용하지 않습니다.
proxy socks -t tcp -p 2.2.2.2:33080 --bind-listen
위의 --bind-listen
매개 변수는 나가는 IP를 지정할 수 있지만, entry IP
IP는 outgoing IP
IP와 다르기를 원한다면 --bind-ip
매개 변수를 사용할 수 있습니다. 형식 : IP:port
: 예 : 1.1.1.1:8080
, [2000:0:0:0:0:0:0:1]:8080
다중 바인딩 요구 사항의 경우 가능합니다. --bind-ip
매개 변수를 반복하십시오.
예를 들어, 기계에는 IP 5.5.5.5
, 6.6.6.6
있으며 두 포트 8888
및 7777
모니터링하면 다음과 같습니다.
proxy socks -t tcp -p :8888,:7777 --bind-ip 5.5.5.5:7777 --bind-ip 6.6.6.6:8888
클라이언트 액세스 포트 7777
, 나가는 --bind-ip
는 5.5.5.5
, 액세스 포트 8888
, 나가는 --bind-ip
--bind- are set at the same time listen
6.6.6.6
입니다.
또한 --bind-ip
매개 변수의 IP
부분은 network interface name
, wildcards
및 하나 이상의 하나 이상을 지정하는 지원을 지원합니다.
--bind-ip eth0:7777
, 클라이언트는 7777
포트에 액세스하고 egress IP는 ETH0 네트워크 인터넷 에이스의 IP입니다.--bind-ip eth0.*:7777
) 클라이언트는 7777
포트에 eth0.
으로 시작하는 네트워크 인터페이스 IP 중 하나에 액세스합니다.--bind-ip 192.168.?.*:7777
. ip는 7777
포트에 액세스하고 나가는 IP는 192.168.?.*
의 IP와 일치합니까?--bind-ip pppoe??,192.168.?.*:7777
PPPOE는 포트 7777
에 액세스합니까 pppoe??
그것은 192.168.?.*
과 일치하는 기계의 모든 IP 중 무작위로 선택된 것입니다.*.*
는 여러 캐릭터에게 0을 억제 ?
1자를 억제합니다.--bind-refresh
매개 변수를 사용하여 로컬 네트워크 인터페이스 정보 간격을 지정할 수 있습니다. 기본값은 5
, 장치는 두 번째입니다.SOODS5는 계단식 인증을 지원하며 -a는 업스트림 인증 정보를 설정할 수 있습니다.
상류 :
proxy socks -t tcp -p 2.2.2.2:33080 -a user:pass
현지의:
proxy socks -T tcp -P 2.2.2.2:33080 -A user:pass -t tcp -p :33080
기본적으로 -c, -k 매개 변수는 CRT 인증서 및 키 파일의 경로입니다.
그것이 base64 : //의 시작 인 경우, 후자의 데이터는 Base64 인코딩으로 간주되며 디코딩 후 사용됩니다.
지능형 모드 설정은 지적 |.
기본값은 다음과 같습니다.
각 값의 의미는 다음과 같습니다.
--intelligent=direct
, 블록의 대상은 직접 연결되지 않습니다.
--intelligent=parent
, 직접에 있지 않은 대상은 더 높은 수준으로 이동합니다.
--intelligent=intelligent
, 블록 및 직접 대상이 없으며 상류 액세스 대상을 사용할지 지능적으로 결정합니다.
기본적으로, SOCKS5의 UDP 함수의 포트 번호, 프록시는 rfc1982 draft
요청 L 핸드 셰이크 프로세스에 설치되며 미리 특별 할 필요가 없습니다.
그러나 경우에 따라 --udp-port port number
기능을 수정해야합니다.
proxy socks -t tcp -p "0.0.0.0:38080" --udp-port 38080
기본적으로 프록시에서 SOODS5 프록시의 UDP 기능은 SOCKS5 RFC 1928 SPICICITION과 함께 UCCORDANCE에서 작동합니다 --udp-compat
또한, -udp-gc
매개 변수는이 시간 임계 값을 초과 할 때 최대 유휴 타일 타일 UDP를 설정하는 데 사용될 수 있습니다.
proxy help socks
프록시 프로토콜 변환은 SPS 자체가 프록시 기능을 제공하지 않습니다 기존 HTTP 프록시 또는 SOOKS5 프록시 또는 SS 프록시를 HTTP (S) 및 Socks5 및 SS 프록시를 모두 지원하는 포트로 변환하고 HTTP (S) 프록시가 전진 프록시 및 리버스 프록시를 지원합니다. (SNI), 변환 된 Socks5 프록시, UDP 기능은 기존 HTTP (S) 프록시 또는 SOOKS5 프록시, TLS, TCP 및 KCP의 3 가지 모드에 대해 여전히 지원됩니다. 체인 연결이 지원됩니다. 즉, 여러 SPS 노드 레벨이 지원 될 수 있습니다.
ss
함수에 의해 지원되는 암호화 방법은 AES-128-CFB, AES-128-CTR, AES-128-GCM, AES-192-CFB, AES-192-GCM, AES-256-CFB, AES-256입니다. CTR, AES-256-GCM, BF-CFB, Cast5-CFB, Chacha20, Chacha20-eietf, Chacha20-eietf-poly1305, des-cfb, rc4-md5, rc4-md5-6, salsa20, xchacha200
포트 인수 듣기 -p
는 다음과 같습니다.
-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
SS의 UDP 기능은 기본적으로 꺼져 있으며 --ssudp
--udp
의해 켜질 수 있습니다. PARAMETER --udp-port 0
0
의해 설정된 포트를 고정하여 개선되면 자유 포트가 무작위로 선택되거나 사양 포트를 수동으로 지정할 수 있습니다.
지원은 일반적인 HTTP (S) 프록시입니다.
명령은 다음과 같습니다.
proxy sps -S http -T tcp -P 127.0.0.1:8080 -t tcp -p :18080 -h aes-192-cfb -j pass
이미 TLS HTTP (S) 프록시가 있다고 가정합니다. 파일., SS 암호화 : AES-192-CFB, SS 비밀번호 : PASS.
명령은 다음과 같습니다.
proxy sps -S http -T tls -P 127.0.0.1:8080 -t tcp -p :18080 -C proxy.crt -K proxy.key -h aes-192-cfb -j pass
이미 KCP HTTP (S) 프록시 (비밀번호 IS : DEMO123) : 127.0.0.1:8080이 있다고 가정 해 봅시다 , SS 암호화 : AES-192-CFB, SS 비밀번호 : 패스.
명령은 다음과 같습니다.
proxy sps -S http -T kcp -P 127.0.0.1:8080 -t tcp -p :18080 --kcp-key demo123 -h aes-192-cfb -j pass
이미 정상적인 Socks5 프록시가 있다고 가정 해 봅시다. , SS 비밀번호 : 통과.
명령은 다음과 같습니다.
proxy sps -S socks -T tcp -P 127.0.0.1:8080 -t tcp -p :18080 -h aes-192-cfb -j pass
이미 TLS Socks5 프록시가 있다고 가정 해 봅시다. : AES-192-CFB, SS 비밀번호 : 패스.
명령은 다음과 같습니다.
proxy sps -S socks -T tls -P 127.0.0.1:8080 -t tcp -p :18080 -C proxy.crt -K proxy.key -h aes-192-cfb -j pass
이미 KCP Socks5 프록시 (비밀번호 : Demo123)가 있다고 가정 해 봅시다 : AES-192-CFB, SS 비밀번호 : 패스.
명령은 다음과 같습니다.
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 업스트림 및 로컬 지원 SS 프로토콜, 업스트림은 SPS 또는 표준 SS 서비스 일 수 있습니다.
SPS는 로컬로 HTTP를 제공합니다. socks5 sps 업스트림이 Socks5 인 경우 변환 된 SOODS5 및 SS는 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
수행하다.
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 |
---|---|---|---|
예/아니요 | 예 | 예 | From parent-auth |
예/아니요 | 아니요 | 예 | From parent-auth |
예/아니요 | 예 | 아니요 | 아니요 |
아니요 | 아니요 | 아니요 | 아니요 |
예 | 아니요 | 아니요 | 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.
와 같은:
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.
예를 들어:
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 use for dns resolution, for exmple: --dns-interface eth0
, dns resolution will use the eth0 bandwidth, this parameter must be set to --dns-address
to be 효과적인.
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!
팁:
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:
팁:
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
또는
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 chapta LS, Multiple Upstreams , The Description of the -P
Parameter .
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 활성화되었습니다.
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
.
소개하다:
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:
Example explanation:
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
Command explanation:
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.
알아채다:
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.