diff --git a/README.md b/README.md index 6f099da..122aaae 100644 --- a/README.md +++ b/README.md @@ -34,10 +34,10 @@ gtun支持多线路配置,可以同时对美国,日本,欧洲目的网络 - [配置加速ip](#配置加速ip) - [加速效果测试](#加速效果) - [最佳实践]() - - [最佳实践: 基于gtun+ipset实现ip代理加速和分流](doc/最佳实践: 基于gtun+ipset实现ip代理加速和分流.md) + - [最佳实践: 基于gtun+ipset实现ip代理加速和分流](doc/最佳实践:基于gtun+ipset实现ip代理加速和分流.md) - [最佳实践: 基于gtun+dnsmasq实现域名代理加速和分流]() - [最佳实践: openwrt搭载gtun打造加速软路由,连接Wi-Fi即可畅游网络]() - - [玩法分享:基于gtun+n1盒子实现软路由加速]() + - [玩法分享:基于gtun+n1盒子实现软路由加速](doc/玩法分享:基于gtun+n1盒子实现软路由加速.md) - [玩法分享:基于gtun实现的tiktok加速路由]() - [玩法分享:基于gtun实现公有云访问外部加速]() - [玩法分享:基于gtun实现办公网访问公有云内网]() diff --git a/doc/assets/ip_acc_topology.png b/doc/assets/ip_acc_topology.png new file mode 100644 index 0000000..7a5000e Binary files /dev/null and b/doc/assets/ip_acc_topology.png differ diff --git a/doc/最佳实践: 基于gtun+ipset实现ip代理加速和分流.md b/doc/最佳实践: 基于gtun+ipset实现ip代理加速和分流.md deleted file mode 100644 index 57cc1d4..0000000 --- a/doc/最佳实践: 基于gtun+ipset实现ip代理加速和分流.md +++ /dev/null @@ -1,4 +0,0 @@ -# 最佳实践: 基于gtun+ipset实现ip代理加速和分流 -gtun的基础功能是ip加速,本文通过如何配置gtun来实现指定ip地址段的加速,最终达到以下效果: - -- \ No newline at end of file diff --git a/doc/最佳实践:基于gtun+ipset实现ip代理加速和分流.md b/doc/最佳实践:基于gtun+ipset实现ip代理加速和分流.md new file mode 100644 index 0000000..fbe9f36 --- /dev/null +++ b/doc/最佳实践:基于gtun+ipset实现ip代理加速和分流.md @@ -0,0 +1,169 @@ +# 最佳实践: 基于gtun+ipset实现ip代理加速和分流 +gtun的基础功能是ip加速,本文通过具体的配置来讲解如何配置gtun的ip加速功能,最终实现的效果是除了局域网IP之外,访问其他所有IP都通过gtun转发到美国出口。 +最终拓扑如下: + +![img.png](assets/ip_acc_topology.png) + +如图所示,本文会包含两个部分: +- 本地gtun,美国gtund的部署 +- 加速流量和非加速流量的区分,这部分通过ipset和iptables来进行 + +我们可以通过iptables非常灵活的控制加速和非加速流量。 + +**本文的是基于gtun的2.0.7版本。** + +# 安装 +安装包括两个组件: +- gtund:ip加速的服务端程序,部署在美国 +- gtun:ip加速的客户端程序,部署在本地linux + +## 安装gtund +在release里面找到2.0.7版本的产物并进行下载,gtund部署在美国的AWS上。 + +``` +cd gtund +./install.sh +``` +install_gtund.sh 会创建gtund的运行目录,并通过systemd把gtund程序拉起。 +执行install_gtund.sh完成之后,gtund会: +- 监听tcp的3002作为mux协议的服务端口 +- 监听udp的3002作为kcp协议的服务端口 +- 日志记录在/opt/apps/gtund/logs/gtund.log + +gtund的默认配置为,默认情况下不需要作任何的修改即可 + +```yaml +enable_auth: true +auths: + - access_token: "ICKelin:free" + expired_ath: 0 + +trace: ":3003" +server: + - listen: ":3002" + scheme: "kcp" + + - listen: ":3002" + scheme: "mux" + +log: + days: 5 + level: "debug" + path: "/opt/apps/gtund/logs/gtund.log" + +``` + +您也可以使用docker-compose来进行安装: + +```shell +cd gtund +docker-compose up --build -d +``` + +执行完之后docker ps 看是否启动成功 + +## 安装gtun + +gtun的安装也类似,在release里面找到2.0.7版本的产物并进行下载,然后在本地linux上进行部署 + +```shell +cd gtun +export ACCESS_KEY="ICKelin:free" +export SERVER_IP="gtund所在的服务器的ip" +./install_gtun.sh +``` + +安装完成之后查看是否有错误日志 + +```shell +tail -f /opt/apps/gtun/logs/gtun.log +``` + +同样,你也可以使用docker-compose来安装 + +```shell +cd gtun +docker-compose up --build -d +``` + +执行完成之后docker ps 看是否启动成功。 + +# 配置转发规则 +本文的转发规则比较简单,需要加速的地址为`0.0.0.0/0`,不需要加速的地址列表在gtun/scripts/noproxy.txt文件里面,主要包含一些局域网地址, +需要记住的是,**一定要把gtund的公网IP加入到noproxy.txt里面**,防止自己把服务器地址拦截。 + +第一步把不需要的加速的地址配置好: +```shell + +noproxy_set=NOPROXY + +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 +} +``` + +通过创建NOPROXY的ipset并且把noproxy.txt文件的cidr列表加入进去,然后通过iptables匹配到NOPROXY这个ipset的地址全部ACCEPT掉。 + +第二步把需要加速的地址配置好: + +```shell +setname=GTUN_ALL +redirect_port=8524 + +add_proxy() { + ipset create $setname hash:net + echo "proxy for 0.0.0.0/1" + echo "proxy for 128.0.0.0/1" + ipset add $setname 0.0.0.0/1 + ipset add $setname 128.0.0.0/1 + + iptables -t mangle -A PREROUTING -p tcp -m set --match-set $setname dst -j TPROXY --tproxy-mark 1/1 --on-port $redirect_port + iptables -t mangle -A PREROUTING -p udp -m set --match-set $setname dst -j TPROXY --tproxy-mark 1/1 --on-port $redirect_port + iptables -t mangle -A OUTPUT -m set --match-set $setname dst -j MARK --set-mark 1 + + # redirect dns query +# iptables -t mangle -A PREROUTING -p udp --dport 53 -j TPROXY --tproxy-mark 1/1 --on-port $redirect_port +# iptables -t mangle -A OUTPUT -p udp --dport 53 -j MARK --set-mark 1 + + ip rule add fwmark 1 lookup 100 + ip ro add local default dev lo table 100 +} + +``` + +通过创建GTUN_ALL的ipset并且把`0.0.0.0/1`和`128.0.0.0/1`加入到其中。然后通过iptables打mark和策略路由来实现访问GTUN_ALL这个ipset的cidr地址的流量的劫持。 + +通过上面两个步骤,由于iptables使用的是-A的方式添加到表尾部,所以会先匹配noproxy_set,noproxy_set匹配不到再匹配到GTUN_ALL。 + +以上两个步骤的脚本已经打包进`gtun/scripts/redirect_all.sh`文件里面,有需要可以根据具体情况进行修改。 + +上面是实现的所有流量加速的,但是有时候我们需要部分不加速,比如大陆地区的ip访问不加速,那么只需要把大陆地区的ip加入到noproxy这一ipset即可。 + +```shell +wget https://raw.githubusercontent.com/herrbischoff/country-ip-blocks/master/ipv4/cn.cidr +cat cn.cidr | while read line + do + echo "no proxy for" $line + ipset add $noproxy_set $line + done +``` + +用法非常多,后续文章会不断分享一些用法。 + +# 结束语 +以上是gtun的最基本的功能,实现所有流量劫持并进行加速,同时也提了一嘴如何访问大陆地区的ip不加速,通过这个实例基本上能了解gtun是如何跑起来的,也能定制一些更加适合自己的用法。 +后续会继续介绍如何通过gtun跟dnsmasq结合实现访问域名的加速。 \ No newline at end of file diff --git a/docker-build/gtun/docker-compose.yaml b/docker-build/gtun/docker-compose.yaml index 4e99c8e..19ac180 100644 --- a/docker-build/gtun/docker-compose.yaml +++ b/docker-build/gtun/docker-compose.yaml @@ -2,7 +2,7 @@ version: '3' services: accelerator: build: . - container_name: gtun + container_name: gtun_2.0.7 restart: always network_mode: host privileged: true diff --git a/etc/gtund/gtund.yaml b/etc/gtund/gtund.yaml index 3b30ff3..c35c569 100644 --- a/etc/gtund/gtund.yaml +++ b/etc/gtund/gtund.yaml @@ -6,11 +6,9 @@ auths: trace: ":3003" server: - listen: ":3002" - authKey: "rewrite with your auth key" scheme: "kcp" - - listen: ":3001" - authKey: "rewrite with your auth key" + - listen: ":3002" scheme: "mux" log: diff --git a/scripts/install_gtund.sh b/scripts/install_gtund.sh index 0dd25b0..8630cc0 100755 --- a/scripts/install_gtund.sh +++ b/scripts/install_gtund.sh @@ -1,4 +1,4 @@ -systemctl stop gtun +systemctl stop gtund GTUND_DIR="/opt/apps/gtund" mkdir -p $GTUND_DIR/logs cp -r . $GTUND_DIR