通过 ICMP 协议实现 Ping Tunnel 建立可穿透网络隧道

通过 ICMP 协议实现 Ping Tunnel 建立可穿透网络隧道_第1张图片

Twitter via Ping Tunnel

 

周四 Cola 没去幼儿园,中午带着他去 KFC 吃东西。回来的时候小林指着西总布胡同说走这条路回去还是原路返回,他说还是走原路吧!于是我们就骑着电动滑板车经由协和医院对面的外交部街西口回家。


Cola 知道这附近就是王府井,有这么几句对话「爸爸,我发现王府井这里有很多条路可以回家」,爸爸:「是啊,条条大路通罗马」,Cola:「条条大路通外交部街」,做为父亲的小林肯定了他的答案,觉得这小家伙还真会活学活用。


通过 ICMP 协议实现 Ping Tunnel 建立可穿透网络隧道_第2张图片

Facebook for iPhone @HOME


晚上在「NAS 路由挖矿」群,又有一波关于「软路由器」问题的讨论,小林和好友 Hoowa 差点被「软路由」给整蒙了,我们手头各种路由器不都是软件路由器吗?LEDE 及 OpenWrt 这些项目难道不都是软路由吗?


其实完全由硬件实现的 NAT 路由器其实非常少见,一般都会采用可以升级固件的方式来改进功能或协议。因即便纯硬件的方案也没有多少方案在使用,Hoowa 确定少量使用联发科NAT、高通DMA硬件方案,由于不灵活几乎没有纯硬件的实现。


通过 ICMP 协议实现 Ping Tunnel 建立可穿透网络隧道_第3张图片

Google via Ping Tunnel


其实以前我们用 FreeBSD 或者 Linux 做路由器,其实也是软路由,甚至用 Windows 当路由器也很正常,只是性能或功能也许不算很强大。小林理解可以在开放的架构上部署的系统就是软路由,如一般的电脑或者树莓派等都可以等,而事实上路由器刷 OpenWrt 本质上也没区别。


其实大可以考虑用 Mac mini 来跑跑看效率如何,Hoowa 说主要看网卡芯片在小包转发时候的效果怎么样了确定性能。到底怎样软路由好在哪?其实吧,也没有特别明确的定义,简单的说,刷微信朋友圈时不卡,抢红包总能得手,对还有流畅看 YouTube 4K 视频。刘韧补充道:「科学上网,切来切去太麻烦!有好的解决方案吗?」。


通过 ICMP 协议实现 Ping Tunnel 建立可穿透网络隧道_第4张图片

YouTube for Apple TV @HOME


其实小林前段时间写的文章就分享过一些方案,只要维护一份 IP 地址列表或者使用网络流行的功夫网列表即可,国内流量和国际流量自动路由很方便,小林现在随时 Facebook、Google、Twitter 和 YouTube 豪无障碍。


小林用了三级路由器,注意不是三层路由器。因为中国联通配了一个很烂的光猫 RG200O_V1A4 还不给管理权限,直接拨号后可以给 IP 机顶盒播放高清电视,还有可以接固话使用,同时还有 Wi-Fi 功能,就是经常搜索无线可以看到 CU_* 开头的热点。


通过 ICMP 协议实现 Ping Tunnel 建立可穿透网络隧道_第5张图片

Misstar Tools for MiRoute 2


除了联通的这一级路由器,小林在中间还有一个小米路由器2是刷了开发版,开启 SSH 后安装了 Misstar Tools 俗称 MT 工具箱,上面有个相对稳定可用的科学上网插件可以连接海外服务器,在这一级路由器做了 IP 分流,做到井水不犯河水,你走你的阳光道,我走我的独木桥。


最后一级无线路由器,是一组6个支持 Mesh 技术的腾达分布式路由 nova MW6,这一级才是解决了最后一公里的问题。喔,不,更准确的说是解决最后几米的问题,因为 2.4G 网络几乎是没法看高清电影的。而 5G 网络的距离又有限,如果存储电影的机器在几米之外,那么看蓝光级别的电影必卡。因此 Mesh 技术自动组网自动优化在这个时候才发挥了真正的作用,小林甚至还为直播用的电视机顶盒额外加了电猫避免走无线不够流畅。


因此小林的电脑访问外网,是要经过三个内部的网关才真正到达下一跳,好在内部的时延不是特别慢,以下是 traceroute www.google.com 的效果:


lin:~ lin$ traceroute www.google.comtraceroute to www.google.com (172.217.161.164), 64 hops max, 52 byte packets 1  192.168.5.1 (192.168.5.1)  4.308 ms  2.240 ms  2.452 ms # 腾达 2  xiaoqiang (192.168.31.1)  2.413 ms  2.210 ms  2.968 ms # 小米 3  192.168.1.1 (192.168.1.1)  3.189 ms  4.612 ms  2.663 ms # 贝尔 4  221.221.8.1 (221.221.8.1)  5.902 ms  5.742 ms  6.035 ms # 联通


Hoowa 甩了一句 ICMP 协议传输,小x 也说过考虑用 ICMP 传输,但要测试一下 NAT 的穿透效果。然后小林上网搜索看到好几款 ICMP Tunnel 的实现,曾经用过 SSH Tunnel、HTTP Tunnel,用过各种 UDP 打洞然后虚拟网卡实现或纯 VPN 方案等,方才发现条条大路通罗马。


Ping Tunnel 0.72版本更新于2011年,可从http://www.cs.uit.no/~daniels/PingTunnel/ 自行下载源码编译,也可以使用 apt-get 在服务器上快速安装,在 macOS 上系统上可使用 brew 快速安装。


# for Linuxapt-get install ptunnel# for macOSbrew install ptunnel


使用方法非常简单,在服务器端使用 root 身份,直接执行 ptunnel 就可以,当然真正使用可以用 nohup 等挂起在后台运行,可以加入 -m 参数设置并发的隧道数。服务器建议搭配 tinyproxy 辅助做为代理服务器则更为理想。


Starting the proxy (needs to run as root):

 [root #] ptunnel

客户端使用也要求有 root 权限,-p 为 Ping Tunnel 也就是做为代理的隧道主机,-lp 设置 TCP 监听端口,-da 期望转到哪台主机,-dp 相应的端口,-c 可以指定网卡,-m 和服务器相似的并发隧道,不出意外就开始转发了。


Starting a client (also needs root):

 [root #] ptunnel -p proxy.pingtunnel.com -lp 8000 -da login.domain.com -dp 22 -c eth0

And then using the tunnel to ssh to login.domain.com:


官方例子是用 ssh 指定 8000 端口用于转发到要登录的 login.domain.com 主机 22 端口连接 ssh 服务使用,直接用 ICMP 来做隧道的情况下连接另一台主机。


 [user $] ssh -p 8000 localhost


小林告诉大家一个透明 HTTP 转发方法,服务器端不需要做额外的修改,还是同样的方法,在客户端这里,8.8.8.8 指隧道主机请自行修改,本地监听 TCP 端口 8080,实际上转发到隧道主机本机的 8888 端口上,而 8888 是 Tinyproxy 一款轻量级 HTTP/HTTPS 代理服务器软件的默认端口,-m 参数指定并发数,-v 可显示相应日志的级别。在浏览器上指定客户端的 IP 地址或本机 127.0.0.1 端口设置为 8080 即可透过 ICMP Tunnel 实现科学上网。


# for Server

apt-get install tinyproxytinyproxyptunnel


# for Client

ptunnel -p 8.8.8.8 -lp 8080 -da 127.0.0.1 -dp 8888 -m 65535 -v 4


是的,小林亲测 ICMP Tunnel 确实可用,条条大路通罗马,不过这是一条羊肠小道,实在没有别的路可走的时候才适合派上用场,使用 Google 或Twitter 也许问题不大,使用 Facebook 或 YouTube 就有点吃力了。


粱肇新则表示:通过 ICMP 实现,穿透效果会比 UDP 好,估计它的 TCP ICMP 上实现得比较粗糙。把 Google 的那个 TCP 在 UDP 之上的代码(QUIC 快速UDP网络连接)移ICMP 面就会稳定很多,速度也会获得优化,估计会快不少。




640?wx_fmt=jpeg

‭‭‭‭哥林多后书‬ ‭13:14‬ “愿主耶稣基督的恩惠、上帝的慈爱、圣灵的感动常与你们众人同在!”


【延伸阅读】

  • 教你轻松在家看YouTube,废弃小米路由器再利用

  • Rabbit(Rabb.it),这只兔子让你自由访问YouTube和Netflix

  • Butterfly VPN起死回生成功刷入PandoraBox系统可支持SSR等(Butterfly Traveler 2.0)

  • 智能车就是计算机,无人车就是机器人

  • 使用Resilio Sync轻松构建跨平台P2P资源共享网络

  • 绘本推荐《BLOCKCHAIN for babies》

  • 那些年小林用过的下载软件

  • 中国互联网历史上第一个博客

  • 为什么说区块链是互联网的补丁?

  • 简晶的程序人生

  • 域名投资:切忌把家乡「情怀」当「商业」嗅觉

  • 一封20多年前来自瀛海威时空的电子邮件

  • 纪念 Web 30 年:说说小林和 Web 的那些事

  • 马化腾为什么要打破电信网和互联网的壁垒隔阂

  • 小林和腾讯不得不说的故事(完整篇)

谢谢您点「在看」并「分享」至朋友圈~

你可能感兴趣的:(通过 ICMP 协议实现 Ping Tunnel 建立可穿透网络隧道)