内网穿透系列——WireGuard (快速, 安全的下一代隧道程序)

一.介绍

WireGuard是个新出的隧道程序,内核级的,所以数据处理能力以及资源消耗就会很理想,而且它可以工作于一方动态IP一方静态IP的环境下,这就能够很好的利用于内网穿透的环境下。当然,有几个大佬拿它做搭隧道来实现自己的全球大内网(x, 看得我也很是羡慕

具体的介绍我不提了,感兴趣的去它的官网看看就知道了,针对以往的隧道程序做了不少方面的对比,可以看出来优势还是挺大的。 ——> 传送门

二.安装

大部分系统在WireGuard官网上都介绍了包安装和编译安装的过程,但是,心疼我Centos6,没人写怎么装,这就很气。所以我研究了下怎么装,发现"怎么又是个坑(摔 !"

首先,WireGuard是工作在KernelSpace的,所以对内核版本有着一定要求,必须在3.10版本以上,要我说就直接上4.9,带BBR多好,美滋滋。

首先这边有个大坑,还是得注意,官方表示WireGurad源码需要使用4.7以上的GCC编译,嗯,我特么怎么就没看到啊魂淡(摔,然后我第一次全套使用Centos6默认的GCC编译,出现了如下的错误

在更换高版本GCC编译后成功,但是发现无法加载wireguard.ko内核,dmesg查看后发现如下报错

经过研究WireGuard的官方邮件列表中他人的报错后终于发现了一个蛋疼的问题,就是如果内核使用了低版本GCC编译,那么程序必须也要低版本,但是程序默认无法通过低版本编译,需要修改代码。所以最好就是全部高版本。这儿主要还是因为内核用的是我自己的修改版,如果是官方版本的话……也许不会有问题?

具体可以查看邮件列表对话——>传送门

官方提供了一种把WireGuard直接patch到内核中的玩法,如下

然后会多两个内核参数,可以自行调整

但是我想了下还是不推荐这个方法,因为WireGuard目前还是比较频繁更新的,做到内核里不利于更新,以后稳定了或许不错

PS.总结一下,两个注意点

①.内核需要高版本GCC编译,且大于3.10版本

②.代码需要高版本GCC编译,使用前通过lsmod确认模块已经加载

三.使用方法

这部分不介绍了,官方真的详细,还有手把手动画演示以及测试服务器,命令全帮你写好了,照瓢画葫就行_(:з」∠)_  ——>传送门

内网穿透系列——总结&预告

这个系列还是花了我一番脑筋的,而且难得写得挺快没拖太久。主要是在挑选写啥上面纠结了一下,本来还打算写个Tinc的,不过实际上研究了下这玩意配置起来还是有点麻烦的,增加删除节点都需要在多个节点上修改配置文件,而且这个个人感觉比较偏向于常规VPN而不是用于内网穿透的,所以折腾了半天还是放弃了。

另外本来还有三个目标的,不过实在是懒得写了,所以有兴趣的可以去研究一下,使用都不复杂

①Pangolin (穿山甲) : https://github.com/qgy18/pangolin

这个是imququ的博主使用Node.js开发的,在客户端与服务端之间采用HTTP/2封装传输数据,有中文文档。

②lunnel : https://github.com/longXboy/lunnel

这个也是用Go写的,作者因为ngrok 1.x的bug所以自己开发了一个,支持 HTTP, HTTPS, UDP, TCP、Unix socket 协议,同时可以选择使用TCP或者KCP来传输。

③localtunnel : https://github.com/localtunnel/localtunnel

这个貌似只能用于HTTP/HTTPS协议来着,我也没细看,连接后会提供一个域名以便直接访问你本地的Web网站,这个是客户端,还有个服务端,在它的README里有

 

后面打算补完一下Aria2相关的插件或者软件啥的,然后再扩展一下各种下载工具系列

内网穿透系列——Dog Tunnel ( 狗洞,支持KCP,高效快速的P2P隧道 )

一.介绍

Dog Tunnel官方中文名就是狗洞,是由中国开发者 vzex 开发的,在KCP出现后进行了重构,将其底层UDP支持替换为了KCP,使其效率大大提高,在某些恶劣的网络环境下依旧能有不错的效果。当然,它也是支持TCP模式的,另外它也是支持加密的,在P2P打洞失败的情况下也能够自动切换为C/S模式来使用服务器中转。需要了解的是,Dog Tunnel也提供了Lite版本,仅支持P2P模式,数据完全不通过任何第三方服务器中转,保证了安全性,当然,这就要求了打洞的双方至少有一方拥有公网IP。

和N2N类似的是,它也支持多个服务器,能够在多连接的情况下自动切换负载均衡以便提高速度。还有一个特殊之处,是其原生支持socks5代理,可以在公司网络等特殊网络环境下实现特定需求。

二.安装

作者提供了热门平台的二进制程序,可以到官网下载——>传送门

带Lite的就是Lite版,反之就是常规版本

当然,如果你有特殊需求,比如想用最新的,但是还没有出Release,那么可以自己编译一下

因为Dog Tunnel也是由Go写的,所以还是照例安装一下Go 阅读全文→

内网穿透系列——ZeroTier(能在容器中不依赖TUN/TAP使用的P2P VPN)

一.介绍

一直以来,我只知道日本某大学开发的某款软件可以在没有TUN/TAP驱动的容器中运行,而且效率还相当一般,直到我后来发现了ZeroTier,这玩意有常规的TUN/TAP模式,也有一个特殊的Network Containers 模式(目前已经改名为ZeroTier SDK——>然后又变成libzt了 ),通过实现一个轻量级的应用层 TCP/IP API 来 hook 现有应用程序的 Socket API,这样可以使现有的程序也能使用 ZeroTier 技术连接其它主机,也是挺牛逼的,不过不清楚是否有兼容性问题,个人感觉效率应该会比某软件的SecureNAT要高不少。

和其它P2P VPN不同的是这个是有个后台来管理维护你的私人网络的,而它的加入网络是通过一串唯一的ID来实现的,它还有Peer和Controller等一些概念,个人根据其在GitHub上开源的内容来看,它的Controller是个API控制端,Peers负责构建它的整个网络底层架构,这里面还有Planet和Leaf两种类型的节点,当Join命令发出时,你的客户端会接入这个网络,并在网络中注册唯一ID,然后根据你Join所选择的ID从Controller拉取网络配置。

二.安装配置

这个主要得看你安装的环境,在正常的支持TUN/TAP的环境下,一切都很简单,官方提供了一键,具体请查看官方网站——>传送门

自动识别是Debian系还是RedHat系,全自动,美滋滋。对于Mac和Windows来说,提供了安装包,手机客户端也都有,甚至还有各种NAS平台的插件包,也是非常方便

之后先在官方管理后台——>传送门   注册账号,然后创建一个Network并为其配置基本的属性,比如分配的IP地址段之类的 阅读全文→

内网穿透系列——N2N(简单的P2P组网方案)

一.介绍

前面介绍的其实内网穿透方案更大意义上是端口转发或者反向代理,而这次要提的,则是P2P组网方案,要知道P2P在打洞穿透方面优势是挺大的,而且成功打洞之后不通过第三方服务器直接连接,能够不受第三方服务器的带宽限制,而如果没有成功打洞,则可以通过第三方服务器中转,进退皆有路,一定意义上来说是最好的解决方案。

在这一类P2P VPN中比较出名的几种有N2N、Tinc、PeerVPN以及ZeroTier,本次介绍的是N2N。

N2N是开源的,其作者是Ntop作者Luca Deri,也是个牛人,可惜的是他现在已经不再维护N2N,也不知道是啥原因,不过还好开源社区有其他人加入了维护,并且已经成熟了,Bug也没啥太严重的,所以没啥问题,还是挺好用的,N2N分为SuperNode和EdgeNode,前者被称为超级节点,能够在EdgeNode之间建立握手并为无法直连的EdgeNode中转数据,是网络的核心部分。当然由于SuperNode的重要性,N2N支持为EdgeNode指定多个SuperNode,以便组成更复杂的网络,并且防止单个SuperNode出问题导致的整个网络瘫痪。

二.安装配置

N2N的安装其实挺简单的,因为没太多依赖

然后就装好了,会生成supernode和edge两个可执行程序,看看名字就知道一个是SuperNode一个是EdgeNode 阅读全文→