Giter Club home page Giter Club logo

gtun's Introduction

gtun

go report Build Status license

gtun是一款开源的ip代理加速软件,目前只支持linux,通过tproxy技术实现流量劫持,quickcp等协议优化广域网传输,gtun提供一个基础通道,所有加入ipset的ip的流量都会被gtun进行拦截并代理到指定出口。 gtun支持多线路配置,可以同时对美国,日本,欧洲目的网络进行加速访问。您可以结合dnsmasq来使用,将需要配置加速的域名解析结果加入ipset,从而实现域名加速。

同时我们也基于gtun开发了收费版本,对标阿里云的全球应用加速,ucloud的pathX等产品的功能,只是会更加灵活,支持私有化部署,独立部署,可以部署到公有云,数据中心和软路由,如果您感兴趣,可以访问我们的网站进行免费免费体验。

关于项目有任何问题需要咨询,可以联系作者进行交流

目录

应用场景

  • SaaS软件加速,加速访问Salesforce,offce365等产品
  • 云服务器加速,加速访问海外服务器,跳板机,提升操作流畅度
  • 直播加速,tiktok海外直播加速,抖音直播加速
  • 游戏加速,结合专线网络和路由盒子实现游戏加速盒
  • 云服务器出口加速网关,加速整个公有云内网访问外网的流量

返回目录

功能特性

  • 纯应用层实现,不存在overlay网络,支持tcp和udp协议以及运行在其上的所有七层协议
  • 支持ip加速,配合dnsmasq等软件可支持域名加速场景
  • 支持多链路容灾和竞速
  • 支持动态和静态内容访问加速
  • 引入kcpquic等协议优化跨境传输

返回目录

技术原理

整体架构

gtun是一款ip正向代理软件,包含代理客户端gtun和服务端gtund,如上图所示,gtun作为所有流量的入口,也即是正向代理的客户端,gtund作为所有流量的出口,也即是正向代理的服务端,gtun的客户端比较重,服务端程序则非常的轻量级。

gtun最主要的功能是流量代理,gtun经过三个版本的演变,最初基于tun网卡的vpn技术,然后优化到dnat技术,再到目前的tproxy技术,现已逐步趋于稳定。

gtun本身只提供流量代理通道,至于哪些流量需要被劫持,这个是由使用者定义的,使用者最终只需要将被代理的IP加入到ipset当中,那么该ipset的ip就会被代理

为了实现更加快速的代理,gtun考虑集成kcp或者quic等基于UDP实现的可靠性传输协议,同时接入FEC,实时选路等机制,以避免长链路tcp丢包严重触发拥塞控制机制,降低传输效率。

返回目录

安装部署

在这一节当中结合实际应用场景说明如何安装和部署gtun和gtund程序,在本应用场景当中,通过配置IP代理加速,加快访问speedtest的测速文件

前期准备

  • 一台公有云服务器,用于部署服务端程序gtund,区域越靠近被加速区域(源站)越好,并且确认gtund监听的端口被打开
  • 另外一台可以是公有云服务器,也可以是内网机器,也可以是路由器,用于部署客户端程序gtun,目前gtun只支持linux系统

安装运行gtund

gtund部署在美国的AWS上,支持systemd和docker两种方式进行启动。

release里面找到2.0.8版本的产物并进行下载,

cd gtund
./install.sh

install.sh 会创建gtund的运行目录,并通过systemd把gtund程序拉起。 执行install.sh完成之后,gtund会:

  • 监听tcp的3002作为mux协议的服务端口
  • 监听udp的3002作为kcp协议的服务端口
  • 监听udp的4002作为quic协议的服务端口
  • 日志记录在/opt/apps/gtund/logs/gtund.log

gtund的默认配置为,默认情况下不需要作任何的修改即可

enable_auth: true
auths:
  - access_token: "ICKelin:free"
    expired_ath: 0

trace: ":3003"
server:
  - listen: ":3002"
    scheme: "kcp"

  - listen: ":3002"
    scheme: "mux"
    
  - listen: ":4002"
    scheme: "quic"

log:
  days: 5
  level: "debug"
  path: "/opt/apps/gtund/logs/gtund.log"

您也可以使用docker-compose来进行安装:

cd gtund
docker-compose up --build -d

执行完之后docker ps 看是否启动成功

返回目录

安装运行gtun

gtun的安装也类似,在release里面找到2.0.8版本的产物并进行下载,然后在本地linux上进行部署

cd gtun
export ACCESS_TOKEN="ICKelin:free"
export SERVER_IP="gtund所在的服务器的ip"
./install.sh

其中ACCESS_TOKEN为gtund配置的认证的token,SERVER_IP是gtund的公网IP

安装完成之后查看是否有错误日志

同样,你也可以使用docker-compose来安装

cd gtun
docker-compose up --build -d

执行完成之后docker ps 看是否启动成功。

返回目录

配置加速ip

在上述过程中,启动了gtun和gtund程序,但是并未添加任何需要加速的信息,那么gtun如何进行加速呢?需要额外手动配置加速ip,并将该ip的tcp流量全部转发至127.0.0.1:8524端口,udp流量全部转发至127.0.0.1:8524∂端口。

这个过程是通过ipset和路由来配置的。以1.1.1.1为例

第一步,创建ipset,并将1.1.1.1加入其中

ipset create GTUN-US hash:net
ipset add GTUN-US 1.1.1.1

第二步,创建iptables规则,匹配目的ip为GTUN-US这个ipset内部的ip,然后做tproxy操作,将流量重定向到本地8524和8524端口

iptables -t mangle -I PREROUTING -p tcp -m set --match-set GTUN-US dst -j TPROXY --tproxy-mark 1/1 --on-port 8524
iptables -t mangle -I PREROUTING -p udp -m set --match-set GTUN-US dst -j TPROXY --tproxy-mark 1/1 --on-port 8524
iptables -t mangle -I OUTPUT -m set --match-set GTUN-US dst -j MARK --set-mark 1

第三步,添加路由表

ip rule add fwmark 1 lookup 100
ip ro add local default dev lo table 100

至此所有配置都已经完成,后续需要新增代理ip,只使用以下命令将ip加入GTUN-US这个ipset当中即可,现在可以先尝试测试1.1.1.1这个ip的代理。

root@raspberrypi:/home/pi# nslookup www.google.com 1.1.1.1
Server:		1.1.1.1
Address:	1.1.1.1#53

Non-authoritative answer:
Name:	www.google.com
Address: 142.250.73.228

返回目录

加速效果

有了上述的基础,现在可以进行下载速度测试对比,以http://speedtest.atlanta.linode.com/100MB-atlanta.bin这个文件作为测试,

首先是通过gtun代理加速之后的测试,需要将speedtest.atlanta.linode.com加入到GTUN-US当中

ipset add GTUN-US speedtest.atlanta.linode.com

root@raspberrypi:/home/pi# wget http://speedtest.atlanta.linode.com/100MB-atlanta.bin -v
--2021-05-18 22:00:23--  http://speedtest.atlanta.linode.com/100MB-atlanta.bin
正在解析主机 speedtest.atlanta.linode.com (speedtest.atlanta.linode.com)... 50.116.39.117, 2600:3c02::f03c:91ff:feae:641
正在连接 speedtest.atlanta.linode.com (speedtest.atlanta.linode.com)|50.116.39.117|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:104857600 (100M) [application/octet-stream]
正在保存至: “100MB-atlanta.bin”

100MB-atlanta.bin                   100%[==================================================================>] 100.00M  2.39MB/s    in 57s

2021-05-18 22:01:21 (1.77 MB/s) - 已保存 “100MB-atlanta.bin” [104857600/104857600])

然后通过正常网络测试,将speedtest.atlanta.linode.com从GTUN-US当中移除即可

ipset del GTUN-US speedtest.atlanta.linode.com

root@raspberrypi:/home/pi# wget http://speedtest.atlanta.linode.com/100MB-atlanta.bin -v
--2021-05-18 22:04:44--  http://speedtest.atlanta.linode.com/100MB-atlanta.bin
正在解析主机 speedtest.atlanta.linode.com (speedtest.atlanta.linode.com)... 50.116.39.117, 2600:3c02::f03c:91ff:feae:641
正在连接 speedtest.atlanta.linode.com (speedtest.atlanta.linode.com)|50.116.39.117|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:104857600 (100M) [application/octet-stream]
正在保存至: “100MB-atlanta.bin.1”

100MB-atlanta.bin.1                   0%[                                                                   ]   1012K  9.50KB/s    eta 98m 58s

可以看见,通过gtun加速之后,速度可以达到2.39MB/s,而未通过gtun加速的正常下载速度则为15KB/s左右的速度,两者差了一个数量级。

返回目录

有问题怎么办

返回目录

关于作者

一个爱好编程的人,网名叫ICKelin。对于以下任何问题,包括

  • 项目实现细节
  • 项目使用问题
  • 项目建议,代码问题
  • 案例分享
  • 技术交流

可加微信: zyj995139094

gtun's People

Contributors

holenat avatar ickelin avatar sirius2016 avatar zouyingjiu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gtun's Issues

gtun在server端是怎么处理的?

我理解使用client将数据从虚拟网卡读出来然后发送给server, 假如不解析,server端仍然需要将数据写会虚拟网卡,然后经由物理网卡真正发出请求。

gtun测试报告

下载速度测试

此项测试分别对比

  • 直连下载linode文件速度
  • 加上gtun之后下载速度
  • gtun加上kcptun之后下载速度

拓扑:

image

上面拓扑当中,A,B均为100Mb带宽,A位于深圳,B位于美国东部

反向代理测试

window 客户端配置问题

gtun windows 仅支持tap设备,所以gtund的配置需要配置成tap设备, songgao/water这个库windows平台下的tun配置选项是否不起作用?(在tap设备之上模拟tun设备, tap_ioctl_config_tun)

运行“./gtund -c gtund.conf”遇错

hi.

[root@host gtund]# ./gtund -c gtund.conf
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x6525d9]

goroutine 1 [running]:
github.com/ICKelin/gtun/gtund.NewInterface(0x0, 0xc420016d60, 0xc, 0xc420016c80, 0xf, 0xb, 0xc420022d60, 0xc420094100)
/root/go/gopath/src/github.com/ICKelin/gtun/gtund/iface.go:29 +0xb9
github.com/ICKelin/gtun/gtund.Main()
/root/go/gopath/src/github.com/ICKelin/gtun/gtund/main.go:38 +0x2bc
main.main()
/root/gtun-by-ICKelin/main/gtund/gtund.go:39 +0x20
[root@host gtund]#

怎么解决?

gtun2.0.5客户端无法连接服务端,也没有生成日志,请帮忙排查。

服务端操作系统:CentOS Stream release 8
gtund版本:2.0.5
服务端监听正常,3002和3003,6060是什么端口
image

服务端配置:

trace: ":3003"
server:
  - listen: ":3002"
    authKey: "20232024"
    scheme: "kcp"

log:
  days: 5
  level: "debug"
  path: "gtund.log"

客户端:centos7
gtun版本:2.0.5
客户端只监控了:6060端口
image

客户端配置:

settings:
  CN:
    # 代理ip文件,可以是本地文件,也可以是网络文件,一行是一个IP或者cidr
    proxy_file: "https://www.ipdeny.com/ipblocks/data/countries/us.zone"
    route:
      # 拨测地址,需要修改CN_SERVER_IP和CN_SERVER_TRACE_PORT,对应gtund的公网IP和端口
      - trace_addr: 137.175.63.1:3003
        scheme: "kcp"
        # 服务端地址,修改为对应gtund的IP和端口
        addr: 137.175.63.1:3002
        auth_key: "20232024"
    proxy:
      # 代理插件配置
      "tproxy_tcp": |
        {
          "read_timeout": 30,
          "write_timeout": 30,
          "listen_addr": ":8524",
          "rate_limit": 50,
          "region": "CN"
        }
      "tproxy_udp": |
        {
          "read_timeout": 30,
          "write_timeout": 30,
          "session_timeout": 30,
          "listen_addr": ":8524",
          "rate_limit": 50,
          "region": "CN"
        }
log:
  days: 5
  level: Debug
  path: gtun.log

http_server:
  listen_addr: ":9001"

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.