Posts tagged gfw

Raspberry Pi技术笔记之五:打造家用翻墙网关

先前一直是hack路由器的方式来翻墙,方案是ddwrt加pptp,用了有差不多二年时间。稳定性是没有问题,只是前段时间入手天猫魔盒后在电视上看YouTube总是没法流畅播放,按理说家里20M的带宽是不会有问题。经过电脑直接挂VPN和路由器挂VPN对比测速之后,发现后者的带宽几乎只能达到前者一半,基本上确定是路由器性能问题了。于是开始考虑用Raspberry Pi来当翻墙网关,测试下来的结果是挂VPN后带宽完全没有损失,也就是说至少性能上是没有问题的。

下文介绍的方案中VPN服务端为Cisco IPsec VPN,客户端使用vpnc,另外用dnsmasq来将指定域名路由至OpenDNS来解析以对抗DNS劫持问题。Raspberry Pi所安装系统为Archlinux。

  1. 安装systemd和vpnc
    pacman -Sy systemd vpnc
  2. 修改vpnc配置文件/etc/vpnc/default.conf,需要配置的主要条目如下:
    # vpn server
    IPSec gateway $vpnurl.com  ## 替换为vpn服务器网域或者IP
    IPSec ID $vpn  ## 替换为groupname
    IPSec secret $vpn.psk  ## 替换为psk字符串
    Xauth username $yourvpnusername  ## 替换为用户名
    Xauth password $yourvpnpasswd  ## 替换为密码

    配置完成后,使用vpnc命令即可测试是否能够成功连接,如下则为成功案例:

    vpnc
    VPNC started in background (pid: 31049)...
  3. 下载vpnc的监控脚本ipsecmonitor.sh和路由分离脚本vpnup.sh,路由分离脚本的作用是将国内外IP的路由分离开来,即所有中国以外地区IP才走VPN通道,国内IP则不走VPN通道,这样可以在翻墙的同时保证国内网站的访问速度
    cd /etc/vpnc/
    wget https://raw.githubusercontent.com/bostoneboy/raspberry_pi_stuff/master/vpnc/ipsecmonitor.sh
    wget https://raw.githubusercontent.com/bostoneboy/raspberry_pi_stuff/master/vpnc/vpnup.sh
    chmod +x *sh
  4. 下载vpnc及监控脚本的service文件,并添加至开机自动启动
    说明:route-forward.service用来开启系统内核的路由转发功能及调整MTU大小
    说明:此方案中vpnc进程并没有添加至开机自动启动,而是待系统启动后由监控进程来拉启

    cd /etc/systemd/system/
    wget https://raw.githubusercontent.com/bostoneboy/raspberry_pi_stuff/master/system/vpnc.service
    wget https://raw.githubusercontent.com/bostoneboy/raspberry_pi_stuff/master/system/vpnc-monitor.service
    wget https://github.com/bostoneboy/raspberry_pi_stuff/blob/master/system/route-forward.service
    systemctl enable vpnc-monitor.service
    systemctl enable route-forward.service
  5. 安装 dnsmasq
    pacman -Sy dnsmasq
  6. 修改dnsmasq配置文件,示例如下,address用于指定主机名或域名对应的IP地址,server用于指定域名对应的解析服务器,示例中将被『污染』的域名指定到OpenDNS上来解析,配置文件以外的所有域名则按缺省走本地ISP的解析服务器
    vi /etc/dnsmasq.conf
    address=/pi/192.168.168.2
    address=/ipad/192.168.168.4
    address=/tmall/192.168.168.5
    address=/ddwrt/192.168.168.1
    server=/google.com/208.67.222.222
    server=/googlevideo.com/208.67.222.222
    server=/youtube.com/208.67.222.222
    server=/blogspot.com/208.67.222.222
    ... ...
  7. 下载dnsmasq的service文件,及添加至开机自动启动
    cd /etc/systemd/system/
    wget https://github.com/bostoneboy/raspberry_pi_stuff/raw/master/system/dnsmasq.service
    systemctl enable dnsmasq.service

重启系统,测试成功,将连网设备的DNS和网关地址修改为Raspberry Pi的IP地址即开始幸福的无墙网络生活。

家庭级无墙网络方案

有没有想过将翻墙这一行为在路由器端完成,这样一来下游的所有接入设备就自然处于无墙的网络环境了,答案是肯定的,本文作为抛砖引玉来浅层次探讨,技术细节不在讨论范围之内。

目前最成熟和稳定的翻墙方法是VPN,但市面上的路由器几乎都不提供VPN的连接功能,好在有一个叫做DD-WRT的第三方路由器固件,我们可以通过刷机的方法来将自己的路由器固件升级为DD-WRT,以获得包括VPN连接在内的多种客制化功能。以实用性为出发点,基于VPN的无墙网络方案有两种:

DD-WRT是一个基于linux的开源路由器固件,提供VPN,OpenVPN,无线中继,QoS流量控制,甚至增大发射功率等等功能。并且你可以telnet或是ssh登陆DD-WRT,执行各种命令或是hack。包括TP-Link, D-Link, Buffalo, Cisco Linksys在内的不少路由器已经支持刷DD-WRT固件,这里是详细的设备支持列表

第一种方案属于技术型,需要自己手动给路由器升级固件,配置autoddvpn:

技术架构:VPN + DD-WRT + autoddvpn

将路由器升级至DD-WRT固件以支持VPN连接功能后,即实现了全局VPN上网,但全局VPN有个问题:一旦连上VPN,下游设备的所有流量都会路由到VPN线路上,也就是上国内的网站也需要到美国(以美国为例,严格来说是VPN所在地)去绕一圈,浪费VPN流量事小,还会影响到上国内网站的速度,解决这个恼人问题的项目叫做autoddvpn,你需要做的仅仅是在浏览器上登陆路由器的管理页面,在防火墙的页面上添加一行命令,然后保存。autoddvpn 的原理是,按IP地址的物理属性进行路由,即所有中国大陆的IP地址直接走本地网关,其余的则全部走VPN通道。

资金投入:支持DD-WRT的家用(无线)路由器,200元左右;VPN,目前的市价约为150元每年。

第二种方案属于懒人型,你只需要掏钱而已:

国内已经有团队将整套翻墙方案集成到家用路由器里面,提供一条龙的完美无墙网络,做这个事情的是威众安全路由器。你只需要购买他们的路由器,然后以年为单位支付服务费用,其余所有问题都不用你操作和担心。值得推荐的是,威众安全路由器除适合家庭环境外,也相当适合咖啡馆或是小型公司。

资金投入:官方公布的标准版价格是360元每台,包括一年的服务费用。

twitter命令列表

跟unix command, windows command一样,twitter现在也有自己的twitter command 了,不得不佩服国外公司的创新,通过twitter command,也就是直接在twitter更新消息框里面提交如下命令,就能够完成从开关手机短信提示,查看其它用户的用户状态到跟随或离开某用户的操作。尤其在不方便登陆twitter网站的时候,会大大方便推友。

以下twitter命令仅仅是对twitter.com官方帮助页面进行了简单的翻译,作为参考。

ON: 打开手机(短信)提示。
OFF: 关闭手机(短信)提示。
STOP, QUIT: 立即停止所有手机提示消息。
ON username: 打开来自某人的更新消息。
OFF username: 关闭来自某人的更新消息。

FOLLOW username:  跟随某人。
Example: follow jeremy

LEAVE username: 离开某人。
Example: leave benfu

@username + message:针对某人的回复消息。
Example: @meangrape I love that song too!

D username + message:针对某人的私密回复消息(除username外的其它人均看不到)。
Example: d krissy want to pick a Jamba Juice for me while you’re there?

WHOIS username: 查看用户的twitter档案信息。
Example: whois jack

GET username:查看用户最新的一条更新消息。
Example: get goldman

NUDGE username: 轻推动户,提醒用户发部更新消息。
Example: nudge biz

FAV username: 将指定用户的最新一条消息标识为favorite.
Example: fav al3x

STATS: 查询自己帐号的状态,包括你跟随的人数,跟随你的人数及你的个人信息。

INVITE phone number: 通过手机短信邀请某人成为twitter用户。
Example: Invite 415 555 1212

附上twitter官方的帮助页面:The Official Twitter Text Commands