分类目录归档:个人观点

利用OpenVPN实现跨地域跨网络机器互访

可能有不少人知道VPN的,在其中有一部分人应该知道并在使用OpenVPN或其相关技术。看看你的网络连接,是不是有TAP/TUN之类的虚拟网卡?是不是用过一些软件穿墙而出?有一些VPN类型的穿墙工具其实也是基于OpenVPN的,只不过可能自己再封装一个图形界面程序仅此而已。今天我要说的并不是穿墙的事,而是……如题。

普及一下IP与网络互访的问题

我们知道我们现在要访问网络上的机器,我们需要通过TCP/IP协议,利用IP地址找到对应的主机。IP地址分有几类,有一类是公网IP地址,也就是这个地址是全球唯一标识你的机器的(排除所有钻牛角尖的情况),那么通过这个IP地址我可以直接访问到你的机器。还有一类是IP地址是私有IP地址,一般会在局域网内用到,这类地址有一个范围,包括10.开头的(10.x.x.x)、172.16到172.31的和192.168开头的(192.168.x.x)。

私有的IP地址一般在局域网内用到,而局域网是有很多很多的,整个暨大内部可以组成一个局域网,你宿舍里面用路由器可以组一个局域网,你家里用路由器也可以组一个局域网。正因为局域网用的私有IP是不能在整个网络上唯一标识你的(在局域网内可以唯一标识你的机器),所以跨网络或者跨地区(指明显不在同一个局域网内)的时候,你无法直接访问一台只有私有IP地址而没有公网IP地址的机器。

一般的家庭ADSL宽带上网貌似都能拿到一个公网IP,如果你在家里就你一台机器接上MODEM拨号上网,那么公网IP就在你的机器上唯一标识你的机器,全世界都可以通过这个IP访问到你的机器(排除各种防火墙阻挡的情况),而问题是如果你在一个局域网下没有公网IP地址的时候,访问的障碍就产生了,这种情况很常见哦,例如你在家里用个路由器来自动拨号,或者用它来把网络共享给多个电脑,这样公网IP就分配在路由器上面了,你的机器将会得到的路由器所建立的局域网内的局域网私有IP,这个时候外部就算访问路由器得到的公网IP也只能访问到路由器这一层,而无法穿越到路由下的局域网内的机器(这也是路由器隔离隐蔽作用的体现,路由器之下还是有一些办法能够让外边机器访问到内网机器的,例如端口转发,但是不一定适合需求,后详)。

如果说两个机器有一个有公网IP而另外一个没有,那还是可以实现单向的访问的,但是如果两个机器都在局域网内怎么办?这个时候就需要一个中继来辅助了(排除TCP/UDP打洞穿越NAT等技术,什么东西都是有例外的,所以这文章这么多排除排除……)

VPN的再认识

VPN这个东西如果你没有穿过墙没有撞过墙恐怕在企业上班工作之前甚至一辈子都不会接触到(感谢郭嘉用这么强硬的手段来督促我们学习相关技术)。VPN中文是虚拟专用网络,P是private也可以理解为私有,上面说的局域网就是一种私有的网络。我们知道像局域网这样,局域网内的机器是可以通过局域网内私有IP地址互相访问的(再次排除各种防火墙和网关限制)。而VPN正是要去虚拟一个私有网络环境(暂时也理解成局域网吧),来让连接到VPN的机器组成一个虚拟的局域网,可以做一些局域网才能做或者才比较好做的事情(例如互访,访问特定资源)。

说这么多虚的来举下例子,很多企业他们有一些企业内部的资源会存放在企业内部的服务器上面,这个服务器并不允许一般人从外网直接访问,只能在内部局域网访问(例如公司里边办公室组成一个局域网之类的)。但是这家公司有多个地方的分公司,又或者要允许公司里面的人可以在家里办公,可以访问这个内部服务器。那么他们一般会有一个VPN服务器,这台服务器可以对外网提供服务,当外边其他地方的机器通过VPN的客户端软件连接到VPN服务器,那么它就相当于连接到了公司内部的网络(发现这个有点不好解释)。又例如我们暨大的图书馆资源,只能是学校内部网络上的机器可以访问,那么回家了怎么办?也是通过VPN这种方式把外网机器接入到暨大内部网络从而实现访问,很多高校的图书馆都是这么做的。

VPN有好几种类型,例如PPTP VPN,L2TP VPN和标题里面的OpenVPN等等。Openvpn是我看来一种比较好的方式,实现简单支持的设备多,作为服务器安装的OpenVPN可以装在各种服务器上面,包括OpenVZ的VPS,而PPTP VPN就不行。另外作为VPN的客户端,OpenVPN在各个平台下都有相应的工具,覆盖Win/Linux/Mac甚至各种移动平台,另外OpenVPN一般使用证书作为认证手段,默认一个人一个证书,并且默认不允许多人共用一份证书,相对安全一些。

OpenVPN的安装配置过程我就不想说了,网上一搜一大把,一般按照默认配置,我这里提几个关键的东西,例如服务器的配置中:

;push “redirect-gateway def1 bypass-dhcp”    这一行是说是否推送默认网关的设置,推送了的话连接到服务器的所有客户的流量都会转发到服务器那里过(一般穿墙用的就是这么整的),如果去掉了分号注释的话就推送,还需要额外配置iptables和转发的配置,如果只是为了标题说的机器间互访则不需要推送的。

client-to-client    这一行配置是允许及其之间互访的,默认是不允许的(前面有分号注释)。

说了这么多到底切到题没有我也不清楚,OpenVPN服务器客户端配置都不难,都能找到资料。连接上之后那个TAP/TUN的虚拟网卡就会拿到一个虚拟网络的内网IP,默认是10.8开头的,连进去的机器就可以通过这个IP实现互访,是互访哦不是单方向。

从新入移动硬盘说说USB3.0那些事

今天在某东网上买的移动硬盘到货,很高兴拆开,拿出来接电脑上第一时间是测试。

在贴测试结果之前,先来普及一下usb3相关信息,百科什么的得自己去看,这里我说几个大家可能关心的问题。

1.USB3.0的设备啊?我的机器好像并不支持USB3.0,那能用吗?
答:能用,USB3.0标准向下兼容,也就是在那些一般的不支持USB3.0接口的电脑上还是能用,至于怎么去看自己机器是否支持USB3.0,我想这里有一个最简单的方法:USB3.0规范规定USB接口里面的那块塑料片是蓝色的,一般USB2.0设备的相同位置都是白色的,如果你电脑上USB接口看进去不是蓝色的那么应该是不支持的。

2.USB3.0我听说会快很多,但是我机器确实不支持USB3.0,那我还要买USB3.0的设备吗(例如移动硬盘和U盘)?
答: 还是应该选择USB3.0的设备,目前比较新的机器一般都配有USB3.0接口了,而像U盘/移动硬盘这些设备也有了很多支持USB3.0的型号给我们选择,虽然比较之下USB3.0设备要比USB2.0的贵上一些,但是我个人认为选择USB3.0设备还是具有前瞻性和实用性意义的。USB3.0的移动硬盘/U盘在普通只带有USB2.0接口的机器上面读写还是有速度提升,下详。

我呢,之前是买了一枚USB3.0的U盘,当时我在自己机器上面做过测试,我机器是不支持USB3.0的,用的是ATTO

从图上可以发现这个U盘写入速度基本可以达到20MB/s左右,读出速度则在34MB/s,这听起来是不是让人非常兴奋?确实是的,下面来看看作为对比的一枚普通USB2.0的U盘的测试结果

这个速度大家可能就比较熟悉了,10mb/s左右写入,15mb/s左右读出。注意一下这两个图底下坐标轴是不一样的。

我一宿舍电脑都是不支持USB3.0的,也就没去测试USB3.0存储设备在支持USB3.0的机器上的情况了,不过听说还能快上很多很多。

后来随着时间的推移,机器里边的320G硬盘已经塞得满满的,于是寻思买移动硬盘,今天总于是到手了。

其实除了图上,还有两三个分区在win下面看不见,包括Ubuntu的一个主分区和交换分区,黑苹果的一个Hfs+分区。

USB3.0的移动硬盘到手,第一时间还是拿ATTO来测试,结果如下

移动硬盘和U盘从物理结构上就有很大的不同,这里我们发现移动硬盘读写速度基本上是相等的,而对比上面的U盘,U盘普遍是写入较慢读取较快且有较大差距。

看到上面的图的时候我其实有点失望,为什么呢,我先贴下一般USB2.0的移动硬盘的测试结果。

通过上面两图我们可以发现,一般移动硬盘也能达到30MB/s以上的读写速度,而USB3.0接口的移动硬盘的读写速度并没有很大的提升,只到了35mb/s左右,快了一点点而已。

通过以上的对比,我们发现,U盘的速度很大程度受到接口标准的限制,所以升级到USB3.0的U盘可以有很大的速度提升(硬盘类里面最快的SSD固态硬盘也是像U盘那样使用存储芯片作为存储介质),而移动硬盘的速度瓶颈在于他的机械设计,所以USB3.0接口标准的提升也不能为它提升多大的读写速度。(据我所知机械硬盘内部速度瓶颈大概在60MB/s左右)

除此之外我们还可以得到的信息是,U盘和移动硬盘由于结构上的不一样,存储速度是有很大差别的。所以不要以为移动硬盘就是容量大一点而已。现在有一些U盘容量也相当大,例如32G的和64G的,我个人认为U盘的优点是便携,适合转移一些小文件。而移动硬盘虽然块头大,还要带根线,不方便,但是读写速度上面还是有很大优势,快几倍,适合转移一些大文件。至于实际情况选择哪个,还是要看大家自己喜欢了。

见识了电信流氓插iframe+分析解决方案

这两天回了家从感觉浏览器行为有些怪异,有些熟悉的网页无故出现了额外的竖直滚动条,有时候是两个,有时候甚至到了3个!我是用的是chrome浏览器,像现在wp后台添加文章的页面就是有3个竖直滚动条的。

首先毫无疑问wp后台是使用的iframe的结构,我们来把滚动条拉到末端,发现页面底部无故多出大片空白。最里边的滚动条拉到底部是正常的wp的最底部,另外两个滚动条到底部之后呈现的空白块又是什么呢?通过chrome右键的审查元素我们发现,我们的页面被嵌入了一个iframe之中,而正因为文章编辑这个页面本身有一层iframe(src:post-new.php),这里被挂了一次iframe,加上wp后台边栏这一层又被加了一次iframe,所以出现了3个滚动条。

进一步深入观察发现,被流氓过的页面大概呈现这样的结构<html><body><iframe><iframe><script></body></html>,其中第一个iframe的src正是你真正要访问的那个页面的地址,而第二个iframe的src是空白页,而重点就在于后面的js。完整的劫持页面模板可以看这里电信流氓(这是以虾米网为样本的,换成其他的网站只会变第一个iframe的src)。

通过我水水的前端水平,起码我可以看出:第一,这个js请求了某“logo.jpg”(不要被这寻常的名字和后缀名骗到了,后面给他传参数呢),并放在了第二个iframe中(也就是src是空白页的那个)。第二,在请求logo.jpg的时候传递了一些参数,分别是navigator.appMinorVersion(浏览器次级版本),screen.availHeight/Width(浏览器用户区高度宽度),screen.height/width(分辨率高度宽度),screen.colorDepth(屏幕色深)。剩余的代码有一部分是为了对这种iframe劫持做出的修正,包括form和连接的target为空时的修正,剩下的看不懂了。

从请求前面的这串http://202.105.165.211:4022/logo.jpg?p=,我们得到一个ip,经查这是中国电信的ip,而且是我所在地的地方电信,那么我就想问一句电信你想干嘛呢?收集用户数据?另外我联系到了电信另外一个很2b的东西叫做绿色上网。绿色上网可能是个好事但是能做成这么2b的我还第一次见,我也不知道为什么w3cschool你也要说是不良网页然后就跳转屏蔽了。

而且跳转到的这个页面的ip地址202.115.165.218和上面logo.jpg所在的202.105.165.211明显是一伙的哦。而且有一个很2b的证据是,这些被绿色上网拦截的页面都是载入到差不多才跳转的哦(不像撞墙那样子直接就挂了),所以综合判断这段js加载的logo.jpg应该和绿色上网有着莫大的关系,这样一说好像这货就正义了很多似的,“先加载判断是不良网页才屏蔽哦亲”,这个做法貌似比墙要人性化一些只不过手段比较拙劣,但是你怎么解释你收集我的显示器/浏览器的信息?莫非浏览器版本低或者屏幕太大了也算是不良网页的评判标准?我现在姑且把你定义为绿色上网的同时顺手牵羊收集用户的数据。

另外这个被插iframe造成的额外竖直滚动条的现象在页面刷新之后会消失,这个也符合绿色上网检测的要求。这个做法在外观上还导致了第一次网页加载时页面title无法正常显示(至少chrome下是这样),因为劫持后页面没有head区更加没有title段。那么对于这个这么流氓的东西我们该怎么办呢?

第一,我们让我们的网页跳出电信的iframe,其实就一句js就搞定,可以搜搜“防止 被iframe”,理论上设计上不需要被iframe的页面都应该加上一句跳出iframe的js以防止别人使用iframe非法引用你的页面。核心其实就是一句if (window.top != window.self) {window.top.location = window.self.location;}

第二,如果是绿色上网的问题,找电信去,表示你的强烈不满和严正干涉,这项业务应该是可以关的,当然了,也听说有很多人并不是绿色上网的问题也被电信插了iframe弹广告/劫持不存在域名跳转114之类的,搜索“流氓电信 logo.jpg”或者电信dns劫持之类的关键词立得。

新年就要到了没想到还有一件这么蛋疼的事情可以让我吐槽,阿黎在这里祝大家新年快乐撒~