我们来打洞:转发DNS包

基于某些众所周知的原因,在天朝上网非常需要勇气和技术。 今天在跟某人聊天时了解到Chrome竟然没办法使用proxy进行DNS查询<1>, 导致DNS查询结果持续被污染。 虽然用proxychains能把一切流量塞进代理里面, 不过用proxychains启动浏览器的话,各种自动代理插件就失效了,所以这是个得不偿失的方法。 青蛙晚上的时候突然想到iptables是不是可以把DNS查询流量转发进ssh tunnel呢? 上网google一番之后,发现这是可行的,而且其实用不到iptables,只要nc就够了。

要用SSH Tunnel转发DNS流量,最大的问题是要把DNS协议使用的UDP协议转换为TCP协议,然后在proxy端还要转换回来。 所以目前青蛙想到的方案有一个很大的缺陷,就是如果ssh服务器上不提供nc命令的话,下面的操作是没法完成的。

首先,用SSH连接ssh服务器,这里青蛙打了一套组合拳,ssh -L + -D组合,分别负责DNS流量和普通数据流量:

ssh -D1080 -L5353:127.0.0.1:5353 user@ssh-server

-L 参数的目的是在本地机器上打开一个5353端口,发送到这个端口的数据都会被转发到ssh服务器上的5353端口上。

然后,在ssh服务器上执行:

server$ mkfifo /tmp/fifo
server …
more ...

在Twip中转换t.co链接

自从Twitter强制把所有链接都转换为t.co之后,在手机上访问这些地址就成了大问题,开VPN慢,绕了一圈发现是国内地址,不开干脆访问不能。于是青蛙一直酝酿在Twip那里把短链接扩展。

今天有时间,研究了一下,本来打算自己写的,但是本着不重复造轮子的态度,写之前google了一下,这不,这位同学已经写好了: http://hjin.me/code/727/ , 全部修改的代码贴到了这里: http://pastebin.com/f4Gw0DND 青蛙拿过来直接扔进twip,问题解决。

青蛙在这放出一个基于twip r204版本的patch吧,另外还有一个小修改的补丁,修复一些情况下的警告信息。

0001-twip-enable-expand-tco-link.patch

0002-twip-fix-some-warning-msg-in-expand-tco-link-patch.patch

这个修改只能解决t.co的问题,没办法解决其他被关照到的短网址服务, 所以青蛙仍然酝酿着什么时候搞一个把所有短网址都展开的补丁。

不过青蛙看php代码实在是头疼,只好下次有时间再硬着头皮读代码改吧。

more ...

procmail + kdialog 构建邮件提醒脚本

Mutt真的是神器,越用越觉得爽。 可惜命令行模式的工具都有个弊端:跟X交互能力比较弱, 例如Mutt就木有邮件提醒功能。

之前在Gnome2的年代里还有 mail-notification 可以对付用(这玩意占用系统资源狂多,似乎是通过监视文件更改来提醒的), 在Gnome3之后这个工具就完全不工作了,而且又没有后续版本。

青蛙抛弃Gnome,换成KDE之后,也没有找到KDE下的邮件提醒工具,于是一直酝酿着自己写一个。

实现邮件提醒功能,无非就是监控邮箱变更,可以在几个点检查:

  • 直接使用POP/IMAP协议检查服务器端
  • 监视MTA动作
  • 监视MDA动作
  • 监视MUA动作
  • 监视邮箱文件/目录更改

直接访问服务器是最直接的办法,但是既然MTA都把邮件收下来了, 再去监视服务器就有点绕腾了,这种方法监视gmail/hotmail之类的邮箱还是很不错的。

监视MUA的动作, adam8157同学 就是这么做的, 监视Mutt startusbar的特殊字符串,通过Mutt的filter发送notify消息。

监视邮箱文件/目录变化就是 mail-notification 的做法了,但是如果不想轮询的话,大概需要内核开启inotify支持。

监视MTA动作,青蛙没有仔细研究,似乎还是需要MDA的某些行为处理, 所以青蛙直接用了在MDA里加入提醒脚本的方法。

监视MDA动作,就是青蛙的做法 …

more ...


在Milestone上安装openvpn

青蛙注:恨死ScribeFire,青蛙这篇日志写了一上午, 结果马上要写完了,浏览器崩溃。杯具就是这么产生的。

重写的话,就不啰嗦了,直接写主要的。

青蛙目前使用的是机锋 fancies 大大制作的PLUS9 FINAL系统,可能其他的系统会有所区别,安装的时候需要注意。 假设milestone已经获得了root,已经安装好了busybox,并且系统里已经带有tun.ko。

首先,要 下载一个openvpn ,解压并上传到手机上, 青蛙偏好使用adb push,这样不需要来回切换存储卡,插上usb就可以用。

sudo adb push openvpn-static-2.1.1 /sdcard/openvpn

使用sudo adb shell命令连到手机的shell,注意以下命令都需要root权限。

因为/system 是只读的,需要先挂载成可写的模式:

# mount -o remount,rw -t …

more ...

一堆小Tips (3)

今天继续关于ssh的话题。

青蛙本来想把今天这个主题放在昨天一起讲的,但是这两个Tip的关联不大,最后决定还是分开说。

在平时上网过程中,有可能遇到某个服务器(我们叫他S)无法访问的问题。

但是如果另外一台主机(叫做P)可以访问到S,并且我们还有P上面的ssh权限,那就可以把P当作跳板,直接访问到S。

假设要访问S上面的http(80)服务,那就执行如下命令:

ssh user@P的地址 -L 8080:S的地址:80

这个命令会在本地打开8080端口,将连接转发到S的80端口上,这样就达到了从本地直接访问S的目的。

事实上ssh的-L参数主要是用来建立一条客户端到服务器之间的安全隧道,以便安全的传输数据。

more ...

测试ScribeFire

选来选去,Linux下最靠谱的blog客户端还是ScribeFire, 其他的不是没有所见即所得的编辑方式,就是经常crash, 或者就是很久很久不更新。

青蛙以前试用过ScribeFire,这次再装上, 发现这个小东东的可用性明显增强了,很好很强大啊。 除了没有windows live writer那么多的插件,其他都很完美。 借着这样顺手的工具,青蛙正在慢慢恢复blog的状态。:P

update:

发表这篇日志的时候,青蛙发现ScribeFire竟然可以直接编辑slug,那么青蛙在 上一篇日志 里说到的在标题栏里些slug的问题也不存在了,ScribeFire真好。

1

more ...