openwrt科学那啥排查记

前两天路由器的科学那啥突然挂了,后来花了很大功夫才解决好,亦在此记录一下。

1.服务端篇

很奇怪,shadowsocks怎么都连不上服务器。看日志是“服务器拒绝了连接”,可防火墙又一切正常。仔细检查后发现服务端的地址设置为一个域名,而openwrt上我却是用IP连接的,将服务端地址也换为服务器IP即可。

2.Pdnsd篇

老问题了,pdnsd地址没填对。传送门:https://www.zhoushangren.com/archives/521

3.ChinaDNS篇

很诡异的,chinadns突然无法解析了!国内国外域名全部无法解析!在考虑了多种可能后得出结论:应该是自动更新脚本更新的IP段文件出了问题,将chinadns_chnroute.txt恢复为出厂版本即可。

(附上那段更新脚本:

curl ‘http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest’ | grep ipv4 | grep CN | awk -F\| ‘{ printf(“%s/%d\n”, $4, 32-log($5)/log(2)) }’ > /etc/chinadns_chnroute.txt

4.openwrt系统篇

按理说现在也折腾的差不多了啊,可是还是有问题:一开始还连的上,等个半分钟左右就掉线了。这实在是令我百思不得其解,直到最后发现原来罪魁祸首是【虚拟WAN接口】!

如图所示,虽然我关闭了它,但是虚拟WAN接口数量还是2,而最低在线接口数是1。这就触发了一个奇怪的bug:系统要求最少要有一个接口在线,而我又根本没有开启这个功能。于是WAN便会不断重连以尝试使那个不存在的接口在线,如此反复…

解决方案也很简单,将虚拟WAN接口数量改为0即可~

Pdnsd问题排查记

今天突然就无法访问国外所有的网站了。对,是所有的国外网站,包括那些没被墙的。

第一反应是又抽风了,重启了ChinaDns+Pdnsd+ShadowSocks,重启浏览器,问题依旧。

难道是dns服务器抽风了?使用dig @192.168.1.1 -p 1253 www.google.com正常(我的pdnsd开在1253端口上)。

(我的解析流程大概是:pdnsd/1253 —— chinadns/1053 —— dnsmasq/53)

这实在是太奇怪了!有意识到不会是chinadns有问题了吧?尝试直接使用dnsmasq转发所有解析到127.0.0.1#1253上,结果连国内域名都无法解析了…

为什么会这样呢?

突然!我意识到一个问题:

我将chinadns处的dns服务器由127.0.0.1:1253换成了192.168.1.1:1253,再次尝试,正常了!

原来在配置pdnsd时我将global里的server_ip设置成了192.168.1.1,导致路由器无法通过127.0.0.1解析域名,将任意一项改为一致即可。

如何应对运营商劫持

这段时间访问某些网站总会出现特定的广告:

而且该广告极其狡猾,只有当浏览器ua为手机时才会显示。

经判断,该广告为运营商劫持流量所致。经过一段时间的奋斗,总结出下列解决方案:

1.投诉当地运营商

成功率:10%

如果你所在地区的运营商非常良心,那么该方法可能会有效(喂喂真良心的话就不会投广告了好吗)

2.投诉运营商总部

成功率:20%

投诉总部就显得厉害多了,一天会来好多电话。不过到底是自己人,所以可能效果还是不尽人意。

3.投诉工信部

成功率:80%

工信部的成功率要高得多,不过代价是工信部的处理速度时快时慢,几天到一个月都是有可能的。

4.投诉通信管理局

成功率:60%

在打电话询问后得知通信管理局最终也会将投诉发至工信部,所以可能还没有工信部效率高 。

5.通过技术手段屏蔽(推荐)

成功率:100%

没办法,在投诉上述部门无效后只能自己动手了~

可以看到上图中图片地址来自ggfeng.com,所以查找全部来自ggfeng.com的脚本:

抓包:

找到第一个来自ggfeng.com的脚本

该脚本又向页面动态插入了四个脚本

所以将ssp.ggfeng.com、ax.ggfeng.com、sc.ggfeng.com这三个域名通过hosts文件屏蔽即可。

Ubuntu+Apache部署Let’s Encrypt免费证书

这两天沃通可真是捅了个大娄子,废了自己不说还顺带把Startcom也带进去了…

(喏,就这个:谷歌也不再信任沃通的证书 StartCom CA一并受到同等处罚

而刚好,我的博客用的就是Startcom的免费证书orz…废话不说,既然已经到了这个地步,只好赶紧换证书了……

早就听过Let’s Encrypt,全自动证书签发项目,还是免费的…于是决定就用这个啦!(免费的也只有这个了…)


Let’s Encrypt有三种签发方式,分别是

  • apache插件模式
  • 自己开个web服务器验证模式
  • 把文件放在webroot文件夹验证模式

第一种我的apache版本不支持,第三种需要所有子域名在同一目录内,所以只能用第二种了…


首先停止apache,否则会冲突:

/etc/init.d/httpd stop

获取Let’s Encrypt:

我用的是ubuntu,其它系统可以去这儿看看:https://certbot.eff.org/

wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto
./certbot-auto

然后就可以开始签发了:

./certbot-auto certonly --email youremail@address.com --agree-tos --standalone -d www.zhoushangren.com -d zhoushangren.com

其中把邮件地址换成你自己的,快到期时貌似会有邮件提醒。-d参数后跟一个域名,最多可以跟100个。

对了,还有就是所有要签发的域名都需要解析到当前服务器IP上~

如果不出意外的话,很快就能看到类似下面的信息:

IMPORTANT NOTES:
– Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/www.zhoushangren.com/fullchain.pem. Your cert
will expire on 2017-02-01. To obtain a new version of the
certificate in the future, simply run Let’s Encrypt again.

现在去重新配置证书路径吧~证书位于/etc/letsencrypt/live/yourdomain.com/,其中yourdomain.com为刚才生成证书时第一个-d参数后面的域名。
最后启动apache:
/etc/init.d/httpd start
大功告成!

证书的续期也非常方便,执行./certbot-auto renew即可。

git push每次都需要输入用户名和密码

记得当时我是保存ssh密钥了的,可是git push时仍需要输入用户名和密码,很奇怪。于是查了一下,原来是绑定的时候误选成了Https方式,改成ssh就行了。


首先cd到仓库目录下

删除当前绑定的远程库:

git remote rm origin

重新绑定远程库:

git remote add origin git@github.com:username/name.git #username和name.git请自行替换

关于子元素应用float后父元素没有高度的解决方案

今天遇到一个小问题:子div应用了float后父div没有高度了。一般首先想到的解决方案是给父元素设置一个固定高度,但是如果高度是变化的就不可行了。于是赶紧Google了一番,找到以下解决方案:

<div id="big">
<div id="small" style="float:left;"></div>
</div>

如果这样排列,id为big的div将失去高度,解决方案如下:

<div id="big">
<div id="small" style="float:left;"></div>
<div style="clear:both;"></div>
</div>

在id为small的悬浮子div后面增加一个div,并设置css属性clear为both即可解决问题。

巧用cat命令制作系统安装盘

cat命令一般用于处理文件等操作,不过你知道吗?cat命令还有一些特别的功能…比如制作系统安装盘:

首先列出所有设备,记下u盘的设备名

fdisk -l

假设u盘为”/dev/sdb”

然后按照下列格式就可以向u盘内写入系统镜像啦

cat [镜像文件] > [设备]

例如我们的镜像文件名为”windows_8.iso”,要写入到名为”/dev/sdb”的设备里,则是:

cat windows_8.iso > /dev/sdb

耐心等待一会儿,直到写入完成。

我为什么拒绝使用百度云

百度,如今在某种力量的驱使下,已经成为大部分中国人生活中不可缺少的一部分。

百度云,百度旗下的云存储服务,因容量大+有百度撑腰得到了很多年轻人的喜爱。

不过今天,我们要说说百度云背后的那点事….


用过百度云的人都知道百度有一个[急速秒传]的功能,大文件一秒就传完了。可能大家会觉得很神奇,不知道是什么黑科技,那么今天我们就来讨论讨论这个话题。

其实急速秒传的原理很简单,通过匹配每个文件唯一的特征码(md5)。如果你要上传的文件已经在云端存在了,则”秒传成功”,其实就是把别人的相同文件给你一份罢了。

可以给大家演示一下:

首先提示需要安装一个秒传插件,其实就是方便在本地获取文件的md5,然后上传到云端进行匹配

(那啥…别在意里面那么多文件…都是我以前不懂…所以才.. 🙁 )

现在可以”急速秒传”了

现在我们先在本地创建一个文件,在里面随便写入一些东西,确保这个文件是独一无二

现在我们上传这个文件,可以看到,文件并不是以”秒传”的形式上传

现在我们切换了一个账号,然后再次尝试上传刚才那个文件,发现这次”秒传”成功

由此看来,”秒传”的原理的确就是通过查找云端已有文件是否存在,存在则直接转存,免去了漫长的上传过程。

可是,你有没有想过:如果你删除了刚才上传的文件,服务器还会在云端吗?还能秒传成功吗?

我们来试试看:

首先,删除刚才两个账号上传的文件

 

现在再次尝试上传该文件,秒传成功

现在可以解答上面的疑惑了

就算你”删除”了你上传的文件,服务器还是将其保存在云端,并没有实际删除。当然这可能是百度公司为了提高”秒传”的效率,也可能是….这个我们就不得而知了 ➡ 

所以请大家尽量不要向百度云上传私密文件,或直接停止使用百度云。毕竟一个偷偷留你文件的公司谁也不能保证下一秒会抖出什么大新闻来 😀


题外话:百度云网页版全程(包括登录-浏览文件-上传文件)均没有使用HTTPS安全链接,所以你文件的私密性也只能看黑客的心情了(-:

使用路由器动态DDNS解析服务将域名解析到动态IP上

大家都知道运营商为了节省成本给我们分配的都是动态IP,这样IP一直是变化的。那怎样才能让我们不需要知道IP也可以连接到自己的电脑呢?这里就要用到域名动态ddns解析。

动态DNS(英语:Dynamic DNS,简称DDNS)是域名系统(DNS)中的一种自动更新名称服务器(Name server)内容的技术。根据互联网的域名订立规则,域名必须跟从固定的IP地址。但动态DNS系统为动态域提供一个固定的名称服务器(Name server),通过即时更新,使外界用户能够连上动态用户的网址。

这听起来有些复杂,其实说白了就是路由器实时获取IP并发送到指定的解析服务器,解析服务器再实时解析指定域名以达到解析动态IP域名的目的。

这里我用的是TP-LINK的ddns服务,其他型号的请各位看官自行谷歌~

登录路由器,找到DDNS

点击[创建新域名]然后输入一个域名名称,tplink便会给你下发一个tpddns.cn的子域名,你的路由器外网IP就会实时解析到这个域名。创建好应该是这样:

记住这个域名,以后就是你的动态ddns域名了~

然后还要进行主机映射。为什么要进行主机映射呢?因为现在即使你通过你的外网IP访问到的也只是路由器而不是连接路由器的电脑,所以我们要指定哪台电脑可以通过外网直接访问。

找到[DZM主机]

选择[开],然后输入你的服务器电脑的内网IP地址,例如我的内网IP是192.168.1.107

保存以后路由器ddns动态域名解析的配置就完成咯~

以后你就可以通过这个动态域名直接远程访问你的电脑咯~

Ubuntu14.4搭建agar.io服务器

Ubuntu14.4搭建agai.io服务器-logo

最近看到好多人在发什么”球球大作战”,很火的样子…但其实球球大作战也是一款抄袭作品 😥 (不抄袭才不正常,中国有多少游戏是原创 ➡ )咳咳,回到正题。球球大作战其实是抄袭一款名为 agar.io 的游戏,诺,引用维基百科:

《Agar.io》(中国大陆通译为“细胞吞噬”[1])是马特乌斯·瓦拉达里斯制作,2015年4月推出的网页大型多人动作游戏。玩家在象征培养皿的地图中,控制自己的细胞尽可能吞噬其它小细胞,并躲开大细胞的吞噬。

《Agar.io》获得正面评价。媒体主要称赞游戏的简单、有对抗性,以及其机制,批评声集中于游戏系统单调。游戏Steam下载版的制作消息于2015年5月公开,iOS和Android版由Miniclip于同年7月发行。

诺…人家去年就有了..

但是由于agar.io的服务器在国外,身在天朝的我们玩起来肯定不是一般的卡…所以今天我们要用自己的电脑搭建一个agar.io私有服务器~

1.准备工作:配置ddns动态域名解析

这个请参考这篇文章:使用路由器动态DDNS解析服务将域名解析到动态IP上

2.开始正式搭建

这里我们要用到一款叫Ogar的服务端程序,它是使用node.js写出的一款agar.io服务端程序。

GitHub地址:https://github.com/OgarProject/Ogar

由于是node.js写的,首先需要安装node.js环境。已经安装的可以跳过

更新源

sudo apt-get update

安装node.js

sudo apt-get install nodejs npm

git到任意目录

git clone git://github.com/OgarProject/Ogar.git Ogar

切换到Ogar目录

cd Ogar

安装依赖

npm install

切换到上级目录

cd ..

启动Ogar

nodejs Ogar

如果出现下列错误,则表示443端口被占用,需要修改端口

vi gameserver.ini

找到[serverPort],修改为其他任意端口(例如我改成了1111)

保存后再次尝试启动,搭建成功~


现在访问 agar.io/?ip=你的域名:你的端口

你的域名就是在路由器配置的ddns动态域名,端口就是gameserver.ini中serverPort的值

叫上你的朋友一起来玩耍吧 😳