diff --git a/README.md b/README.md index 122aaae..02e8151 100644 --- a/README.md +++ b/README.md @@ -33,16 +33,15 @@ gtun支持多线路配置,可以同时对美国,日本,欧洲目的网络 - [安装运行gtun](#安装运行gtun) - [配置加速ip](#配置加速ip) - [加速效果测试](#加速效果) -- [最佳实践]() - - [最佳实践: 基于gtun+ipset实现ip代理加速和分流](doc/最佳实践:基于gtun+ipset实现ip代理加速和分流.md) - - [最佳实践: 基于gtun+dnsmasq实现域名代理加速和分流]() - - [最佳实践: openwrt搭载gtun打造加速软路由,连接Wi-Fi即可畅游网络]() - - [玩法分享:基于gtun+n1盒子实现软路由加速](doc/玩法分享:基于gtun+n1盒子实现软路由加速.md) - - [玩法分享:基于gtun实现的tiktok加速路由]() - - [玩法分享:基于gtun实现公有云访问外部加速]() - - [玩法分享:基于gtun实现办公网访问公有云内网]() - - [玩法分享:基于gtun实现的游戏加速盒]() - - [玩法分享:基于gtun实现的大模型下载加速]() +- [用法玩法]() + - [基础用法:基于gtun+ipset实现ip代理加速和分流](doc/基础用法:基于gtun+ipset实现ip代理加速和分流.md) + - [基础用法:基于gtun+dnsmasq实现域名代理加速和分流](doc/基础用法:基于gtun+dnsmasq实现域名代理加速和分流.md) + - [基础用法:openwrt搭载gtun打造加速软路由,连接Wi-Fi即可畅游网络](doc/基础用法:openwrt搭载gtun打造加速软路由,连接Wi-Fi即可畅游网络.md) + - [玩转N1盒子:基于gtun实现带加速功能的软路由]() + - [玩转N1盒子:基于gtun实现的tiktok加速路由]() + - [玩转N1盒子:基于gtun实现的游戏加速盒]() + - [玩转N1盒子:基于gtun实现公有云访问外部加速]() + - [玩转N1盒子:基于gtun实现办公网访问公有云内网]() - [有问题怎么办](#有问题怎么办) - [关于作者](#关于作者) diff --git a/doc/基础用法:openwrt搭载gtun打造加速软路由,连接Wi-Fi即可畅游网络.md b/doc/基础用法:openwrt搭载gtun打造加速软路由,连接Wi-Fi即可畅游网络.md new file mode 100644 index 0000000..ef0aedb --- /dev/null +++ b/doc/基础用法:openwrt搭载gtun打造加速软路由,连接Wi-Fi即可畅游网络.md @@ -0,0 +1,2 @@ +# openwrt搭载gtun打造加速软路由,连接Wi-Fi即可畅游网络 + diff --git a/doc/基础用法:基于gtun+dnsmasq实现域名代理加速和分流.md b/doc/基础用法:基于gtun+dnsmasq实现域名代理加速和分流.md new file mode 100644 index 0000000..e77b179 --- /dev/null +++ b/doc/基础用法:基于gtun+dnsmasq实现域名代理加速和分流.md @@ -0,0 +1,100 @@ +# 基于gtun+dnsmasq实现域名代理加速和分流.md + +之前的文章分享了[使用gtun实现ip代理加速和分流](最佳实践:基于gtun+ipset实现ip代理加速和分流.md),实现了一个最简单的基于ip代理加速的场景,但是在实际应用当中会有两个不太优雅的地方: + +- 基于ip的方式,如果ip发生变动,可能会出现分流策略不准的问题 +- 有时候并不需要加速这么多ip,只需要加速部分网站或者应用即可(非常典型的比如SaaS应用加速) + +基于此我们有了基于dnsmasq的域名解析策略来实现基于域名的加速和分流,最终拓扑如下: + +# 前置准备 +您可以参考这篇文章来安装gtund和gtun。安装完gtun和gtund之后,您需要再安装dnsmasq并且成功启动。 + +# 配置dnsmasq解析策略 + +首先还是创建好基本的运行环境,参考scripts/redirect_all.sh + +```shell + +setname=GTUN_ALL +noproxy_set=NOPROXY +redirect_port=8524 + +clear_noproxy() { + iptables -t mangle -D PREROUTING -m set --match-set $noproxy_set dst -j ACCEPT + iptables -t mangle -D OUTPUT -m set --match-set $noproxy_set dst -j ACCEPT + ipset destroy $noproxy_set >/dev/null +} + +add_noproxy() { + ipset create $noproxy_set hash:net + cat noproxy.txt | while read line + do + echo "no proxy for" $line + ipset add $noproxy_set $line + done + + iptables -t mangle -A PREROUTING -m set --match-set $noproxy_set dst -j ACCEPT + iptables -t mangle -A OUTPUT -m set --match-set $noproxy_set dst -j ACCEPT +} + +``` + +然后配置dnsmasq的规则,dnsmasq的规则主要有两个: +- 域名解析的上游地址是多少 +- 解析接入写入到哪个ipset里面 +通过这两个控制我们就能够实现dnsmasq和gtun的无缝结合。 + +在本例当中,还是配置的代理所有ip,其中大陆地区的域名使用`114.114.114.114`这个上游地址进行解析,并将解析结果加入到NOPROXY这个ipset当中。 +从而实现大陆地区的域名不加速。 + +```shell +config_dnsmasq() { + echo "configuring dnsmasq service" + cp dnsmasq/dnsmasq.conf /etc/dnsmasq.conf + cp dnsmasq/dnsmasq.resolv /etc/dnsmasq.resolv + echo "configuring dnsmasq cn domain list" + cp dnsmasq/cn.conf /etc/dnsmasq.d/ + cp dnsmasq/cn_set.conf /etc/dnsmasq.d/ + systemctl restart dnsmasq +} + +``` + +完整命令可以参考`gtun/scripts/redirect_domains.sh`。修改完之后本机需要设置`/etc/resolv.conf`文件的`nameserver 127.0.0.1` +才会真正用本机的dnsmasq去解析。 + +# 测试 +接下来进行一轮测试,我们使用我们自己的一个域名`demo.xxxx.tech`进行测试。 + +第一步将demo.xxxx.tech配置进dnsmasq里面 + +```shell +root@OpenWrt:~/gtun# head /etc/dnsmasq.d/cn.conf +server=/demo.xxxx.tech/114.114.114.114 + +root@OpenWrt:~/gtun# head /etc/dnsmasq.d/cn_set.conf +ipset=/demo.xxxx.tech/NOPROXY +``` + +第二步nslookup解析测试 + +```shell +root@OpenWrt:~/gtun# nslookup demo.xxxx.tech 127.0.0.1 +Server: 127.0.0.1 +Address: 127.0.0.1:53 + +Non-authoritative answer: +Name: demo.xxxx.tech +Address: 47.115.xx.xx + +Non-authoritative answer: + +root@OpenWrt:~/gtun# ipset -T NOPROXY 47.115.xx.xx +Warning: 47.115.xx.xx is in set NOPROXY. +``` + +demo.xxxx.tech这个域名已经被加入到NOPROXY里面了,根据之前的文章,加入到NOPROXY之后不会再走加速出口出,这里不再赘述了。 + +# 结束语 + diff --git a/doc/最佳实践:基于gtun+ipset实现ip代理加速和分流.md b/doc/基础用法:基于gtun+ipset实现ip代理加速和分流.md similarity index 83% rename from doc/最佳实践:基于gtun+ipset实现ip代理加速和分流.md rename to doc/基础用法:基于gtun+ipset实现ip代理加速和分流.md index fbe9f36..a210c11 100644 --- a/doc/最佳实践:基于gtun+ipset实现ip代理加速和分流.md +++ b/doc/基础用法:基于gtun+ipset实现ip代理加速和分流.md @@ -10,7 +10,7 @@ gtun的基础功能是ip加速,本文通过具体的配置来讲解如何配 我们可以通过iptables非常灵活的控制加速和非加速流量。 -**本文的是基于gtun的2.0.7版本。** +**本文是基于gtun的2.0.7版本。** # 安装 安装包括两个组件: @@ -24,8 +24,8 @@ gtun的基础功能是ip加速,本文通过具体的配置来讲解如何配 cd gtund ./install.sh ``` -install_gtund.sh 会创建gtund的运行目录,并通过systemd把gtund程序拉起。 -执行install_gtund.sh完成之后,gtund会: +install.sh 会创建gtund的运行目录,并通过systemd把gtund程序拉起。 +执行install.sh完成之后,gtund会: - 监听tcp的3002作为mux协议的服务端口 - 监听udp的3002作为kcp协议的服务端口 - 日志记录在/opt/apps/gtund/logs/gtund.log @@ -68,9 +68,9 @@ gtun的安装也类似,在release里面找到2.0.7版本的产物并进行下 ```shell cd gtun -export ACCESS_KEY="ICKelin:free" +export ACCESS_TOKEN="ICKelin:free" export SERVER_IP="gtund所在的服务器的ip" -./install_gtun.sh +./install.sh ``` 安装完成之后查看是否有错误日志 @@ -164,6 +164,37 @@ cat cn.cidr | while read line 用法非常多,后续文章会不断分享一些用法。 +# 测试 +最后来进行一次简单的测试,首先是不加速的验证,这里我用我的一个服务器的ip来进行测试。 + +```shell +# 将ip加入到NOPROXY ipset当中 +ipset add NOPROXY xx.xx.xx.xx + +# ssh 连接ip +ssh root@xx.xx.xx.xx + +# 使用who命令查看当前连接的ip +root@iZwz97kfjnf78copv1ae65Z:~# who +root tty1 Jun 28 10:41 +root pts/0 Apr 28 09:43 (119.139.xx.xx) +``` + +最终结果走的是本地的出口(119.139.xx.xx)。 + +同样的方式,把这个ip从NOPROXY ipset中删除,加入到GTUN_ALL这个匹配走加速的ipset当中。 + +```shell +ipset del NOPROXY xx.xx.xx.xx +ipset add GTUN_ALL xx.xx.xx.xx + +root@iZwz97kfjnf78copv1ae65Z:~# who +root tty1 Jun 28 10:41 +root pts/1 Apr 28 09:46 (3.141.xx.xx) +``` + +最终走的是加速的出口(3.141.xx.xx) + # 结束语 以上是gtun的最基本的功能,实现所有流量劫持并进行加速,同时也提了一嘴如何访问大陆地区的ip不加速,通过这个实例基本上能了解gtun是如何跑起来的,也能定制一些更加适合自己的用法。 后续会继续介绍如何通过gtun跟dnsmasq结合实现访问域名的加速。 \ No newline at end of file diff --git a/go.mod b/go.mod index ae53619..9e82e72 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/ICKelin/gtun go 1.20 require ( - github.com/ICKelin/optw v0.0.0-20240424081636-bc7a0dd32f38 + github.com/ICKelin/optw v0.0.0-20240428011618-ca9b64a90fcc github.com/agiledragon/gomonkey/v2 v2.11.0 github.com/astaxie/beego v1.12.3 github.com/belogik/goes v0.0.0-20151229125003-e54d722c3aff diff --git a/go.sum b/go.sum index 2f023bf..fcc834c 100644 --- a/go.sum +++ b/go.sum @@ -1,6 +1,6 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/ICKelin/optw v0.0.0-20240424081636-bc7a0dd32f38 h1:a/Ll84/fF0KAvo7HMLK0HVYRZ0HymdD6MFRQbEw3mcc= -github.com/ICKelin/optw v0.0.0-20240424081636-bc7a0dd32f38/go.mod h1:MQl8fLDhV0btvBztH05wsDamj0Rn8BDnDmCPeuIBpbY= +github.com/ICKelin/optw v0.0.0-20240428011618-ca9b64a90fcc h1:h+8a9EzkvaJFGqYEhnH+iekl0Gv9+2XsFORKyf/MwdU= +github.com/ICKelin/optw v0.0.0-20240428011618-ca9b64a90fcc/go.mod h1:MQl8fLDhV0btvBztH05wsDamj0Rn8BDnDmCPeuIBpbY= github.com/Knetic/govaluate v3.0.0+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/agiledragon/gomonkey/v2 v2.11.0 h1:5oxSgA+tC1xuGsrIorR+sYiziYltmJyEZ9qA25b6l5U= github.com/agiledragon/gomonkey/v2 v2.11.0/go.mod h1:ap1AmDzcVOAz1YpeJ3TCzIgstoaWLA6jbbgxfB4w2iY=