使用独立的 Name Server

近日有一些读者反映,本站的 DNS 解析失败,出现网页打不开的现象。这主要是因为本站使用了 Google Cloud DNS 的缘故。

由于众所周知的原因,Google 的各种服务在国内并不能流畅访问。如果你在访问本站的时候,你所使用的 DNS 服务器恰好没有本站的 IP 数据,它就会向 Google Cloud DNS 发送请求,查询本站的 IP。这时候,邪恶的墙就会跳出来,把请求阻断了,于是你就会看到诸如 “DNS 查询失败”之类的错误信息。DNS 的具体工作原理可参考这篇文章

由于墙已经严重干扰了用户的正常浏览,我只好放弃了 Google Cloud DNS,自建了一个 Name Server,用于解析本站的 IP。Name Server 和博客放在同一个服务器上,要么一起被墙,要么都能访问,很方便。

在调整 DNS 设置的这段时间内,博客可能会出现间歇性不可访问的情况,过几天会自动恢复。希望这样可以减少墙带来的干扰。

Google Cloud 对国内用户的友好度

由于众所周知的原因,Google 的服务对于国内用户不太友好。,于是很多博主也不太敢把博客放在 Google Cloud 上面。作为喜欢吃螃蟹的博主,我来分享一下 Google Cloud 的友好程度。

本博客放在台湾的数据中心,。以下测试结果来自奇云测。

目标地址 HTTP://leonax.net,总共 79 个监测点,16.5% 的监测点无法访问本站:

  • 电信(42 个监测点):有 4 个监测点(9.5%)无法访问本站,现象都是可以获取 IP,但 HTTP 访问失败。
  • 电信通(4 个监测点):全部通过测试。
  • 教育网(1 个监测点):全部(100%)未通过测试,可以获取 IP,但 HTTP 访问失败。
  • 联通(20 个监测点):有 1 个监测点(5%)无法访问本站,可以获取 IP,但 HTTP 访问失败。
  • 鹏博士(1 个监测点):全部通过测试。
  • 移动(7 个监测点):全部(100%)未通过测试,可以获取 IP,但 HTTP 访问失败。

目标地址 HTTPS://leonax.net总共 79 个监测点,15.2% 的监测点无法访问本站:

  • 电信(42 个监测点):有 8 个监测点(19%)无法访问本站,其中江西省新余市电信把 IP 解析到了 218.87.109.64,其它地区都可以解析到正确的 IP,但 HTTP 访问失败。
  • 电信通(4 个监测点):有 2 个监测点(50%)无法访问本站,可以获取 IP,但 HTTP 访问失败。
  • 教育网(1 个监测点):全部(100%)未通过测试,可以获取 IP,但 HTTP 访问失败。
  • 联通(20 个监测点):有 1 个监测点(5%)无法访问本站,为哈尔滨市联通,把 IP 解析到了 220.181.179.8。
  • 鹏博士(1 个监测点):全部通过测试。
  • 移动(7 个监测点):全部通过测试。

总体而言,不同的地区的网络提供商(ISP)有不同的限制,全国大约有一七分之一的用户无法正常访问本站。如果您发现本站的打开速度有问题,也请留言,并注明您的 ISP。

Google 几乎已经不存在

众所周知,Gmail 服务在 12 月 26 日前后开始变得不可用了,不仅是网页客户端,连手机应用都不能正常收发邮件了。Gmail 服务的访问量见下图,资料来自 Google 透明度报告

在阻力还不是那么大的时候,网页版虽然时断时续,但手机客户端还可以正常工作。因为客户端直接使用 IMAP 和 SMTP 协议从 Gmail 服务器上收发邮件,这两个协议和我们常规上网所使用的 HTTP 协议不同,一般不会遭到屏蔽。而 26 日开始,通过 IMAP 和 SMTP 协议也不能访问 Gmail 了。之后据说有所放宽,但从上图来看,大多数用户依然无法正常使用 Gmail。

翻查了一下其它服务的透明度报告,也只有 Google 翻译还有正常的流量,其它的各种服务一概被阻断。Google 在中国的存在感几乎消失了。

,我想这是所有 Gmail 用户想说的一句话。大家都明白方校长只是在其位、谋其事而已,

和 Akismet 说再见

一个多月之前我开发了一个微型的垃圾评论防御插件,试用了一个月之后,没有一条漏网之鱼,于是很放心地把 Akismet 给删掉了。

Akismet 是一款很棒的工具,但和垃圾评论的对抗就像抵御疾病,没有一种万能的药。垃圾评论工具会不断进步,就好比细菌产生了抗药性,必须有一种新药才能治愈它。Akismet 尝试使用一种统一的方式来解决所有的垃圾评论,必然会导致系统慢慢变得复杂、性能下降。对于小型博客来说,没有必要用牛刀来杀鸡,于是我就写了一个小插件来解决这个问题。

如果你也感兴趣,也可以尝试创造自己的药物来对会垃圾评论。

正常访问人人影视的方法

2014.02.06 更新: 域名再次更换,rrmj.tv,此站是一个讨论区,没有下载资源。

2014.02.01 更新:《人人影视》已重新上线,域名更新为 zimuzu.tv

2014.12.20 更新:《人人影视》在官微宣布人人影视网站正式关闭。

2014.12.17 更新:www.yyets.com 和 www.rrys123.com 均处于不可访问状态。前者会自动跳转到后者,但后者的 DNS 解析失败。看来又在停机维护状态了。

2014.12.09 更新:《人人影视》已完全开放,如果你还不能访问,请使用 hosts 绑定 www.yyets.com 到以下任意一个 IP。

2014.12.05 更新:《人人影视》已重新上线,IP 58.64.155.186,位于香港。只是暂时还没有开放访问,贴了一张大图说在清理数据。

2014.12.03 更新:《人人影视》所有域名(yyets.com、rrys123.com、rrys.tv)包括其附属站点(yayaxz.com)目前均处于无法连接的状况,DNS 无法解析,目测正在迁移服务器过程中。不过我对这种迁移的方式有点疑惑,看上去《人人影视》在没有找到备用方案之前,就早早地把原站给关了,连 DNS 设置也一起删除。这种做法和之前的 DNS 分地区解析的方案相去甚远,有一种不祥的感觉。

以下为原文:
一周之前,两个重要的影视网站接连宣布关闭,一个是《人人影视》,另一个是《射手网》。《射手网》是彻底关闭了,站长留下了一段比较伤感的文字,然后整个站的字幕就都无法下载了;而另一方面,《人人影视》则没有关闭,而是藏了起来。

尽管国内媒体大书特书,《人人影视》已经关闭,并留下一张截图。但这只是表象。实际上《人人影视》并没有关站,而是转移到了国外。从 DNS 的检测来看,www.yyets.com 在国内被解析到了如下 IP 地址:

如果你访问这些 IP 地址,就是得到像媒体公布的那样的“站点已关闭”的消息。但是,在国外,www.yyets.com 却被解析到了如下 IP 地址:

这些 IP 地址中,包含了正常的《人人影视》网站。于是乎,如果你想继续访问《人人影视》,请自行修改 hosts 文件。目前来看,修改 hosts 是最简单的方法,《人人影视》本身并没有做任何的限制,只是 IP 地址解析出来不一样罢了。

至于为什么会有这一设定,我认为这是《人人影视》的一个“避风头”的临时妥协的方案。由于来自国内过大的压力,《人人影视》暂时“屏蔽”了“一些”访问,同时在寻找一种更好的长久的方案。

另外我还追踪了一些正常的 IP 地址,它们似乎分布在很多地区,有新加坡、韩国和美国。看上去《人人影视》正在学习海盗湾(Pirate Bay)的方式,采取分布式的部署方式,使得网站下线的可能降到最低,同时也保护了核心数据的安全。具体技术不多说,总之《人人影视》看上去一时半会不会关闭。

如果你想知道最新的 IP 地址,可以通过这个工具来查找,它会列出《人人影视》网站在世界各地所解析到的 IP 地址,任选其一应该都能正常地访问。

屏蔽来自网页端的垃圾评论

上一篇提到我把 XML-PRC 的评论功能关掉了,但是效果并不明显,一晚上仍然有超过 20 条垃圾评论。和往常一样,这些垃圾评论被 Akismet 拦截下来,然后被我手动全部清除。

尽管 Akismet 的检测非常有效,几乎没有误伤的情况,但我依然觉得它有点大材小用了。Akismet 的工作原理是把每一条评论都发往 Akismet 的官方服务器,让服务器来判断是不是垃圾评论。它之所以高效是因为,Akismet 监控了大量 WordPress 博客的评论,一旦有某种模式的评论被认为是垃圾评论,所有启用了 Akismet 的博客都可以对那一类的垃圾进行过滤。这样略有一点用牛刀杀鸡的感觉。Akismet 会在网页中嵌入一些代码,虽然不大,但我对网页大小一直都很挑剔,能减则减;并且它会和其它的服务器通信,不仅增加了博客主机的负载,还消耗了更多的流量。

一定有一种更有效、更轻型的方法,可以用来检测并屏蔽这些垃圾评论。

以下是我的方法,它基于两点假设:

  1. 正常读者的浏览器都支持 Javascript。目前主流的浏览器都已支持并默认开启 Javascript,如果你所用的浏览器不支持它,那我也爱莫能助了。
  2. 正常读者都是通过评论框来写评论,而不是通过脚本自动填写的。基本信息如名字、邮箱等可以用脚本填写,这没有问题,但实际的评论内容也用脚本的话,那就说不过去了。另一方面,垃圾评论则有可能是机器自动生成、自动填写的,填写的方式基本是利用 Javascript 直接改评论内容。

基于以上的理论,我在 functions.php 中增加了以下代码:

这是两个全局的常量,用于后续的检测。它们用于生成一个随机数,在服务器端进行后续的检测。

以上代码在评论框中添加一个隐藏的元素“leonax-magic”,它的初始值是 0,当用户填写了评论的内容之后,它的值会变成另一个随机数字,大小介于上述的 $leonax_magic_lower 和 $leonax_magic_upper 之间。这个值有助于我们检测垃圾评论。

以上代码在评论提交之后进行检测,如果“leonax-magic”的值介于 $leonax_magic_lower 和 $leonax_magic_upper 之间,则表示该评论是正常的,反之则说明是垃圾评论。如果是垃圾评论,则直接报错(即在网页中会显示错误信息),而不是像 Akismet 一样存在数据库中。因为根据上面的假设,这样抓获的评论一定是垃圾评论,不需要再审核,于是就直接丢弃。

接下去是一些说明:

1. 为什么要用 $leonax_magic_lower 和 $leonax_magic_upper?
如果垃圾评论的机器蛮得聪明了,学会了在 HTTP 请求中添加 $leonax_magic 的值,我们可以通过改变 $leonax_magic_lower 和 $leonax_magic_upper 的值来继续阻止垃圾评论。

2. 这个机制有多么有效?
目前已使用超过48小时(至 11 月 28 日),没有一条垃圾评论漏网。

全站禁用 XML-RPC 评论

垃圾评论真是头疼,现在每天能收到超过 100 条垃圾评论,并且有上升趋势。

当然垃圾评论都被 Akismet 过滤掉了,但每天都要看一眼里面有没有误伤的,是件很头疼的事情。

于是解决方案之一就是禁用 XML-RPC 形式的评论,我就不相信所有的垃圾评论都是通过网页发的。如果垃圾评论是机器自动发出的,那通过 XML-RPC 是最合理且高效的形式了。而普通读者则不会通过 XML-RPC 来发送评论。

如果你发现在本博客留言出现故障,请留言。

顺便说一句,禁用的方式,是在 functions.php 中加一句:

这样就禁用了匿名用户通过 XML-RPC 的评论,而本博客并没有开放注册,所有的评论都被认为是匿名评论,于是就等同于屏蔽了所有的来自 XML-RPC 的评论。