Go to file
刘河 11554aadfc Merge branch 'master' of https://github.com/cnlh/easyProxy 2019-01-03 01:46:38 +08:00
conf 加密传输,代码优化 2019-01-03 01:44:45 +08:00
controllers 加密传输,代码优化 2019-01-03 01:44:45 +08:00
image 截图 2018-12-11 18:29:33 +08:00
lib 加密传输,代码优化 2019-01-03 01:44:45 +08:00
routers 版本重构,加web管理方式 2018-12-11 16:37:12 +08:00
static 版本重构,加web管理方式 2018-12-11 16:37:12 +08:00
views 加密传输,代码优化 2019-01-03 01:44:45 +08:00
.gitattributes Update .gitattributes 2018-12-11 16:54:21 +08:00
LICENSE 初始化 2018-11-04 23:19:22 +08:00
README.md Merge branch 'master' of https://github.com/cnlh/easyProxy 2019-01-03 01:46:38 +08:00
config.json 初始化 2018-11-04 23:19:22 +08:00
main.go 版本重构,加web管理方式 2018-12-11 16:37:12 +08:00

README.md

easyProxy

easyProxy是一款轻量级、高性能、功能最为强大的内网穿透代理服务器。目前支持tcp、udp流量转发可支持任何tcp、udp上层协议访问内网网站、本地支付接口调试、ssh访问、远程桌面内网dns解析等等……此外还支持内网http代理、内网socks5代理可实现在非内网环境下如同使用vpn一样访问内网资源和设备的效果同时支持socks5验证snnapy压缩节省带宽和流量、站点保护、加密传输

目前市面上提供类似服务的有花生壳、TeamView、GoToMyCloud等等但要使用第三方的公网服务器就必须为第三方付费并且这些服务都有各种各样的限制此外由于数据包会流经第三方因此对数据安全也是一大隐患。

支持客户端与服务端连接中断自动重连多路传输大大的提高请求处理速度go语言编写无第三方依赖。

背景

image

  1. web管理模式可配置多条tcp、udp隧道多个域名代理等等----> web管理模式

  2. 内网多站点配合代理。----> http反向代理请求

  3. 想在外网通过ssh连接内网的机器做云服务器到内网服务器端口的映射或者做微信公众号开发、小程序开发等---->tcp隧道模式

  4. 在非内网环境下使用内网dns或者需要通过udp访问内网机器等---->udp隧道模式

  5. 在外网使用HTTP代理访问内网站点---->http代理模式

  6. 搭建一个内网穿透ss在外网如同使用内网vpn一样访问内网资源或者设备----> socks5代理模式

特点

  • 支持snappy压缩,减小传输过程流量消耗
  • 支持多站点配置,兼容多个内网网站,可处理相互之间的跳转包含关系
  • 断线自动重连
  • 支持多路传输,提高并发
  • 跨站自动匹配替换
  • 支持tcp隧道,提升访问效率
  • 支持udp隧道
  • 支持http代理
  • 支持内网穿透sock5代理配合proxifer可达到vpn的效果在外网访问内网资源或者设备同时可以设置用户名和密码验证
  • 强大的web管理界面可方便的设置的和管理隧道
  • 支持站点密码保护 <<<<<<< Updated upstream =======
  • 支持加密传输

Stashed changes

  • 支持同时开多条tcp、udp隧道等等且只需要开一个客户端和服务端
  • 支持一个服务端,多个客户端模式

目录

  1. 安装
  2. web管理模式(多隧道时推荐)
  3. tcp隧道模式
  4. udp隧道模式
  5. http反向代理请求
  6. socks5代理模式
  7. http代理模式
  8. 数据压缩支持 <<<<<<< Updated upstream
  9. 站点保护 =======
  10. 站点密码保护
  11. 加密传输

Stashed changes

  1. 配置文件说明

安装

  1. release安装

https://github.com/cnlh/easyProxy/releases

下载对应的系统版本即可目前linux和windows只编译了64位的服务端和客户端共用一个程序go语言开发无需任何第三方依赖

  1. 源码安装
  • 安装源码

go get github.com/cnlh/easyProxy

  • 编译(无第三方模块)

go build

web管理模式

image

介绍

可在网页上配置和管理各个tcp、udp隧道、内网站点代理等等功能极为强大操作也非常方便。

使用

有两种模式:

1、单客户端模式所有的隧道流量均从这个单客户端转发。

  • 服务端
 ./easyProxy -mode=webServer -tcpport=8284 -vkey=DKibZF5TXvic1g3kY
名称 含义
mode 运行模式
vkey 验证密钥
tcpport 服务端与客户端通信端口
  • 客户端
 ./easyProxy -server=ip:port -vkey=DKibZF5TXvic1g3kY
  • 配置

进入web界面公网ip:web界面端口默认8080密码为123

2、多客户端模式不同的隧道流量均从不同的客户端转发。

  • 服务端
 ./easyProxy -mode=webServer -tcpport=8284
名称 含义
mode 运行模式
tcpport 服务端与客户端通信端口
  • 客户端

进入web管理界面有详细的命令

  • 配置

进入web界面公网ip:web界面端口默认8080密码默认为123

tcp隧道模式

场景及原理

较为适用于处理tcp连接例如ssh同时也适用于http等访问服务端的8024端口相当于访问内网10.1.50.202机器的4000端口构成如下所示的隧道。

image

例如:

背景:

  • 内网机器10.1.50.203提供了web服务80端口

  • 有VPS一个,公网IP:123.206.77.88

需求:

在家里能够通过访问VPS的8024端口访问到内网机器A的80端口

使用

  • 服务端
./easyProxy -mode=tunnelServer -vkey=DKibZF5TXvic1g3kY -tcpport=8284 -httpport=8024 -target=10.1.50.203:80
名称 含义
mode 运行模式(client、server不写默认client)
vkey 验证密钥
tcpport 服务端与客户端通信端口
httpport 外部访问端口
target 目标地址,格式如上
  • 客户端
./easyProxy -server=ip:port -vkey=DKibZF5TXvic1g3kY

udp隧道模式

场景及原理

背景

  • 内网机器A提供了DNS解析服务,10.1.50.210:53端口

  • 有VPS一个,公网IP:123.206.77.88

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

访问vps的53端口相当于访问10.1.50.210的53端口构成如下所示的隧道。

image

使用

  • 服务端
./easyProxy -mode=udpServer -vkey=DKibZF5TXvic1g3kY -tcpport=8284 -httpport=53 -target=10.1.50.210:53
名称 含义
mode 运行模式(client、server不写默认client)
vkey 验证密钥
tcpport 服务端与客户端通信端口
httpport 公网vps的访问端口
target 目标地址,格式如上
  • 客户端
./easyProxy -server=ip:port -vkey=DKibZF5TXvic1g3kY

http代理请求

场景及原理

较为适用于http也就是web站点的穿透服务端与客户端之间建立连接服务端收到http请求后将请求发送到客户端客户端再执行这个请求并将结果返回给服务端服务端收到后再返回。

<html> 特点:支持同时代理多个站点,不同站点之间有联系还可以实现匹配替换 </html>

image

最终效果

  • 访问a.server.com和访问10.1.50.203的80端口相同
  • 访问b.server.com和访问10.1.50.202的80端口相同
  • 访问c.server.com和访问10.1.50.201的80端口相同

使用

  • 服务端
./easyProxy -mode=httpServer -vkey=DKibZF5TXvic1g3kY -tcpport=8284 -httpport=8024
名称 含义
mode 运行模式(client、server不写默认client)
vkey 验证密钥
tcpport 服务端与客户端通信端口
httpport 代理的http端口与nginx配合使用
  • 客户端
建立配置文件 config.json
./easyProxy -server=ip:port -config=config.json -vkey=DKibZF5TXvic1g3kY
名称 含义
config 配置文件路径

配置文件config.json

{
  "SiteList": [
    {
      "host": "a.ourcauc.com",
      "url": "10.1.50.203",
      "port": 80
    },
    {
      "host": "b.ourcauc.com",
      "url": "10.1.50.202",
      "port": 80
    },
    {
      "host": "c.ourcauc.com",
      "url": "10.1.50.203",
      "port": 80
    }
  ],
  "Replace": 0
}
名称 含义
SiteList 本地解析的域名列表
host 域名地址
url 内网代理的地址
port 内网代理的地址对应的端口
Replace 是否自动匹配替换(查看场景)

nginx代理配置示例

upstream nodejs {
    server 127.0.0.1:8024;
    keepalive 64;
}
server {
    listen 80;
    server_name a.ourcauc.com b.ourcauc.com c.ourcauc.com ;
    location / {
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host  $http_host;
            proxy_set_header X-Nginx-Proxy true;
            proxy_set_header Connection "";
            proxy_pass      http://nodejs;
        }
}

域名配置示例

-a A 123.206.77.88

-b A 123.206.77.88

-c A 123.206.77.88

跨站自动匹配替换说明

例如访问a.ourcauc.com该页面里面有一个超链接为10.1.50.202:80,将根据配置文件自动该将url替换为b.ourcauc.com以达到跨站也可访问的效果但需要提前在配置文件中配置这些站点。

如需开启请加配置文件Replace值设置为1

注意:开启可能导致不应该被替换的内容被替换,请谨慎开启

二级域名示范

二级域名

socks5代理模式

场景及原理

原理

主要用于socks5代理也就是和ss类似不过是代理内网。使用此模式时可在非内网环境下配置本机的socks5代理服务器ip、sock5代理端口即可实现socks5代理达到访问内网的网站的效果配合proxifer等全局代理软件即可如同使用内网vpn一样访问内网网站通过ssh连接内网机器等等……。 image

使用

  • 服务端
./easyProxy -mode=sock5ServerServer -vkey=DKibZF5TXvic1g3kY -tcpport=8284 -httpport=8024
名称 含义
mode 运行模式(client、server不写默认client)
vkey 验证密钥
tcpport 服务端与客户端通信端口
httpport 代理的http端口socks5连接端口
u 验证的用户名
p 验证的密码

说明用户名和密码验证模式仅部分socks5客户端支持例如proxifer。

默认验证的用户名和密码为/conf/app.conf中的用户名和密码

如需不同,可在服务端命令后加上,将会覆盖/conf/app.conf中的配置

-u=user -p=password

即可

  • 客户端
./easyProxy -server=ip:port -vkey=DKibZF5TXvic1g3kY
  • 需要使用内网代理的机器
配置sock5代理即可ip为外网服务器ip端口为httpport即可在外网环境使用内网啦也可使用proxifer等全局代理软件。

如果设置了用户名和密码,记得填上用户名和密码

http代理模式

场景及原理

主要用于HTTP代理区别也就是HTTP代理和sock5代理的区别。使用此模式时可在非内网环境下配置本机的HTTP代理服务器ip、HTTP代理端口即可实现HTTP代理达到访问内网的网站的效果。 image

使用

  • 服务端
./easyProxy -mode=httpProxyServer -vkey=DKibZF5TXvic1g3kY -tcpport=8284 -httpport=8024
名称 含义
mode 运行模式(client、server不写默认client)
vkey 验证密钥
tcpport 服务端与客户端通信端口
httpport http代理连接端口
  • 客户端
./easyProxy -server=ip:port -vkey=DKibZF5TXvic1g3kY
  • 需要使用内网代理的机器
配置HTTP代理即可ip为外网服务器ip端口为httpport即可在外网环境访问内网啦

数据压缩支持

场景及原理

由于是内网穿透内网客户端与服务端之间的隧道存在大量的数据交换为节省流量加快传输速度由此本程序支持SNNAPY形式的压缩。

注意点

  • 所有模式均支持数据压缩,可以与加密同时使用

如何使用

snappy压缩

  • 在server端加上参数 -compress=snappy例如在TCP隧道模式
./easyProxy -mode tunnelServer -vkey DKibZF5TXvic1g3kY -tcpport=8284 -httpport=8024 -target=10.1.50.203:80 -compress=snappy

加密传输

如果公司内网防火墙对外网访问进行了流量识别与屏蔽例如禁止了ssh协议等通过设置 配置文件,将服务端与客户端之间的通信内容加密传输,将会有效防止流量被拦截。

如何使用

  • 在server端加上参数 -crypt=1或在web管理中设置例如在TCP隧道模式
./easyProxy -mode tunnelServer -vkey DKibZF5TXvic1g3kY -tcpport=8284 -httpport=8024 -target=10.1.50.203:80 -crypt=1

注意: 优先级命令行或者web管理设置>配置文件

站点保护

由于所有客户端共用一个 http 服务端口,任何知道你的域名和 url 的人都能访问到你部署在内网的 web 服务,但是在某些场景下需要确保只有限定的用户才能访问。

easyProxy支持通过 HTTP Basic Auth 来保护你的 web 服务,使用户需要通过用户名和密码才能访问到你的服务。

该功能目前可以在 域名代理模式、http代理请求模式、http代理模式 中使用,需要在/conf/app.conf或者命令行或者webg管理中设置请按照自己选择的使用方式设置则可。

注意: 优先级命令行或者web管理设置>配置文件,为空则表示无需验证

配置文件

  • /conf/app.conf
名称 含义
httpport web管理端口
password web界面管理密码
hostPort 域名代理模式监听端口
auth.user 验证用户名socks5、http代理、http代理请求、域名代理模式
auth.password 验证密码socks5、http代理、http代理请求、域名代理模式

站点保护

由于所有客户端共用一个 http 服务端口,任何知道你的域名和 url 的人都能访问到你部署在内网的 web 服务,但是在某些场景下需要确保只有限定的用户才能访问。

easyProxy支持通过 HTTP Basic Auth 来保护你的 web 服务,使用户需要通过用户名和密码才能访问到你的服务。

该功能目前可以在 域名代理模式、http代理请求模式、http代理模式 中使用,需要在/conf/app.conf中设置。

注意: web管理中如果设置了用户名和密码则会覆盖配置文件中的用户名和密码

配置文件

/conf/app.conf

名称 含义
httpport web管理端口
password web界面管理密码
hostPort 域名代理模式监听端口
auth.user 验证用户名socks5、http代理、http代理请求、域名代理模式
auth.password 验证密码socks5、http代理、http代理请求、域名代理模式

操作系统支持

支持Windows、Linux、MacOSX等无第三方依赖库。