日度归档:2022年2月21日

冷门的隧道协议Ping Tunnel,进阶配置,第二课,增加iptables双端限速 2022-02-27

段落1、前章

本篇章的Ping Tunnel进阶配置教程,承接上一篇,进阶第一课,在此基础上的配置需求,如果不了解Ping Tunnel项目基础用法,不了解增加入口服务器,前置代理的,请先看原先的两期教程和视频

基础教程

冷门的隧道协议PingTunnel概览,配置简单,可用于过市面上绝大部分的硬件防火墙 2021-12-12
https://dasmz.com/?p=867

进阶1

冷门的隧道协议Ping Tunnel,进阶配置,第一课,增加ping tunnel客户端国内云VPS入口服务器 2022-02-21
https://dasmz.com/?p=1404

段落2、概述

需求的由来:

大家在实际使用Ping Tunnel的过程中,会发现,带宽占用的问题,比如我这里的资源为

1、US服务器的配置为 1核心 1GB 15GB磁盘 500Mbps带宽,配置为Ping Tunnel服务端,操作系统为Ubuntu 20.04 LTS

2、CN沃云服务器配置为 1核心 1GB 20GB磁盘 6Mbps带宽,配置为Ping Tunnel客户端 + 前置入口代理Gost/SS服务端,操作系统为Ubuntu 18.04 LTS

3、CN自己的手机/电脑,配置为SS客户端

整体路由已经是优化的高QoS出口流量,但是,由于作为接入点的CN服务器,一般带宽都比较小(国内的商业宽带基本都很贵),所以,就像水流一样,这个数据流在这里形成了一个束缚。

故而,为了避免CN入口服务器的上行带宽被Ping Tunnel打满形成阻塞的情况,我们有必要进行双端的限速。

限速的方式,我这里推荐大家选iptables,简单实用。

段落3、配置实施

我这里的场景是端到端的TCP/IP协议簇里的ICMP协议的通信,有源IP地址,有目的IP地址,ICMP协议无端口。

iptables限速,一般可通过限制时间范围内的数据包个数来约束网络载荷。

CN服务器,带宽为6Mbps,折算其对外的上行速度为 6 * 1024 / 8 = 768.0 KB/s

先进行CN服务器,入站限速的配置,基于limit模块,进行统计匹配

基于PingTunnel的入口socks5,进行wget http/https下载测速,经过4论次的参数匹配的测速结果如下

# 创建测速脚本 /root/speedtest.sh
# 参数--limit-burst 20 即满足20秒次的突发

#!/bin/sh
rm /root/*_speedtest_report.txt
for speed in 300 400 500 600 700 800 900 1000 1100 1200 1300 1400 1500 1600 1700 1800 1900 2000 2100 2200 2300 2400 2500 2600 2700 2800 2900 3000
do
  echo "= = = = = = =  SPLIT  = = = = = = ="
  echo "GOGOGO "${speed}
  cd /root/
  /usr/sbin/iptables --flush
  /usr/sbin/iptables -A INPUT -s US服务器的IP地址 -p icmp -m icmp --icmp-type any -m limit --limit ${speed}/sec --limit-burst 20 -j ACCEPT
  /usr/sbin/iptables -A INPUT -s US服务器的IP地址 -p icmp -m icmp --icmp-type any -j DROP
  /usr/bin/proxychains4 -q wget -O /dev/null -o ${speed}_speedtest_report.txt https://mia.hostodo.com/10MB.test

done
# END

网络性能测试用例A,limit-burst参数定为20,前后多时间段,四轮次下载测速,结果如下

对照均值,建立图形可视

由图可发现,在 参数为 –limit 1500/second –limit-burst 20的时候,下载速度多次的均值为766.5KB/s,贴近我们这台CN服务器的网络性能。再往后,即便开放更高的包入站,也无法提升网络性能。故而,如果burst参数为20时候,这台CN入口服务器,优先选择1500/s的包过滤参数。

网络性能测试用例B,下面,我们把limit-burst参数设置为30,再进行一轮次测试

同样的,我们根据均值,建立折线图,可以根据图,观察到参数为 –limit 1500/second –limit-burst 30的时候,本次速度为838.75KB/s,基本实现网络性能最优组合。

如果为了保证贴近我这台6Mbps入口服务器的上行网络性能,就应该选择–limit 1300/second –limit-burst 30的参数组合。

网络性能测试用例C,limit-burst 40的时候,测试了3论次,数据如下

网络性能曲线图

总结时刻

通过观察,增加limit-burst的数值,可以增加整体速度,对于入口低的服务器,选择的条件不多。

因为我的这台入口服务器的上行带宽是6Mbps,为了保证贴近我自己的服务器的效果,我这里就有3组数据可选,是比较合适的。

--limit 1500/second --limit-burst 20   # 速度为766.5KB/s
--limit 1300/second --limit-burst 30   # 速度为769.7KB/s
--limit 1200/second --limit-burst 40   # 速度为785.0KB/s

在入口服务器设置防火墙规则,在终端中执行即可,注意保存防火墙规则,以免重启后失效

iptables -A INPUT -s 此处US服务器IP地址 -p icmp -m icmp --icmp-type any -m limit --limit 1200/second --limit-burst 40 -j ACCEPT
iptables -A INPUT -s 此处US服务器IP地址 -p icmp -m icmp --icmp-type any -j DROP

另外,US服务器,出站限速,可选做,我这里没有进行设置,因为流量多,没必要折腾。海外服务器是出站,所以是OUTPUT链,包的limit可以多一点,因为发包的网络流量,过程中,考虑丢包的情况。

iptables -A OUTPUT -d 此处CN服务器IP地址 -p icmp -m icmp --icmp-type any -m limit --limit 1300/second --limit-burst 40 -j ACCEPT
iptables -A OUTPUT -d 此处CN服务器IP地址 -p icmp -m icmp --icmp-type any -j DROP

冷门的隧道协议Ping Tunnel,进阶配置,第一课,增加ping tunnel客户端国内云VPS入口服务器 2022-02-21

段落1、需求描述

本章是Ping Tunnel的进阶设置教程玩法,请不熟悉Ping Tunnel的观众优先阅读第39期视频的配套博客

第39期视频博客地址 基础设置教程

冷门的隧道协议PingTunnel概览,配置简单,可用于过市面上绝大部分的硬件防火墙 2021-12-12 https://dasmz.com/?p=867

段落2、进阶需求的来历

1、增加国内云服务器VPS入口,可以优化自身网络出入的路由,使用高QoS等级的网络出口

2、增加国内云服务器VPS入口,对于未root的安卓Android手机,未越狱的苹果手机来说,体验Ping Tunnel的结果,成为可能

段落3、配置环境介绍

本期视频,用来做视频例子的国内云服务器,是联通沃云的云主机,上海机房,配置为4核心 8GB内存 6Mbps带宽,在国内来说,这台VPS服务器配置属于高级性能的了,一般而言,推荐1核心 1GB内存 5Mbps左右的配置,比较合适个人,大的配置适合工作室用。

这里,打个小广告,如果需要联通沃云的服务器,可以找我给你介绍客户经理。1核心 1GB 5Mbps,只需要1000 RMB/年管理型主机,可呼叫到技术支撑的。

段落4、配置实施

4.1 登录云服务器,安全组,配置规则,放行ICMP入站和出站,及配套TCP入站规则。

规则方向: 入方向 和 出方向
协议: ICMP
端口: 无需
授权对象: IPv4  0.0.0.0/0
出战和入站ICMP放行
配置成功的标志为 ping xx.aa.bb.cc代表你国内云服务器的地址,可以显示回包延迟数据。
PING xx.aa.bb.cc (xx.aa.bb.cc) 56(84) bytes of data.
64 bytes from xx.aa.bb.cc: icmp_seq=1 ttl=50 time=7.06 ms
64 bytes from xx.aa.bb.cc: icmp_seq=2 ttl=50 time=5.40 ms
64 bytes from xx.aa.bb.cc: icmp_seq=3 ttl=50 time=7.45 ms
64 bytes from xx.aa.bb.cc: icmp_seq=4 ttl=50 time=7.15 ms
64 bytes from xx.aa.bb.cc: icmp_seq=5 ttl=50 time=7.08 ms
^C
--- xx.aa.bb.cc ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4007ms
rtt min/avg/max/mdev = 5.401/6.828/7.453/0.727 ms

4.2 SSH登录云服务器,下载Ping Tunnel并开启客户端

在国内云主机服务器上面,执行Ping Tunnel客户端程序,其中mm.nn.hh.zz代表你Ping Tunnel的服务器端地址

测试用
/usr/bin/TunNEL -type client -l 0.0.0.0:11818 -s mm.nn.hh.zz -sock5 1 -key 102030 -noprint 1 -nolog 1

正式用
/usr/bin/TunNEL -type client -l 127.0.0.1:11111 -s mm.nn.hh.zz -sock5 1 -key 102030 -noprint 1 -nolog 1

参数说明

/usr/bin/TunNEL,是我把PingTunnel解压之后,挪到这个位置,改成的名字

-type client,是代表执行的客户端程序

-l 0.0.0.0:11818,是代表,在本地开启一个监听,我这里临时让它监听在云服务器的公网,测试功能是否正常,正常后,改为本地监听。

-s mm.nn.hh.zz,是指定Ping Tunnel服务端的IP地址

-sock5 1 ,开启socks5转发

-key 102030,客户端服务端交互认证的密码

-noprint 1 -nolog 1,无日志显示

截至此处,你就可以在浏览器插件里面,用switchy omega配置socks5 国内云服务器的地址 刚刚配置的socks5端口18818,进行联网测试了,我这里测试下来,非常棒!但是,它是无认证的socks5,这里,我们需要给它一个前置代理程序。

4.3 使用gost给pingtunnel 客户端,增加一个有认证的前置代理

比较推荐用SS作为前置代理,算法选择aes-128-gcm即可,项目地址 https://github.com/ginuerzh/gost

实际运行的就是2段程序

1、 Ping Tunnel客户端,到服务器的隧道
/usr/bin/TunNEL -type client -l 127.0.0.1:11111 -s mm.nn.hh.zz -sock5 1 -key 102030 -noprint 1 -nolog 1

2、 前置代理,SS的入口
/usr/bin/gTun -L=ss://aes-128-gcm:P11223344w@0.0.0.0:18616 -F=socks5://127.0.0.1:11111

4.4 电脑或者手机客户端配置

电脑或者手机客户端上配置的就是 ss://aes-128-gcm:P11223344w@xx.aa.bb.cc:18616

xx.aa.bb.cc代表你国内云服务器的IP地址