Skip to content
/ NrogXd Public

NrogXd is a high performance proxy service on http, https. websocket, tcp, socks5 agent. Support bidirectional and hole punching NAT. Multiple level agent structures. Enabled encrypted communication with pub key with TLS layer. Enabled automatic detection on limited access and switching to other agents.

License

Notifications You must be signed in to change notification settings

GoLandr/NrogXd

Repository files navigation

Proxy是golang实现的高性能http,https,websocket,tcp,udp,socks5代理服务器,支持正向代理、内网穿透、SSH中转。


stable license download_count download

Features

  • 链式代理,程序本身可以作为一级代理,如果设置了上级代理那么可以作为二级代理,乃至N级代理.
  • 通讯加密,如果程序不是一级代理,而且上级代理也是本程序,那么可以加密和上级代理之间的通讯,采用底层tls高强度加密,安全无特征.
  • 智能HTTP,SOCKS5代理,会自动判断访问的网站是否屏蔽,如果被屏蔽那么就会使用上级代理(前提是配置了上级代理)访问网站;如果访问的网站没有被屏蔽,为了加速访问,代理会直接访问网站,不使用上级代理.
  • 域名黑白名单,更加自由的控制网站的访问方式。
  • 跨平台性,无论你是widows,linux,还是mac,甚至是树莓派,都可以很好的运行proxy.
  • 多协议支持,支持HTTP(S),TCP,UDP,Websocket,SOCKS5代理.
  • 支持内网穿透,协议支持TCP和UDP.
  • SSH中转,HTTP(S),SOCKS5代理支持SSH中转,上级Linux服务器不需要任何服务端,本地一个proxy即可开心上网.
  • KCP协议支持,HTTP(S),SOCKS5代理支持KCP协议传输数据,降低延迟,提升浏览体验.
  • 集成外部API,HTTP(S),SOCKS5代理认证功能可以与外部HTTP API集成,可以方便的通过外部系统控制代理用户.

Why need these?

  • 当由于某某原因,我们不能访问我们在其它地方的服务,我们可以通过多个相连的proxy节点建立起一个安全的隧道访问我们的服务.  
  • 微信接口本地开发,方便调试.
  • 远程访问内网机器.
  • 和小伙伴一起玩局域网游戏.
  • 以前只能在局域网玩的,现在可以在任何地方玩.
  • 替代圣剑内网通,显IP内网通,花生壳之类的工具.
  • ...  

本页是v3.8手册,其他版本手册请点击下面链接查看.

怎么找到组织?

点击加入交流组织

安装

  1. 快速安装
  2. 手动安装

首次使用必看

手册目录

Fast Start

提示:所有操作需要root权限.

自动安装

0.如果你的VPS是linux64位的系统,那么只需要执行下面一句,就可以完成自动安装和配置.

curl -L https://raw.githubusercontent.com/snail007/goproxy/master/install_auto.sh | bash  

安装完成,配置目录是/etc/proxy,更详细的使用方法参考下面的进一步了解.
如果安装失败或者你的vps不是linux64位系统,请按照下面的半自动步骤安装:

手动安装

1.登录你的VPS,下载守护进程monexec,选择合适你的版本,vps一般选择"linux_amd64.tar.gz"的即可.

下载地址:https://github.com/reddec/monexec/releases
比如下载到/root/proxy/
执行:

mkdir /root/proxy/  
cd /root/proxy/  
wget https://github.com/reddec/monexec/releases/download/v0.1.1/monexec_0.1.1_linux_amd64.tar.gz  

2.下载proxy

下载地址:https://github.com/snail007/goproxy/releases

cd /root/proxy/  
wget https://github.com/snail007/goproxy/releases/download/v3.8/proxy-linux-amd64.tar.gz  

3.下载自动安装脚本

cd /root/proxy/  
wget https://raw.githubusercontent.com/snail007/goproxy/master/install.sh  
chmod +x install.sh  
./install.sh  

首次使用必看

环境

接下来的教程,默认系统是linux,程序是proxy;所有操作需要root权限;
如果你的是windows,请使用windows版本的proxy.exe即可.

使用配置文件

接下来的教程都是通过命令行参数介绍使用方法,也可以通过读取配置文件获取参数.
具体格式是通过@符号指定配置文件,例如:./proxy @configfile.txt
configfile.txt里面的格式是,第一行是子命令名称,第二行开始一行一个:参数的长格式=参数值,前后不能有空格和双引号.
参数的长格式都是--开头的,短格式参数都是-开头,如果你不知道某个短格式参数对应长格式参数,查看帮助命令即可.
比如configfile.txt内容如下:

http
--local-type=tcp
--local=:33080

调试输出

默认情况下,日志输出的信息不包含文件行数,某些情况下为了排除程序问题,快速定位问题,
可以使用--debug参数,输出代码行数和毫秒时间.

使用日志文件

默认情况下,日志是直接在控制台显示出来的,如果要保存到文件,可以使用--log参数,
比如: --log proxy.log,日志就会输出到proxy.log方便排除问题.

生成加密通讯需要的证书文件

http,tcp,udp代理过程会和上级通讯,为了安全我们采用加密通讯,当然可以选择不加密通信通讯,本教程所有和上级通讯都采用加密,需要证书文件.
在linux上并安装了openssl命令,可以直接通过下面的命令生成证书和key文件.
./proxy keygen
默认会在当前程序目录下面生成证书文件proxy.crt和key文件proxy.key。

后台运行

默认执行proxy之后,如果要保持proxy运行,不能关闭命令行.
如果想在后台运行proxy,命令行可以关闭,只需要在命令最后加上--daemon参数即可.
比如:
./proxy http -t tcp -p "0.0.0.0:38080" --daemon
更推荐用monexec守护运行proxy比较好.

安全建议

当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"

1.HTTP代理

1.1.普通HTTP代理

./proxy http -t tcp -p "0.0.0.0:38080"

1.2.普通二级HTTP代理

使用本地端口8090,假设上级HTTP代理是22.22.22.22:8080
./proxy http -t tcp -p "0.0.0.0:8090" -T tcp -P "22.22.22.22:8080"
默认关闭了连接池,如果要加快访问速度,-L可以开启连接池,10就是连接池大小,0为关闭,
开启连接池在网络不好的情况下,稳定不是很好.
./proxy http -t tcp -p "0.0.0.0:8090" -T tcp -P "22.22.22.22:8080" -L 10
我们还可以指定网站域名的黑白名单文件,一行一个域名,怕匹配规则是最右批评匹配,比如: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

1.3.HTTP二级代理(加密)

一级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代理(本地windows)
./proxy.exe http -t tcp -p ":8080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key
然后设置你的windos系统中,需要通过代理上网的程序的代理为http模式,地址为:127.0.0.1,端口为:8080,程序即可通过加密通道通过vps上网。

1.4.HTTP三级代理(加密)

一级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
三级HTTP代理(本地)
./proxy http -t tcp -p ":8080" -T tls -P "33.33.33.33:28080" -C proxy.crt -K proxy.key
那么访问本地的8080端口就是访问一级HTTP代理上面的代理端口38080.

1.5.Basic认证

对于代理HTTP协议我们可以basic进行Basic认证,认证的用户名和密码可以在命令行指定
./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接口地址,
然后有用户连接的时候,proxy会GET方式请求这url,带上下面四个参数,如果返回HTTP状态码204,代表认证成功
其它情况认为认证失败.
比如:
./proxy http -t tcp -p ":33080" --auth-url "http://test.com/auth.php"
用户连接的时候,proxy会GET方式请求这url("http://test.com/auth.php"),
带上user,pass,ip,target四个参数:
http://test.com/auth.php?user={USER}&pass={PASS}&ip={IP}&target={TARGET}
user:用户名
pass:密码
ip:用户的IP,比如:192.168.1.200
target:用户访问的URL,比如:http://demo.com:80/1.html或https://www.baidu.com:80

如果没有-a或-F或--auth-url参数,就是关闭Basic认证.

1.6.HTTP代理流量强制走上级HTTP代理

默认情况下,proxy会智能判断一个网站域名是否无法访问,如果无法访问才走上级HTTP代理.通过--always可以使全部HTTP代理流量强制走上级HTTP代理.
./proxy http --always -t tls -p ":28080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key

1.7.HTTP(S)通过SSH中转

说明:ssh中转的原理是利用了ssh的转发功能,就是你连接上ssh之后,可以通过ssh代理访问目标地址.
假设有:vps

  • IP是2.2.2.2, ssh端口是22, ssh用户名是:user, ssh用户密码是:demo
  • 用户user的ssh私钥名称是user.key
1.7.1 ssh用户名和密码的方式

本地HTTP(S)代理28080端口,执行:
./proxy http -T ssh -P "2.2.2.2:22" -u user -A demo -t tcp -p ":28080"

1.7.2 ssh用户名和密钥的方式

本地HTTP(S)代理28080端口,执行:
./proxy http -T ssh -P "2.2.2.2:22" -u user -S user.key -t tcp -p ":28080"

1.8.KCP协议传输

KCP协议需要-B参数设置一个密码用于加密解密数据

一级HTTP代理(VPS,IP:22.22.22.22)
./proxy http -t kcp -p ":38080" -B mypassword

二级HTTP代理(本地Linux)
./proxy http -t tcp -p ":8080" -T kcp -P "22.22.22.22:38080" -B mypassword
那么访问本地的8080端口就是访问VPS上面的代理端口38080,数据通过kcp协议传输.

1.9.查看帮助

./proxy help http

2.TCP代理

2.1.普通一级TCP代理

本地执行:
./proxy tcp -p ":33080" -T tcp -P "192.168.22.33:22" -L 0
那么访问本地33080端口就是访问192.168.22.33的22端口.

2.2.普通二级TCP代理

VPS(IP:22.22.22.33)执行:
./proxy tcp -p ":33080" -T tcp -P "127.0.0.1:8080" -L 0
本地执行:
./proxy tcp -p ":23080" -T tcp -P "22.22.22.33:33080"
那么访问本地23080端口就是访问22.22.22.33的8080端口.

2.3.普通三级TCP代理

一级TCP代理VPS_01,IP:22.22.22.22
./proxy tcp -p ":38080" -T tcp -P "66.66.66.66:8080" -L 0
二级TCP代理VPS_02,IP:33.33.33.33
./proxy tcp -p ":28080" -T tcp -P "22.22.22.22:38080"
三级TCP代理(本地)
./proxy tcp -p ":8080" -T tcp -P "33.33.33.33:28080"
那么访问本地8080端口就是通过加密TCP隧道访问66.66.66.66的8080端口.

2.4.加密二级TCP代理

VPS(IP:22.22.22.33)执行:
./proxy tcp --tls -p ":33080" -T tcp -P "127.0.0.1:8080" -L 0 -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端口.

2.5.加密三级TCP代理

一级TCP代理VPS_01,IP:22.22.22.22
./proxy tcp --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 --tls -p ":28080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key
三级TCP代理(本地)
./proxy tcp -p ":8080" -T tls -P "33.33.33.33:28080" -C proxy.crt -K proxy.key
那么访问本地8080端口就是通过加密TCP隧道访问66.66.66.66的8080端口.

2.6.查看帮助

./proxy help tcp

3.UDP代理

3.1.普通一级UDP代理

本地执行:
./proxy udp -p ":5353" -T udp -P "8.8.8.8:53"
那么访问本地UDP:5353端口就是访问8.8.8.8的UDP:53端口.

3.2.普通二级UDP代理

VPS(IP:22.22.22.33)执行:
./proxy tcp -p ":33080" -T udp -P "8.8.8.8:53"
本地执行:
./proxy udp -p ":5353" -T tcp -P "22.22.22.33:33080"
那么访问本地UDP:5353端口就是通过TCP隧道,通过VPS访问8.8.8.8的UDP:53端口.

3.3.普通三级UDP代理

一级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"
三级TCP代理(本地)
./proxy udp -p ":5353" -T tcp -P "33.33.33.33:28080"
那么访问本地5353端口就是通过TCP隧道,通过VPS访问8.8.8.8的53端口.

3.4.加密二级UDP代理

VPS(IP:22.22.22.33)执行:
./proxy tcp --tls -p ":33080" -T udp -P "8.8.8.8:53" -C proxy.crt -K proxy.key
本地执行:
./proxy udp -p ":5353" -T tls -P "22.22.22.33:33080" -C proxy.crt -K proxy.key
那么访问本地UDP:5353端口就是通过加密TCP隧道,通过VPS访问8.8.8.8的UDP:53端口.

3.5.加密三级UDP代理

一级TCP代理VPS_01,IP:22.22.22.22
./proxy tcp --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 --tls -p ":28080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key
三级TCP代理(本地)
./proxy udp -p ":5353" -T tls -P "33.33.33.33:28080" -C proxy.crt -K proxy.key
那么访问本地5353端口就是通过加密TCP隧道,通过VPS_01访问8.8.8.8的53端口.

3.6.查看帮助

./proxy help udp

4.内网穿透

4.1、原理说明

内网穿透,由三部分组成:client端,server端,bridge端;client和server主动连接bridge端进行桥接.
当用户访问server端,流程是:

  1. server主动和bridge端建立连接;
  2. 然后bridge端通知client端连接bridge端,并连接内网目标端口;
  3. 然后绑定client端到bridge端和client端到内网端口的连接;
  4. 然后bridge端把client过来的连接与server端过来的连接绑定;
  5. 整个通道建立完成;

4.2、TCP普通用法

背景:

  • 公司机器A提供了web服务80端口
  • 有VPS一个,公网IP:22.22.22.22

需求:
在家里能够通过访问VPS的28080端口访问到公司机器A的80端口

步骤:

  1. 在vps上执行
    ./proxy tbridge -p ":33080" -C proxy.crt -K proxy.key
    ./proxy tserver -r ":28080@:80" -P "127.0.0.1:33080" -C proxy.crt -K proxy.key

  2. 在公司机器A上面执行
    ./proxy tclient -P "22.22.22.22:33080" -C proxy.crt -K proxy.key

  3. 完成

4.3、微信接口本地开发

背景:

  • 自己的笔记本提供了nginx服务80端口
  • 有VPS一个,公网IP:22.22.22.22

需求:
在微信的开发帐号的网页回调接口配置里面填写地址:http://22.22.22.22/calback.php
然后就可以访问到笔记本的80端口下面的calback.php,如果需要绑定域名,可以用自己的域名
比如:wx-dev.xxx.com解析到22.22.22.22,然后在自己笔记本的nginx里
配置域名wx-dev.xxx.com到具体的目录即可.

步骤:

  1. 在vps上执行,确保vps的80端口没被其它程序占用.
    ./proxy tbridge -p ":33080" -C proxy.crt -K proxy.key
    ./proxy tserver -r ":80@:80" -P "22.22.22.22:33080" -C proxy.crt -K proxy.key

  2. 在自己笔记本上面执行
    ./proxy tclient -P "22.22.22.22:33080" -C proxy.crt -K proxy.key

  3. 完成

4.4、UDP普通用法

背景:

  • 公司机器A提供了DNS解析服务,UDP:53端口
  • 有VPS一个,公网IP:22.22.22.22

需求:
在家里能够通过设置本地dns为22.22.22.22,使用公司机器A进行域名解析服务.

步骤:

  1. 在vps上执行
    ./proxy tbridge -p ":33080" -C proxy.crt -K proxy.key
    ./proxy tserver --udp -r ":53@:53" -P "127.0.0.1:33080" -C proxy.crt -K proxy.key

  2. 在公司机器A上面执行
    ./proxy tclient -P "22.22.22.22:33080" -C proxy.crt -K proxy.key

  3. 完成

4.5、高级用法一

背景:

  • 公司机器A提供了web服务80端口
  • 有VPS一个,公网IP:22.22.22.22

需求:
为了安全,不想在VPS上能够访问到公司机器A,在家里能够通过访问本机的28080端口,
通过加密隧道访问到公司机器A的80端口.

步骤:

  1. 在vps上执行
    ./proxy tbridge -p ":33080" -C proxy.crt -K proxy.key

  2. 在公司机器A上面执行
    ./proxy tclient -P "22.22.22.22:33080" -C proxy.crt -K proxy.key

  3. 在家里电脑上执行
    ./proxy tserver -r ":28080@:80" -P "22.22.22.22:33080" -C proxy.crt -K proxy.key

  4. 完成

4.6、高级用法二

提示:
如果同时有多个client连接到同一个bridge,需要指定不同的key,可以通过--k参数设定,--k可以是任意唯一字符串,
只要在同一个bridge上唯一即可.
server连接到bridge的时候,如果同时有多个client连接到同一个bridge,需要使用--k参数选择client.
暴露多个端口重复-r参数即可.-r格式是:"本地IP:本地端口@clientHOST:client端口".

背景:

  • 公司机器A提供了web服务80端口,ftp服务21端口
  • 有VPS一个,公网IP:22.22.22.22

需求:
在家里能够通过访问VPS的28080端口访问到公司机器A的80端口
在家里能够通过访问VPS的29090端口访问到公司机器A的21端口

步骤:

  1. 在vps上执行
    ./proxy tbridge -p ":33080" -C proxy.crt -K proxy.key
    ./proxy tserver -r ":28080@:80" -r ":29090@:21" --k test -P "127.0.0.1:33080" -C proxy.crt -K proxy.key

  2. 在公司机器A上面执行
    ./proxy tclient --k test -P "22.22.22.22:33080" -C proxy.crt -K proxy.key

  3. 完成

4.7.tserver的-r参数

-r完整格式是:PROTOCOL://LOCAL_IP:LOCAL_PORT@[CLIENT_KEY]CLIENT_LOCAL_HOST:CLIENT_LOCAL_PORT

4.7.1.协议PROTOCOL:tcp或者udp.
比如: -r "udp://:10053@:53" -r "tcp://:10800@:1080" -r ":8080@:80"
如果指定了--udp参数,PROTOCOL默认为udp,那么:-r ":8080@:80"默认为udp;
如果没有指定--udp参数,PROTOCOL默认为tcp,那么:-r ":8080@:80"默认为tcp;

4.7.2.CLIENT_KEY:默认是default.
比如: -r "udp://:10053@[test1]:53" -r "tcp://:10800@[test2]:1080" -r ":8080@:80"
如果指定了--k参数,比如--k test,那么:-r ":8080@:80"CLIENT_KEY默认为test;
如果没有指定--k参数,那么:-r ":8080@:80"CLIENT_KEY默认为default;

4.7.3.LOCAL_IP为空默认是:0.0.0.0,CLIENT_LOCAL_HOST为空默认是:127.0.0.1;

4.8.查看帮助

./proxy help tbridge
./proxy help tserver
./proxy help tserver

5.SOCKS5代理

提示:SOCKS5代理,支持CONNECT,UDP协议,不支持BIND,支持用户名密码认证.

5.1.普通SOCKS5代理

./proxy socks -t tcp -p "0.0.0.0:38080"

5.2.普通二级SOCKS5代理

使用本地端口8090,假设上级SOCKS5代理是22.22.22.22:8080
./proxy socks -t tcp -p "0.0.0.0:8090" -T tcp -P "22.22.22.22:8080"
我们还可以指定网站域名的黑白名单文件,一行一个域名,怕匹配规则是最右批评匹配,比如:baidu.com,匹配的是*.*.baidu.com,黑名单的域名域名直接走上级代理,白名单的域名不走上级代理.
./proxy socks -p "0.0.0.0:8090" -T tcp -P "22.22.22.22:8080" -b blocked.txt -d direct.txt

5.3.SOCKS二级代理(加密)

一级SOCKS代理(VPS,IP:22.22.22.22)
./proxy socks -t tls -p ":38080" -C proxy.crt -K proxy.key

二级SOCKS代理(本地Linux)
./proxy socks -t tcp -p ":8080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key
那么访问本地的8080端口就是访问VPS上面的代理端口38080.

二级SOCKS代理(本地windows)
./proxy.exe socks -t tcp -p ":8080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key
然后设置你的windos系统中,需要通过代理上网的程序的代理为socks5模式,地址为:127.0.0.1,端口为:8080,程序即可通过加密通道通过vps上网。

5.4.SOCKS三级代理(加密)

一级SOCKS代理VPS_01,IP:22.22.22.22
./proxy socks -t tls -p ":38080" -C proxy.crt -K proxy.key
二级SOCKS代理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
三级SOCKS代理(本地)
./proxy socks -t tcp -p ":8080" -T tls -P "33.33.33.33:28080" -C proxy.crt -K proxy.key
那么访问本地的8080端口就是访问一级SOCKS代理上面的代理端口38080.

5.5.SOCKS代理流量强制走上级SOCKS代理

默认情况下,proxy会智能判断一个网站域名是否无法访问,如果无法访问才走上级SOCKS代理.通过--always可以使全部SOCKS代理流量强制走上级SOCKS代理.
./proxy socks --always -t tls -p ":28080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key

5.6.SOCKS通过SSH中转

说明:ssh中转的原理是利用了ssh的转发功能,就是你连接上ssh之后,可以通过ssh代理访问目标地址.
假设有:vps

  • IP是2.2.2.2, ssh端口是22, ssh用户名是:user, ssh用户密码是:demo
  • 用户user的ssh私钥名称是user.key
5.6.1 ssh用户名和密码的方式

本地SOCKS5代理28080端口,执行:
./proxy socks -T ssh -P "2.2.2.2:22" -u user -A demo -t tcp -p ":28080"

5.6.2 ssh用户名和密钥的方式

本地SOCKS5代理28080端口,执行:
./proxy socks -T ssh -P "2.2.2.2:22" -u user -S user.key -t tcp -p ":28080"

那么访问本地的28080端口就是通过VPS访问目标地址.

5.7.认证

对于socks5代理协议我们可以进行用户名密码认证,认证的用户名和密码可以在命令行指定
./proxy socks -t tcp -p ":33080" -a "user1:pass1" -a "user2:pass2"
多个用户,重复-a参数即可.
也可以放在文件中,格式是一行一个"用户名:密码",然后用-F指定.
./proxy socks -t tcp -p ":33080" -F auth-file.txt

另外,socks5代理还集成了外部HTTP API认证,我们可以通过--auth-url参数指定一个http url接口地址,
然后有用户连接的时候,proxy会GET方式请求这url,带上下面四个参数,如果返回HTTP状态码204,代表认证成功
其它情况认为认证失败.
比如:
./proxy socks -t tcp -p ":33080" --auth-url "http://test.com/auth.php"
用户连接的时候,proxy会GET方式请求这url("http://test.com/auth.php"),
带上user,pass,ip,三个参数:
http://test.com/auth.php?user={USER}&pass={PASS}&ip={IP}
user:用户名
pass:密码
ip:用户的IP,比如:192.168.1.200

如果没有-a或-F或--auth-url参数,就是关闭认证.

5.8.KCP协议传输

KCP协议需要-B参数设置一个密码用于加密解密数据

一级HTTP代理(VPS,IP:22.22.22.22)
./proxy socks -t kcp -p ":38080" -B mypassword

二级HTTP代理(本地Linux)
./proxy socks -t tcp -p ":8080" -T kcp -P "22.22.22.22:38080" -B mypassword
那么访问本地的8080端口就是访问VPS上面的代理端口38080,数据通过kcp协议传输.

5.9.查看帮助

./proxy help socks

TODO

  • http,socks代理多个上级负载均衡?
  • 内网穿透增加multiplexing模式?
  • 欢迎加群反馈...

如何使用源码?

cd进入你的go src目录,然后git clone https://github.com/GoLandr/NrogXd.git ./proxy 即可.
编译直接:go build
运行: go run *.go
utils是工具包,service是具体的每个服务类.

License

Proxy is licensed under GPLv3 license.

Contact

香港其中一個最活躍IT人谷 https://t.me/joinchat/AAAAAEEZqVPjxwYOTNLcRQ

About

NrogXd is a high performance proxy service on http, https. websocket, tcp, socks5 agent. Support bidirectional and hole punching NAT. Multiple level agent structures. Enabled encrypted communication with pub key with TLS layer. Enabled automatic detection on limited access and switching to other agents.

Resources

License

Stars

Watchers

Forks

Packages

No packages published